github.1485827954.workers.dev/ethereum/go-ethereum@v1.14.3/eth/tracers/native/call_flat_test.go (about)

     1  // Copyright 2024 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package native_test
    18  
    19  import (
    20  	"errors"
    21  	"math/big"
    22  	"testing"
    23  
    24  	"github.com/ethereum/go-ethereum/common"
    25  	"github.com/ethereum/go-ethereum/core/tracing"
    26  	"github.com/ethereum/go-ethereum/core/types"
    27  	"github.com/ethereum/go-ethereum/core/vm"
    28  	"github.com/ethereum/go-ethereum/eth/tracers"
    29  	"github.com/ethereum/go-ethereum/params"
    30  	"github.com/stretchr/testify/require"
    31  )
    32  
    33  func TestCallFlatStop(t *testing.T) {
    34  	tracer, err := tracers.DefaultDirectory.New("flatCallTracer", &tracers.Context{}, nil)
    35  	require.NoError(t, err)
    36  
    37  	// this error should be returned by GetResult
    38  	stopError := errors.New("stop error")
    39  
    40  	// simulate a transaction
    41  	tx := types.NewTx(&types.LegacyTx{
    42  		Nonce:    0,
    43  		To:       &common.Address{},
    44  		Value:    big.NewInt(0),
    45  		Gas:      0,
    46  		GasPrice: big.NewInt(0),
    47  		Data:     nil,
    48  	})
    49  
    50  	tracer.OnTxStart(&tracing.VMContext{
    51  		ChainConfig: params.MainnetChainConfig,
    52  	}, tx, common.Address{})
    53  
    54  	tracer.OnEnter(0, byte(vm.CALL), common.Address{}, common.Address{}, nil, 0, big.NewInt(0))
    55  
    56  	// stop before the transaction is finished
    57  	tracer.Stop(stopError)
    58  
    59  	tracer.OnTxEnd(&types.Receipt{GasUsed: 0}, nil)
    60  
    61  	// check that the error is returned by GetResult
    62  	_, tracerError := tracer.GetResult()
    63  	require.Equal(t, stopError, tracerError)
    64  }