diff --git a/validation/standard/config.go b/validation/standard/config.go index 39f019de0..8e8f2423d 100644 --- a/validation/standard/config.go +++ b/validation/standard/config.go @@ -4,7 +4,7 @@ import "github.com/ethereum-optimism/superchain-registry/superchain" // Config.Params is keyed by superchain target, e.g. "mainnet" or "sepolia" or "sepolia-dev-0" type ConfigType struct { - GenesisAlloc map[superchain.Address]superchain.GenesisAccount `json:"alloc"` + Alloc map[string][]superchain.Hash Params map[string]*Params Roles *Roles MultisigRoles map[string]*MultisigRoles diff --git a/validation/standard/init.go b/validation/standard/init.go index d1e60bb02..1d3a40bf2 100644 --- a/validation/standard/init.go +++ b/validation/standard/init.go @@ -13,18 +13,15 @@ var standardConfigFile embed.FS func init() { - opSepoliaGenesis, err := superchain.LoadGenesis(11155420) - if err != nil { - panic(err) - } - Config = ConfigType{ - GenesisAlloc: opSepoliaGenesis.Alloc, + Alloc: make(map[string][]superchain.Hash), Params: make(map[string]*Params), Roles: new(Roles), MultisigRoles: make(map[string]*MultisigRoles), } + decodeTOMLFileIntoConfig("standard-allocs.toml", &Config.Alloc) + decodeTOMLFileIntoConfig("standard-config-roles-universal.toml", Config.Roles) networks := []string{"mainnet", "sepolia"} @@ -40,7 +37,7 @@ func init() { decodeTOMLFileIntoConfig("standard-versions.toml", &Versions) } -func decodeTOMLFileIntoConfig[T Params | Roles | MultisigRoles | VersionTags](filename string, config *T) { +func decodeTOMLFileIntoConfig[T Params | Roles | MultisigRoles | VersionTags | map[string][]superchain.Hash](filename string, config *T) { data, err := fs.ReadFile(standardConfigFile, filename) if err != nil { panic(err) diff --git a/validation/standard/standard-allocs.toml b/validation/standard/standard-allocs.toml new file mode 100644 index 000000000..641b5794c --- /dev/null +++ b/validation/standard/standard-allocs.toml @@ -0,0 +1,14 @@ +# Proxies +"0x4200000000000000000000000000000000000000" = [ # LegacyMessagePasser Proxy + "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", # op sepolia + "0xfa8c9db6c6cab7108dea276f4cd09d575674eb0852c0fa3187e59e98ef977998", # base devnet 0 + # "0x1f958654ab06a152993e7a0ae7b6dbb0d4b19265cc9337b8789fe1353bd9dc35", +] +# Implementations +"0xc0D3C0d3C0d3C0D3c0d3C0d3c0D3C0d3c0d30000" = [ # LegacyMessagePasser Implementation + "0xd0c57b27c0149599951da23bcee9961707a75bbbf366771dc3261dd8290a7193", # op labs sepolia dev 0 + "0x6a2619046f959bfd80513ca610c8357e44ada87541da78828bfa992dc40e0378", # zora sepolia + "0x74e5e83bf5526d5dfb64227d4664a88106bf04648d663cd8a95467a78995242f", # base devnet 0 + "0xbed693ca28ddf7933272302afe2dedfd01d56dd67dbdb6f49f88a113f1663830", # mode 919 +] +# Unproxied Predeploys diff --git a/validation/superchain-genesis_test.go b/validation/superchain-genesis_test.go index a7ace425f..a3cfd20ea 100644 --- a/validation/superchain-genesis_test.go +++ b/validation/superchain-genesis_test.go @@ -7,7 +7,6 @@ import ( . "github.com/ethereum-optimism/superchain-registry/superchain" "github.com/ethereum-optimism/superchain-registry/validation/standard" - "github.com/google/go-cmp/cmp" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -60,13 +59,26 @@ func testGenesisPredeploys(t *testing.T, chain *ChainConfig) { g, err := LoadGenesis(chain.ChainID) require.NoError(t, err) - // Define a filter to ignore the "storage" field - opts := cmp.FilterPath(func(path cmp.Path) bool { - return path.Last().String() == ".Storage" - }, cmp.Ignore()) - - if diff := cmp.Diff(standard.Config.GenesisAlloc, g.Alloc, opts); diff != "" { - t.Errorf("genesis allocs (-) do not match standard allocs (+): %s", diff) + for address, listOfAcceptableCodeHashes := range standard.Config.Alloc { + ch := g.Alloc[MustHexToAddress(address)].CodeHash + require.Contains(t, listOfAcceptableCodeHashes, ch, + "account %s: codehash %s not present in list of acceptable codehases %s", address, ch, listOfAcceptableCodeHashes) } } + +func TestGPs(t *testing.T) { + for _, chain := range OPChains { + chain := chain + t.Run(perChainTestName(chain), func(t *testing.T) { + t.Parallel() + if chain.StandardChainCandidate == false && chain.SuperchainLevel == Frontier { + t.Skip() + } + if chain.ChainID == 10 { + t.Skip("we don't have the allocs for op mainnet") + } + testGenesisPredeploys(t, chain) + }) + } +}