core/vm: remove redundant tracing hook invocation from interpreter loop

This commit is contained in:
Jared Wasinger 2025-01-24 13:28:02 -05:00
parent 75526bb8e0
commit 479ea1196d

View file

@ -258,9 +258,9 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
contract.Gas -= cost contract.Gas -= cost
} }
// All ops with a dynamic memory usage also has a dynamic gas cost.
var memorySize uint64
if operation.dynamicGas != nil { if operation.dynamicGas != nil {
// All ops with a dynamic memory usage also has a dynamic gas cost.
var memorySize uint64
// calculate the new memory size and expand the memory to fit // calculate the new memory size and expand the memory to fit
// the operation // the operation
// Memory check needs to be done prior to evaluating the dynamic gas portion, // Memory check needs to be done prior to evaluating the dynamic gas portion,
@ -291,20 +291,10 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
contract.Gas -= dynamicCost contract.Gas -= dynamicCost
} }
// Do tracing before memory expansion
if debug { }
if in.evm.Config.Tracer.OnGasChange != nil { // Do tracing before memory expansion
in.evm.Config.Tracer.OnGasChange(gasCopy, gasCopy-cost, tracing.GasChangeCallOpCode) if debug {
}
if in.evm.Config.Tracer.OnOpcode != nil {
in.evm.Config.Tracer.OnOpcode(pc, byte(op), gasCopy, cost, callContext, in.returnData, in.evm.depth, VMErrorFromErr(err))
logged = true
}
}
if memorySize > 0 {
mem.Resize(memorySize)
}
} else if debug {
if in.evm.Config.Tracer.OnGasChange != nil { if in.evm.Config.Tracer.OnGasChange != nil {
in.evm.Config.Tracer.OnGasChange(gasCopy, gasCopy-cost, tracing.GasChangeCallOpCode) in.evm.Config.Tracer.OnGasChange(gasCopy, gasCopy-cost, tracing.GasChangeCallOpCode)
} }
@ -313,6 +303,9 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
logged = true logged = true
} }
} }
if memorySize > 0 {
mem.Resize(memorySize)
}
// execute the operation // execute the operation
res, err = operation.execute(&pc, in, callContext) res, err = operation.execute(&pc, in, callContext)