Skip to content

Commit 6aa32a4

Browse files
macfarlaclaude
andauthored
debug trace alignment: add refund to StructLog and 0x prefix (#10116)
* fix(debug-trace): align opcode tracer output with execution-apis spec Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> --------- Signed-off-by: Sally MacFarlane <macfarla.github@gmail.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 2c9f113 commit 6aa32a4

File tree

15 files changed

+40
-16
lines changed

15 files changed

+40
-16
lines changed

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/results/OpCodeLoggerTracerResult.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.fasterxml.jackson.annotation.JsonGetter;
2525
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
26+
import org.apache.tuweni.bytes.Bytes;
2627

2728
@JsonPropertyOrder({"gas", "failed", "returnValue", "structLogs"})
2829
public class OpCodeLoggerTracerResult {
@@ -34,7 +35,8 @@ public class OpCodeLoggerTracerResult {
3435

3536
public OpCodeLoggerTracerResult(final TransactionTrace transactionTrace) {
3637
gas = transactionTrace.getGas();
37-
returnValue = transactionTrace.getResult().getOutput().toString().substring(2);
38+
final Bytes output = transactionTrace.getResult().getOutput();
39+
returnValue = output.isEmpty() ? "" : output.toHexString();
3840
structLogs = new ArrayList<>(transactionTrace.getTraceFrames().size());
3941
transactionTrace.getTraceFrames().parallelStream()
4042
.map(OpCodeLoggerTracerResult::createStructLog)

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/results/StructLog.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
import org.apache.tuweni.bytes.Bytes;
2828
import org.apache.tuweni.units.bigints.UInt256;
2929

30-
@JsonPropertyOrder({"pc", "op", "gas", "gasCost", "depth", "stack", "memory", "storage"})
30+
@JsonPropertyOrder({"pc", "op", "gas", "gasCost", "depth", "refund", "stack", "memory", "storage"})
3131
public class StructLog {
3232

3333
private static final char[] hexChars = "0123456789abcdef".toCharArray();
3434
private final int depth;
3535
private final long gas;
3636
private final long gasCost;
37+
private final long refund;
3738
private final String[] memory;
3839
private final String op;
3940
private final int pc;
@@ -45,12 +46,11 @@ public StructLog(final TraceFrame traceFrame) {
4546
depth = traceFrame.getDepth() + 1;
4647
gas = traceFrame.getGasRemaining();
4748
gasCost = traceFrame.getGasCost().orElse(0L);
49+
refund = traceFrame.getGasRefund();
4850
memory =
4951
traceFrame
5052
.getMemory()
51-
.map(
52-
a ->
53-
Arrays.stream(a).map(bytes -> toCompactHex(bytes, true)).toArray(String[]::new))
53+
.map(a -> Arrays.stream(a).map(StructLog::toBytes32Hex).toArray(String[]::new))
5454
.orElse(null);
5555
op = traceFrame.getOpcode();
5656
pc = traceFrame.getPc();
@@ -105,6 +105,12 @@ public long gasCost() {
105105
return gasCost;
106106
}
107107

108+
@JsonGetter("refund")
109+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
110+
public long refund() {
111+
return refund;
112+
}
113+
108114
@JsonGetter("memory")
109115
@JsonInclude(JsonInclude.Include.NON_NULL)
110116
public String[] memory() {

ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/DebugTraceTransactionTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public void shouldTraceTheTransactionUsingTheTransactionTracer() {
167167
(OpCodeLoggerTracerResult) response.getResult();
168168

169169
assertThat(transactionResult.getGas()).isEqualTo(73);
170-
assertThat(transactionResult.getReturnValue()).isEqualTo("1234");
170+
assertThat(transactionResult.getReturnValue()).isEqualTo("0x1234");
171171
final List<StructLog> expectedStructLogs = Collections.singletonList(new StructLog(traceFrame));
172172
assertThat(transactionResult.getStructLogs()).isEqualTo(expectedStructLogs);
173173
assertThat(transactionResult.getStructLogs().size()).isEqualTo(1);
@@ -176,7 +176,7 @@ public void shouldTraceTheTransactionUsingTheTransactionTracer() {
176176
.isEqualTo(StructLog.toCompactHex(stackBytes[0], true));
177177
assertThat(transactionResult.getStructLogs().get(0).memory().length).isEqualTo(1);
178178
assertThat(transactionResult.getStructLogs().get(0).memory()[0])
179-
.isEqualTo(StructLog.toCompactHex(memoryBytes[0], true));
179+
.isEqualTo(StructLog.toBytes32Hex(memoryBytes[0]));
180180
}
181181

182182
@Test

ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/results/StructLogTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,15 @@ public void constructorShouldInitializeFields() throws Exception {
101101
assertThat(structLog.gas()).isEqualTo(gas);
102102
assertThat(structLog.gasCost()).isEqualTo(gasCost.getAsLong());
103103
assertThat(structLog.memory())
104-
.isEqualTo(new String[] {"0x1", "0x2", "0x3", "0x4", "0x5", "0x0"});
104+
.isEqualTo(
105+
new String[] {
106+
"0x0000000000000000000000000000000000000000000000000000000000000001",
107+
"0x0000000000000000000000000000000000000000000000000000000000000002",
108+
"0x0000000000000000000000000000000000000000000000000000000000000003",
109+
"0x0000000000000000000000000000000000000000000000000000000000000004",
110+
"0x0000000000000000000000000000000000000000000000000000000000000005",
111+
"0x0000000000000000000000000000000000000000000000000000000000000000"
112+
});
105113
assertThat(structLog.op()).isEqualTo(op);
106114
assertThat(structLog.pc()).isEqualTo(1);
107115
assertThat(structLog.stack()).isEqualTo(new String[] {"0x0", "0x1", "0x2", "0x3"});
@@ -171,7 +179,7 @@ public void shouldGenerateJsonCorrectly() throws Exception {
171179
+ "\"gasCost\":10,"
172180
+ "\"depth\":1,"
173181
+ "\"stack\":[\"0x0\",\"0x1\",\"0x2\",\"0x3\"],"
174-
+ "\"memory\":[\"0x1\",\"0x2\",\"0x23\",\"0x4\",\"0xe5\",\"0x0\"],"
182+
+ "\"memory\":[\"0x0000000000000000000000000000000000000000000000000000000000000001\",\"0x0000000000000000000000000000000000000000000000000000000000000002\",\"0x0000000000000000000000000000000000000000000000000000000000000023\",\"0x0000000000000000000000000000000000000000000000000000000000000004\",\"0x00000000000000000000000000000000000000000000000000000000000000e5\",\"0x0000000000000000000000000000000000000000000000000000000000000000\"],"
175183
+ "\"storage\":{\"0x0000000000000000000000000000000000000000000000000000000000000001\":\"0x0000000000000000000000000000000000000000000000000000000002233333\",\"0x0000000000000000000000000000000000000000000000000000000000000002\":\"0x0000000000000000000000000000000000000000000000000000000004455667\"},"
176184
+ "\"reason\":\"0x53756e696665642066756e6473\""
177185
+ "}";

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-block/debug_traceBlock_default.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@
426426
"gas":16754830,
427427
"gasCost":5000,
428428
"depth":1,
429+
"refund":15000,
429430
"stack":[
430431
"0x0",
431432
"0x1"
@@ -440,6 +441,7 @@
440441
"gas":16749830,
441442
"gasCost":0,
442443
"depth":1,
444+
"refund":15000,
443445
"stack":[
444446

445447
],

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-block/debug_traceBlock_disableMemory.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@
429429
"gas":16754830,
430430
"gasCost":5000,
431431
"depth":1,
432+
"refund":15000,
432433
"stack":[
433434
"0x0",
434435
"0x1"
@@ -443,6 +444,7 @@
443444
"gas":16749830,
444445
"gasCost":0,
445446
"depth":1,
447+
"refund":15000,
446448
"stack":[
447449

448450
],

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-block/debug_traceBlock_disableStack.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@
325325
"gas":16754830,
326326
"gasCost":5000,
327327
"depth":1,
328+
"refund":15000,
328329
"storage":{
329330
"0x0000000000000000000000000000000000000000000000000000000000000001":"0x0000000000000000000000000000000000000000000000000000000000000000"
330331
}
@@ -335,6 +336,7 @@
335336
"gas":16749830,
336337
"gasCost":0,
337338
"depth":1,
339+
"refund":15000,
338340
"storage":{
339341
"0x0000000000000000000000000000000000000000000000000000000000000001":"0x0000000000000000000000000000000000000000000000000000000000000000"
340342
}

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-block/debug_traceBlock_disableStorage.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@
368368
"gas":16754830,
369369
"gasCost":5000,
370370
"depth":1,
371+
"refund":15000,
371372
"stack":[
372373
"0x0",
373374
"0x1"
@@ -379,6 +380,7 @@
379380
"gas":16749830,
380381
"gasCost":0,
381382
"depth":1,
383+
"refund":15000,
382384
"stack":[
383385

384386
]

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_all.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"result":{
2323
"gas":22070,
2424
"failed":false,
25-
"returnValue":"f000000000000000000000000000000000000000000000000000000000000002",
25+
"returnValue":"0xf000000000000000000000000000000000000000000000000000000000000002",
2626
"structLogs":[
2727
{
2828
"pc":0,

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/debug/trace-call/debug_traceCall_default.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"result":{
2020
"gas":22070,
2121
"failed":false,
22-
"returnValue":"f000000000000000000000000000000000000000000000000000000000000002",
22+
"returnValue":"0xf000000000000000000000000000000000000000000000000000000000000002",
2323
"structLogs":[
2424
{
2525
"pc":0,

0 commit comments

Comments
 (0)