diff --git a/core/vm/ewasm.go b/core/vm/ewasm.go index 9f4b5c7626..acd0a9a29b 100644 --- a/core/vm/ewasm.go +++ b/core/vm/ewasm.go @@ -24,10 +24,8 @@ import ( "encoding/binary" "errors" "fmt" - "math/big" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" "github.com/go-interpreter/wagon/wasm" @@ -78,11 +76,9 @@ func NewEWASMInterpreter(evm *EVM, cfg Config) Interpreter { var meteringContract *Contract if metering { meteringContractAddress := common.HexToAddress("0x000000000000000000000000000000000000000a") - meteringContract = NewContract(nil, AccountRef(meteringContractAddress), &big.Int{}, 0) meteringCode := evm.StateDB.GetCode(meteringContractAddress) - meteringContract.SetCallCode(&meteringContractAddress, crypto.Keccak256Hash(meteringCode), meteringCode) - module, err := wasm.ReadModule(bytes.NewReader(evm.StateDB.GetCode(meteringContractAddress)), nil) + module, err := wasm.ReadModule(bytes.NewReader(meteringCode), nil) if err != nil { panic(fmt.Sprintf("Error loading the metering contract: %v", err)) } diff --git a/core/vm/ewasm_eei.go b/core/vm/ewasm_eei.go index c0672cc28e..854e0e3536 100644 --- a/core/vm/ewasm_eei.go +++ b/core/vm/ewasm_eei.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/go-interpreter/wagon/exec" "github.com/go-interpreter/wagon/wasm" ) @@ -697,7 +698,11 @@ func sentinel(in *InterpreterEWASM, input []byte) ([]byte, error) { in.contract = savedContract in.vm = savedVM }() + meteringContractAddress := common.HexToAddress("0x000000000000000000000000000000000000000a") + meteringCode := in.StateDB.GetCode(meteringContractAddress) + in.contract = NewContract(in.contract, AccountRef(meteringContractAddress), &big.Int{}, 0) in.contract = in.meteringContract + in.contract.SetCallCode(&meteringContractAddress, crypto.Keccak256Hash(meteringCode), meteringCode) in.vm = in.meteringVM meteredCode, err := in.meteringVM.ExecCode(0) return meteredCode.([]byte), err diff --git a/eth/backend.go b/eth/backend.go index 4bcf805e0f..0fef3e6ea0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -151,12 +151,14 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { } ewasmOptions := make(map[string]string) - for _, option := range strings.Split(config.EWASMInterpreter, ",") { - opt := strings.Split(option, ":") - if len(opt) != 2 || len(opt[0]) == 0 { - panic(fmt.Sprintf("Invalid ewasm option: expected a format of name:value, got: %s", option)) + if len(config.EWASMInterpreter) > 0 { + for _, option := range strings.Split(config.EWASMInterpreter, ",") { + opt := strings.Split(option, ":") + if len(opt) != 2 || len(opt[0]) == 0 { + panic(fmt.Sprintf("Invalid ewasm option: expected a format of name:value, got: %s", option)) + } + ewasmOptions[opt[0]] = opt[1] } - ewasmOptions[opt[0]] = opt[1] } var (