evm: decouple tracer from evm creation (#459)

This commit is contained in:
crypto-facs 2021-08-19 10:18:20 +02:00 committed by GitHub
parent 83c838330f
commit fc46430e0f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 11 deletions

View File

@ -27,7 +27,7 @@ type EVMKeeper interface {
WithContext(ctx sdk.Context) WithContext(ctx sdk.Context)
ResetRefundTransient(ctx sdk.Context) ResetRefundTransient(ctx sdk.Context)
GetCoinbaseAddress() (common.Address, error) GetCoinbaseAddress() (common.Address, error)
NewEVM(msg core.Message, config *params.ChainConfig, params evmtypes.Params, coinbase common.Address, tracer string) *vm.EVM NewEVM(msg core.Message, config *params.ChainConfig, params evmtypes.Params, coinbase common.Address, tracer vm.Tracer) *vm.EVM
GetCodeHash(addr common.Address) common.Hash GetCodeHash(addr common.Address) common.Hash
} }
@ -389,8 +389,8 @@ func (ctd CanTransferDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate
) )
} }
// NOTE: pass in an empty coinbase address and tracer as we don't need them for the check below // NOTE: pass in an empty coinbase address and nil tracer as we don't need them for the check below
evm := ctd.evmKeeper.NewEVM(coreMsg, ethCfg, params, common.Address{}, "") evm := ctd.evmKeeper.NewEVM(coreMsg, ethCfg, params, common.Address{}, nil)
// check that caller has enough balance to cover asset transfer for **topmost** call // check that caller has enough balance to cover asset transfer for **topmost** call
// NOTE: here the gas consumed is from the context with the infinite gas meter // NOTE: here the gas consumed is from the context with the infinite gas meter

View File

@ -378,7 +378,8 @@ func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.Ms
return nil, status.Error(codes.Internal, err.Error()) return nil, status.Error(codes.Internal, err.Error())
} }
evm := k.NewEVM(msg, ethCfg, params, coinbase, k.tracer) tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
// pass true means execute in query mode, which don't do actual gas refund. // pass true means execute in query mode, which don't do actual gas refund.
res, err := k.ApplyMessage(evm, msg, ethCfg, true) res, err := k.ApplyMessage(evm, msg, ethCfg, true)
@ -449,7 +450,9 @@ func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*type
k.WithContext(ctx) k.WithContext(ctx)
msg := args.ToMessage(req.GasCap) msg := args.ToMessage(req.GasCap)
evm := k.NewEVM(msg, ethCfg, params, coinbase, k.tracer)
tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
// pass true means execute in query mode, which don't do actual gas refund. // pass true means execute in query mode, which don't do actual gas refund.
rsp, err := k.ApplyMessage(evm, msg, ethCfg, true) rsp, err := k.ApplyMessage(evm, msg, ethCfg, true)

View File

@ -32,7 +32,7 @@ func (k *Keeper) NewEVM(
config *params.ChainConfig, config *params.ChainConfig,
params types.Params, params types.Params,
coinbase common.Address, coinbase common.Address,
tracer string, tracer vm.Tracer,
) *vm.EVM { ) *vm.EVM {
blockCtx := vm.BlockContext{ blockCtx := vm.BlockContext{
CanTransfer: core.CanTransfer, CanTransfer: core.CanTransfer,
@ -53,12 +53,10 @@ func (k *Keeper) NewEVM(
// VMConfig creates an EVM configuration from the debug setting and the extra EIPs enabled on the // VMConfig creates an EVM configuration from the debug setting and the extra EIPs enabled on the
// module parameters. The config generated uses the default JumpTable from the EVM. // module parameters. The config generated uses the default JumpTable from the EVM.
func (k Keeper) VMConfig(msg core.Message, params types.Params, tracer string) vm.Config { func (k Keeper) VMConfig(msg core.Message, params types.Params, tracer vm.Tracer) vm.Config {
cfg := params.ChainConfig.EthereumConfig(k.eip155ChainID)
return vm.Config{ return vm.Config{
Debug: k.debug, Debug: k.debug,
Tracer: types.NewTracer(tracer, msg, cfg, k.Ctx().BlockHeight(), k.debug), Tracer: tracer,
NoRecursion: false, // TODO: consider disabling recursion though params NoRecursion: false, // TODO: consider disabling recursion though params
ExtraEips: params.EIPs(), ExtraEips: params.EIPs(),
} }
@ -161,7 +159,8 @@ func (k *Keeper) ApplyTransaction(tx *ethtypes.Transaction) (*types.MsgEthereumT
} }
// create an ethereum EVM instance and run the message // create an ethereum EVM instance and run the message
evm := k.NewEVM(msg, ethCfg, params, coinbase, k.tracer) tracer := types.NewTracer(k.tracer, msg, ethCfg, k.Ctx().BlockHeight(), k.debug)
evm := k.NewEVM(msg, ethCfg, params, coinbase, tracer)
txHash := tx.Hash() txHash := tx.Hash()