From 465577d8233e323e46bd3584ebda58bfd6800169 Mon Sep 17 00:00:00 2001 From: "nebojsa.urosevic" Date: Thu, 21 Nov 2024 22:05:16 +0100 Subject: [PATCH 1/2] core/tracing: extends tracing.Hooks with OnSystemCallStartV2 --- core/state_processor.go | 13 +++++++++---- core/tracing/hooks.go | 21 +++++++++++++-------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/core/state_processor.go b/core/state_processor.go index 74985b69a11..56ce5dd305b 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -221,7 +221,9 @@ func ApplyTransaction(config *params.ChainConfig, evm *vm.EVM, gp *GasPool, stat // contract. This method is exported to be used in tests. func ProcessBeaconBlockRoot(beaconRoot common.Hash, vmenv *vm.EVM, statedb vm.StateDB) { if tracer := vmenv.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStart != nil { + if tracer.OnSystemCallStartV2 != nil { + tracer.OnSystemCallStartV2(vmenv.GetVMContext()) + } else if tracer.OnSystemCallStart != nil { tracer.OnSystemCallStart() } if tracer.OnSystemCallEnd != nil { @@ -247,7 +249,9 @@ func ProcessBeaconBlockRoot(beaconRoot common.Hash, vmenv *vm.EVM, statedb vm.St // as per EIP-2935. func ProcessParentBlockHash(prevHash common.Hash, vmenv *vm.EVM, statedb vm.StateDB) { if tracer := vmenv.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStart != nil { + if tracer.OnSystemCallStartV2 != nil { + tracer.OnSystemCallStartV2(vmenv.GetVMContext()) + } else if tracer.OnSystemCallStart != nil { tracer.OnSystemCallStart() } if tracer.OnSystemCallEnd != nil { @@ -283,14 +287,15 @@ func ProcessConsolidationQueue(vmenv *vm.EVM, statedb vm.StateDB) []byte { func processRequestsSystemCall(vmenv *vm.EVM, statedb vm.StateDB, requestType byte, addr common.Address) []byte { if tracer := vmenv.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStart != nil { + if tracer.OnSystemCallStartV2 != nil { + tracer.OnSystemCallStartV2(vmenv.GetVMContext()) + } else if tracer.OnSystemCallStart != nil { tracer.OnSystemCallStart() } if tracer.OnSystemCallEnd != nil { defer tracer.OnSystemCallEnd() } } - msg := &Message{ From: params.SystemAddress, GasLimit: 30_000_000, diff --git a/core/tracing/hooks.go b/core/tracing/hooks.go index a21bb1577b0..d147c4efe96 100644 --- a/core/tracing/hooks.go +++ b/core/tracing/hooks.go @@ -145,6 +145,10 @@ type ( // will not be invoked. OnSystemCallStartHook = func() + // OnSystemCallStartHookV2 is called when a system call is about to be executed. Refer + // to `OnSystemCallStartHook` for more information. + OnSystemCallStartHookV2 = func(vm *VMContext) + // OnSystemCallEndHook is called when a system call has finished executing. Today, // this hook is invoked when the EIP-4788 system call is about to be executed to set the // beacon block root. @@ -180,14 +184,15 @@ type Hooks struct { OnFault FaultHook OnGasChange GasChangeHook // Chain events - OnBlockchainInit BlockchainInitHook - OnClose CloseHook - OnBlockStart BlockStartHook - OnBlockEnd BlockEndHook - OnSkippedBlock SkippedBlockHook - OnGenesisBlock GenesisBlockHook - OnSystemCallStart OnSystemCallStartHook - OnSystemCallEnd OnSystemCallEndHook + OnBlockchainInit BlockchainInitHook + OnClose CloseHook + OnBlockStart BlockStartHook + OnBlockEnd BlockEndHook + OnSkippedBlock SkippedBlockHook + OnGenesisBlock GenesisBlockHook + OnSystemCallStart OnSystemCallStartHook + OnSystemCallStartV2 OnSystemCallStartHookV2 + OnSystemCallEnd OnSystemCallEndHook // State events OnBalanceChange BalanceChangeHook OnNonceChange NonceChangeHook From 3c1ae4d4b3681d923e1d97186c432c065597c27d Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Tue, 3 Dec 2024 14:53:42 +0100 Subject: [PATCH 2/2] minor refactor --- core/state_processor.go | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/core/state_processor.go b/core/state_processor.go index c86bc7dd755..c5b33f35552 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -23,6 +23,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/misc" "github.com/ethereum/go-ethereum/core/state" + "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" @@ -221,11 +222,7 @@ func ApplyTransaction(evm *vm.EVM, gp *GasPool, statedb *state.StateDB, header * // contract. This method is exported to be used in tests. func ProcessBeaconBlockRoot(beaconRoot common.Hash, evm *vm.EVM) { if tracer := evm.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStartV2 != nil { - tracer.OnSystemCallStartV2(evm.GetVMContext()) - } else if tracer.OnSystemCallStart != nil { - tracer.OnSystemCallStart() - } + onSystemCallStart(tracer, evm.GetVMContext()) if tracer.OnSystemCallEnd != nil { defer tracer.OnSystemCallEnd() } @@ -249,11 +246,7 @@ func ProcessBeaconBlockRoot(beaconRoot common.Hash, evm *vm.EVM) { // as per EIP-2935. func ProcessParentBlockHash(prevHash common.Hash, evm *vm.EVM) { if tracer := evm.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStartV2 != nil { - tracer.OnSystemCallStartV2(evm.GetVMContext()) - } else if tracer.OnSystemCallStart != nil { - tracer.OnSystemCallStart() - } + onSystemCallStart(tracer, evm.GetVMContext()) if tracer.OnSystemCallEnd != nil { defer tracer.OnSystemCallEnd() } @@ -287,11 +280,7 @@ func ProcessConsolidationQueue(evm *vm.EVM) []byte { func processRequestsSystemCall(evm *vm.EVM, requestType byte, addr common.Address) []byte { if tracer := evm.Config.Tracer; tracer != nil { - if tracer.OnSystemCallStartV2 != nil { - tracer.OnSystemCallStartV2(evm.GetVMContext()) - } else if tracer.OnSystemCallStart != nil { - tracer.OnSystemCallStart() - } + onSystemCallStart(tracer, evm.GetVMContext()) if tracer.OnSystemCallEnd != nil { defer tracer.OnSystemCallEnd() } @@ -331,3 +320,11 @@ func ParseDepositLogs(logs []*types.Log, config *params.ChainConfig) ([]byte, er } return deposits, nil } + +func onSystemCallStart(tracer *tracing.Hooks, ctx *tracing.VMContext) { + if tracer.OnSystemCallStartV2 != nil { + tracer.OnSystemCallStartV2(ctx) + } else if tracer.OnSystemCallStart != nil { + tracer.OnSystemCallStart() + } +}