|
|
|
@ -258,9 +258,9 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( |
|
|
|
|
contract.Gas -= cost |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// All ops with a dynamic memory usage also has a dynamic gas cost.
|
|
|
|
|
var memorySize uint64 |
|
|
|
|
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
|
|
|
|
|
// the operation
|
|
|
|
|
// Memory check needs to be done prior to evaluating the dynamic gas portion,
|
|
|
|
@ -290,21 +290,10 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( |
|
|
|
|
} else { |
|
|
|
|
contract.Gas -= dynamicCost |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Do tracing before memory expansion
|
|
|
|
|
if debug { |
|
|
|
|
if in.evm.Config.Tracer.OnGasChange != nil { |
|
|
|
|
in.evm.Config.Tracer.OnGasChange(gasCopy, gasCopy-cost, tracing.GasChangeCallOpCode) |
|
|
|
|
} |
|
|
|
|
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 { |
|
|
|
|
// Do tracing before potential memory expansion
|
|
|
|
|
if debug { |
|
|
|
|
if in.evm.Config.Tracer.OnGasChange != nil { |
|
|
|
|
in.evm.Config.Tracer.OnGasChange(gasCopy, gasCopy-cost, tracing.GasChangeCallOpCode) |
|
|
|
|
} |
|
|
|
@ -313,6 +302,9 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( |
|
|
|
|
logged = true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if memorySize > 0 { |
|
|
|
|
mem.Resize(memorySize) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// execute the operation
|
|
|
|
|
res, err = operation.execute(&pc, in, callContext) |
|
|
|
|