From f5e76ea6dfa7c14e24cc073ce839cb5d6a08b1b5 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 13 Sep 2025 10:50:10 +0800 Subject: [PATCH] eth/tracers: avoid panic in state test runner #30332 (#1485) Make tracers more robust by handling `nil` receipt as input. Also pass in a receipt with gas used in the state test runner. Closes https://github.com/ethereum/go-ethereum/issues/30117. --------- Co-authored-by: Martin HS Co-authored-by: Sina Mahmoodi --- eth/tracers/js/goja.go | 4 +++- eth/tracers/logger/logger.go | 4 +++- eth/tracers/native/call.go | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/eth/tracers/js/goja.go b/eth/tracers/js/goja.go index 9e687a72d3..a7db4d127a 100644 --- a/eth/tracers/js/goja.go +++ b/eth/tracers/js/goja.go @@ -274,7 +274,9 @@ func (t *jsTracer) OnTxEnd(receipt *types.Receipt, err error) { } return } - t.ctx["gasUsed"] = t.vm.ToValue(receipt.GasUsed) + if receipt != nil { + t.ctx["gasUsed"] = t.vm.ToValue(receipt.GasUsed) + } } // onStart implements the Tracer interface to initialize the tracing operation. diff --git a/eth/tracers/logger/logger.go b/eth/tracers/logger/logger.go index ede929fa64..022a9a83ab 100644 --- a/eth/tracers/logger/logger.go +++ b/eth/tracers/logger/logger.go @@ -268,7 +268,9 @@ func (l *StructLogger) OnTxEnd(receipt *types.Receipt, err error) { } return } - l.usedGas = receipt.GasUsed + if receipt != nil { + l.usedGas = receipt.GasUsed + } } // StructLogs returns the captured log entries. diff --git a/eth/tracers/native/call.go b/eth/tracers/native/call.go index f492c2ee79..d9530c0582 100644 --- a/eth/tracers/native/call.go +++ b/eth/tracers/native/call.go @@ -225,7 +225,9 @@ func (t *callTracer) OnTxEnd(receipt *types.Receipt, err error) { if err != nil { return } - t.callstack[0].GasUsed = receipt.GasUsed + if receipt != nil { + t.callstack[0].GasUsed = receipt.GasUsed + } if t.config.WithLog { // Logs are not emitted when the call fails clearFailedLogs(&t.callstack[0], false)