From f434c8df563600fb523fb3222be17e08ce390da0 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Wed, 21 Feb 2024 18:54:15 +0100 Subject: [PATCH] Add canceler interface --- core/vm/evm.go | 1 + eth/tracers/directory/live/dir.go | 7 +++++++ eth/tracers/js/goja.go | 6 +++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/vm/evm.go b/core/vm/evm.go index 663d41cec2..4537fd8675 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -565,5 +565,6 @@ func (evm *EVM) GetVMContext() *live.VMContext { GasPrice: evm.TxContext.GasPrice, ChainConfig: evm.ChainConfig(), StateDB: evm.StateDB, + VM: evm, } } diff --git a/eth/tracers/directory/live/dir.go b/eth/tracers/directory/live/dir.go index 9e89c0f36c..fca3654141 100644 --- a/eth/tracers/directory/live/dir.go +++ b/eth/tracers/directory/live/dir.go @@ -29,6 +29,12 @@ type StateDB interface { GetRefund() uint64 } +// Canceler is an interface that wraps the Cancel method. +// It allows loggers to cancel EVM processing. +type Canceler interface { + Cancel() +} + type VMContext struct { Coinbase common.Address BlockNumber *big.Int @@ -38,6 +44,7 @@ type VMContext struct { GasPrice *big.Int ChainConfig *params.ChainConfig StateDB StateDB + VM Canceler } // BlockEvent is emitted upon tracing an incoming block. diff --git a/eth/tracers/js/goja.go b/eth/tracers/js/goja.go index 15bc5ceebe..2d0b1e1057 100644 --- a/eth/tracers/js/goja.go +++ b/eth/tracers/js/goja.go @@ -252,7 +252,7 @@ func (t *jsTracer) CaptureTxStart(env *live.VMContext, tx *types.Transaction, fr gasPriceBig, err := t.toBig(t.vm, env.GasPrice.String()) if err != nil { t.err = err - t.env.Cancel() + t.env.VM.Cancel() return } t.ctx["gasPrice"] = gasPriceBig @@ -275,7 +275,7 @@ func (t *jsTracer) CaptureTxEnd(receipt *types.Receipt, err error) { func (t *jsTracer) CaptureStart(from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { cancel := func(err error) { t.err = err - t.env.Cancel() + t.env.VM.Cancel() } if create { t.ctx["type"] = t.vm.ToValue("CREATE") @@ -424,7 +424,7 @@ func (t *jsTracer) onError(context string, err error) { t.err = wrapError(context, err) // `env` is set on CaptureStart which comes before any JS execution. // So it should be non-nil. - t.env.Cancel() + t.env.VM.Cancel() } func wrapError(context string, err error) error {