diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 5a60766373..4547420d9a 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -953,18 +953,16 @@ func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, bloc } defer release() - h := *block.Header() + h := block.Header() if config != nil && config.BlockOverrides != nil { - h = *config.BlockOverrides.MakeHeader(block.Header()) - if h.Number.Uint64() == block.NumberU64()+1 { + if config.BlockOverrides.Number.ToInt().Uint64() == h.Number.Uint64()+1 { + h = config.BlockOverrides.MakeHeader(block.Header()) h.ParentHash = block.Hash() - } else if h.Number.Uint64() > block.NumberU64()+1 { - h.ParentHash = common.Hash{} } } - vmctx := core.NewEVMBlockContext(&h, api.chainContext(ctx), nil) + vmctx := core.NewEVMBlockContext(h, api.chainContext(ctx), nil) // Apply the customization rules if required. if config != nil { if overrideErr := config.BlockOverrides.Apply(&vmctx); overrideErr != nil { diff --git a/eth/tracers/api_test.go b/eth/tracers/api_test.go index 670f9f1186..4129ff5e2b 100644 --- a/eth/tracers/api_test.go +++ b/eth/tracers/api_test.go @@ -689,9 +689,6 @@ func TestTracingWithOverrides(t *testing.T) { Failed bool ReturnValue string } - overrideBlockNumber := genBlocks + 1 - parentHash := backend.chain.GetHeaderByNumber(uint64(genBlocks)).Hash().Hex()[2:] - expectParent := fmt.Sprintf("0x%064s", parentHash) var testSuite = []struct { blockNumber rpc.BlockNumber @@ -792,7 +789,7 @@ func TestTracingWithOverrides(t *testing.T) { }, want: `{"gas":72666,"failed":false,"returnValue":"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}`, }, - { // Override blocknumber, and query a blockhash + { // Override blocknumber with block n+1 and query a blockhash (resolves issue #32175) blockNumber: rpc.LatestBlockNumber, call: ethapi.TransactionArgs{ From: &accounts[0].addr, @@ -807,9 +804,9 @@ func TestTracingWithOverrides(t *testing.T) { }), // blocknumber }, config: &TraceCallConfig{ - BlockOverrides: &override.BlockOverrides{Number: (*hexutil.Big)(big.NewInt(int64(overrideBlockNumber)))}, + BlockOverrides: &override.BlockOverrides{Number: (*hexutil.Big)(big.NewInt(int64(genBlocks + 1)))}, }, - want: fmt.Sprintf(`{"gas":59590,"failed":false,"returnValue":"%s"}`, expectParent), + want: fmt.Sprintf(`{"gas":59590,"failed":false,"returnValue":"%s"}`, fmt.Sprintf("0x%064s", backend.chain.GetHeaderByNumber(uint64(genBlocks)).Hash().Hex()[2:])), }, /* pragma solidity =0.8.12;