diff --git a/accounts/abi/bind/backends/simulated.go b/accounts/abi/bind/backends/simulated.go index c6923409cd..8f9d7c48b3 100644 --- a/accounts/abi/bind/backends/simulated.go +++ b/accounts/abi/bind/backends/simulated.go @@ -350,6 +350,16 @@ func (b *SimulatedBackend) CallContract(ctx context.Context, call ethereum.CallM return nil, err } res, err := b.callContract(ctx, call, b.blockchain.CurrentBlock(), state) + + if res != nil && res.Err != vm.ErrOutOfGas { + if len(res.Revert()) > 0 { + if ret, err := abi.UnpackRevert(res.Revert()); err == nil { + return nil, fmt.Errorf("execution reverted: %s", ret) + } + return nil, fmt.Errorf("execution reverted: %#x", res.Revert()) + } + } + if err != nil { return nil, err } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 8f58daf904..6d33ac84f9 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -878,6 +878,15 @@ func (s *PublicBlockChainAPI) Call(ctx context.Context, args CallArgs, blockNrOr if err != nil { return nil, err } + + if result != nil && result.Err != vm.ErrOutOfGas { + if len(result.Revert()) > 0 { + if ret, err := abi.UnpackRevert(result.Revert()); err == nil { + return nil, fmt.Errorf("execution reverted: %s", ret) + } + return nil, fmt.Errorf("execution reverted: %#x", result.Revert()) + } + } return result.Return(), nil }