diff --git a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParams.java b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParams.java index b814e02a8fa..e0c0cb89893 100644 --- a/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParams.java +++ b/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParams.java @@ -97,20 +97,29 @@ default Set opcodes() { * @return TraceOptions object containing the tracer type and configuration. */ default TraceOptions traceOptions() { - var defaultTracerConfig = - OpCodeTracerConfigBuilder.createFrom(OpCodeTracerConfig.DEFAULT) - .traceStorage(!disableStorage()) - .traceMemory(!disableMemory()) - .traceStack(!disableStack()) - .traceOpcodes(opcodes()) - .build(); - // Convert string tracer to TracerType enum, handling null case TracerType tracerType = tracer() != null ? TracerType.fromString(tracer()) : TracerType.OPCODE_TRACER; // Default to opcode tracer when null - return new TraceOptions(tracerType, defaultTracerConfig, tracerConfig(), stateOverrides()); + var builder = OpCodeTracerConfigBuilder.createFrom(OpCodeTracerConfig.DEFAULT); + // Only override defaults when the user explicitly provided a value + if (disableStorageNullable() != null) { + builder.traceStorage(!disableStorage()); + } + if (disableMemoryNullable() != null) { + builder.traceMemory(!disableMemory()); + } else if (tracerType != TracerType.OPCODE_TRACER) { + // Non-opcode tracers (e.g. callTracer) need memory capture enabled for internal + // operations such as extracting CREATE init code, even when disableMemory is not set + builder.traceMemory(true); + } + if (disableStackNullable() != null) { + builder.traceStack(!disableStack()); + } + var opCodeTracerConfig = builder.traceOpcodes(opcodes()).build(); + + return new TraceOptions(tracerType, opCodeTracerConfig, tracerConfig(), stateOverrides()); } } diff --git a/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParamsTest.java b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParamsTest.java new file mode 100644 index 00000000000..c37b538c84d --- /dev/null +++ b/ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/parameters/TransactionTraceParamsTest.java @@ -0,0 +1,88 @@ +/* + * Copyright contributors to Hyperledger Besu. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.besu.ethereum.api.jsonrpc.internal.parameters; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.hyperledger.besu.ethereum.debug.TraceOptions; +import org.hyperledger.besu.evm.tracing.OpCodeTracerConfigBuilder.OpCodeTracerConfig; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +public class TransactionTraceParamsTest { + + private static final ObjectMapper MAPPER = new ObjectMapper(); + + @Test + public void emptyOptionsObjectShouldMatchDefaultTraceOptions() throws Exception { + // Passing {} should be equivalent to passing no options at all. + // All disable* fields default to false, so all tracing is enabled by default. + final OpCodeTracerConfig defaultConfig = TraceOptions.DEFAULT.opCodeTracerConfig(); + + // Parse an empty JSON options object — simulates debug_traceTransaction(hash, {}) + final TransactionTraceParams emptyParams = MAPPER.readValue("{}", TransactionTraceParams.class); + final OpCodeTracerConfig emptyParamsConfig = emptyParams.traceOptions().opCodeTracerConfig(); + + assertThat(emptyParamsConfig.traceMemory()) + .describedAs("traceMemory should match DEFAULT") + .isEqualTo(defaultConfig.traceMemory()); + + assertThat(emptyParamsConfig.traceStorage()) + .describedAs("traceStorage should match DEFAULT") + .isEqualTo(defaultConfig.traceStorage()); + + assertThat(emptyParamsConfig.traceStack()) + .describedAs("traceStack should match DEFAULT") + .isEqualTo(defaultConfig.traceStack()); + } + + @Test + public void defaultsShouldMatchOpCodeTracerConfigDefaults() { + // TraceOptions.DEFAULT should use OpCodeTracerConfig.DEFAULT directly. + // Memory tracing is off by default for performance reasons. + final OpCodeTracerConfig defaultConfig = TraceOptions.DEFAULT.opCodeTracerConfig(); + + assertThat(defaultConfig.traceStorage()).isTrue(); + assertThat(defaultConfig.traceMemory()).isFalse(); + assertThat(defaultConfig.traceStack()).isTrue(); + } + + @Test + public void nonOpcodeTracerShouldEnableMemoryByDefault() throws Exception { + // Non-opcode tracers (e.g. callTracer) need memory for internal operations + // such as extracting CREATE init code, so memory should be enabled by default + final TransactionTraceParams callTracerParams = + MAPPER.readValue("{\"tracer\": \"callTracer\"}", TransactionTraceParams.class); + final OpCodeTracerConfig config = callTracerParams.traceOptions().opCodeTracerConfig(); + + assertThat(config.traceMemory()) + .describedAs("callTracer should have memory enabled by default") + .isTrue(); + } + + @Test + public void nonOpcodeTracerShouldRespectExplicitDisableMemory() throws Exception { + // When user explicitly sets disableMemory, it should be respected even for callTracer + final TransactionTraceParams params = + MAPPER.readValue( + "{\"tracer\": \"callTracer\", \"disableMemory\": true}", TransactionTraceParams.class); + final OpCodeTracerConfig config = params.traceOptions().opCodeTracerConfig(); + + assertThat(config.traceMemory()) + .describedAs("explicit disableMemory=true should be respected") + .isFalse(); + } +} diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStack.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStack.json index f502da04ebe..50cc4ee5f0f 100644 --- a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStack.json +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStack.json @@ -85,70 +85,49 @@ "op":"CALLDATACOPY", "gas":16755887, "gasCost":9, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":14, "op":"PUSH1", "gas":16755878, "gasCost":3, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":16, "op":"CALLVALUE", "gas":16755875, "gasCost":2, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":17, "op":"PUSH1", "gas":16755873, "gasCost":3, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":19, "op":"CALLDATALOAD", "gas":16755870, "gasCost":3, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":20, "op":"GAS", "gas":16755867, "gasCost":2, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":21, "op":"CALLCODE", "gas":16755865, "gasCost":16494066, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" - ] + "depth":1 }, { "pc":0, @@ -190,70 +169,49 @@ "op":"MSTORE", "gas":16493351, "gasCost":6, - "depth":2, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":2 }, { "pc":9, "op":"PUSH1", "gas":16493345, "gasCost":3, - "depth":2, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":2 }, { "pc":11, "op":"PUSH1", "gas":16493342, "gasCost":3, - "depth":2, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":2 }, { "pc":13, "op":"RETURN", "gas":16493339, "gasCost":0, - "depth":2, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":2 }, { "pc":22, "op":"PUSH1", "gas":16755138, "gasCost":3, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":1 }, { "pc":24, "op":"PUSH1", "gas":16755135, "gasCost":3, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":1 }, { "pc":26, "op":"RETURN", "gas":16755132, "gasCost":0, - "depth":1, - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" - ] + "depth":1 } ] } diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStorage.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStorage.json index e9401e6f985..00ec79996cb 100644 --- a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStorage.json +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_disableStorage.json @@ -132,9 +132,6 @@ "0x20", "0x20", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -147,9 +144,6 @@ "0x20", "0x0", "0x20" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -163,9 +157,6 @@ "0x0", "0x20", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -180,9 +171,6 @@ "0x20", "0x0", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -198,9 +186,6 @@ "0x0", "0x0", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -216,9 +201,6 @@ "0x0", "0x0", "0x30000000000000000000000000000000000000" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -235,9 +217,6 @@ "0x0", "0x30000000000000000000000000000000000000", "0xffac99" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000001" ] }, { @@ -300,9 +279,6 @@ "stack":[ "0xf000000000000000000000000000000000000000000000000000000000000002", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -313,9 +289,6 @@ "depth":2, "stack":[ - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -326,9 +299,6 @@ "depth":2, "stack":[ "0x20" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -340,9 +310,6 @@ "stack":[ "0x20", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -353,9 +320,6 @@ "depth":1, "stack":[ "0x1" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -367,9 +331,6 @@ "stack":[ "0x1", "0x20" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] }, { @@ -382,9 +343,6 @@ "0x1", "0x20", "0x0" - ], - "memory":[ - "0xf000000000000000000000000000000000000000000000000000000000000002" ] } ] diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_stateOverride.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_stateOverride.json index 8e1ee3923d5..384e89f38d4 100644 --- a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_stateOverride.json +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_stateOverride.json @@ -58,9 +58,6 @@ "stack": [ "0x1", "0x0" - ], - "memory": [ - "0x0" ] } ] diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStack.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStack.json index bbf6e05916d..16dc2422266 100644 --- a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStack.json +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStack.json @@ -562,113 +562,97 @@ "op" : "MSTORE", "gas" : 292515, "gasCost" : 6, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "depth" : 1 }, { "pc" : 1782, "op" : "PUSH1", "gas" : 292509, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "depth" : 1 }, { "pc" : 1784, "op" : "ADD", "gas" : 292506, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "depth" : 1 }, { "pc" : 1785, "op" : "PUSH1", "gas" : 292503, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "depth" : 1 }, { "pc" : 1787, "op" : "DUP2", "gas" : 292500, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "depth" : 1 }, { "pc" : 1788, "op" : "MSTORE", "gas" : 292497, "gasCost" : 6, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1789, "op" : "PUSH1", "gas" : 292491, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1791, "op" : "ADD", "gas" : 292488, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1792, "op" : "PUSH1", "gas" : 292485, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1794, "op" : "LOG3", "gas" : 292482, "gasCost" : 2012, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1795, "op" : "JUMPDEST", "gas" : 290470, "gasCost" : 1, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 1796, "op" : "JUMP", "gas" : 290469, "gasCost" : 8, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 551, "op" : "JUMPDEST", "gas" : 290461, "gasCost" : 1, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 552, "op" : "PUSH1", "gas" : 290460, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 554, "op" : "PUSH1", "gas" : 290457, "gasCost" : 3, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 }, { "pc" : 556, "op" : "RETURN", "gas" : 290454, "gasCost" : 0, - "depth" : 1, - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "depth" : 1 } ] } diff --git a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStorage.json b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStorage.json index 7302c10fefd..5fc9b4bb22a 100644 --- a/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStorage.json +++ b/ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-transaction/debug_traceTransaction_disableStorage.json @@ -653,128 +653,112 @@ "gas" : 292515, "gasCost" : 6, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x0" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x0" ] }, { "pc" : 1782, "op" : "PUSH1", "gas" : 292509, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0" ] }, { "pc" : 1784, "op" : "ADD", "gas" : 292506, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0", "0x20" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x0", "0x20" ] }, { "pc" : 1785, "op" : "PUSH1", "gas" : 292503, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20" ] }, { "pc" : 1787, "op" : "DUP2", "gas" : 292500, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x2a" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x2a" ] }, { "pc" : 1788, "op" : "MSTORE", "gas" : 292497, "gasCost" : 6, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x2a", "0x20" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x2a", "0x20" ] }, { "pc" : 1789, "op" : "PUSH1", "gas" : 292491, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20" ] }, { "pc" : 1791, "op" : "ADD", "gas" : 292488, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x20" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x20", "0x20" ] }, { "pc" : 1792, "op" : "PUSH1", "gas" : 292485, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x40" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x40" ] }, { "pc" : 1794, "op" : "LOG3", "gas" : 292482, "gasCost" : 2012, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x40", "0x0" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227", "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "0x1", "0x40", "0x0" ] }, { "pc" : 1795, "op" : "JUMPDEST", "gas" : 290470, "gasCost" : 1, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227" ] }, { "pc" : 1796, "op" : "JUMP", "gas" : 290469, "gasCost" : 8, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x227" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x227" ] }, { "pc" : 551, "op" : "JUMPDEST", "gas" : 290461, "gasCost" : 1, "depth" : 1, - "stack" : [ "0x9dc2c8f5" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5" ] }, { "pc" : 552, "op" : "PUSH1", "gas" : 290460, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5" ] }, { "pc" : 554, "op" : "PUSH1", "gas" : 290457, "gasCost" : 3, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x0" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x0" ] }, { "pc" : 556, "op" : "RETURN", "gas" : 290454, "gasCost" : 0, "depth" : 1, - "stack" : [ "0x9dc2c8f5", "0x0", "0x0" ], - "memory" : [ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9", "0x2a" ] + "stack" : [ "0x9dc2c8f5", "0x0", "0x0" ] } ] }