246 lines
5.8 KiB
Go
246 lines
5.8 KiB
Go
|
package types
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
|
||
|
"github.com/ethereum/go-ethereum/common"
|
||
|
)
|
||
|
|
||
|
var defaultEIP150Hash = common.Hash{}.String()
|
||
|
|
||
|
func TestChainConfigValidate(t *testing.T) {
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
config ChainConfig
|
||
|
expError bool
|
||
|
}{
|
||
|
{"default", DefaultChainConfig(), false},
|
||
|
{
|
||
|
"valid",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.OneInt(),
|
||
|
IstanbulBlock: sdk.OneInt(),
|
||
|
MuirGlacierBlock: sdk.OneInt(),
|
||
|
YoloV1Block: sdk.OneInt(),
|
||
|
EWASMBlock: sdk.OneInt(),
|
||
|
},
|
||
|
false,
|
||
|
},
|
||
|
{
|
||
|
"empty",
|
||
|
ChainConfig{},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid HomesteadBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid DAOForkBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid EIP150Block",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid EIP150Hash",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: " ",
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid EIP155Block",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid EIP158Block",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid ByzantiumBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid ConstantinopleBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid PetersburgBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid IstanbulBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.OneInt(),
|
||
|
IstanbulBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid MuirGlacierBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.OneInt(),
|
||
|
IstanbulBlock: sdk.OneInt(),
|
||
|
MuirGlacierBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid YoloV1Block",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.OneInt(),
|
||
|
IstanbulBlock: sdk.OneInt(),
|
||
|
MuirGlacierBlock: sdk.OneInt(),
|
||
|
YoloV1Block: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"invalid EWASMBlock",
|
||
|
ChainConfig{
|
||
|
HomesteadBlock: sdk.OneInt(),
|
||
|
DAOForkBlock: sdk.OneInt(),
|
||
|
EIP150Block: sdk.OneInt(),
|
||
|
EIP150Hash: defaultEIP150Hash,
|
||
|
EIP155Block: sdk.OneInt(),
|
||
|
EIP158Block: sdk.OneInt(),
|
||
|
ByzantiumBlock: sdk.OneInt(),
|
||
|
ConstantinopleBlock: sdk.OneInt(),
|
||
|
PetersburgBlock: sdk.OneInt(),
|
||
|
IstanbulBlock: sdk.OneInt(),
|
||
|
MuirGlacierBlock: sdk.OneInt(),
|
||
|
YoloV1Block: sdk.OneInt(),
|
||
|
EWASMBlock: sdk.Int{},
|
||
|
},
|
||
|
true,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
err := tc.config.Validate()
|
||
|
|
||
|
if tc.expError {
|
||
|
require.Error(t, err, tc.name)
|
||
|
} else {
|
||
|
require.NoError(t, err, tc.name)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestChainConfig_String(t *testing.T) {
|
||
|
configStr := `homestead_block: "0"
|
||
|
dao_fork_block: "0"
|
||
|
dao_fork_support: true
|
||
|
eip150_block: "0"
|
||
|
eip150_hash: "0x0000000000000000000000000000000000000000000000000000000000000000"
|
||
|
eip155_block: "0"
|
||
|
eip158_block: "0"
|
||
|
byzantium_block: "0"
|
||
|
constantinople_block: "0"
|
||
|
petersburg_block: "0"
|
||
|
istanbul_block: "-1"
|
||
|
muir_glacier_block: "-1"
|
||
|
yoloV1_block: "-1"
|
||
|
ewasm_block: "-1"
|
||
|
`
|
||
|
require.Equal(t, configStr, DefaultChainConfig().String())
|
||
|
}
|