From 2ce0200762eb4ea77bb02a033004b4d9f75bec8c Mon Sep 17 00:00:00 2001 From: spencer Date: Thu, 9 Jul 2026 09:27:34 +0100 Subject: [PATCH] cmd/evm, core: fixes for eels tests@v20.0.0 release (#35283) ## Summary Sanity fixes surfaced by running the EELS `tests@v20.0.0` fixture release (63,109 blockchain tests) through `evm blocktest`. Also bumps CI to consume the new release: `build/checksums.txt` now points at `tests@v20.0.0` / `fixtures.tar.gz` from `ethereum/execution-specs` (supersedes the archived EEST repo's `fixtures_develop`). --------- Co-authored-by: Gary Rong --- build/checksums.txt | 8 ++-- build/ci.go | 2 +- tests/block_test.go | 11 +++--- tests/gen_stenv.go | 6 +++ tests/init.go | 82 +++++++++++++++++++++++++-------------- tests/state_test.go | 6 +-- tests/state_test_util.go | 3 ++ tests/transaction_test.go | 2 +- 8 files changed, 74 insertions(+), 46 deletions(-) diff --git a/build/checksums.txt b/build/checksums.txt index 454efa93c4..0d135b93e5 100644 --- a/build/checksums.txt +++ b/build/checksums.txt @@ -1,9 +1,9 @@ # This file contains sha256 checksums of optional build dependencies. -# version:spec-tests v5.1.0 -# https://github.com/ethereum/execution-spec-tests/releases -# https://github.com/ethereum/execution-spec-tests/releases/download/v5.1.0 -a3192784375acec7eaec492799d5c5d0c47a2909a3cc40178898e4ecd20cc416 fixtures_develop.tar.gz +# version:spec-tests tests@v20.0.0 +# https://github.com/ethereum/execution-specs/releases +# https://github.com/ethereum/execution-specs/releases/download/tests%40v20.0.0 +b183702a5b447b465873865357ced9eb342315922e52e31b714e2de115dd0bb4 fixtures.tar.gz # version:golang 1.25.10 # https://go.dev/dl/ diff --git a/build/ci.go b/build/ci.go index 53ade2e1bf..320e858e82 100644 --- a/build/ci.go +++ b/build/ci.go @@ -452,7 +452,7 @@ func doTest(cmdline []string) { // downloadSpecTestFixtures downloads and extracts the execution-spec-tests fixtures. func downloadSpecTestFixtures(csdb *download.ChecksumDB, cachedir string) string { ext := ".tar.gz" - base := "fixtures_develop" + base := "fixtures" archivePath := filepath.Join(cachedir, base+ext) if err := csdb.DownloadFileFromKnownURL(archivePath); err != nil { log.Fatal(err) diff --git a/tests/block_test.go b/tests/block_test.go index 0f087967bb..8c1a7ace0f 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -88,14 +88,13 @@ func TestExecutionSpecBlocktests(t *testing.T) { bt := new(testMatcher) // These tests require us to handle scenarios where a system contract is not deployed at a fork - bt.skipLoad(".*prague/eip7251_consolidations/test_system_contract_deployment.json") - bt.skipLoad(".*prague/eip7002_el_triggerable_withdrawals/test_system_contract_deployment.json") + bt.skipLoad(`.*eip7251_consolidations/contract_deployment/system_contract_deployment\.json`) + bt.skipLoad(`.*eip7002_el_triggerable_withdrawals/contract_deployment/system_contract_deployment\.json`) // Broken tests - bt.skipLoad(`RevertInCreateInInit`) - bt.skipLoad(`InitCollisionParis`) - bt.skipLoad(`dynamicAccountOverwriteEmpty_Paris`) - bt.skipLoad(`create2collisionStorageParis`) + bt.skipLoad(`.*eip7610_create_collision/initcollision/.*`) + bt.skipLoad(`.*eip7610_create_collision/revert_in_create/.*`) + bt.skipLoad(`.*stRandom2/random_statetest642/.*`) bt.walk(t, executionSpecBlockchainTestDir, func(t *testing.T, name string, test *BlockTest) { execBlockTest(t, bt, test) diff --git a/tests/gen_stenv.go b/tests/gen_stenv.go index a5bd0d5fcb..89d533f9d6 100644 --- a/tests/gen_stenv.go +++ b/tests/gen_stenv.go @@ -24,6 +24,7 @@ func (s stEnv) MarshalJSON() ([]byte, error) { Timestamp math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` BaseFee *math.HexOrDecimal256 `json:"currentBaseFee" gencodec:"optional"` ExcessBlobGas *math.HexOrDecimal64 `json:"currentExcessBlobGas" gencodec:"optional"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber" gencodec:"optional"` } var enc stEnv enc.Coinbase = common.UnprefixedAddress(s.Coinbase) @@ -34,6 +35,7 @@ func (s stEnv) MarshalJSON() ([]byte, error) { enc.Timestamp = math.HexOrDecimal64(s.Timestamp) enc.BaseFee = (*math.HexOrDecimal256)(s.BaseFee) enc.ExcessBlobGas = (*math.HexOrDecimal64)(s.ExcessBlobGas) + enc.SlotNumber = (*math.HexOrDecimal64)(s.SlotNumber) return json.Marshal(&enc) } @@ -48,6 +50,7 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { Timestamp *math.HexOrDecimal64 `json:"currentTimestamp" gencodec:"required"` BaseFee *math.HexOrDecimal256 `json:"currentBaseFee" gencodec:"optional"` ExcessBlobGas *math.HexOrDecimal64 `json:"currentExcessBlobGas" gencodec:"optional"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber" gencodec:"optional"` } var dec stEnv if err := json.Unmarshal(input, &dec); err != nil { @@ -81,5 +84,8 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { if dec.ExcessBlobGas != nil { s.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas) } + if dec.SlotNumber != nil { + s.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/tests/init.go b/tests/init.go index 67f199203f..19cfdba33b 100644 --- a/tests/init.go +++ b/tests/init.go @@ -487,7 +487,7 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, }, }, "OsakaToBPO1AtTime15k": { @@ -515,7 +515,7 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, }, }, "BPO2": { @@ -544,8 +544,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, }, }, "BPO1ToBPO2AtTime15k": { @@ -574,8 +574,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, }, }, "BPO3": { @@ -605,8 +605,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, BPO3: params.DefaultBPO3BlobConfig, }, }, @@ -637,8 +637,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, BPO3: params.DefaultBPO3BlobConfig, }, }, @@ -670,8 +670,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, BPO3: params.DefaultBPO3BlobConfig, BPO4: params.DefaultBPO4BlobConfig, }, @@ -704,8 +704,8 @@ var Forks = map[string]*params.ChainConfig{ BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, BPO3: params.DefaultBPO3BlobConfig, BPO4: params.DefaultBPO4BlobConfig, }, @@ -732,17 +732,44 @@ var Forks = map[string]*params.ChainConfig{ OsakaTime: u64(0), BPO1Time: u64(0), BPO2Time: u64(0), - BPO3Time: u64(0), - BPO4Time: u64(0), AmsterdamTime: u64(0), DepositContractAddress: params.MainnetChainConfig.DepositContractAddress, BlobScheduleConfig: ¶ms.BlobScheduleConfig{ Cancun: params.DefaultCancunBlobConfig, Prague: params.DefaultPragueBlobConfig, - BPO1: bpo1BlobConfig, - BPO2: bpo2BlobConfig, - BPO3: params.DefaultBPO3BlobConfig, - BPO4: params.DefaultBPO4BlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, + }, + }, + "BPO2ToAmsterdamAtTime15k": { + 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), + MuirGlacierBlock: big.NewInt(0), + BerlinBlock: big.NewInt(0), + LondonBlock: big.NewInt(0), + ArrowGlacierBlock: big.NewInt(0), + MergeNetsplitBlock: big.NewInt(0), + TerminalTotalDifficulty: big.NewInt(0), + ShanghaiTime: u64(0), + CancunTime: u64(0), + PragueTime: u64(0), + OsakaTime: u64(0), + BPO1Time: u64(0), + BPO2Time: u64(0), + AmsterdamTime: u64(15_000), + DepositContractAddress: params.MainnetChainConfig.DepositContractAddress, + BlobScheduleConfig: ¶ms.BlobScheduleConfig{ + Cancun: params.DefaultCancunBlobConfig, + Prague: params.DefaultPragueBlobConfig, + BPO1: params.DefaultBPO1BlobConfig, + BPO2: params.DefaultBPO2BlobConfig, }, }, "Verkle": { @@ -793,16 +820,11 @@ var Forks = map[string]*params.ChainConfig{ }, } -var bpo1BlobConfig = ¶ms.BlobConfig{ - Target: 9, - Max: 14, - UpdateFraction: 8832827, -} - -var bpo2BlobConfig = ¶ms.BlobConfig{ - Target: 14, - Max: 21, - UpdateFraction: 13739630, +func init() { + // Execution-spec-tests fixtures use the historical upgrade names for + // the EIP150 and EIP158 rulesets. + Forks["TangerineWhistle"] = Forks["EIP150"] + Forks["SpuriousDragon"] = Forks["EIP158"] } // AvailableForks returns the set of defined fork names diff --git a/tests/state_test.go b/tests/state_test.go index 09c5cad40e..9b8aa61bc6 100644 --- a/tests/state_test.go +++ b/tests/state_test.go @@ -97,10 +97,8 @@ func TestExecutionSpecState(t *testing.T) { st := new(testMatcher) // Broken tests - st.skipLoad(`RevertInCreateInInit`) - st.skipLoad(`InitCollisionParis`) - st.skipLoad(`dynamicAccountOverwriteEmpty_Paris`) - st.skipLoad(`create2collisionStorageParis`) + st.skipLoad(`.*eip7610_create_collision/initcollision/.*`) + st.skipLoad(`.*eip7610_create_collision/revert_in_create/.*`) st.walk(t, executionSpecStateTestDir, func(t *testing.T, name string, test *StateTest) { execStateTest(t, st, test) diff --git a/tests/state_test_util.go b/tests/state_test_util.go index e33e15fc8c..c41e680463 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -95,6 +95,7 @@ type stEnv struct { Timestamp uint64 `json:"currentTimestamp" gencodec:"required"` BaseFee *big.Int `json:"currentBaseFee" gencodec:"optional"` ExcessBlobGas *uint64 `json:"currentExcessBlobGas" gencodec:"optional"` + SlotNumber *uint64 `json:"slotNumber" gencodec:"optional"` } type stEnvMarshaling struct { @@ -106,6 +107,7 @@ type stEnvMarshaling struct { Timestamp math.HexOrDecimal64 BaseFee *math.HexOrDecimal256 ExcessBlobGas *math.HexOrDecimal64 + SlotNumber *math.HexOrDecimal64 } //go:generate go run github.com/fjl/gencodec -type stTransaction -field-override stTransactionMarshaling -out gen_sttransaction.go @@ -378,6 +380,7 @@ func (t *StateTest) genesis(config *params.ChainConfig) *core.Genesis { GasLimit: t.json.Env.GasLimit, Number: t.json.Env.Number, Timestamp: t.json.Env.Timestamp, + SlotNumber: t.json.Env.SlotNumber, Alloc: t.json.Pre, } if t.json.Env.Random != nil { diff --git a/tests/transaction_test.go b/tests/transaction_test.go index 73ee3aa16a..da9de48bc8 100644 --- a/tests/transaction_test.go +++ b/tests/transaction_test.go @@ -70,7 +70,7 @@ func TestExecutionSpecTransaction(t *testing.T) { st := new(testMatcher) // Emptiness of authorization list is only validated during the tx precheck - st.skipLoad("^prague/eip7702_set_code_tx/test_empty_authorization_list.json") + st.skipLoad(`eip7702_set_code_tx/invalid_tx/empty_authorization_list\.json`) st.walk(t, executionSpecTransactionTestDir, func(t *testing.T, name string, test *TransactionTest) { if err := st.checkFailure(t, test.Run()); err != nil {