evm: decouple tracer from evm creation (#459)
This commit is contained in:
parent
83c838330f
commit
fc46430e0f
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user