Skip to content

Commit 0f49422

Browse files
authored
eth/tracers: fix gasUsed for native and JS tracers (#26048)
* eth/tracers: fix gasUsed in call tracer * fix js tracers gasUsed * fix legacy prestate tracer * fix restGas in test * drop intrinsicGas field from js tracers
1 parent fbdeff9 commit 0f49422

30 files changed

+56
-40
lines changed

eth/tracers/internal/tracetest/calltrace_test.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ func TestCallTracerNative(t *testing.T) {
8282
}
8383

8484
func testCallTracer(tracerName string, dirPath string, t *testing.T) {
85+
isLegacy := strings.HasSuffix(dirPath, "_legacy")
8586
files, err := os.ReadDir(filepath.Join("testdata", dirPath))
8687
if err != nil {
8788
t.Fatalf("failed to retrieve tracer test suite: %v", err)
@@ -136,8 +137,8 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
136137
if err != nil {
137138
t.Fatalf("failed to prepare transaction for tracing: %v", err)
138139
}
139-
st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas()))
140-
if _, err = st.TransitionDb(); err != nil {
140+
vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas()))
141+
if err != nil {
141142
t.Fatalf("failed to execute transaction: %v", err)
142143
}
143144
// Retrieve the trace result and compare against the expected.
@@ -147,7 +148,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
147148
}
148149
// The legacy javascript calltracer marshals json in js, which
149150
// is not deterministic (as opposed to the golang json encoder).
150-
if strings.HasSuffix(dirPath, "_legacy") {
151+
if isLegacy {
151152
// This is a tweak to make it deterministic. Can be removed when
152153
// we remove the legacy tracer.
153154
var x callTrace
@@ -161,6 +162,17 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
161162
if string(want) != string(res) {
162163
t.Fatalf("trace mismatch\n have: %v\n want: %v\n", string(res), string(want))
163164
}
165+
// Sanity check: compare top call's gas used against vm result
166+
type simpleResult struct {
167+
GasUsed hexutil.Uint64
168+
}
169+
var topCall simpleResult
170+
if err := json.Unmarshal(res, &topCall); err != nil {
171+
t.Fatalf("failed to unmarshal top calls gasUsed: %v", err)
172+
}
173+
if uint64(topCall.GasUsed) != vmRet.UsedGas {
174+
t.Fatalf("top call has invalid gasUsed. have: %d want: %d", topCall.GasUsed, vmRet.UsedGas)
175+
}
164176
})
165177
}
166178
}
@@ -303,7 +315,7 @@ func TestZeroValueToNotExitCall(t *testing.T) {
303315
if err != nil {
304316
t.Fatalf("failed to retrieve trace result: %v", err)
305317
}
306-
wantStr := `{"from":"0x682a80a6f560eec50d54e63cbeda1c324c5f8d1b","gas":"0x7148","gasUsed":"0x2d0","to":"0x00000000000000000000000000000000deadbeef","input":"0x","calls":[{"from":"0x00000000000000000000000000000000deadbeef","gas":"0x6cbf","gasUsed":"0x0","to":"0x00000000000000000000000000000000000000ff","input":"0x","value":"0x0","type":"CALL"}],"value":"0x0","type":"CALL"}`
318+
wantStr := `{"from":"0x682a80a6f560eec50d54e63cbeda1c324c5f8d1b","gas":"0x7148","gasUsed":"0x54d8","to":"0x00000000000000000000000000000000deadbeef","input":"0x","calls":[{"from":"0x00000000000000000000000000000000deadbeef","gas":"0x6cbf","gasUsed":"0x0","to":"0x00000000000000000000000000000000000000ff","input":"0x","value":"0x0","type":"CALL"}],"value":"0x0","type":"CALL"}`
307319
if string(res) != wantStr {
308320
t.Fatalf("trace mismatch\n have: %v\n want: %v\n", string(res), wantStr)
309321
}

eth/tracers/internal/tracetest/testdata/call_tracer/create.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"result": {
4949
"from": "0x13e4acefe6a6700604929946e70e6443e4e73447",
5050
"gas": "0x5e106",
51-
"gasUsed": "0x5e106",
51+
"gasUsed": "0x897be",
5252
"input": "0x606060405260405160208061077c83398101604052808051906020019091905050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561007d57600080fd5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006101000a81548160ff02191690831515021790555050610653806101296000396000f300606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029000000000000000000000000c65e620a3a55451316168d57e268f5702ef56a11",
5353
"output": "0x606060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806305e4382a146100855780631c02708d146100ae5780632e1a7d4d146100c35780635114cb52146100e6578063a37dda2c146100fe578063ae200e7914610153578063b5769f70146101a8575b005b341561009057600080fd5b6100986101d1565b6040518082815260200191505060405180910390f35b34156100b957600080fd5b6100c16101d7565b005b34156100ce57600080fd5b6100e460048080359060200190919050506102eb565b005b6100fc6004808035906020019091905050610513565b005b341561010957600080fd5b6101116105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561015e57600080fd5b6101666105fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101b357600080fd5b6101bb610621565b6040518082815260200191505060405180910390f35b60025481565b60011515600460009054906101000a900460ff1615151415156101f957600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102a15750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156102ac57600080fd5b6000600460006101000a81548160ff0219169083151502179055506003543073ffffffffffffffffffffffffffffffffffffffff163103600281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103935750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561039e57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561048357600060025411801561040757506002548111155b151561041257600080fd5b80600254036002819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561047e57600080fd5b610510565b600060035411801561049757506003548111155b15156104a257600080fd5b8060035403600381905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561050f57600080fd5b5b50565b60011515600460009054906101000a900460ff16151514151561053557600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561059657506003548160035401115b80156105bd575080600354013073ffffffffffffffffffffffffffffffffffffffff163110155b15156105c857600080fd5b806003540160038190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600354815600a165627a7a72305820c3b849e8440987ce43eae3097b77672a69234d516351368b03fe5b7de03807910029",
5454
"to": "0x7dc9c9730689ff0b0fd506c67db815f12d90a448",

eth/tracers/internal/tracetest/testdata/call_tracer/deep_calls.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@
405405
],
406406
"from": "0x70c9217d814985faef62b124420f8dfbddd96433",
407407
"gas": "0x37b38",
408-
"gasUsed": "0x12bb3",
408+
"gasUsed": "0x1810b",
409409
"input": "0x51a34eb80000000000000000000000000000000000000000000000280faf689c35ac0000",
410410
"output": "0x",
411411
"to": "0xc212e03b9e060e36facad5fd8f4435412ca22e6b",

eth/tracers/internal/tracetest/testdata/call_tracer/delegatecall.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
],
8888
"from": "0xa529806c67cc6486d4d62024471772f47f6fd672",
8989
"gas": "0x2d6e28",
90-
"gasUsed": "0x64bd",
90+
"gasUsed": "0xbd55",
9191
"input": "0x7065cb480000000000000000000000001523e55a1ca4efbae03355775ae89f8d7699ad9e",
9292
"output": "0x",
9393
"to": "0x269296dddce321a6bcbaa2f0181127593d732cba",

eth/tracers/internal/tracetest/testdata/call_tracer/inner_create_oog_outer_throw.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
"error": "invalid jump destination",
6969
"from": "0xe4a13bc304682a903e9472f469c33801dd18d9e8",
7070
"gas": "0x435c8",
71-
"gasUsed": "0x435c8",
71+
"gasUsed": "0x493e0",
7272
"input": "0x3b91f506000000000000000000000000a14bdd7e5666d784dcce98ad24d383a6b1cd4182000000000000000000000000e4a13bc304682a903e9472f469c33801dd18d9e8",
7373
"to": "0x1d3ddf7caf024f253487e18bc4a15b1a360c170a",
7474
"type": "CALL",

eth/tracers/internal/tracetest/testdata/call_tracer/inner_instafail.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
"to": "0x6c06b16512b332e6cd8293a2974872674716ce18",
5656
"value": "0x0",
5757
"gas": "0x1a466",
58-
"gasUsed": "0x1dc6",
58+
"gasUsed": "0x72de",
5959
"input": "0x2e1a7d4d00000000000000000000000000000000000000000000000014d1120d7b160000",
6060
"output": "0x",
6161
"calls": []

eth/tracers/internal/tracetest/testdata/call_tracer/inner_throw_outer_revert.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
"error": "execution reverted",
7373
"from": "0xd4fcab9f0a6dc0493af47c864f6f17a8a5e2e826",
7474
"gas": "0x78d9e",
75-
"gasUsed": "0x76fc0",
75+
"gasUsed": "0x7c1c8",
7676
"input": "0x",
7777
"to": "0x33056b5dcac09a9b4becad0e1dcf92c19bd0af76",
7878
"type": "CALL",

eth/tracers/internal/tracetest/testdata/call_tracer/oog.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"error": "out of gas",
5252
"from": "0x94194bc2aaf494501d7880b61274a169f6502a54",
5353
"gas": "0x7045",
54-
"gasUsed": "0x7045",
54+
"gasUsed": "0xca1d",
5555
"input": "0xa9059cbb000000000000000000000000e77b1ac803616503510bed0086e3a7be2627a69900000000000000000000000000000000000000000000000000000009502f9000",
5656
"to": "0x43064693d3d38ad6a7cb579e0d6d9718c8aa6b62",
5757
"type": "CALL",

eth/tracers/internal/tracetest/testdata/call_tracer/revert.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
"error": "execution reverted",
5050
"from": "0x0f6cef2b7fbb504782e35aa82a2207e816a2b7a9",
5151
"gas": "0x2d55e8",
52-
"gasUsed": "0xc3",
52+
"gasUsed": "0x719b",
5353
"input": "0x73b40a5c000000000000000000000000400de2e016bda6577407dfc379faba9899bc73ef0000000000000000000000002cc31912b2b0f3075a87b3640923d45a26cef3ee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000064d79d8e6c7265636f76657279416464726573730000000000000000000000000000000000000000000000000000000000383e3ec32dc0f66d8fe60dbdc2f6815bdf73a988383e3ec32dc0f66d8fe60dbdc2f6815bdf73a98800000000000000000000000000000000000000000000000000000000000000000000000000000000",
5454
"to": "0xabbcd5b340c80b5f1c0545c04c987b87310296ae",
5555
"type": "CALL",

eth/tracers/internal/tracetest/testdata/call_tracer/revert_reason.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"error": "execution reverted",
5555
"from": "0xf7579c3d8a669c89d5ed246a22eb6db8f6fedbf1",
5656
"gas": "0x2d7308",
57-
"gasUsed": "0x588",
57+
"gasUsed": "0x5940",
5858
"input": "0x5c19a95c000000000000000000000000f7579c3d8a669c89d5ed246a22eb6db8f6fedbf1",
5959
"to": "0xf58833cf0c791881b494eb79d461e08a1f043f52",
6060
"type": "CALL",

0 commit comments

Comments
 (0)