forked from cerc-io/laconicd-deprecated
		
	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