Skip to content

Commit 4742d1b

Browse files
nit: resolve PR comments
Signed-off-by: Ivan Kavaldzhiev <[email protected]>
1 parent 8cb1803 commit 4742d1b

File tree

5 files changed

+34
-30
lines changed

5 files changed

+34
-30
lines changed

.github/workflows/releases-comparator.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ jobs:
9191
"com/hedera/hapi/node/state/schedule/Schedule.java"
9292
"com/swirlds/state/spi/ReadableKVStateBase.java"
9393
"com/swirlds/state/spi/WritableKVStateBase.java"
94+
"com/hedera/node/app/service/contract/impl/exec/processors/CustomMessageCallProcessor.java"
95+
"com/hedera/node/app/service/contract/impl/state/DispatchingEvmFrameState.java"
9496
)
9597
9698
# Temp directories to store cloned repos

web3/src/main/java/com/hedera/node/app/service/contract/impl/exec/processors/CustomMessageCallProcessor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,7 @@ public void start(@NonNull final MessageFrame frame, @NonNull final OperationTra
145145
}
146146
}
147147

148-
if (tracer instanceof final OpcodeActionTracer opcodeActionTracer
149-
&& opcodeActionTracer.getSystemContracts().isEmpty()) {
148+
if (tracer instanceof final OpcodeActionTracer opcodeActionTracer) {
150149
opcodeActionTracer.setSystemContracts(systemContracts);
151150
}
152151
doExecuteSystemContract(systemContracts.get(codeAddress), codeAddress, frame, tracer);

web3/src/main/java/org/hiero/mirror/web3/evm/contracts/execution/traceability/AbstractOpcodeTracer.java

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,21 @@
22

33
package org.hiero.mirror.web3.evm.contracts.execution.traceability;
44

5-
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract;
65
import com.hederahashgraph.api.proto.java.ResponseCodeEnum;
76
import java.util.ArrayList;
87
import java.util.Collections;
9-
import java.util.HashMap;
108
import java.util.List;
11-
import java.util.Map;
129
import java.util.Optional;
13-
import lombok.Getter;
14-
import lombok.Setter;
1510
import org.apache.tuweni.bytes.Bytes;
1611
import org.hiero.mirror.common.domain.contract.ContractAction;
1712
import org.hiero.mirror.web3.common.ContractCallContext;
1813
import org.hiero.mirror.web3.convert.BytesDecoder;
19-
import org.hyperledger.besu.datatypes.Address;
2014
import org.hyperledger.besu.evm.frame.MessageFrame;
21-
import org.hyperledger.besu.evm.precompile.PrecompiledContract;
2215
import org.springframework.util.CollectionUtils;
2316

2417
public abstract class AbstractOpcodeTracer {
2518

26-
@Getter
27-
@Setter
28-
protected Map<Address, HederaSystemContract> systemContracts = new HashMap<>();
29-
30-
protected Map<Address, PrecompiledContract> hederaPrecompiles = new HashMap<>();
31-
32-
protected List<Bytes> captureMemory(final MessageFrame frame, final OpcodeTracerOptions options) {
19+
protected final List<Bytes> captureMemory(final MessageFrame frame, final OpcodeTracerOptions options) {
3320
if (!options.isMemory()) {
3421
return Collections.emptyList();
3522
}
@@ -43,7 +30,7 @@ protected List<Bytes> captureMemory(final MessageFrame frame, final OpcodeTracer
4330
return memory;
4431
}
4532

46-
protected List<Bytes> captureStack(final MessageFrame frame, final OpcodeTracerOptions options) {
33+
protected final List<Bytes> captureStack(final MessageFrame frame, final OpcodeTracerOptions options) {
4734
if (!options.isStack()) {
4835
return Collections.emptyList();
4936
}
@@ -57,7 +44,7 @@ protected List<Bytes> captureStack(final MessageFrame frame, final OpcodeTracerO
5744
return stack;
5845
}
5946

60-
protected Optional<Bytes> getRevertReasonFromContractActions(final ContractCallContext context) {
47+
protected final Optional<Bytes> getRevertReasonFromContractActions(final ContractCallContext context) {
6148
final var contractActions = context.getContractActions();
6249

6350
if (CollectionUtils.isEmpty(contractActions)) {
@@ -71,18 +58,6 @@ protected Optional<Bytes> getRevertReasonFromContractActions(final ContractCallC
7158
.findFirst();
7259
}
7360

74-
protected boolean isCallToHederaPrecompile(
75-
final MessageFrame frame, final Map<Address, PrecompiledContract> hederaPrecompiles) {
76-
final var recipientAddress = frame.getRecipientAddress();
77-
return hederaPrecompiles.containsKey(recipientAddress);
78-
}
79-
80-
protected boolean isCallToSystemContracts(
81-
final MessageFrame frame, final Map<Address, HederaSystemContract> systemContracts) {
82-
final var recipientAddress = frame.getRecipientAddress();
83-
return systemContracts.containsKey(recipientAddress);
84-
}
85-
8661
/**
8762
* Formats the revert reason to be consistent with the revert reason format in the EVM. <a
8863
* href="https://besu.hyperledger.org/23.10.2/private-networks/how-to/send-transactions/revert-reason#revert-reason-format">...</a>

web3/src/main/java/org/hiero/mirror/web3/evm/contracts/execution/traceability/OpcodeActionTracer.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,22 @@
55
import com.hedera.hapi.streams.ContractActionType;
66
import com.hedera.hapi.streams.ContractActions;
77
import com.hedera.node.app.service.contract.impl.exec.ActionSidecarContentTracer;
8+
import com.hedera.node.app.service.contract.impl.exec.systemcontracts.HederaSystemContract;
89
import com.hedera.node.app.service.contract.impl.state.ProxyWorldUpdater;
910
import edu.umd.cs.findbugs.annotations.NonNull;
1011
import edu.umd.cs.findbugs.annotations.Nullable;
1112
import jakarta.inject.Named;
1213
import java.util.Collections;
1314
import java.util.Map;
1415
import java.util.TreeMap;
16+
import java.util.concurrent.ConcurrentHashMap;
1517
import java.util.stream.Collectors;
1618
import lombok.CustomLog;
19+
import lombok.Getter;
1720
import org.apache.commons.lang3.StringUtils;
1821
import org.apache.tuweni.bytes.Bytes;
1922
import org.hiero.mirror.web3.common.ContractCallContext;
23+
import org.hyperledger.besu.datatypes.Address;
2024
import org.hyperledger.besu.evm.ModificationNotAllowedException;
2125
import org.hyperledger.besu.evm.frame.MessageFrame;
2226
import org.hyperledger.besu.evm.operation.Operation.OperationResult;
@@ -25,6 +29,9 @@
2529
@CustomLog
2630
public class OpcodeActionTracer extends AbstractOpcodeTracer implements ActionSidecarContentTracer {
2731

32+
@Getter
33+
private final Map<Address, HederaSystemContract> systemContracts = new ConcurrentHashMap<>();
34+
2835
@Override
2936
public void tracePostExecution(@NonNull final MessageFrame frame, @NonNull final OperationResult operationResult) {
3037
final var context = ContractCallContext.get();
@@ -114,4 +121,16 @@ public void tracePrecompileResult(@NonNull MessageFrame frame, @NonNull Contract
114121
public ContractActions contractActions() {
115122
return null;
116123
}
124+
125+
public void setSystemContracts(final Map<Address, HederaSystemContract> systemContracts) {
126+
if (systemContracts != null) {
127+
this.systemContracts.putAll(systemContracts);
128+
}
129+
}
130+
131+
private boolean isCallToSystemContracts(
132+
final MessageFrame frame, final Map<Address, HederaSystemContract> systemContracts) {
133+
final var recipientAddress = frame.getRecipientAddress();
134+
return systemContracts.containsKey(recipientAddress);
135+
}
117136
}

web3/src/main/java/org/hiero/mirror/web3/evm/contracts/execution/traceability/OpcodeTracer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@
2222
import org.hyperledger.besu.evm.account.MutableAccount;
2323
import org.hyperledger.besu.evm.frame.MessageFrame;
2424
import org.hyperledger.besu.evm.operation.Operation;
25+
import org.hyperledger.besu.evm.precompile.PrecompiledContract;
2526

2627
@Named
2728
@CustomLog
2829
@Getter
2930
public class OpcodeTracer extends AbstractOpcodeTracer implements HederaOperationTracer {
3031

32+
private final Map<Address, PrecompiledContract> hederaPrecompiles;
33+
3134
public OpcodeTracer(final PrecompiledContractProvider precompiledContractProvider) {
3235
this.hederaPrecompiles = precompiledContractProvider.getHederaPrecompiles().entrySet().stream()
3336
.collect(Collectors.toMap(e -> Address.fromHexString(e.getKey()), Map.Entry::getValue));
@@ -105,4 +108,10 @@ private Map<Bytes, Bytes> captureStorage(final MessageFrame frame, OpcodeTracerO
105108
public void tracePrecompileResult(final MessageFrame frame, final ContractActionType type) {
106109
// Empty body
107110
}
111+
112+
private boolean isCallToHederaPrecompile(
113+
final MessageFrame frame, final Map<Address, PrecompiledContract> hederaPrecompiles) {
114+
final var recipientAddress = frame.getRecipientAddress();
115+
return hederaPrecompiles.containsKey(recipientAddress);
116+
}
108117
}

0 commit comments

Comments
 (0)