Skip to content

Commit

Permalink
Merge PR: add extra eip parm (#480)
Browse files Browse the repository at this point in the history
Co-authored-by: Zhong Qiu <36867992+zhongqiuwood@users.noreply.github.com>
  • Loading branch information
summerpro and zhongqiuwood authored Dec 9, 2020
1 parent d8195ab commit 6c7c1f4
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 5 deletions.
31 changes: 29 additions & 2 deletions x/evm/types/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package types

import (
"fmt"
"github.com/ethereum/go-ethereum/core/vm"

"gopkg.in/yaml.v2"

Expand All @@ -21,6 +22,7 @@ var (
ParamStoreKeyEVMDenom = []byte("EVMDenom")
ParamStoreKeyEnableCreate = []byte("EnableCreate")
ParamStoreKeyEnableCall = []byte("EnableCall")
ParamStoreKeyExtraEIPs = []byte("EnableExtraEIPs")
)

// ParamKeyTable returns the parameter key table.
Expand All @@ -37,14 +39,17 @@ type Params struct {
EnableCreate bool `json:"enable_create" yaml:"enable_create"`
// EnableCall toggles state transitions that use the vm.Call function
EnableCall bool `json:"enable_call" yaml:"enable_call"`
// ExtraEIPs defines the additional EIPs for the vm.Config
ExtraEIPs []int `json:"extra_eips" yaml:"extra_eips"`
}

// NewParams creates a new Params instance
func NewParams(evmDenom string, enableCreate, enableCall bool) Params {
func NewParams(evmDenom string, enableCreate, enableCall bool, extraEIPs ...int) Params {
return Params{
EvmDenom: evmDenom,
EnableCreate: enableCreate,
EnableCall: enableCall,
ExtraEIPs: extraEIPs,
}
}

Expand All @@ -54,6 +59,7 @@ func DefaultParams() Params {
EvmDenom: ethermint.NativeToken,
EnableCreate: true,
EnableCall: true,
ExtraEIPs: []int(nil), // TODO: define default values
}
}

Expand All @@ -69,12 +75,17 @@ func (p *Params) ParamSetPairs() params.ParamSetPairs {
params.NewParamSetPair(ParamStoreKeyEVMDenom, &p.EvmDenom, validateEVMDenom),
params.NewParamSetPair(ParamStoreKeyEnableCreate, &p.EnableCreate, validateBool),
params.NewParamSetPair(ParamStoreKeyEnableCall, &p.EnableCall, validateBool),
params.NewParamSetPair(ParamStoreKeyExtraEIPs, &p.ExtraEIPs, validateEIPs),
}
}

// Validate performs basic validation on evm parameters.
func (p Params) Validate() error {
return sdk.ValidateDenom(p.EvmDenom)
if err := sdk.ValidateDenom(p.EvmDenom); err != nil {
return err
}

return validateEIPs(p.ExtraEIPs)
}

func validateEVMDenom(i interface{}) error {
Expand All @@ -93,3 +104,19 @@ func validateBool(i interface{}) error {
}
return nil
}


func validateEIPs(i interface{}) error {
eips, ok := i.([]int)
if !ok {
return fmt.Errorf("invalid EIP slice type: %T", i)
}

for _, eip := range eips {
if !vm.ValidEip(eip) {
return fmt.Errorf("EIP %d is not activateable", eip)
}
}

return nil
}
13 changes: 12 additions & 1 deletion x/evm/types/params_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func TestParamsValidate(t *testing.T) {
{"default", DefaultParams(), false},
{
"valid",
NewParams("ara", true, true),
NewParams("ara", true, true, 2929, 1884, 1344),
false,
},
{
Expand All @@ -30,6 +30,14 @@ func TestParamsValidate(t *testing.T) {
},
true,
},
{
"invalid eip",
Params{
EvmDenom: "stake",
ExtraEIPs: []int{1},
},
true,
},
}

for _, tc := range testCases {
Expand All @@ -48,4 +56,7 @@ func TestParamsValidatePriv(t *testing.T) {
require.NoError(t, validateEVMDenom("aphoton"))
require.Error(t, validateBool(""))
require.NoError(t, validateBool(true))
require.Error(t, validateEIPs(""))
require.NoError(t, validateEIPs([]int{1884}))
}

9 changes: 7 additions & 2 deletions x/evm/types/state_transition.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ func (st StateTransition) newEVM(
gasLimit uint64,
gasPrice *big.Int,
config ChainConfig,
extraEIPs []int,
) *vm.EVM {
// Create context for evm
context := vm.Context{
Expand All @@ -92,7 +93,11 @@ func (st StateTransition) newEVM(
GasPrice: gasPrice,
}

return vm.NewEVM(context, csdb, config.EthereumConfig(st.ChainID), vm.Config{})
vmConfig := vm.Config{
ExtraEips: extraEIPs,
}

return vm.NewEVM(context, csdb, config.EthereumConfig(st.ChainID), vmConfig)
}

// TransitionDb will transition the state by applying the current transaction and
Expand Down Expand Up @@ -139,7 +144,7 @@ func (st StateTransition) TransitionDb(ctx sdk.Context, config ChainConfig) (*Ex
return nil, errors.New("gas price cannot be nil")
}

evm := st.newEVM(ctx, csdb, gasLimit, gasPrice.Int, config)
evm := st.newEVM(ctx, csdb, gasLimit, gasPrice.Int, config, params.ExtraEIPs)

var (
ret []byte
Expand Down

0 comments on commit 6c7c1f4

Please sign in to comment.