Documentation

Overview

    Package tests implements execution of Ethereum JSON tests.

    Index

    Constants

    This section is empty.

    Variables

    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),
    	},
    	"YOLOv2": {
    		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),
    		YoloV2Block:         big.NewInt(0),
    	},
    
    	"Berlin": {
    		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),
    		YoloV2Block:         big.NewInt(0),
    	},
    }

      Forks table defines supported forks and their chain config.

      Functions

      func AvailableForks

      func AvailableForks() []string

        Returns the set of defined fork names

        func FromHex

        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

          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

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

            Types

            type BlockTest

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

              A BlockTest checks handling of entire blocks.

              func (*BlockTest) Run

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

              func (*BlockTest) UnmarshalJSON

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

                UnmarshalJSON implements json.Unmarshaler interface.

                type DifficultyTest

                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

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

                  MarshalJSON marshals as JSON.

                  func (*DifficultyTest) Run

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

                  func (*DifficultyTest) UnmarshalJSON

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

                    UnmarshalJSON unmarshals from JSON.

                    type RLPTest

                    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

                      func (t *RLPTest) Run() error

                        Run executes the test.

                        type StateSubtest

                        type StateSubtest struct {
                        	Fork  string
                        	Index int
                        }

                          StateSubtest selects a specific configuration of a General State Test.

                          type StateTest

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

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

                            func (*StateTest) Run

                            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

                              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

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

                                  Subtests returns all valid subtests of the test.

                                  func (*StateTest) UnmarshalJSON

                                  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

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

                                    type UnsupportedForkError

                                    type UnsupportedForkError struct {
                                    	Name string
                                    }

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

                                      func (UnsupportedForkError) Error

                                      func (e UnsupportedForkError) Error() string

                                      type VMTest

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

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

                                        func (*VMTest) Run

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

                                        func (*VMTest) UnmarshalJSON

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

                                        Directories

                                        Path Synopsis
                                        fuzzers
                                        abi
                                        rlp