From 5df2a71a4db886444ed458938e58ea6705e3d49c Mon Sep 17 00:00:00 2001 From: Suyash Nayan <89125422+7suyash7@users.noreply.github.com> Date: Fri, 13 Sep 2024 19:05:34 +0530 Subject: [PATCH] Fix debug_traceCall to handle underpriced transactions (#7510) * Fix debug_traceCall to handle underpriced transactions Signed-off-by: 7suyash7 * remove unused methods Signed-off-by: 7suyash7 * Add test case and changelog entry for debug_traceCall fix Signed-off-by: 7suyash7 --------- Signed-off-by: 7suyash7 Signed-off-by: Fabio Di Fabio Co-authored-by: Fabio Di Fabio --- CHANGELOG.md | 3 +- .../internal/methods/DebugTraceCall.java | 16 ++++--- .../debug_traceCall_noGasPrice.json | 42 +++++++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) create mode 100644 ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_noGasPrice.json diff --git a/CHANGELOG.md b/CHANGELOG.md index c38c30a4216..1da225c56c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,8 +9,8 @@ ### Additions and Improvements - Remove privacy test classes support [#7569](https://github.com/hyperledger/besu/pull/7569) - ### Bug fixes +- Fix for `debug_traceCall` to handle transactions without specified gas price. [#7510](https://github.com/hyperledger/besu/pull/7510) ## 24.9.1 @@ -50,7 +50,6 @@ This release version has been deprecated release due to CI bug - ## 24.8.0 ### Upcoming Breaking Changes diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceCall.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceCall.java index e808e79ddc3..45b06ce6910 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceCall.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceCall.java @@ -29,18 +29,16 @@ import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.DebugTraceTransactionResult; import org.hyperledger.besu.ethereum.api.query.BlockchainQueries; import org.hyperledger.besu.ethereum.debug.TraceOptions; +import org.hyperledger.besu.ethereum.mainnet.ImmutableTransactionValidationParams; import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule; +import org.hyperledger.besu.ethereum.mainnet.TransactionValidationParams; import org.hyperledger.besu.ethereum.transaction.PreCloseStateHandler; import org.hyperledger.besu.ethereum.transaction.TransactionSimulator; import org.hyperledger.besu.ethereum.vm.DebugOperationTracer; import java.util.Optional; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class DebugTraceCall extends AbstractTraceCall { - private static final Logger LOG = LoggerFactory.getLogger(DebugTraceCall.class); public DebugTraceCall( final BlockchainQueries blockchainQueries, @@ -89,7 +87,6 @@ protected PreCloseStateHandler getSimulatorResultHandler( maybeSimulatorResult.map( result -> { if (result.isInvalid()) { - LOG.error("Invalid simulator result {}", result); final JsonRpcError error = new JsonRpcError( INTERNAL_ERROR, result.getValidationResult().getErrorMessage()); @@ -103,4 +100,13 @@ protected PreCloseStateHandler getSimulatorResultHandler( return new DebugTraceTransactionResult(transactionTrace); }); } + + @Override + protected TransactionValidationParams buildTransactionValidationParams() { + return ImmutableTransactionValidationParams.builder() + .from(TransactionValidationParams.transactionSimulator()) + .isAllowExceedingBalance(true) + .allowUnderpriced(true) + .build(); + } } diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_noGasPrice.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_noGasPrice.json new file mode 100644 index 00000000000..18fe53baa16 --- /dev/null +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_noGasPrice.json @@ -0,0 +1,42 @@ +{ + "request": { + "jsonrpc": "2.0", + "method": "debug_traceCall", + "params": [ + { + "to": "0x0aae40965e6800cd9b1f4b05ff21581047e3f91e", + "data": "0x000000000000000000000000000000000000000000000000000000000001A00E" + }, + "latest", + { + "disableMemory": true, + "disableStack": true, + "disableStorage": true + } + ], + "id": 1 + }, + "response": { + "jsonrpc": "2.0", + "id": 1, + "result": { + "gas": 21164, + "failed": false, + "returnValue": "", + "structLogs": [ + { + "pc": 0, + "op": "STOP", + "gas": 17592186023252, + "gasCost": 0, + "depth": 1, + "stack": null, + "memory": null, + "storage": null, + "reason": null + } + ] + } + }, + "statusCode": 200 +} \ No newline at end of file