tests

package
v1.13.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 3, 2021 License: GPL-3.0 Imports: 27 Imported by: 0

Documentation

Overview

Package tests implements execution of Ethereum JSON tests.

Index

Constants

This section is empty.

Variables

View Source
var (
	ForceJit  bool
	EnableJit bool
)
View Source
var Forks = map[string]*params.ChainConfig{
	"Frontier": {
		ChainID: big.NewInt(1),
	},
	"Homestead": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
	},
	"EIP150": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		EIP150Block:    big.NewInt(0),
	},
	"EIP158": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		EIP150Block:    big.NewInt(0),
		EIP155Block:    big.NewInt(0),
		EIP158Block:    big.NewInt(0),
	},
	"Byzantium": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		EIP150Block:    big.NewInt(0),
		EIP155Block:    big.NewInt(0),
		EIP158Block:    big.NewInt(0),
		DAOForkBlock:   big.NewInt(0),
		ByzantiumBlock: big.NewInt(0),
	},
	"Constantinople": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		DAOForkBlock:        big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(0),
		PetersburgBlock:     big.NewInt(10000000),
	},
	"ConstantinopleFix": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		DAOForkBlock:        big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(0),
		PetersburgBlock:     big.NewInt(0),
	},
	"Istanbul": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		DAOForkBlock:        big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(0),
		PetersburgBlock:     big.NewInt(0),
		IstanbulBlock:       big.NewInt(0),
	},
	"FrontierToHomesteadAt5": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(5),
	},
	"HomesteadToEIP150At5": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		EIP150Block:    big.NewInt(5),
	},
	"HomesteadToDaoAt5": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		DAOForkBlock:   big.NewInt(5),
		DAOForkSupport: true,
	},
	"EIP158ToByzantiumAt5": {
		ChainID:        big.NewInt(1),
		HomesteadBlock: big.NewInt(0),
		EIP150Block:    big.NewInt(0),
		EIP155Block:    big.NewInt(0),
		EIP158Block:    big.NewInt(0),
		ByzantiumBlock: big.NewInt(5),
	},
	"ByzantiumToConstantinopleAt5": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(5),
	},
	"ByzantiumToConstantinopleFixAt5": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(5),
		PetersburgBlock:     big.NewInt(5),
	},
	"ConstantinopleFixToIstanbulAt5": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(0),
		PetersburgBlock:     big.NewInt(0),
		IstanbulBlock:       big.NewInt(5),
	},
	"YOLOv1": {
		ChainID:             big.NewInt(1),
		HomesteadBlock:      big.NewInt(0),
		EIP150Block:         big.NewInt(0),
		EIP155Block:         big.NewInt(0),
		EIP158Block:         big.NewInt(0),
		ByzantiumBlock:      big.NewInt(0),
		ConstantinopleBlock: big.NewInt(0),
		PetersburgBlock:     big.NewInt(0),
		IstanbulBlock:       big.NewInt(0),
		YoloV1Block:         big.NewInt(0),
	},
}

Forks table defines supported forks and their chain config.

Functions

func AvailableForks added in v1.13.1

func AvailableForks() []string

Returns the set of defined fork names

func FromHex added in v1.13.1

func FromHex(s string) ([]byte, error)

FromHex returns the bytes represented by the hexadecimal string s. s may be prefixed with "0x". This is copy-pasted from bytes.go, which does not return the error

func GetChainConfig added in v1.13.1

func GetChainConfig(forkString string) (baseConfig *params.ChainConfig, eips []int, err error)

GetChainConfig takes a fork definition and returns a chain config. The fork definition can be - a plain forkname, e.g. `Byzantium`, - a fork basename, and a list of EIPs to enable; e.g. `Byzantium+1884+1283`.

func MakePreState added in v1.13.1

func MakePreState(db ethdb.Database, accounts core.GenesisAlloc, snapshotter bool) (*snapshot.Tree, *state.StateDB)

Types

type Account added in v0.9.32

type Account struct {
	Balance string
	Code    string
	Nonce   string
	Storage map[string]string
}

type BlockTest

type BlockTest struct {
	// contains filtered or unexported fields
}

A BlockTest checks handling of entire blocks.

func (*BlockTest) Run added in v1.13.1

func (t *BlockTest) Run(snapshotter bool) error

func (*BlockTest) UnmarshalJSON added in v1.13.1

func (t *BlockTest) UnmarshalJSON(in []byte) error

UnmarshalJSON implements json.Unmarshaler interface.

type DifficultyTest added in v1.13.1

type DifficultyTest struct {
	ParentTimestamp    uint64      `json:"parentTimestamp"`
	ParentDifficulty   *big.Int    `json:"parentDifficulty"`
	UncleHash          common.Hash `json:"parentUncles"`
	CurrentTimestamp   uint64      `json:"currentTimestamp"`
	CurrentBlockNumber uint64      `json:"currentBlockNumber"`
	CurrentDifficulty  *big.Int    `json:"currentDifficulty"`
}

func (DifficultyTest) MarshalJSON added in v1.13.1

func (d DifficultyTest) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*DifficultyTest) Run added in v1.13.1

func (test *DifficultyTest) Run(config *params.ChainConfig) error

func (*DifficultyTest) UnmarshalJSON added in v1.13.1

func (d *DifficultyTest) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type Env added in v0.9.32

type Env struct {
	Gas *big.Int
	// contains filtered or unexported fields
}

func NewEnv added in v0.9.32

func NewEnv(chainConfig *params.ChainConfig, state *state.StateDB) *Env

func NewEnvFromMap added in v0.9.32

func NewEnvFromMap(chainConfig *params.ChainConfig, state *state.StateDB, envValues map[string]string, exeValues map[string]string) *Env

func (*Env) AddLog added in v0.9.32

func (self *Env) AddLog(log *vm.Log)

func (*Env) BlockNumber added in v0.9.32

func (self *Env) BlockNumber() *big.Int

func (*Env) Call added in v0.9.32

func (self *Env) Call(caller vm.ContractRef, addr common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)

func (*Env) CallCode added in v0.9.32

func (self *Env) CallCode(caller vm.ContractRef, addr common.Address, data []byte, gas, price, value *big.Int) ([]byte, error)

func (*Env) CanTransfer added in v1.1.0

func (self *Env) CanTransfer(from common.Address, balance *big.Int) bool

func (*Env) ChainConfig added in v1.13.1

func (self *Env) ChainConfig() *params.ChainConfig

func (*Env) Coinbase added in v0.9.32

func (self *Env) Coinbase() common.Address

func (*Env) Create added in v0.9.32

func (self *Env) Create(caller vm.ContractRef, data []byte, gas, price, value *big.Int) ([]byte, common.Address, error)

func (*Env) Db added in v1.3.1

func (self *Env) Db() vm.Database

func (*Env) DelegateCall added in v1.13.1

func (self *Env) DelegateCall(caller vm.ContractRef, addr common.Address, data []byte, gas, price *big.Int) ([]byte, error)

func (*Env) Depth added in v0.9.32

func (self *Env) Depth() int

func (*Env) Difficulty added in v0.9.32

func (self *Env) Difficulty() *big.Int

func (*Env) GasLimit added in v0.9.32

func (self *Env) GasLimit() *big.Int

func (*Env) GetHash added in v0.9.32

func (self *Env) GetHash(n uint64) common.Hash

func (*Env) Origin added in v0.9.32

func (self *Env) Origin() common.Address

func (*Env) RevertToSnapshot added in v1.13.1

func (self *Env) RevertToSnapshot(snapshot int)

func (*Env) SetDepth added in v0.9.32

func (self *Env) SetDepth(i int)

func (*Env) SnapshotDatabase added in v1.13.1

func (self *Env) SnapshotDatabase() int

func (*Env) Time added in v0.9.32

func (self *Env) Time() *big.Int

func (*Env) Transfer added in v0.9.32

func (self *Env) Transfer(from, to vm.Account, amount *big.Int)

func (*Env) Vm added in v1.13.1

func (self *Env) Vm() vm.Vm

func (*Env) VmType added in v0.9.32

func (self *Env) VmType() vm.Type

type Log added in v0.9.32

type Log struct {
	AddressF string   `json:"address"`
	DataF    string   `json:"data"`
	TopicsF  []string `json:"topics"`
	BloomF   string   `json:"bloom"`
}

func (Log) Address added in v0.9.32

func (self Log) Address() []byte

func (Log) Data added in v0.9.32

func (self Log) Data() []byte

func (Log) RlpData added in v0.9.32

func (self Log) RlpData() interface{}

func (Log) Topics added in v0.9.32

func (self Log) Topics() [][]byte

type RLPTest added in v0.9.39

type RLPTest struct {
	// If the value of In is "INVALID" or "VALID", the test
	// checks whether Out can be decoded into a value of
	// type interface{}.
	//
	// For other JSON values, In is treated as a driver for
	// calls to rlp.Stream. The test also verifies that encoding
	// In produces the bytes in Out.
	In interface{}

	// Out is a hex-encoded RLP value.
	Out string
}

RLPTest is the JSON structure of a single RLP test.

func (*RLPTest) Run added in v0.9.39

func (t *RLPTest) Run() error

Run executes the test.

type StateSubtest added in v1.13.1

type StateSubtest struct {
	Fork  string
	Index int
}

StateSubtest selects a specific configuration of a General State Test.

type StateTest added in v1.13.1

type StateTest struct {
	// contains filtered or unexported fields
}

StateTest checks transaction processing without block context. See https://github.com/matthieu/EIPs/issues/176 for the test format specification.

func (*StateTest) Run added in v1.13.1

func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config, snapshotter bool) (*snapshot.Tree, *state.StateDB, error)

Run executes a specific subtest and verifies the post-state and logs

func (*StateTest) RunNoVerify added in v1.13.1

func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapshotter bool) (*snapshot.Tree, *state.StateDB, common.Hash, error)

RunNoVerify runs a specific subtest and returns the statedb and post-state root

func (*StateTest) Subtests added in v1.13.1

func (t *StateTest) Subtests() []StateSubtest

Subtests returns all valid subtests of the test.

func (*StateTest) UnmarshalJSON added in v1.13.1

func (t *StateTest) UnmarshalJSON(in []byte) error

type TransactionTest

type TransactionTest struct {
	RLP            hexutil.Bytes `json:"rlp"`
	Byzantium      ttFork
	Constantinople ttFork
	Istanbul       ttFork
	EIP150         ttFork
	EIP158         ttFork
	Frontier       ttFork
	Homestead      ttFork
}

TransactionTest checks RLP decoding and sender derivation of transactions.

func (*TransactionTest) Run added in v1.13.1

func (tt *TransactionTest) Run(config *params.ChainConfig) error

type UnsupportedForkError added in v1.13.1

type UnsupportedForkError struct {
	Name string
}

UnsupportedForkError is returned when a test requests a fork that isn't implemented.

func (UnsupportedForkError) Error added in v1.13.1

func (e UnsupportedForkError) Error() string

type VMTest added in v1.13.1

type VMTest struct {
	// contains filtered or unexported fields
}

VMTest checks EVM execution without block or transaction context. See https://github.com/matthieu/tests/wiki/VM-Tests for the test format specification.

func (*VMTest) Run added in v1.13.1

func (t *VMTest) Run(vmconfig vm.Config, snapshotter bool) error

func (*VMTest) UnmarshalJSON added in v1.13.1

func (t *VMTest) UnmarshalJSON(data []byte) error

type VmEnv added in v0.9.32

type VmEnv struct {
	CurrentCoinbase   string
	CurrentDifficulty string
	CurrentGasLimit   string
	CurrentNumber     string
	CurrentTimestamp  interface{}
	PreviousHash      string
}

type VmTest added in v0.9.32

type VmTest struct {
	Callcreates interface{}
	//Env         map[string]string
	Env           VmEnv
	Exec          map[string]string
	Transaction   map[string]string
	Logs          []Log
	Gas           string
	Out           string
	Post          map[string]Account
	Pre           map[string]Account
	PostStateRoot string
}

Directories

Path Synopsis
fuzzers
rlp

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL