From 51401fe3c1a8463c3526fb33937861223b72e37c Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Tue, 27 Sep 2022 09:49:02 +0800 Subject: [PATCH 1/4] make vmError more useful --- eth/api_backend.go | 3 +-- internal/ethapi/api.go | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/eth/api_backend.go b/eth/api_backend.go index 97c22c8fbbe..ccc0966f00a 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -214,13 +214,12 @@ func (b *EthAPIBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int { } func (b *EthAPIBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config) (*vm.EVM, func() error, error) { - vmError := func() error { return nil } if vmConfig == nil { vmConfig = b.eth.blockchain.GetVMConfig() } txContext := core.NewEVMTxContext(msg) context := core.NewEVMBlockContext(header, b.eth.BlockChain(), nil) - return vm.NewEVM(context, txContext, state, b.eth.blockchain.Config(), *vmConfig), vmError, nil + return vm.NewEVM(context, txContext, state, b.eth.blockchain.Config(), *vmConfig), state.Error, nil } func (b *EthAPIBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 2e410605222..d4ee456f06d 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -987,6 +987,9 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash // Execute the message. gp := new(core.GasPool).AddGas(math.MaxUint64) result, err := core.ApplyMessage(evm, msg, gp) + if err != nil { + return nil, err + } if err := vmError(); err != nil { return nil, err } From c02930bde5a3b11cc6c94dff8ddd678ae81d03e9 Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Tue, 27 Sep 2022 10:13:19 +0800 Subject: [PATCH 2/4] fix for review --- internal/ethapi/api.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index d4ee456f06d..881d13699b8 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -988,7 +988,7 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash gp := new(core.GasPool).AddGas(math.MaxUint64) result, err := core.ApplyMessage(evm, msg, gp) if err != nil { - return nil, err + return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas()) } if err := vmError(); err != nil { return nil, err @@ -998,9 +998,7 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash if evm.Cancelled() { return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) } - if err != nil { - return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas()) - } + return result, nil } From 9551635753c9c1111fabb04e4495710d457bd064 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 27 Sep 2022 10:23:45 +0800 Subject: [PATCH 3/4] Update api.go --- internal/ethapi/api.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 881d13699b8..73d074ee12c 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -993,12 +993,10 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash if err := vmError(); err != nil { return nil, err } - // If the timer caused an abort, return an appropriate error message if evm.Cancelled() { return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) } - return result, nil } From 6dcdd9d79fa6e34245984a5149c2a45b3275334c Mon Sep 17 00:00:00 2001 From: zhiqiangxu <652732310@qq.com> Date: Tue, 27 Sep 2022 17:16:46 +0800 Subject: [PATCH 4/4] revert calling site --- internal/ethapi/api.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 73d074ee12c..2e410605222 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -987,16 +987,17 @@ func DoCall(ctx context.Context, b Backend, args TransactionArgs, blockNrOrHash // Execute the message. gp := new(core.GasPool).AddGas(math.MaxUint64) result, err := core.ApplyMessage(evm, msg, gp) - if err != nil { - return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas()) - } if err := vmError(); err != nil { return nil, err } + // If the timer caused an abort, return an appropriate error message if evm.Cancelled() { return nil, fmt.Errorf("execution aborted (timeout = %v)", timeout) } + if err != nil { + return result, fmt.Errorf("err: %w (supplied gas %d)", err, msg.Gas()) + } return result, nil }