mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-10 06:54:26 +00:00
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 <garyrong0905@gmail.com>
This commit is contained in:
parent
896a4ab7c6
commit
2ce0200762
8 changed files with 74 additions and 46 deletions
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue