From b40cf4289c58e28eb1c791f9ad5724380b7516a7 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Tue, 11 Mar 2025 21:01:42 +0100 Subject: [PATCH 01/55] validation/standard: Add op-program/v1.5.0-rc.4 prestates (#937) --- validation/standard/standard-prestates.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/validation/standard/standard-prestates.toml b/validation/standard/standard-prestates.toml index 36282654f0..b9571ef60e 100644 --- a/validation/standard/standard-prestates.toml +++ b/validation/standard/standard-prestates.toml @@ -1,5 +1,13 @@ latest_stable = "1.4.0" -latest_rc = "1.5.0-rc.2" +latest_rc = "1.5.0-rc.4" + +[[prestates."1.5.0-rc.4"]] +type = "cannon32" +hash = "0x0354eee87a1775d96afee8977ef6d5d6bd3612b256170952a01bf1051610ee01" + +[[prestates."1.5.0-rc.4"]] +type = "cannon64" +hash = "0x03ee2917da962ec266b091f4b62121dc9682bb0db534633707325339f99ee405" [[prestates."1.5.0-rc.3"]] type = "cannon32" From 84bce73573f130008d84bae6e924163bab589a11 Mon Sep 17 00:00:00 2001 From: Emiliano Bonassi Date: Wed, 12 Mar 2025 20:20:29 +0100 Subject: [PATCH 02/55] add snaxchain (#862) Co-authored-by: Wazabie <48911235+Wazabie@users.noreply.github.com> Co-authored-by: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> --- CHAINS.md | 1 + chainList.json | 18 +++++ chainList.toml | 13 ++++ superchain/configs/mainnet/snax.toml | 66 ++++++++++++++++++ superchain/extra/addresses/addresses.json | 24 +++++++ .../extra/genesis/mainnet/snax.json.zst | Bin 0 -> 71015 bytes 6 files changed, 122 insertions(+) create mode 100755 superchain/configs/mainnet/snax.toml create mode 100755 superchain/extra/genesis/mainnet/snax.json.zst diff --git a/CHAINS.md b/CHAINS.md index f5e27ba3a1..1f398c8e4a 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -24,6 +24,7 @@ | RACE Mainnet | ❌ | ❌ | https://racescan.io/ | `https://racemainnet.io` | `https://racemainnet.io` | | Redstone | ❌ | ❌ | https://explorer.redstone.xyz | `https://rpc.redstonechain.com` | `https://rpc.redstonechain.com` | | Shape | ❌ | ❌ | https://shape-mainnet.explorer.alchemy.com/ | `https://mainnet.shape.network/` | `https://shape-mainnet-sequencer.g.alchemy.com` | +| SnaxChain | ❌ | ✅ | https://explorer.snaxchain.io | `https://mainnet.snaxchain.io` | `https://mainnet.snaxchain.io` | | Soneium | ✅ | ✅ | https://soneium.blockscout.com/ | `https://rpc.soneium.org` | `https://rpc.soneium.org` | | Superseed | ❌ | ❌ | https://explorer.superseed.xyz | `https://mainnet.superseed.xyz` | `https://mainnet.superseed.xyz` | | Swan Chain Mainnet | ❌ | ❌ | https://swanscan.io | `https://mainnet-rpc.swanchain.org` | `https://sequencer-mainnet.swanchain.org` | diff --git a/chainList.json b/chainList.json index 0e567f5d1a..7ce1b8b19f 100755 --- a/chainList.json +++ b/chainList.json @@ -362,6 +362,24 @@ "chain": "mainnet" } }, + { + "name": "SnaxChain", + "identifier": "mainnet/snax", + "chainId": 2192, + "rpc": [ + "https://mainnet.snaxchain.io" + ], + "explorers": [ + "https://explorer.snaxchain.io" + ], + "superchainLevel": 0, + "governedByOptimism": false, + "dataAvailabilityType": "eth-da", + "parent": { + "type": "L2", + "chain": "mainnet" + } + }, { "name": "Soneium", "identifier": "mainnet/soneium", diff --git a/chainList.toml b/chainList.toml index cc86a09c44..0c168d38a9 100755 --- a/chainList.toml +++ b/chainList.toml @@ -261,6 +261,19 @@ type = "L2" chain = "mainnet" +[[chains]] + name = "SnaxChain" + identifier = "mainnet/snax" + chain_id = 2192 + rpc = ["https://mainnet.snaxchain.io"] + explorers = ["https://explorer.snaxchain.io"] + superchain_level = 0 + governed_by_optimism = false + data_availability_type = "eth-da" + [chains.parent] + type = "L2" + chain = "mainnet" + [[chains]] name = "Soneium" identifier = "mainnet/soneium" diff --git a/superchain/configs/mainnet/snax.toml b/superchain/configs/mainnet/snax.toml new file mode 100755 index 0000000000..eb9f52ab9a --- /dev/null +++ b/superchain/configs/mainnet/snax.toml @@ -0,0 +1,66 @@ +name = "SnaxChain" +public_rpc = "https://mainnet.snaxchain.io" +sequencer_rpc = "https://mainnet.snaxchain.io" +explorer = "https://explorer.snaxchain.io" +superchain_level = 0 +governed_by_optimism = false +superchain_time = 0 +data_availability_type = "eth-da" +chain_id = 2192 +batch_inbox_addr = "0xFeC57BD3729a5F930d4Ee8ac5992Fdc8988426e4" +block_time = 2 +seq_window_size = 3600 +max_sequencer_drift = 600 + +[hardforks] + canyon_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + delta_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + ecotone_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC + holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1723562231 + [genesis.l1] + hash = "0x920dc48c1f037d444cb4dee5c69f41853f469dd9e7751398458126a6f76ecea6" + number = 20520542 + [genesis.l2] + hash = "0x518aadbc56e4ca8b03aa141c13b2fc246a9eae88edea09ee477f3d620b00d5ae" + number = 0 + [genesis.system_config] + batcherAddress = "0x060b915cA4904b56adA63565626b9c97F6CaD212" + overhead = "0x00000000000000000000000000000000000000000000000000000000000000bc" + scalar = "0x00000000000000000000000000000000000000000000000000000000000a6fe0" + gasLimit = 30000000 + +[roles] + SystemConfigOwner = "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746" + ProxyAdminOwner = "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746" + Guardian = "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A" + Challenger = "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746" + Proposer = "0x85C73d8F7a3C95667779E0d9b8104982A5C1d04e" + UnsafeBlockSigner = "0x22c48998635C2D7Ea8B82aB50761f2c1EEae5D21" + BatchSubmitter = "0x060b915cA4904b56adA63565626b9c97F6CaD212" + +[addresses] + AddressManager = "0xd7BF8B8618c21F337d8eD30aC797Fa330eb94411" + L1CrossDomainMessengerProxy = "0x2A4fC0E3B365052d71B9853Efd0123985559f62E" + L1ERC721BridgeProxy = "0x45561F85e43Ac0d2258c0F0C16540ce128EA1634" + L1StandardBridgeProxy = "0xA5fb68C24b02852e8B514E98A1014faf12547Fa5" + L2OutputOracleProxy = "0xF8f3EbF2469C00A00EA9D1D04913B73896268B25" + OptimismMintableERC20FactoryProxy = "0xeEC78bcEA0EfBbA6e1BE7aFc58C93b70f97d3A6A" + OptimismPortalProxy = "0x936D881b4760D5e9b6D55b774f65c509236b4743" + SystemConfigProxy = "0x9c9B78f798F821C2f6398f603825fd175e2427f9" + ProxyAdmin = "0x672B75103c0CbFdCC4A40737a80724f87a8A25D7" + SuperchainConfig = "0x7439cCf2f0c7569a9B69c86fcE0B58EC771cf1a6" + AnchorStateRegistryProxy = "0xe184371E73A90f7676A3f518964B409c49aF17B2" + DelayedWETHProxy = "0xface4DD95FF0Ce212928C7B6D160b84D6df28BB2" + DisputeGameFactoryProxy = "0x8aF5b3ED56D4a822532A07a84C499d600eCD5cf5" + MIPS = "0x10C68eE05b4f9773b5D77b9eb7023DDe3F8D7741" + PreimageOracle = "0x133790bDaE0aCFd5288d8974318CE408678E2380" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index 1027331b73..fe232f3c81 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -399,6 +399,30 @@ "SystemConfigProxy": "0x4Ca9608Fef202216bc21D543798ec854539bAAd3", "UnsafeBlockSigner": "0x55930859CD7003F32A2ba171297408476532E535" }, + "2192": { + "AddressManager": "0xd7BF8B8618c21F337d8eD30aC797Fa330eb94411", + "AnchorStateRegistryProxy": "0xe184371E73A90f7676A3f518964B409c49aF17B2", + "BatchSubmitter": "0x060b915cA4904b56adA63565626b9c97F6CaD212", + "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", + "DelayedWETHProxy": "0xface4DD95FF0Ce212928C7B6D160b84D6df28BB2", + "DisputeGameFactoryProxy": "0x8aF5b3ED56D4a822532A07a84C499d600eCD5cf5", + "Guardian": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", + "L1CrossDomainMessengerProxy": "0x2A4fC0E3B365052d71B9853Efd0123985559f62E", + "L1ERC721BridgeProxy": "0x45561F85e43Ac0d2258c0F0C16540ce128EA1634", + "L1StandardBridgeProxy": "0xA5fb68C24b02852e8B514E98A1014faf12547Fa5", + "L2OutputOracleProxy": "0xF8f3EbF2469C00A00EA9D1D04913B73896268B25", + "MIPS": "0x10C68eE05b4f9773b5D77b9eb7023DDe3F8D7741", + "OptimismMintableERC20FactoryProxy": "0xeEC78bcEA0EfBbA6e1BE7aFc58C93b70f97d3A6A", + "OptimismPortalProxy": "0x936D881b4760D5e9b6D55b774f65c509236b4743", + "PreimageOracle": "0x133790bDaE0aCFd5288d8974318CE408678E2380", + "Proposer": "0x85C73d8F7a3C95667779E0d9b8104982A5C1d04e", + "ProxyAdmin": "0x672B75103c0CbFdCC4A40737a80724f87a8A25D7", + "ProxyAdminOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", + "SuperchainConfig": "0x7439cCf2f0c7569a9B69c86fcE0B58EC771cf1a6", + "SystemConfigOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", + "SystemConfigProxy": "0x9c9B78f798F821C2f6398f603825fd175e2427f9", + "UnsafeBlockSigner": "0x22c48998635C2D7Ea8B82aB50761f2c1EEae5D21" + }, "233": { "AddressManager": "0x2d34a143D7BeAD8F75479C841e3AAbF6c4AFdeC8", "AnchorStateRegistryProxy": "0xB065B32927C3114c0e0Df16d3887F4Fd12eF7117", diff --git a/superchain/extra/genesis/mainnet/snax.json.zst b/superchain/extra/genesis/mainnet/snax.json.zst new file mode 100755 index 0000000000000000000000000000000000000000..a179d8cef182e26d5c78c98346bb203c6155f9f4 GIT binary patch literal 71015 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 Awg3PC literal 0 HcmV?d00001 From c1bcf3601dfdf72f0fd4f5bade180b9c0f94d93b Mon Sep 17 00:00:00 2001 From: Ben Behrman Date: Thu, 13 Mar 2025 11:04:02 -0600 Subject: [PATCH 03/55] adding settlus sepolia to superchain (#924) * feat: adding settlus sepolia details * fix: rename to network * fix: settlus-sepolia.toml * sync settlus-sepolia --------- Co-authored-by: Wazabie <48911235+Wazabie@users.noreply.github.com> Co-authored-by: Yann Hodique --- CHAINS.md | 1 + chainList.json | 18 +++++ chainList.toml | 13 ++++ .../configs/sepolia/settlus-sepolia.toml | 63 ++++++++++++++++++ superchain/extra/addresses/addresses.json | 22 ++++++ .../genesis/sepolia/settlus-sepolia.json.zst | Bin 0 -> 86806 bytes 6 files changed, 117 insertions(+) create mode 100755 superchain/configs/sepolia/settlus-sepolia.toml create mode 100755 superchain/extra/genesis/sepolia/settlus-sepolia.json.zst diff --git a/CHAINS.md b/CHAINS.md index 1f398c8e4a..2b2c643ea7 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -51,6 +51,7 @@ | OP Sepolia Testnet | ✅ | ✅ | https://sepolia-optimistic.etherscan.io | `https://sepolia.optimism.io` | `https://sepolia-sequencer.optimism.io` | | Pivotal Sepolia | ❌ | ❌ | https://sepolia.pivotalscan.org/ | `https://sepolia.pivotalprotocol.com/` | `https://sepolia.pivotalprotocol.com/` | | RACE Testnet | ❌ | ❌ | https://testnet.racescan.io/ | `https://racetestnet.io` | `https://racetestnet.io` | +| Settlus Sepolia | ❌ | ❌ | sepolia.settlus.network | `https://settlus-septestnet.g.alchemy.com/public` | `https://settlus-sep-testnet-sequencer.g.alchemy.com/` | | Shape Sepolia Testnet | ❌ | ❌ | https://shape-sepolia.explorer.alchemy.com/ | `https://sepolia.shape.network/` | `https://shape-sepolia-sequencer.g.alchemy.com` | | Soneium Testnet Minato | ✅ | ✅ | https://soneium-minato.blockscout.com/ | `https://rpc.minato.soneium.org` | `https://rpc.minato.soneium.org` | | Unichain Sepolia Testnet | ✅ | ✅ | https://sepolia.uniscan.xyz | `https://sepolia.unichain.org` | `https://sepolia-sequencer.unichain.org` | diff --git a/chainList.json b/chainList.json index 7ce1b8b19f..1d88c879d3 100755 --- a/chainList.json +++ b/chainList.json @@ -777,6 +777,24 @@ "chain": "sepolia" } }, + { + "name": "Settlus Sepolia", + "identifier": "sepolia/settlus-sepolia", + "chainId": 5373, + "rpc": [ + "https://settlus-septestnet.g.alchemy.com/public" + ], + "explorers": [ + "sepolia.settlus.network" + ], + "superchainLevel": 0, + "governedByOptimism": false, + "dataAvailabilityType": "eth-da", + "parent": { + "type": "L2", + "chain": "sepolia" + } + }, { "name": "Shape Sepolia Testnet", "identifier": "sepolia/shape", diff --git a/chainList.toml b/chainList.toml index 0c168d38a9..cf89ae0e5b 100755 --- a/chainList.toml +++ b/chainList.toml @@ -561,6 +561,19 @@ type = "L2" chain = "sepolia" +[[chains]] + name = "Settlus Sepolia" + identifier = "sepolia/settlus-sepolia" + chain_id = 5373 + rpc = ["https://settlus-septestnet.g.alchemy.com/public"] + explorers = ["sepolia.settlus.network"] + superchain_level = 0 + governed_by_optimism = false + data_availability_type = "eth-da" + [chains.parent] + type = "L2" + chain = "sepolia" + [[chains]] name = "Shape Sepolia Testnet" identifier = "sepolia/shape" diff --git a/superchain/configs/sepolia/settlus-sepolia.toml b/superchain/configs/sepolia/settlus-sepolia.toml new file mode 100755 index 0000000000..948f7b0e46 --- /dev/null +++ b/superchain/configs/sepolia/settlus-sepolia.toml @@ -0,0 +1,63 @@ +name = "Settlus Sepolia" +public_rpc = "https://settlus-septestnet.g.alchemy.com/public" +sequencer_rpc = "https://settlus-sep-testnet-sequencer.g.alchemy.com/" +explorer = "sepolia.settlus.network" +superchain_level = 0 +governed_by_optimism = false +data_availability_type = "eth-da" +chain_id = 5373 +batch_inbox_addr = "0x00b18C246d9b94634a54DcC2A2d258a048ab2227" +block_time = 1 +seq_window_size = 3600 +max_sequencer_drift = 1800 + +[hardforks] + canyon_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + delta_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + ecotone_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + holocene_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1736459256 + [genesis.l1] + hash = "0xd8c9f415fe06484e7713d1e08144a4d1b37e064813b6f3ca45c9d9a29a1f13db" + number = 7456555 + [genesis.l2] + hash = "0xa055eed3718c2ed1f04692c707b7045a804505b5e5184a37143514ba9d14281e" + number = 0 + [genesis.system_config] + batcherAddress = "0x26A1bABee918f55bfdDB002066C63678147B03A2" + overhead = "0x0000000000000000000000000000000000000000000000000000000000000000" + scalar = "0x010000000000000000000000000000000000000000000000000c5fc500000558" + gasLimit = 60000000 + +[roles] + SystemConfigOwner = "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6" + ProxyAdminOwner = "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6" + Guardian = "0x8C7E4A51acb17719D225bd17598B8a94B46c8767" + Challenger = "0xAC165b92E4f98D0Dfd9fB7d2aB474feE56B98A0d" + Proposer = "0x3Fb1cAa16477704bD679C5a883D9DbB1924F4Ee0" + UnsafeBlockSigner = "0xb1fed649e18588D081C5Ea4aE14b61836dd0062a" + BatchSubmitter = "0x26A1bABee918f55bfdDB002066C63678147B03A2" + +[addresses] + AddressManager = "0xed768f41dBe97D81D77316818c2802d322cE21Db" + L1CrossDomainMessengerProxy = "0xffAe0c2cf1547057CD0828e3B01aF11C266C1b3C" + L1ERC721BridgeProxy = "0xbD07617F0Ce47DB1cd51Eb6b9b5E7b3c109410F2" + L1StandardBridgeProxy = "0x1Fe9c3b11Ed334fC049aE9a92Ec290aA69C39267" + OptimismMintableERC20FactoryProxy = "0x71c23513fA05827e168b5A4dCa1f1C81A9a5EEf4" + OptimismPortalProxy = "0x55585368857DcC7E0F89475d28963977DB0b1Ee1" + SystemConfigProxy = "0x7f73514A7eC19f3F51E3c607D536560818dF4205" + ProxyAdmin = "0x4b339825002823Af8B6cA1Ecdf5F9D08cA1f584A" + SuperchainConfig = "0xC2Be75506d5724086DEB7245bd260Cc9753911Be" + AnchorStateRegistryProxy = "0xC31B23208e7F7f8c8bC2Ce6816cbB6867C026b1f" + DelayedWETHProxy = "0xe2a6eFaC27793D4cC9a14B3BF3089817cFA41AA9" + DisputeGameFactoryProxy = "0x017D15a6854CCAaa89c63d1A9fea8da45Ced97Cf" + PermissionedDisputeGame = "0xEb0d28F0474103480eCD393C8e0C64C003a4914e" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index fe232f3c81..c1683af660 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -694,6 +694,28 @@ "SystemConfigProxy": "0x525a2744134805516a45B8abb6Aa0aA1dA3809F6", "UnsafeBlockSigner": "0x92Dc533201e8634f0337D66a11820a8C4E902474" }, + "5373": { + "AddressManager": "0xed768f41dBe97D81D77316818c2802d322cE21Db", + "AnchorStateRegistryProxy": "0xC31B23208e7F7f8c8bC2Ce6816cbB6867C026b1f", + "BatchSubmitter": "0x26A1bABee918f55bfdDB002066C63678147B03A2", + "Challenger": "0xAC165b92E4f98D0Dfd9fB7d2aB474feE56B98A0d", + "DelayedWETHProxy": "0xe2a6eFaC27793D4cC9a14B3BF3089817cFA41AA9", + "DisputeGameFactoryProxy": "0x017D15a6854CCAaa89c63d1A9fea8da45Ced97Cf", + "Guardian": "0x8C7E4A51acb17719D225bd17598B8a94B46c8767", + "L1CrossDomainMessengerProxy": "0xffAe0c2cf1547057CD0828e3B01aF11C266C1b3C", + "L1ERC721BridgeProxy": "0xbD07617F0Ce47DB1cd51Eb6b9b5E7b3c109410F2", + "L1StandardBridgeProxy": "0x1Fe9c3b11Ed334fC049aE9a92Ec290aA69C39267", + "OptimismMintableERC20FactoryProxy": "0x71c23513fA05827e168b5A4dCa1f1C81A9a5EEf4", + "OptimismPortalProxy": "0x55585368857DcC7E0F89475d28963977DB0b1Ee1", + "PermissionedDisputeGame": "0xEb0d28F0474103480eCD393C8e0C64C003a4914e", + "Proposer": "0x3Fb1cAa16477704bD679C5a883D9DbB1924F4Ee0", + "ProxyAdmin": "0x4b339825002823Af8B6cA1Ecdf5F9D08cA1f584A", + "ProxyAdminOwner": "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", + "SystemConfigOwner": "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6", + "SystemConfigProxy": "0x7f73514A7eC19f3F51E3c607D536560818dF4205", + "UnsafeBlockSigner": "0xb1fed649e18588D081C5Ea4aE14b61836dd0062a" + }, "57073": { "AddressManager": "0x9b7C9BbD6d540A8A4dEDd935819fC4408Ba71153", "AnchorStateRegistryProxy": "0xde744491BcF6b2DD2F32146364Ea1487D75E2509", diff --git a/superchain/extra/genesis/sepolia/settlus-sepolia.json.zst b/superchain/extra/genesis/sepolia/settlus-sepolia.json.zst new file mode 100755 index 0000000000000000000000000000000000000000..5942d18d1a3d1f750ba96677aa8a4ebbf431618a GIT binary patch literal 86806 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

G=_OAx8hs-pC=hP_O) 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�vm}$p67DB+0Ao$SRin1 z8?Ran^cDKcy{x&comc7W2*sc^6gUfynQ_yJ)*uWOpco_2vvcV|n+QupQ$(nhVQLbppXbM7X(wDE5*2^bxUUdil#Drz08~6Eai;7K z&Bmw*v1ER;s{ayS`_(guQgD6TsCpi?IBQ|uWP4LIEXWdRRD2{4R`Gjq0)i#c0;iwp z`gj+gq79Z&)sd{-luqBnIeUI}Zgl!V@Th4hCfP(6Kp* zxxA9Ci$Eg8#TWgT6ZQdFHpguRLNYp0Frj}7O^KS2C5o_Mk8>p%`q8uz6?EG^)b<-x zj#*l+bhD>lW*Sp|Yx`UjWi|X1AQ}?eAj6H0ur6l;pox-5y}d&vUka)D)~VnYG1nj{ zWaug$8DaQ%A?>Y$Cyt{oy}HHwYFdW(cC`%>5EpvS2P9~h&W_MTfLksOla2&+rvVK!43^2u4%9ai|?r?p$Ga5lgVUt5F);TN3)aMgq-sDMl3eTY(UOXEE zv^xXoMJF!pwSxJ~Fl(;rE^cyODVqLjRM}2VvIi)o;}dvlI9foZ4253zy2-cmaET=c zR{}yjAQH^2iC14PD*j1v;`~CsD7z2WEQRaO3-!Lp=rT zwuctJ>%M2>X+(kqpO|i-3=-i%#4>=`v!tmrI;UHEL=4OR%i>T#hcSvfEh9oV9>qf% zroKYcixv^90s*-yKN~M%=|1g}$A)7=$;IH|fUE|NiN3onL!IPF%oS*&H?Ec`KuO+C zRG7V!Rz{B;_P8IMpw5PSsP_-ALAY9SNdGtV9Y}+y_@g8~e6hubX5NNwG*uTzL1rcF z6PgQ%v?>YhN(o#x1BV1DyDRbch-W{sVz|YRmD#kUxdXSvK;0;eNQB+qOUYZNhPD}# zpY8MtPZPu0Tdiw(<1sVH6vcv_{gEbyKAH!seJ1tbsKAb;93XUtQM{iY@cJ*m>=9e1 zchO*StLCBJeB7XX8|mHcS)mp|r_z3dzD=`u^Y{U7EQpX#11ahM>Y*Xk>QbpFzn#)8 zm#h!)^q`hGI8X35d+rNd0dw~`Gg$F8Uv4f)d+QBIcB#IF0?_0_ohVF-zsdm=bjQ#h zbV$NTzMh)uOW2#`-Q3vsD@75F#!zbkyoWuQ(z@JF`XETDeeq!PsL+ZrJ~l;rMDFpn)+oI*ru!V0OPGYX9)Ge>3T7u z_G``Osnn}So~}~m7T;In5n&IzGgu)K66N@|{l-g#{wVsztpOgl_#OB{QXblvA-Hq+ ziLg}YK$94e<=g+5>ZPH6ete35JD9!?KT(7`nqF03{`dnG4j7tu#K*&BFgow=@vX2? zhXqkuG~2P*CsF2}CPYQ1sj~c;QV$&fTfT%Gmo)MXzS*mYit$TmjuqSG{vWCVC zPL#XzEH0Htt!h@IB)5|JbZjplq1fmFZEot|C8X)?GsPj?H`i-6z@LtzYey}CC539+ z{18tZyMoJOe5tF-&_T45Ju7$>q7OksKK=+Y;Bc$8mqy5jaR@h+YiWxh2+se$opms) zxDwmBkcg=hnOy^%RNgT)fO#a@5VobADF3^Q%O1SAYvB~#-|(g0eLZ?&@GxdT!)fSP zgvXRUjK}9Up=(EkwKLzqYKI8UkJE{lLH6Z4`TN+~{a_*!gDTH$m$cvf>+X4PPspPU zhN?7Fq-9uFYagd^04@pb3mpnTtV_D(`_AxTT;vSDfmU}n+KiZk#8VW+P|5ax2@ho) zH5boss^dIYI#1GoMhYaBObg$4XjPtizY*7$&n1drwNsXzY|9{7scGJ6FVEprv7i#L zkSnn;`?u4rm+7(tfBla70H(yXI41``#o91eqiAH^OR!22HR(~hq;!B=;${QC4@k6R zAvvQ64t+}5O36~vLMtg)ULPVplh8A5)Lbqxo_K%bU(Os)TV^tC#Z@1 zeL--biP+l?`w}&9LLH)pZHlhh@VuZla&m#3Yb$UBN9;sWDpacip%C7TT>7Jn^=D9O zav1ma@YoifzAFFuA%0Df#OeE(>gYjEz>k&iU|i#nibM!U6iRrFUap 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 literal 0 HcmV?d00001 From 2c60e5723c64b5a1b58ab72c5d3816927ff9391a Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Fri, 14 Mar 2025 10:28:17 -0600 Subject: [PATCH 04/55] Add v3.0.0-rc.2 following backport (#939) v3.0.0 required a [backport](https://github.com/ethereum-optimism/optimism/pull/14848) to include a fix for broken EIP-2935 preinstall addresses. This requires a new RC to be cut. The L1 contracts are all the same, so no new L1 deployments were performed. --- ops/internal/validation/versions_test.go | 10 ++++++++++ .../standard/standard-versions-mainnet.toml | 20 +++++++++++++++++++ .../standard/standard-versions-sepolia.toml | 20 +++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/ops/internal/validation/versions_test.go b/ops/internal/validation/versions_test.go index e91009319b..d93fd0c184 100644 --- a/ops/internal/validation/versions_test.go +++ b/ops/internal/validation/versions_test.go @@ -52,6 +52,7 @@ var versionMappings = map[string]validation.Versions{ var versionsToCheck = []validation.Semver{ "op-contracts/v2.0.0-rc.1", "op-contracts/v3.0.0-rc.1", + "op-contracts/v3.0.0-rc.2", } func TestVersionsIntegrity(t *testing.T) { @@ -134,3 +135,12 @@ func testVersionIntegrity(t *testing.T, stdVer validation.VersionConfig, w3Clien require.NoError(t, w3Client.CallCtx(ctx, eth.CallFunc(common.Address(*stdVer.Mips.Address), oracleFn).Returns(&oracleAddr))) require.Equal(t, common.Address(*stdVer.PreimageOracle.Address), oracleAddr, "invalid oracle address") } + +// TestV300RCEquality tests that the versions for v3.0.0-rc.1 and v3.0.0-rc.2 are equal. +// This is a sanity check to make sure that the L1 deployments did not change between these +// RCs. +func TestV300RCEquality(t *testing.T) { + for _, versions := range []validation.Versions{validation.StandardVersionsMainnet, validation.StandardVersionsSepolia} { + require.Equal(t, versions["op-contracts/v3.0.0-rc.1"], versions["op-contracts/v3.0.0-rc.2"]) + } +} diff --git a/validation/standard/standard-versions-mainnet.toml b/validation/standard/standard-versions-mainnet.toml index 4f5e0fdcf0..60b7078c37 100644 --- a/validation/standard/standard-versions-mainnet.toml +++ b/validation/standard/standard-versions-mainnet.toml @@ -3,6 +3,26 @@ # * proxied : specify a standard "implementation_address" # * neither : specify neither a standard "address" nor "implementation_address" +# Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.2 +# Only the L2 predeploys changed between rc.1 and rc.2. See https://github.com/ethereum-optimism/optimism/pull/14848. +["op-contracts/v3.0.0-rc.2"] +system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" } +fault_dispute_game = { version = "1.4.1" } +permissioned_dispute_game = { version = "1.4.1" } +mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0 +optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" } +anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" } +delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" } +dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" } +preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" } +l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" } +l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" } +l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" } +optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" } +op_contracts_manager = { version = "1.9.0", address = "0x3a1f523a4bc09cd344a2745a108bb0398288094f" } +superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" } +protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" } + # Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.1 ["op-contracts/v3.0.0-rc.1"] system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" } diff --git a/validation/standard/standard-versions-sepolia.toml b/validation/standard/standard-versions-sepolia.toml index 29b87c5514..8729362b57 100644 --- a/validation/standard/standard-versions-sepolia.toml +++ b/validation/standard/standard-versions-sepolia.toml @@ -3,6 +3,26 @@ # * proxied : specify a standard "implementation_address" # * neither : specify neither a standard "address" nor "implementation_address" +# Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.2 +# Only the L2 predeploys changed between rc.1 and rc.2. See https://github.com/ethereum-optimism/optimism/pull/14848. +["op-contracts/v3.0.0-rc.2"] +system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" } +fault_dispute_game = { version = "1.4.1" } +permissioned_dispute_game = { version = "1.4.1" } +mips = { version = "1.0.0", address = "0xf027f4a985560fb13324e943edf55ad6f1d15dc1" } # NOTE: MIPS is now MIPS64, so the semver is reset to 1.0.0 +optimism_portal = { version = "3.14.0", implementation_address = "0xb443da3e07052204a02d630a8933dac05a0d6fb4" } +anchor_state_registry = { version = "2.2.2", implementation_address = "0x7b465370bb7a333f99edd19599eb7fb1c2d3f8d2" } +delayed_weth = { version = "1.3.0", implementation_address = "0x5e40b9231b86984b5150507046e354dbfbed3d9e" } +dispute_game_factory = { version = "1.0.1", implementation_address = "0x4bbA758F006Ef09402eF31724203F316ab74e4a0" } +preimage_oracle = { version = "1.1.4", address = "0x1fb8cdfc6831fc866ed9c51af8817da5c287add3" } +l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5a095665886119693f0b41d8dfee78da033e8b" } +l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" } +l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" } +optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" } +op_contracts_manager = { version = "1.6.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } +superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" } +protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" } + # Upgrade 14 https://github.com/ethereum-optimism/optimism/releases/tag/op-contracts%2Fv3.0.0-rc.1 ["op-contracts/v3.0.0-rc.1"] system_config = { version = "2.5.0", implementation_address = "0x340f923e5c7cbb2171146f64169ec9d5a9ffe647" } From 3288ed0b23adbaa34ac72e0e805b7658dc9802e1 Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Wed, 19 Mar 2025 16:21:43 -0600 Subject: [PATCH 05/55] Fix codegen (#944) --- CHAINS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHAINS.md b/CHAINS.md index 2b2c643ea7..91c6ed0392 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -12,7 +12,7 @@ | Ethernity | ❌ | ✅ | https://ernscan.io | `https://mainnet.ethernitychain.io` | `https://mainnet.ethernitychain.io` | | Funki | ❌ | ❌ | https://funki.superscan.network | `https://rpc-mainnet.funkichain.com` | `https://rpc-mainnet.funkichain.com` | | HashKey Chain | ❌ | ❌ | https://explorer.hsk.xyz | `https://mainnet.hsk.xyz` | `https://hashkeychain-mainnet.alt.technology` | -| Ink | ✅ | ❌ | https://explorer.inkonchain.com | `https://rpc-gel.inkonchain.com` | `https://rpc-gel.inkonchain.com` | +| Ink | ✅ | ✅ | https://explorer.inkonchain.com | `https://rpc-gel.inkonchain.com` | `https://rpc-gel.inkonchain.com` | | Lisk | ❌ | ✅ | https://blockscout.lisk.com | `https://rpc.api.lisk.com` | `https://rpc.api.lisk.com` | | Lyra Chain | ❌ | ✅ | https://explorer.lyra.finance | `https://rpc.lyra.finance` | `https://rpc.lyra.finance` | | Metal L2 | ✅ | ✅ | https://explorer.metall2.com | `https://rpc.metall2.com` | `https://rpc.metall2.com` | From f8084c700b855d0c3da193fd4f3524d2ac4966e8 Mon Sep 17 00:00:00 2001 From: mbaxter Date: Wed, 19 Mar 2025 18:28:43 -0400 Subject: [PATCH 06/55] Update standard prestates with latest rc (#943) --- validation/standard/standard-prestates.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/validation/standard/standard-prestates.toml b/validation/standard/standard-prestates.toml index b9571ef60e..d248f23585 100644 --- a/validation/standard/standard-prestates.toml +++ b/validation/standard/standard-prestates.toml @@ -1,5 +1,13 @@ latest_stable = "1.4.0" -latest_rc = "1.5.0-rc.4" +latest_rc = "1.5.1-rc.1" + +[[prestates."1.5.1-rc.1"]] +type = "cannon32" +hash = "0x0354eee87a1775d96afee8977ef6d5d6bd3612b256170952a01bf1051610ee01" + +[[prestates."1.5.1-rc.1"]] +type = "cannon64" +hash = "0x03ee2917da962ec266b091f4b62121dc9682bb0db534633707325339f99ee405" [[prestates."1.5.0-rc.4"]] type = "cannon32" From 1ab48707d705ef7100f3ffa549e048f699cb886d Mon Sep 17 00:00:00 2001 From: George Knee Date: Thu, 20 Mar 2025 14:46:09 +0000 Subject: [PATCH 07/55] Update hardfork-activation-inheritance.md (#945) * Update hardfork-activation-inheritance.md * Update docs/hardfork-activation-inheritance.md * Update docs/hardfork-activation-inheritance.md * Update docs/hardfork-activation-inheritance.md --- docs/hardfork-activation-inheritance.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/hardfork-activation-inheritance.md b/docs/hardfork-activation-inheritance.md index 0e8c17ff8a..d7d984b319 100644 --- a/docs/hardfork-activation-inheritance.md +++ b/docs/hardfork-activation-inheritance.md @@ -15,9 +15,12 @@ At the time of writing, this is implemented for * [op-geth](https://docs.optimism.io/builders/node-operators/configuration/base-config#initialization-via-network-flags) * [op-node](https://docs.optimism.io/builders/node-operators/configuration/base-config#configuring-op-node) -These components load configuration from the superchain registry. This implies some more conditions which need to hold for a chain to receive the superchain-wide hardfork activation: +> [!NOTE] +> Since [version 2.0](https://github.com/ethereum-optimism/superchain-registry/pull/816) of the superchain registry, the inherited hardfork activation times are applied directly to each chain's individual chain config TOML file. What you see is what you get (unlike in previous iterations of the registry, where the inheritance was applied "magically" by Go bindings). + +The OPStack components above load configuration from the superchain registry. This implies some more conditions which need to hold for a chain to receive the superchain-wide hardfork activation: * They must be running the above OP Stack software which supports this feature, with the relevant initialization invocations to trigger it -* The software must be up-to-date enough to embed the latest superchain-wide default hardfork activation times as well as the chain's individual configuration file (complete with `superchain_time` field). +* The software must be up-to-date enough to embed the chain's latest configuration file. > [!CAUTION] > If (for example) OP Stack components are initialized without the network flags, this will require manual coordination to pass hardfork activation times into the command line invocation of the relevant commands. From 1a5d7a208cea9b0ea175df1fe71bdc4da7f4c04c Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Tue, 25 Mar 2025 09:55:28 -0600 Subject: [PATCH 08/55] bugfix: Versions check OPCM (#942) --- ops/internal/validation/versions_test.go | 13 ++++++++++--- validation/standard/standard-versions-sepolia.toml | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ops/internal/validation/versions_test.go b/ops/internal/validation/versions_test.go index d93fd0c184..a84dd00993 100644 --- a/ops/internal/validation/versions_test.go +++ b/ops/internal/validation/versions_test.go @@ -82,10 +82,18 @@ func testVersionIntegrity(t *testing.T, stdVer validation.VersionConfig, w3Clien ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() + getVersion := func(address common.Address) string { + var contractVer string + require.NoError(t, w3Client.CallCtx(ctx, eth.CallFunc(address, versionFn).Returns(&contractVer))) + return contractVer + } + require.NotNil(t, stdVer.OPContractsManager) opcmAddr := stdVer.OPContractsManager.Address require.NotNil(t, opcmAddr) + require.Equal(t, stdVer.OPContractsManager.Version, getVersion(common.Address(*opcmAddr))) + var impls opcmImpls require.NoError(t, w3Client.CallCtx( ctx, @@ -112,7 +120,7 @@ func testVersionIntegrity(t *testing.T, stdVer validation.VersionConfig, w3Clien for _, field := range fields { implsField := implsValue.FieldByName(field) - require.True(t, implsField.IsValid()) + require.True(t, implsField.IsValid(), "field %s not found", field) address := implsField.Interface().(common.Address) contractData := vValue.FieldByName(field).Interface().(*validation.ContractData) @@ -126,8 +134,7 @@ func testVersionIntegrity(t *testing.T, stdVer validation.VersionConfig, w3Clien require.Empty(t, address, "address %s should be empty", field) } - var contractVer string - require.NoError(t, w3Client.CallCtx(ctx, eth.CallFunc(address, versionFn).Returns(&contractVer))) + contractVer := getVersion(address) require.Equal(t, contractData.Version, contractVer, "invalid version for %s", field) } diff --git a/validation/standard/standard-versions-sepolia.toml b/validation/standard/standard-versions-sepolia.toml index 8729362b57..239b2cc039 100644 --- a/validation/standard/standard-versions-sepolia.toml +++ b/validation/standard/standard-versions-sepolia.toml @@ -19,7 +19,7 @@ l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5 l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" } l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" } optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" } -op_contracts_manager = { version = "1.6.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } +op_contracts_manager = { version = "1.9.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" } protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" } @@ -38,7 +38,7 @@ l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5 l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" } l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" } optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" } -op_contracts_manager = { version = "1.6.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } +op_contracts_manager = { version = "1.9.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" } protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" } From 1c314dc0698690aa30ad58ea8f3ee6e63fea858f Mon Sep 17 00:00:00 2001 From: Ben Behrman Date: Wed, 26 Mar 2025 06:11:48 -0400 Subject: [PATCH 09/55] feat: adds settlus mainnet (#925) * feat: adds settlus mainnet * Update settlus-mainnet.toml * Run codegen * remove accidental reference to testchain --------- Co-authored-by: Wazabie <48911235+Wazabie@users.noreply.github.com> Co-authored-by: Yann Hodique Co-authored-by: Matthew Slipper --- CHAINS.md | 1 + chainList.json | 18 +++++ chainList.toml | 13 ++++ .../configs/mainnet/settlus-mainnet.toml | 63 ++++++++++++++++++ superchain/extra/addresses/addresses.json | 22 ++++++ .../genesis/mainnet/settlus-mainnet.json.zst | Bin 0 -> 82983 bytes 6 files changed, 117 insertions(+) create mode 100755 superchain/configs/mainnet/settlus-mainnet.toml create mode 100755 superchain/extra/genesis/mainnet/settlus-mainnet.json.zst diff --git a/CHAINS.md b/CHAINS.md index 91c6ed0392..752d330fc8 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -23,6 +23,7 @@ | Polynomial | ❌ | ✅ | https://polynomialscan.io | `https://rpc.polynomial.fi` | `https://rpc.polynomial.fi` | | RACE Mainnet | ❌ | ❌ | https://racescan.io/ | `https://racemainnet.io` | `https://racemainnet.io` | | Redstone | ❌ | ❌ | https://explorer.redstone.xyz | `https://rpc.redstonechain.com` | `https://rpc.redstonechain.com` | +| Settlus Mainnet | ❌ | ❌ | mainnet.settlus.network | `https://settlus-mainnet.g.alchemy.com/public` | `https://settlus-mainnet-sequencer.g.alchemy.com/` | | Shape | ❌ | ❌ | https://shape-mainnet.explorer.alchemy.com/ | `https://mainnet.shape.network/` | `https://shape-mainnet-sequencer.g.alchemy.com` | | SnaxChain | ❌ | ✅ | https://explorer.snaxchain.io | `https://mainnet.snaxchain.io` | `https://mainnet.snaxchain.io` | | Soneium | ✅ | ✅ | https://soneium.blockscout.com/ | `https://rpc.soneium.org` | `https://rpc.soneium.org` | diff --git a/chainList.json b/chainList.json index 1d88c879d3..0a4146994b 100755 --- a/chainList.json +++ b/chainList.json @@ -344,6 +344,24 @@ "chain": "mainnet" } }, + { + "name": "Settlus Mainnet", + "identifier": "mainnet/settlus-mainnet", + "chainId": 5371, + "rpc": [ + "https://settlus-mainnet.g.alchemy.com/public" + ], + "explorers": [ + "mainnet.settlus.network" + ], + "superchainLevel": 0, + "governedByOptimism": false, + "dataAvailabilityType": "eth-da", + "parent": { + "type": "L2", + "chain": "mainnet" + } + }, { "name": "Shape", "identifier": "mainnet/shape", diff --git a/chainList.toml b/chainList.toml index cf89ae0e5b..fb6745e379 100755 --- a/chainList.toml +++ b/chainList.toml @@ -248,6 +248,19 @@ type = "L2" chain = "mainnet" +[[chains]] + name = "Settlus Mainnet" + identifier = "mainnet/settlus-mainnet" + chain_id = 5371 + rpc = ["https://settlus-mainnet.g.alchemy.com/public"] + explorers = ["mainnet.settlus.network"] + superchain_level = 0 + governed_by_optimism = false + data_availability_type = "eth-da" + [chains.parent] + type = "L2" + chain = "mainnet" + [[chains]] name = "Shape" identifier = "mainnet/shape" diff --git a/superchain/configs/mainnet/settlus-mainnet.toml b/superchain/configs/mainnet/settlus-mainnet.toml new file mode 100755 index 0000000000..f9ff8712f5 --- /dev/null +++ b/superchain/configs/mainnet/settlus-mainnet.toml @@ -0,0 +1,63 @@ +name = "Settlus Mainnet" +public_rpc = "https://settlus-mainnet.g.alchemy.com/public" +sequencer_rpc = "https://settlus-mainnet-sequencer.g.alchemy.com/" +explorer = "mainnet.settlus.network" +superchain_level = 0 +governed_by_optimism = false +data_availability_type = "eth-da" +chain_id = 5371 +batch_inbox_addr = "0x003E40D3125591bD722aB1bB880c78e4D74d0977" +block_time = 1 +seq_window_size = 3600 +max_sequencer_drift = 1800 + +[hardforks] + canyon_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + delta_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + ecotone_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + holocene_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1740171575 + [genesis.l1] + hash = "0x7737a04d48b78bd5ce39fdd16a5ecf652e3c35ee5226a56869aa0cbb230acbcb" + number = 21897258 + [genesis.l2] + hash = "0x47a86b86dc4ba2e8c877515717dab337673a24dc3fb06d69ac9f07e9949a48c6" + number = 0 + [genesis.system_config] + batcherAddress = "0xD0b4c3aC8A50B6F1B3949ADaf55Cc9805620EB57" + overhead = "0x0000000000000000000000000000000000000000000000000000000000000000" + scalar = "0x010000000000000000000000000000000000000000000000000c5fc500000558" + gasLimit = 60000000 + +[roles] + SystemConfigOwner = "0x57669299e2a7D5BE46Ba817d8039C1350af830e8" + ProxyAdminOwner = "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d" + Guardian = "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2" + Challenger = "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d" + Proposer = "0x1bC6Df949b8eDC8EE61adB99d578A7a6E6Ff7310" + UnsafeBlockSigner = "0xE7c264af5bdF997A78105A6e0FF32C126Eda66D9" + BatchSubmitter = "0xD0b4c3aC8A50B6F1B3949ADaf55Cc9805620EB57" + +[addresses] + AddressManager = "0xC24C700BC65a3b15De13e489e155c81F621B1856" + L1CrossDomainMessengerProxy = "0x9BdA922e6f1bD53c24F9bCFb88B9638199A82CEb" + L1ERC721BridgeProxy = "0xCcfa1f8A93640488E3E1AE90A0edAf44680E9f82" + L1StandardBridgeProxy = "0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0" + OptimismMintableERC20FactoryProxy = "0x44e9388e88Bb8edE446d62590d8A4C6d34813e98" + OptimismPortalProxy = "0xFc1D560eB01443e31B0EB56620703E80e42A7E4e" + SystemConfigProxy = "0x15C1dAED5443A77b4DcF6FE35cAFcCEBb0c6da0E" + ProxyAdmin = "0xd35FeF329Bb6569baa373BDa702F3dfF59D57321" + SuperchainConfig = "0x95703e0982140D16f8ebA6d158FccEde42f04a4C" + AnchorStateRegistryProxy = "0xb5150595F1E2240b76F414dc96509f5125ba5DD0" + DelayedWETHProxy = "0xC206D300b07cB905Cb1831d8a9172d4c66394638" + DisputeGameFactoryProxy = "0xde9FDA9C499bA1C0168AC083acF5BEc5cC67fA76" + PermissionedDisputeGame = "0xf9534EBc84082dF9d35Fb1Ed8786bF8cE8a90294" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index c1683af660..666340c9b9 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -694,6 +694,28 @@ "SystemConfigProxy": "0x525a2744134805516a45B8abb6Aa0aA1dA3809F6", "UnsafeBlockSigner": "0x92Dc533201e8634f0337D66a11820a8C4E902474" }, + "5371": { + "AddressManager": "0xC24C700BC65a3b15De13e489e155c81F621B1856", + "AnchorStateRegistryProxy": "0xb5150595F1E2240b76F414dc96509f5125ba5DD0", + "BatchSubmitter": "0xD0b4c3aC8A50B6F1B3949ADaf55Cc9805620EB57", + "Challenger": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", + "DelayedWETHProxy": "0xC206D300b07cB905Cb1831d8a9172d4c66394638", + "DisputeGameFactoryProxy": "0xde9FDA9C499bA1C0168AC083acF5BEc5cC67fA76", + "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", + "L1CrossDomainMessengerProxy": "0x9BdA922e6f1bD53c24F9bCFb88B9638199A82CEb", + "L1ERC721BridgeProxy": "0xCcfa1f8A93640488E3E1AE90A0edAf44680E9f82", + "L1StandardBridgeProxy": "0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0", + "OptimismMintableERC20FactoryProxy": "0x44e9388e88Bb8edE446d62590d8A4C6d34813e98", + "OptimismPortalProxy": "0xFc1D560eB01443e31B0EB56620703E80e42A7E4e", + "PermissionedDisputeGame": "0xf9534EBc84082dF9d35Fb1Ed8786bF8cE8a90294", + "Proposer": "0x1bC6Df949b8eDC8EE61adB99d578A7a6E6Ff7310", + "ProxyAdmin": "0xd35FeF329Bb6569baa373BDa702F3dfF59D57321", + "ProxyAdminOwner": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", + "SystemConfigOwner": "0x57669299e2a7D5BE46Ba817d8039C1350af830e8", + "SystemConfigProxy": "0x15C1dAED5443A77b4DcF6FE35cAFcCEBb0c6da0E", + "UnsafeBlockSigner": "0xE7c264af5bdF997A78105A6e0FF32C126Eda66D9" + }, "5373": { "AddressManager": "0xed768f41dBe97D81D77316818c2802d322cE21Db", "AnchorStateRegistryProxy": "0xC31B23208e7F7f8c8bC2Ce6816cbB6867C026b1f", diff --git a/superchain/extra/genesis/mainnet/settlus-mainnet.json.zst b/superchain/extra/genesis/mainnet/settlus-mainnet.json.zst new file mode 100755 index 0000000000000000000000000000000000000000..005eb42ce2433c40357d4a5a16e62b0d8ab20ef1 GIT binary patch literal 82983 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 z%0D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�p2ImQL2 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 literal 0 HcmV?d00001 From 934ea2dd22d160e076ebbecb310582049eec071d Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Wed, 26 Mar 2025 12:11:46 -0600 Subject: [PATCH 10/55] Update params for U14 operator fee (#949) --- validation/params.go | 4 +++- validation/standard/standard-config-params-mainnet.toml | 2 ++ validation/standard/standard-config-params-sepolia.toml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/validation/params.go b/validation/params.go index 62fe3b760e..3bc8569d59 100644 --- a/validation/params.go +++ b/validation/params.go @@ -51,7 +51,9 @@ type GasPriceOracleParams struct { } type SystemConfigParams struct { - GasLimit Range `toml:"gas_limit"` + GasLimit Range `toml:"gas_limit"` + OperatorFeeScalar Range `toml:"operator_fee_scalar"` + OperatorFeeConstant Range `toml:"operator_fee_constant"` } type FDGParams struct { diff --git a/validation/standard/standard-config-params-mainnet.toml b/validation/standard/standard-config-params-mainnet.toml index d6447896f8..8acede391a 100644 --- a/validation/standard/standard-config-params-mainnet.toml +++ b/validation/standard/standard-config-params-mainnet.toml @@ -29,6 +29,8 @@ base_fee_scalar = [0, 10_000_000] [system_config] gas_limit = [8_000_000, 200_000_000] +operator_fee_scalar = [0, 0] +operator_fee_constant = [0, 0] [proofs.permissioned] game_type = 1 diff --git a/validation/standard/standard-config-params-sepolia.toml b/validation/standard/standard-config-params-sepolia.toml index a37430f6d0..b648dd7945 100644 --- a/validation/standard/standard-config-params-sepolia.toml +++ b/validation/standard/standard-config-params-sepolia.toml @@ -29,6 +29,8 @@ base_fee_scalar = [0, 10_000_000] [system_config] gas_limit = [1000, 60_000_000] +operator_fee_scalar = [0, 0] +operator_fee_constant = [0, 0] [proofs.permissioned] game_type = 1 From 5f5334768fd1dab6e31132020c374e575c632074 Mon Sep 17 00:00:00 2001 From: Paul Dowman Date: Fri, 28 Mar 2025 09:14:10 -0600 Subject: [PATCH 11/55] Add op-program release 1.5.0 to standard-prestates (#952) --- validation/standard/standard-prestates.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/validation/standard/standard-prestates.toml b/validation/standard/standard-prestates.toml index d248f23585..b16316b0ea 100644 --- a/validation/standard/standard-prestates.toml +++ b/validation/standard/standard-prestates.toml @@ -1,4 +1,4 @@ -latest_stable = "1.4.0" +latest_stable = "1.5.0" latest_rc = "1.5.1-rc.1" [[prestates."1.5.1-rc.1"]] @@ -9,6 +9,14 @@ hash = "0x0354eee87a1775d96afee8977ef6d5d6bd3612b256170952a01bf1051610ee01" type = "cannon64" hash = "0x03ee2917da962ec266b091f4b62121dc9682bb0db534633707325339f99ee405" +[[prestates."1.5.0"]] +type = "cannon32" +hash = "0x039facea52b20c605c05efb0a33560a92de7074218998f75bcdf61e8989cb5d9" + +[[prestates."1.5.0"]] +type = "cannon64" +hash = "0x039970872142f48b189d18dcbc03a3737338d098b0101713dc2d6710f9deb5ef" + [[prestates."1.5.0-rc.4"]] type = "cannon32" hash = "0x0354eee87a1775d96afee8977ef6d5d6bd3612b256170952a01bf1051610ee01" From ab269b048633f263a82547b95424673c67ad223d Mon Sep 17 00:00:00 2001 From: cody-wang-cb Date: Mon, 31 Mar 2025 12:45:22 -0400 Subject: [PATCH 12/55] Update base devnet pectra blob schedule fix time (#957) * Update base devnet pectra scheduled time Update pectra scheduled time for base devnet * Update date format --- superchain/configs/sepolia-dev-0/base-devnet-0.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superchain/configs/sepolia-dev-0/base-devnet-0.toml b/superchain/configs/sepolia-dev-0/base-devnet-0.toml index 848ec63cff..c3e029400d 100755 --- a/superchain/configs/sepolia-dev-0/base-devnet-0.toml +++ b/superchain/configs/sepolia-dev-0/base-devnet-0.toml @@ -19,7 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1715961600 # Fri 17 May 2024 16:00:00 UTC granite_time = 1723046400 # Wed 7 Aug 2024 16:00:00 UTC holocene_time = 1731682800 # Fri 15 Nov 2024 15:00:00 UTC - pectra_blob_schedule_time = 1741687200 # Tue 11 Mar 2025 10:00:00 UTC + pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 From 1dd628c05dc75227a3d1989a9a35e4256afbb852 Mon Sep 17 00:00:00 2001 From: Aten Jin Date: Tue, 1 Apr 2025 01:23:16 +0800 Subject: [PATCH 13/55] [cyber-testnet] add `pectra_blob_schedule_time` hardfork time (#946) --- superchain/configs/sepolia/cyber.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/superchain/configs/sepolia/cyber.toml b/superchain/configs/sepolia/cyber.toml index 6ee5ce37e4..993e13a77f 100755 --- a/superchain/configs/sepolia/cyber.toml +++ b/superchain/configs/sepolia/cyber.toml @@ -15,6 +15,7 @@ max_sequencer_drift = 600 canyon_time = 0 # Thu 1 Jan 1970 00:00:00 UTC delta_time = 0 # Thu 1 Jan 1970 00:00:00 UTC ecotone_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + pectra_blob_schedule_time = 1744696800 # Tue 15 Apr 2025 06:00:00 UTC [optimism] eip1559_elasticity = 10 From e8d75a16692c0f9410ff03dd9a5a3fcda97acbae Mon Sep 17 00:00:00 2001 From: Aten Jin Date: Tue, 1 Apr 2025 01:23:25 +0800 Subject: [PATCH 14/55] [funki-testnet] add `pectra_blob_schedule_time` hardfork time (#947) --- superchain/configs/sepolia/funki.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/superchain/configs/sepolia/funki.toml b/superchain/configs/sepolia/funki.toml index 4723a2f32e..3ae002cb2c 100755 --- a/superchain/configs/sepolia/funki.toml +++ b/superchain/configs/sepolia/funki.toml @@ -15,6 +15,7 @@ max_sequencer_drift = 600 canyon_time = 0 # Thu 1 Jan 1970 00:00:00 UTC delta_time = 0 # Thu 1 Jan 1970 00:00:00 UTC ecotone_time = 0 # Thu 1 Jan 1970 00:00:00 UTC + pectra_blob_schedule_time = 1744696800 # Tue 15 Apr 2025 06:00:00 UTC [optimism] eip1559_elasticity = 6 From e9cd97b56b4f6636f0d11a27db465955e7c3c7db Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Mon, 31 Mar 2025 19:40:00 +0200 Subject: [PATCH 15/55] Set Isthmus activations for sepolia and devnets (#956) --- superchain/configs/sepolia-dev-0/base-devnet-0.toml | 1 + superchain/configs/sepolia-dev-0/oplabs-devnet-0.toml | 1 + superchain/configs/sepolia-dev-0/superchain.toml | 1 + superchain/configs/sepolia/base.toml | 1 + superchain/configs/sepolia/creator-chain-testnet.toml | 1 + superchain/configs/sepolia/ethernity.toml | 1 + superchain/configs/sepolia/ink.toml | 1 + superchain/configs/sepolia/metal.toml | 1 + superchain/configs/sepolia/mode.toml | 1 + superchain/configs/sepolia/op.toml | 1 + superchain/configs/sepolia/soneium-minato.toml | 1 + superchain/configs/sepolia/superchain.toml | 2 +- superchain/configs/sepolia/unichain.toml | 1 + superchain/configs/sepolia/zora.toml | 1 + 14 files changed, 14 insertions(+), 1 deletion(-) diff --git a/superchain/configs/sepolia-dev-0/base-devnet-0.toml b/superchain/configs/sepolia-dev-0/base-devnet-0.toml index c3e029400d..e5a4ae6370 100755 --- a/superchain/configs/sepolia-dev-0/base-devnet-0.toml +++ b/superchain/configs/sepolia-dev-0/base-devnet-0.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723046400 # Wed 7 Aug 2024 16:00:00 UTC holocene_time = 1731682800 # Fri 15 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744300800 # Thu 10 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia-dev-0/oplabs-devnet-0.toml b/superchain/configs/sepolia-dev-0/oplabs-devnet-0.toml index 1cc8caa648..aa2d4aa405 100755 --- a/superchain/configs/sepolia-dev-0/oplabs-devnet-0.toml +++ b/superchain/configs/sepolia-dev-0/oplabs-devnet-0.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723046400 # Wed 7 Aug 2024 16:00:00 UTC holocene_time = 1731682800 # Fri 15 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1741687200 # Tue 11 Mar 2025 10:00:00 UTC + isthmus_time = 1744300800 # Thu 10 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia-dev-0/superchain.toml b/superchain/configs/sepolia-dev-0/superchain.toml index b85ec055d4..4c81018950 100644 --- a/superchain/configs/sepolia-dev-0/superchain.toml +++ b/superchain/configs/sepolia-dev-0/superchain.toml @@ -10,6 +10,7 @@ fjord_time = 1715961600 # Fri May 17 2024 16:00:00 UTC granite_time = 1723046400 # Wed Aug 7 16:00:00 UTC 2024 holocene_time = 1731682800 # Fri Nov 15 15:00:00 UTC 2024 pectra_blob_schedule_time = 1741687200 # Tue Mar 11 10:00:00 UTC 2025 +isthmus_time = 1744300800 # Thu Apr 10 16:00:00 UTC 2025 [l1] chain_id = 11155111 diff --git a/superchain/configs/sepolia/base.toml b/superchain/configs/sepolia/base.toml index 0377076f64..ff80bbf7aa 100755 --- a/superchain/configs/sepolia/base.toml +++ b/superchain/configs/sepolia/base.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 10 diff --git a/superchain/configs/sepolia/creator-chain-testnet.toml b/superchain/configs/sepolia/creator-chain-testnet.toml index d014b33e3a..e677bab261 100755 --- a/superchain/configs/sepolia/creator-chain-testnet.toml +++ b/superchain/configs/sepolia/creator-chain-testnet.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/ethernity.toml b/superchain/configs/sepolia/ethernity.toml index 0965a9d6f5..3657a06376 100755 --- a/superchain/configs/sepolia/ethernity.toml +++ b/superchain/configs/sepolia/ethernity.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/ink.toml b/superchain/configs/sepolia/ink.toml index 9f191a04ac..0823aedd8b 100755 --- a/superchain/configs/sepolia/ink.toml +++ b/superchain/configs/sepolia/ink.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/metal.toml b/superchain/configs/sepolia/metal.toml index 133e9b3375..e01d29a6ac 100755 --- a/superchain/configs/sepolia/metal.toml +++ b/superchain/configs/sepolia/metal.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/mode.toml b/superchain/configs/sepolia/mode.toml index ae3d079912..4831618ad6 100755 --- a/superchain/configs/sepolia/mode.toml +++ b/superchain/configs/sepolia/mode.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/op.toml b/superchain/configs/sepolia/op.toml index e3bcdc6e05..9ca3348d43 100755 --- a/superchain/configs/sepolia/op.toml +++ b/superchain/configs/sepolia/op.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/soneium-minato.toml b/superchain/configs/sepolia/soneium-minato.toml index a9baf1edcf..72056d8d03 100755 --- a/superchain/configs/sepolia/soneium-minato.toml +++ b/superchain/configs/sepolia/soneium-minato.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 1800 granite_time = 1730106000 # Mon 28 Oct 2024 09:00:00 UTC holocene_time = 1734685200 # Fri 20 Dec 2024 09:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/superchain.toml b/superchain/configs/sepolia/superchain.toml index f05cecb3c3..15c6155ea9 100644 --- a/superchain/configs/sepolia/superchain.toml +++ b/superchain/configs/sepolia/superchain.toml @@ -9,8 +9,8 @@ ecotone_time = 1708534800 # Wed 21 Feb 2024 17:00:00 UTC fjord_time = 1716998400 # Wed 29 May 2024 16:00:00 UTC granite_time = 1723478400 # Mon Aug 12 16:00:00 UTC 2024 holocene_time = 1732633200 # Tue Nov 26 15:00:00 UTC 2024 - pectra_blob_schedule_time = 1742486400 # Thu Mar 20 16:00:00 UTC 2025 +isthmus_time = 1744905600 # Thu Apr 17 16:00:00 UTC 2025 [l1] chain_id = 11155111 diff --git a/superchain/configs/sepolia/unichain.toml b/superchain/configs/sepolia/unichain.toml index 8cbd1c064f..677cda2c31 100755 --- a/superchain/configs/sepolia/unichain.toml +++ b/superchain/configs/sepolia/unichain.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC holocene_time = 1734559200 # Wed 18 Dec 2024 22:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/sepolia/zora.toml b/superchain/configs/sepolia/zora.toml index 44cee81d4d..3249dbb761 100755 --- a/superchain/configs/sepolia/zora.toml +++ b/superchain/configs/sepolia/zora.toml @@ -20,6 +20,7 @@ max_sequencer_drift = 600 granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 6 From 4561af7559a7487f118221181881fc3f7d0171b1 Mon Sep 17 00:00:00 2001 From: Anirudh Makhana <67134217+anirudhmakhana@users.noreply.github.com> Date: Tue, 1 Apr 2025 01:09:27 +0700 Subject: [PATCH 16/55] Lisk sepolia: superchain config update (#955) * [update]: lisk sepolia timestamps * [fix]: standardize unix timestamp to human * [update]: superchain_time * run just codegen * update lisk-sepolia to include Isthmus, fix codegen --------- Co-authored-by: Sebastian Stammler --- CHAINS.md | 2 +- superchain/configs/sepolia/lisk.toml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHAINS.md b/CHAINS.md index 752d330fc8..893bf1d90a 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -46,7 +46,7 @@ | Ethernity Testnet | ❌ | ✅ | https://testnet.ernscan.io | `https://testnet.ethernitychain.io` | `https://testnet.ethernitychain.io` | | Funki Sepolia Testnet | ❌ | ❌ | https://sepolia-sandbox.funkichain.com/ | `https://funki-testnet.alt.technology` | `https://funki-testnet.alt.technology` | | Ink Sepolia | ✅ | ✅ | https://explorer-sepolia.inkonchain.com | `https://rpc-gel-sepolia.inkonchain.com` | `https://rpc-gel-sepolia.inkonchain.com` | -| Lisk Sepolia Testnet | ❌ | ❌ | https://sepolia-blockscout.lisk.com | `https://rpc.sepolia-api.lisk.com` | `https://rpc.sepolia-api.lisk.com` | +| Lisk Sepolia Testnet | ❌ | ✅ | https://sepolia-blockscout.lisk.com | `https://rpc.sepolia-api.lisk.com` | `https://rpc.sepolia-api.lisk.com` | | Metal L2 Testnet | ✅ | ✅ | https://testnet.explorer.metall2.com | `https://testnet.rpc.metall2.com` | `https://testnet.rpc.metall2.com` | | Mode Testnet | ✅ | ✅ | https://sepolia.explorer.mode.network | `https://sepolia.mode.network` | `https://sepolia.mode.network` | | OP Sepolia Testnet | ✅ | ✅ | https://sepolia-optimistic.etherscan.io | `https://sepolia.optimism.io` | `https://sepolia-sequencer.optimism.io` | diff --git a/superchain/configs/sepolia/lisk.toml b/superchain/configs/sepolia/lisk.toml index a2747dafa8..302dfd7ece 100755 --- a/superchain/configs/sepolia/lisk.toml +++ b/superchain/configs/sepolia/lisk.toml @@ -4,6 +4,7 @@ sequencer_rpc = "https://rpc.sepolia-api.lisk.com" explorer = "https://sepolia-blockscout.lisk.com" superchain_level = 1 governed_by_optimism = false +superchain_time = 1708534800 data_availability_type = "eth-da" chain_id = 4202 batch_inbox_addr = "0xff00000000000000000000000000000000004202" @@ -17,6 +18,9 @@ max_sequencer_drift = 600 ecotone_time = 1708534800 # Wed 21 Feb 2024 17:00:00 UTC fjord_time = 1716998400 # Wed 29 May 2024 16:00:00 UTC granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC + holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC + pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC + isthmus_time = 1744905600 # Thu 17 Apr 2025 16:00:00 UTC [optimism] eip1559_elasticity = 10 From 68f1478af31fc1d07814df1894b51638e3429a7b Mon Sep 17 00:00:00 2001 From: soyboy <85043086+sbvegan@users.noreply.github.com> Date: Mon, 31 Mar 2025 12:11:33 -0700 Subject: [PATCH 17/55] Update worldchain.toml (#941) adding pectra blob hardfork time Co-authored-by: Wazabie <48911235+Wazabie@users.noreply.github.com> --- superchain/configs/sepolia/worldchain.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/superchain/configs/sepolia/worldchain.toml b/superchain/configs/sepolia/worldchain.toml index 13030a8d7f..9faff4ff5b 100755 --- a/superchain/configs/sepolia/worldchain.toml +++ b/superchain/configs/sepolia/worldchain.toml @@ -18,6 +18,7 @@ max_sequencer_drift = 1800 fjord_time = 1721739600 # Tue 23 Jul 2024 13:00:00 UTC granite_time = 1726570800 # Tue 17 Sep 2024 11:00:00 UTC holocene_time = 1737633600 # Thu 23 Jan 2025 12:00:00 UTC + pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC [optimism] eip1559_elasticity = 10 From 877ef2c1dc37b3cdc083819b2acb3e86881711ff Mon Sep 17 00:00:00 2001 From: Delyan Dimitrov Date: Mon, 31 Mar 2025 22:15:50 +0300 Subject: [PATCH 18/55] Add new value for EIP-1559 elasticity for WorldChain Sepolia and Mainnet (#922) Co-authored-by: soyboy <85043086+sbvegan@users.noreply.github.com> --- superchain/configs/mainnet/worldchain.toml | 2 +- superchain/configs/sepolia/worldchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/superchain/configs/mainnet/worldchain.toml b/superchain/configs/mainnet/worldchain.toml index 45d5faf2d3..d2e1447d0c 100755 --- a/superchain/configs/mainnet/worldchain.toml +++ b/superchain/configs/mainnet/worldchain.toml @@ -20,7 +20,7 @@ max_sequencer_drift = 1800 holocene_time = 1738238400 # Thu 30 Jan 2025 12:00:00 UTC [optimism] - eip1559_elasticity = 10 + eip1559_elasticity = 2 eip1559_denominator = 50 eip1559_denominator_canyon = 250 diff --git a/superchain/configs/sepolia/worldchain.toml b/superchain/configs/sepolia/worldchain.toml index 9faff4ff5b..3133ee59c7 100755 --- a/superchain/configs/sepolia/worldchain.toml +++ b/superchain/configs/sepolia/worldchain.toml @@ -21,7 +21,7 @@ max_sequencer_drift = 1800 pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC [optimism] - eip1559_elasticity = 10 + eip1559_elasticity = 2 eip1559_denominator = 50 eip1559_denominator_canyon = 250 From f86350dcf5f8c9e439fac0c0eb2d1bd3078b28b8 Mon Sep 17 00:00:00 2001 From: ControlCplusControlV <44706811+ControlCplusControlV@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:46:01 -0400 Subject: [PATCH 19/55] Make opcm checksum (#958) --- validation/standard/standard-versions-sepolia.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/validation/standard/standard-versions-sepolia.toml b/validation/standard/standard-versions-sepolia.toml index 239b2cc039..db7f813e8e 100644 --- a/validation/standard/standard-versions-sepolia.toml +++ b/validation/standard/standard-versions-sepolia.toml @@ -19,7 +19,7 @@ l1_cross_domain_messenger = { version = "2.6.0", implementation_address = "0x5d5 l1_erc721_bridge = { version = "2.4.0", implementation_address = "0x7ae1d3bd877a4c5ca257404ce26be93a02c98013" } l1_standard_bridge = { version = "2.3.0", implementation_address = "0x0b09ba359a106c9ea3b181cbc5f394570c7d2a7a" } optimism_mintable_erc20_factory = { version = "1.10.1", implementation_address = "0x5493f4677A186f64805fe7317D6993ba4863988F" } -op_contracts_manager = { version = "1.9.0", address = "0xfbceed4de885645fbded164910e10f52febfab35" } +op_contracts_manager = { version = "1.9.0", address = "0xfBceeD4DE885645fBdED164910E10F52fEBFAB35" } superchain_config = { version = "1.2.0", implementation_address = "0x4da82a327773965b8d4D85Fa3dB8249b387458E7" } protocol_versions = { version = "1.1.0", implementation_address = "0x37E15e4d6DFFa9e5E320Ee1eC036922E563CB76C" } From a8679650ae8f489f85a1f55963f270d9a00a742f Mon Sep 17 00:00:00 2001 From: winnsterx <46658657+winnsterx@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:12:09 -0700 Subject: [PATCH 20/55] Update Unichain Sepolia SuperchainConfig (#959) * modify unichain superchain config value according to https://github.com/ethereum-optimism/superchain-ops/pull/760/files * run codegen --- superchain/configs/sepolia/unichain.toml | 2 +- superchain/extra/addresses/addresses.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/superchain/configs/sepolia/unichain.toml b/superchain/configs/sepolia/unichain.toml index 677cda2c31..09067eee73 100755 --- a/superchain/configs/sepolia/unichain.toml +++ b/superchain/configs/sepolia/unichain.toml @@ -59,7 +59,7 @@ max_sequencer_drift = 600 OptimismPortalProxy = "0x0d83dab629f0e0F9d36c0Cbc89B69a489f0751bD" SystemConfigProxy = "0xaeE94b9aB7752D3F7704bDE212c0C6A0b701571D" ProxyAdmin = "0x2BF403E5353A7a082ef6bb3Ae2Be3B866D8D3ea4" - SuperchainConfig = "0xe7e23eBa32A6FD2aC79dd5EC72FE7f6217b41BDC" + SuperchainConfig = "0xC2Be75506d5724086DEB7245bd260Cc9753911Be" AnchorStateRegistryProxy = "0xf971F1b0D80eb769577135b490b913825BfcF00B" DisputeGameFactoryProxy = "0xeff73e5aa3B9AEC32c659Aa3E00444d20a84394b" MIPS = "0x1cEc5b1954302F6FAf45515145C72d7f7266546c" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index 666340c9b9..4c9e5453eb 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -198,7 +198,7 @@ "Proposer": "0xA25B0eF1CC3ee12a0a167B5BF44dB1a9c166474e", "ProxyAdmin": "0x2BF403E5353A7a082ef6bb3Ae2Be3B866D8D3ea4", "ProxyAdminOwner": "0xd363339eE47775888Df411A163c586a8BdEA9dbf", - "SuperchainConfig": "0xe7e23eBa32A6FD2aC79dd5EC72FE7f6217b41BDC", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0xB6185370E3db2472EC7Ec4A2826954D2d4923B9f", "SystemConfigProxy": "0xaeE94b9aB7752D3F7704bDE212c0C6A0b701571D", "UnsafeBlockSigner": "0x565B71025Ab4de80AcA33c62E51439af56301493" From f420e28a7db0cc827dcb403e7af9bb24646ae9c5 Mon Sep 17 00:00:00 2001 From: George Knee Date: Thu, 3 Apr 2025 20:35:24 +0100 Subject: [PATCH 21/55] Update README.md (#961) --- validation/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/validation/README.md b/validation/README.md index b7b1d663e2..a05262ad0c 100644 --- a/validation/README.md +++ b/validation/README.md @@ -1,4 +1,3 @@ # validation -This directory contains the golang validation checks that chains run against. -The [validation_test.go](validation/validation_test.go) file is the entry point of the tests. It runs a different set of tests for each class of chain (Frontier, Standard Candidate and Standard). +This directory contains TOML files declaring standard configuration and contract versions, and Go bindings for these declarations. From 9dc8a7dfb8081291315d0c0ccf871f46c7753b63 Mon Sep 17 00:00:00 2001 From: Matthew Slipper Date: Thu, 3 Apr 2025 13:48:54 -0600 Subject: [PATCH 22/55] Add Boba Sepolia (#962) * Add Boba Sepolia * swap superchain level * Just sync-staging * add boba genesis exception --------- Co-authored-by: cby3149 Co-authored-by: Wazabie <48911235+Wazabie@users.noreply.github.com> --- CHAINS.md | 1 + chainList.json | 18 ++++++ chainList.toml | 13 ++++ ops/cmd/check_genesis_integrity/main.go | 5 +- superchain/configs/sepolia/boba.toml | 60 ++++++++++++++++++ superchain/extra/addresses/addresses.json | 19 ++++++ .../extra/genesis/sepolia/boba.json.zst | Bin 0 -> 89 bytes 7 files changed, 114 insertions(+), 2 deletions(-) create mode 100755 superchain/configs/sepolia/boba.toml create mode 100755 superchain/extra/genesis/sepolia/boba.json.zst diff --git a/CHAINS.md b/CHAINS.md index 893bf1d90a..93f0798457 100755 --- a/CHAINS.md +++ b/CHAINS.md @@ -41,6 +41,7 @@ |---|---|---|---|---|---| | Base Sepolia Testnet | ❌ | ✅ | https://sepolia-explorer.base.org | `https://sepolia.base.org` | `https://sepolia-sequencer.base.org` | | Binary Sepolia | ❌ | ❌ | https://explorer.sepolia.thebinaryholdings.com | `https://rpc.testnet.thebinaryholdings.com` | `https://sequencer.rpc.bnry.testnet.zeeve.net` | +| Boba Sepolia Testnet | ❌ | ❌ | https://testnet.bobascan.com | `https://sepolia.boba.network` | `https://sepolia.boba.network` | | Creator Chain Testnet | ❌ | ✅ | https://explorer.creatorchain.io | `https://rpc.creatorchain.io` | `https://rpc.creatorchain.io` | | Cyber Testnet | ❌ | ❌ | https://testnet.cyberscan.co/ | `https://rpc.testnet.cyber.co` | `https://cyber.alt.technology/` | | Ethernity Testnet | ❌ | ✅ | https://testnet.ernscan.io | `https://testnet.ethernitychain.io` | `https://testnet.ethernitychain.io` | diff --git a/chainList.json b/chainList.json index 0a4146994b..5b0225a653 100755 --- a/chainList.json +++ b/chainList.json @@ -597,6 +597,24 @@ }, "gasPayingToken": "0x46d878bf7BF62Ec542953CB89Ac0bF58d991181e" }, + { + "name": "Boba Sepolia Testnet", + "identifier": "sepolia/boba", + "chainId": 28882, + "rpc": [ + "https://sepolia.boba.network" + ], + "explorers": [ + "https://testnet.bobascan.com" + ], + "superchainLevel": 0, + "governedByOptimism": false, + "dataAvailabilityType": "eth-da", + "parent": { + "type": "L2", + "chain": "sepolia" + } + }, { "name": "Creator Chain Testnet", "identifier": "sepolia/creator-chain-testnet", diff --git a/chainList.toml b/chainList.toml index fb6745e379..a24b9f739d 100755 --- a/chainList.toml +++ b/chainList.toml @@ -431,6 +431,19 @@ type = "L2" chain = "sepolia" +[[chains]] + name = "Boba Sepolia Testnet" + identifier = "sepolia/boba" + chain_id = 28882 + rpc = ["https://sepolia.boba.network"] + explorers = ["https://testnet.bobascan.com"] + superchain_level = 0 + governed_by_optimism = false + data_availability_type = "eth-da" + [chains.parent] + type = "L2" + chain = "sepolia" + [[chains]] name = "Creator Chain Testnet" identifier = "sepolia/creator-chain-testnet" diff --git a/ops/cmd/check_genesis_integrity/main.go b/ops/cmd/check_genesis_integrity/main.go index 24026e61e7..b71df7d5e5 100644 --- a/ops/cmd/check_genesis_integrity/main.go +++ b/ops/cmd/check_genesis_integrity/main.go @@ -35,8 +35,9 @@ func mainErr() error { } for _, cfg := range cfgs { - if cfg.ShortName == "op" { - output.WriteWarn("skipping op %s - chain was migrated from a legacy state", superchain) + if (cfg.ShortName == "op" && superchain == "mainnet") || + (cfg.ShortName == "boba" && superchain == "sepolia") { + output.WriteWarn("skipping %s %s - chain was migrated from a legacy state", cfg.ShortName, superchain) continue } diff --git a/superchain/configs/sepolia/boba.toml b/superchain/configs/sepolia/boba.toml new file mode 100755 index 0000000000..416e37d215 --- /dev/null +++ b/superchain/configs/sepolia/boba.toml @@ -0,0 +1,60 @@ +name = "Boba Sepolia Testnet" +public_rpc = "https://sepolia.boba.network" +sequencer_rpc = "https://sepolia.boba.network" +explorer = "https://testnet.bobascan.com" +superchain_level = 0 +governed_by_optimism = false +data_availability_type = "eth-da" +chain_id = 28882 +batch_inbox_addr = "0xfFf0000000000000000000000000000000028882" +block_time = 2 +seq_window_size = 3600 +max_sequencer_drift = 600 + +[hardforks] + canyon_time = 1705600788 # Thu 18 Jan 2024 17:59:48 UTC + delta_time = 1709078400 # Wed 28 Feb 2024 00:00:00 UTC + ecotone_time = 1709078400 # Wed 28 Feb 2024 00:00:00 UTC + fjord_time = 1722297600 # Tue 30 Jul 2024 00:00:00 UTC + granite_time = 1726470000 # Mon 16 Sep 2024 07:00:00 UTC + holocene_time = 1736150400 # Mon 6 Jan 2025 08:00:00 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1705600788 + [genesis.l1] + hash = "0x632d8caedbfd573e09c1b49134bd5147147e0904e0f04eba15c662be0258f517" + number = 5109513 + [genesis.l2] + hash = "0x097654c4c932c97808933b42179388f7bbcefaed3bd93fdf69157e19f1deea0e" + number = 511 + [genesis.system_config] + batcherAddress = "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8" + overhead = "0x0000000000000000000000000000000000000000000000000000000000000834" + scalar = "0x00000000000000000000000000000000000000000000000000000000000f4240" + gasLimit = 30000000 + +[roles] + SystemConfigOwner = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + ProxyAdminOwner = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + Guardian = "0x66930dd34EA64bD4B9F32464e363511b49966C5D" + Challenger = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + Proposer = "0x0AB197DdeE146c01A0C6Cadf3d91fbb4340A999A" + UnsafeBlockSigner = "0x274a47436C7C896827633805d924d41BBa1D19e9" + BatchSubmitter = "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8" + +[addresses] + AddressManager = "0xC62C429390B7bCE9960fa647d5556CA7238168AB" + L1CrossDomainMessengerProxy = "0x9253E76E2fA3f72aF18e08914b3528F725779495" + L1ERC721BridgeProxy = "0x13B397A08322973B45e063F29746Fb278f189916" + L1StandardBridgeProxy = "0x244d7b81EE3949788Da5F1178D911e83bA24E157" + L2OutputOracleProxy = "0xdBdb238185f9BB40f742aE249f9a083381EC39eC" + OptimismMintableERC20FactoryProxy = "0xE6ebece6936528804BB4c43AdcA10c2623919852" + OptimismPortalProxy = "0xB079E6FA9B3eb072fEbf7F746044834eab308dB6" + SystemConfigProxy = "0xfDC9bCE032cEF55a71b4fde9B9a2198ad1551965" + ProxyAdmin = "0x66930dd34EA64bD4B9F32464e363511b49966C5D" + SuperchainConfig = "0x029A23c6E9D3026f984cd1Fd9C47906e4F5327F3" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index 4c9e5453eb..4cee5330a7 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -491,6 +491,25 @@ "SystemConfigProxy": "0x6E99cdE188DAAFeEcb6eD8AC28B98dE4c8eE5D6C", "UnsafeBlockSigner": "0xcbdD38Ce74BA96F0ae3D2E608DA96Ec744c80A7E" }, + "28882": { + "AddressManager": "0xC62C429390B7bCE9960fa647d5556CA7238168AB", + "BatchSubmitter": "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8", + "Challenger": "0x17070B4AF21625106E7971983Aa524f59EA40c57", + "Guardian": "0x66930dd34EA64bD4B9F32464e363511b49966C5D", + "L1CrossDomainMessengerProxy": "0x9253E76E2fA3f72aF18e08914b3528F725779495", + "L1ERC721BridgeProxy": "0x13B397A08322973B45e063F29746Fb278f189916", + "L1StandardBridgeProxy": "0x244d7b81EE3949788Da5F1178D911e83bA24E157", + "L2OutputOracleProxy": "0xdBdb238185f9BB40f742aE249f9a083381EC39eC", + "OptimismMintableERC20FactoryProxy": "0xE6ebece6936528804BB4c43AdcA10c2623919852", + "OptimismPortalProxy": "0xB079E6FA9B3eb072fEbf7F746044834eab308dB6", + "Proposer": "0x0AB197DdeE146c01A0C6Cadf3d91fbb4340A999A", + "ProxyAdmin": "0x66930dd34EA64bD4B9F32464e363511b49966C5D", + "ProxyAdminOwner": "0x17070B4AF21625106E7971983Aa524f59EA40c57", + "SuperchainConfig": "0x029A23c6E9D3026f984cd1Fd9C47906e4F5327F3", + "SystemConfigOwner": "0x17070B4AF21625106E7971983Aa524f59EA40c57", + "SystemConfigProxy": "0xfDC9bCE032cEF55a71b4fde9B9a2198ad1551965", + "UnsafeBlockSigner": "0x274a47436C7C896827633805d924d41BBa1D19e9" + }, "291": { "AddressManager": "0x87630a802a3789463eC4b00f89b27b1e9f6b92e9", "BatchSubmitter": "0xf8dB8Aba597fF36cCD16fECfbb1B816B3236E9b8", diff --git a/superchain/extra/genesis/sepolia/boba.json.zst b/superchain/extra/genesis/sepolia/boba.json.zst new file mode 100755 index 0000000000000000000000000000000000000000..0d4586099116c880ea0f82ddbc525184a1039181 GIT binary patch literal 89 zcmV-f0H*&awJ-fg0KE7nF699=0swNv4HB>c1K*mz$UdCw%p&C_tEs}7!T`{du@m+- vH!p`FWi%aVDn}vWy+GB;A7fUYC$N*#g@1Yk0u&G|V{NNc)3yo(uCR%v&TS^N literal 0 HcmV?d00001 From d21906379fe320ad775c980fec473933e117ae10 Mon Sep 17 00:00:00 2001 From: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> Date: Mon, 7 Apr 2025 10:34:34 -0400 Subject: [PATCH 23/55] chore: update monorepo import (include op-fetcher) (#966) --- ops/go.mod | 69 ++++------- ops/go.sum | 202 ++++++++++++--------------------- ops/internal/manage/staging.go | 2 +- ops/internal/report/all.go | 5 +- ops/internal/report/l2.go | 32 ++++-- ops/internal/report/l2_test.go | 23 ++-- 6 files changed, 131 insertions(+), 202 deletions(-) diff --git a/ops/go.mod b/ops/go.mod index 45e6d17ea7..97c06174f0 100644 --- a/ops/go.mod +++ b/ops/go.mod @@ -4,106 +4,83 @@ go 1.23.1 require ( github.com/BurntSushi/toml v1.4.0 - github.com/ethereum-optimism/optimism v1.10.1-0.20250119231617-e6277226d156 - github.com/ethereum/go-ethereum v1.14.12 - github.com/lmittmann/w3 v0.17.4 + github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d + github.com/ethereum/go-ethereum v1.15.3 + github.com/lmittmann/w3 v0.17.8 github.com/stretchr/testify v1.10.0 github.com/urfave/cli/v2 v2.27.5 ) require ( - github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20241225221610-a64f6a26aa8e + github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64 github.com/google/go-github/v68 v68.0.0 - github.com/klauspost/compress v1.17.11 + github.com/klauspost/compress v1.18.0 ) require ( - github.com/DataDog/zstd v1.5.6-0.20230824185856-869dae002e5e // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/VictoriaMetrics/fastcache v1.12.2 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/btcsuite/btcd v0.24.2 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cockroachdb/errors v1.11.3 // indirect - github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.3 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/consensys/bavard v0.1.13 // indirect - github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/consensys/bavard v0.1.27 // indirect + github.com/consensys/gnark-crypto v0.16.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c // indirect - github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect + github.com/crate-crypto/go-kzg-4844 v1.1.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 // indirect - github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20250115145553-996c7aba6565 // indirect github.com/ethereum/c-kzg-4844 v1.0.0 // indirect - github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 // indirect + github.com/ethereum/go-verkle v0.2.2 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gofrs/flock v0.8.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-bexpr v0.1.11 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.3.2 // indirect - github.com/huin/goupnp v1.3.0 // indirect - github.com/jackpal/go-nat-pmp v1.0.2 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mitchellh/pointerstructure v1.2.1 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/naoina/go-stringutil v0.1.0 // indirect + github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_golang v1.21.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/rs/cors v1.11.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/schollz/progressbar/v3 v3.18.0 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/supranational/blst v0.3.13 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect + github.com/supranational/blst v0.3.14 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect - golang.org/x/crypto v0.31.0 // indirect + golang.org/x/crypto v0.32.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/mod v0.21.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.29.0 // indirect golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect - golang.org/x/time v0.9.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect - gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect + golang.org/x/time v0.10.0 // indirect + google.golang.org/protobuf v1.36.3 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) -replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101412.0-rc.1 +replace github.com/ethereum/go-ethereum => github.com/ethereum-optimism/op-geth v1.101503.2-rc.5.0.20250401164435-02dfe8692a3c diff --git a/ops/go.sum b/ops/go.sum index de9b80c6c5..8beba88e2e 100644 --- a/ops/go.sum +++ b/ops/go.sum @@ -12,8 +12,8 @@ github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKS github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= -github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= +github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= @@ -45,34 +45,30 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= +github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.3 h1:GM5YY3Yb09KCGUQoyWdi3vsLErXHsmc3qRRWsX+tBqw= -github.com/cockroachdb/pebble v1.1.3/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= +github.com/cockroachdb/pebble v1.1.4 h1:5II1uEP4MyHLDnsrbv/EZ36arcb9Mxg3n+owhZ3GrG8= +github.com/cockroachdb/pebble v1.1.4/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= -github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= -github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= -github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/consensys/bavard v0.1.27 h1:j6hKUrGAy/H+gpNrpLU3I26n1yc+VMGmd6ID5+gAhOs= +github.com/consensys/bavard v0.1.27/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= +github.com/consensys/gnark-crypto v0.16.0 h1:8Dl4eYmUWK9WmlP1Bj6je688gBRJCJbT8Mw4KoTAawo= +github.com/consensys/gnark-crypto v0.16.0/go.mod h1:Ke3j06ndtPTVvo++PhGNgvm+lgpLvzbcE2MqljY7diU= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= -github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= -github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= -github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= +github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= +github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= +github.com/crate-crypto/go-kzg-4844 v1.1.0/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -89,37 +85,31 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3 github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z8veEq5ZO3DfIhZ7xgRP9WTc= github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= -github.com/ethereum-optimism/op-geth v1.101412.0-rc.1 h1:Un6Cnr4QkQx+s/Rp1iWvsBD+lIE1xZd8RKIKxGmChTk= -github.com/ethereum-optimism/op-geth v1.101412.0-rc.1/go.mod h1:lRTd6c45e98fA9Cm0c8SrtqiSNYtxUBBZo3ofJbQh5I= -github.com/ethereum-optimism/optimism v1.10.1-0.20250119231617-e6277226d156 h1:JIvz10NB1ToTiLyKhHZHHNuOuHtbvjbbZlwjASm8UpA= -github.com/ethereum-optimism/optimism v1.10.1-0.20250119231617-e6277226d156/go.mod h1:gooqC+mAy2VNLr2ToVFHSTO0TwwCUGu1tREmFkBhO0k= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20250115145553-996c7aba6565 h1:jhMVWUohS71nsNg8Q8d7DatiGpPocvUNGr/zP8a+79A= -github.com/ethereum-optimism/superchain-registry/superchain v0.0.0-20250115145553-996c7aba6565/go.mod h1:9feO8jcL5OZ1tvRjEfNAHz4Aggvd6373l+ZxmZZAyZs= -github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20241225221610-a64f6a26aa8e h1:LgBlPe5BoHx7bFf7pZH8mI1XXCk4/QE9PWy7gJ0Qvf8= -github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20241225221610-a64f6a26aa8e/go.mod h1:5fkx5lOi+eFqnVF52kKBIGOtjjkEWyD0HhYCT6zIRD8= +github.com/ethereum-optimism/op-geth v1.101503.2-rc.5.0.20250401164435-02dfe8692a3c h1:2uU1Jx+wuqGtWR/qsZrmB+jfR+/hslowPS11bvBAda4= +github.com/ethereum-optimism/op-geth v1.101503.2-rc.5.0.20250401164435-02dfe8692a3c/go.mod h1:QUo3fn+45vWqJWzJW+rIzRHUV7NmhhHLPdI87mAn1M8= +github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d h1:SWUqPFKjoh3WfAG2HaKNjwkwzxJ3Jm/ssvYQAF6AbY0= +github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d/go.mod h1:Pf1bUvfjbot5RyCmsfPKFR0kcBCT/HZvSlISRtB1+KE= +github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64 h1:teDhU4h4ryaE8rSBl+vJJiwKHjxdnnHPkKZ9iNr2R8k= +github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64/go.mod h1:NZ816PzLU1TLv1RdAvYAb6KWOj4Zm5aInT0YpDVml2Y= github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9 h1:8NfxH2iXvJ60YRB8ChToFTUzl8awsc3cJ8CbLjGIl/A= -github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= +github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= +github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -127,8 +117,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -136,16 +124,14 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github/v68 v68.0.0 h1:ZW57zeNZiXTdQ16qrDiZ0k6XucrxZ2CGmoTvcCyQG6s= github.com/google/go-github/v68 v68.0.0/go.mod h1:K9HAUBovM2sLwM408A18h+wd9vqdLOEqTUCbnRIcx68= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8 h1:Ep/joEub9YwcjRY6ND3+Y/w0ncE540RtGatVhtZL0/Q= github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -170,36 +156,37 @@ github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXei github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/lmittmann/w3 v0.17.4 h1:nHaX3EymuMoup5eQ/qpU4YVR67boSDGewGQt90DgJng= -github.com/lmittmann/w3 v0.17.4/go.mod h1:+NTGtk54BK1W7572qRaiZ9ywVSaKeObg490bUVvKjAs= +github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= +github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= +github.com/lmittmann/w3 v0.17.8 h1:Rv0xCIvmxyNOZrr24pTphhgE9WUrgVOMUkRBwATq42s= +github.com/lmittmann/w3 v0.17.8/go.mod h1:FAT1oPIK/NTHE2g8k9z0zOoAQ+Fl0pB2fsMQLYurzaE= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.1 h1:ZhBBeX8tSlRpu/FFhXH4RC4OJzFlqsQhoHZAz4x7TIw= @@ -209,65 +196,67 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= +github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA= +github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= -github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= +github.com/supranational/blst v0.3.14/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= @@ -279,42 +268,27 @@ github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2n github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= +github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= +github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -324,69 +298,43 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= -golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= +golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= +google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= diff --git a/ops/internal/manage/staging.go b/ops/internal/manage/staging.go index ad318176e4..632072faca 100644 --- a/ops/internal/manage/staging.go +++ b/ops/internal/manage/staging.go @@ -73,7 +73,7 @@ func InflateChainConfig(st *state.State) (*config.StagedChain, error) { chainState := st.Chains[0] cfg.Genesis = config.Genesis{ - L2Time: chainState.StartBlock.Time, + L2Time: uint64(chainState.StartBlock.Time), L1: config.GenesisRef{ Hash: rollup.Genesis.L1.Hash, Number: rollup.Genesis.L1.Number, diff --git a/ops/internal/report/all.go b/ops/internal/report/all.go index 536190ae2d..740970902d 100644 --- a/ops/internal/report/all.go +++ b/ops/internal/report/all.go @@ -37,14 +37,11 @@ func ScanAll( return report } - afacts, cleanup, err := artifacts.Download(ctx, chainCfg.DeploymentL2ContractsVersion, artifacts.NoopDownloadProgressor) + afacts, err := artifacts.Download(ctx, chainCfg.DeploymentL2ContractsVersion, artifacts.NoopProgressor(), "") if err != nil { report.L2Err = fmt.Errorf("error downloading L2 artifacts: %w", err) return report } - defer func() { - _ = cleanup() - }() report.L2, err = ScanL2( startBlock, diff --git a/ops/internal/report/l2.go b/ops/internal/report/l2.go index f5c9bd3488..d46b203881 100644 --- a/ops/internal/report/l2.go +++ b/ops/internal/report/l2.go @@ -9,12 +9,14 @@ import ( "github.com/ethereum-optimism/optimism/op-chain-ops/foundry" "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/broadcaster" - opcmv170 "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/opcm/v170" + "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/opcm" "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/state" "github.com/ethereum-optimism/optimism/op-deployer/pkg/env" + "github.com/ethereum-optimism/optimism/op-service/eth" "github.com/ethereum-optimism/superchain-registry/ops/internal/config" "github.com/ethereum-optimism/superchain-registry/validation" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" @@ -28,8 +30,8 @@ func ScanL2( ) (*L2Report, error) { var report L2Report - if !chainCfg.DeploymentL2ContractsVersion.Canonical { - return nil, errors.New("contracts version is not canonical") + if !chainCfg.DeploymentL2ContractsVersion.IsTag() { + return nil, errors.New("contracts version is not a tag") } report.Release = chainCfg.DeploymentL2ContractsVersion.Tag @@ -66,7 +68,7 @@ func DiffL2Genesis( } standardIntent := &state.Intent{ - ConfigType: state.IntentConfigTypeStrict, + ConfigType: state.IntentTypeStandard, FundDevAccounts: false, UseInterop: false, L1ContractsLocator: chainCfg.DeploymentL1ContractsVersion, @@ -114,8 +116,13 @@ func DiffL2Genesis( } standardChainState := &state.ChainState{ - ID: common.BigToHash(new(big.Int).SetUint64(chainCfg.ChainID)), - StartBlock: startBlock, + ID: common.BigToHash(new(big.Int).SetUint64(chainCfg.ChainID)), + StartBlock: &state.L1BlockRefJSON{ + Hash: startBlock.Hash(), + ParentHash: startBlock.ParentHash, + Number: hexutil.Uint64(startBlock.Number.Uint64()), + Time: hexutil.Uint64(startBlock.Time), + }, L1StandardBridgeProxyAddress: common.Address(*chainCfg.Addresses.L1StandardBridgeProxy), L1CrossDomainMessengerProxyAddress: common.Address(*chainCfg.Addresses.L1CrossDomainMessengerProxy), L1ERC721BridgeProxyAddress: common.Address(*chainCfg.Addresses.L1ERC721BridgeProxy), @@ -140,15 +147,15 @@ func DiffL2Genesis( return standardHash, nil, fmt.Errorf("failed to create script host: %w", err) } - if err := opcmv170.L2Genesis(host, &opcmv170.L2GenesisInput{ - L1Deployments: opcmv170.L1Deployments{ + if err := opcm.L2Genesis(host, &opcm.L2GenesisInput{ + L1Deployments: opcm.L1Deployments{ L1CrossDomainMessengerProxy: common.Address(*chainCfg.Addresses.L1CrossDomainMessengerProxy), L1StandardBridgeProxy: common.Address(*chainCfg.Addresses.L1StandardBridgeProxy), L1ERC721BridgeProxy: common.Address(*chainCfg.Addresses.L1ERC721BridgeProxy), }, L2Config: standardDeployConfig.L2InitializationConfig, }); err != nil { - return standardHash, nil, fmt.Errorf("failed to call v170 L2Genesis script: %w", err) + return standardHash, nil, fmt.Errorf("failed to call L2Genesis script: %w", err) } host.Wipe(deployer) @@ -158,7 +165,12 @@ func DiffL2Genesis( return standardHash, nil, fmt.Errorf("failed to dump state: %w", err) } - standardGenesis, err := genesis.BuildL2Genesis(&standardDeployConfig, standardAllocs, startBlock) + standardGenesis, err := genesis.BuildL2Genesis(&standardDeployConfig, standardAllocs, ð.BlockRef{ + Hash: startBlock.Hash(), + Number: startBlock.Number.Uint64(), + ParentHash: startBlock.ParentHash, + Time: startBlock.Time, + }) if err != nil { return standardHash, nil, fmt.Errorf("failed to build standard genesis: %w", err) } diff --git a/ops/internal/report/l2_test.go b/ops/internal/report/l2_test.go index f61b100ca8..3dab414473 100644 --- a/ops/internal/report/l2_test.go +++ b/ops/internal/report/l2_test.go @@ -28,13 +28,15 @@ func TestScanL2(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() - afacts, cleanup, err := artifacts.Download(ctx, artifacts.MustNewLocatorFromURL("tag://"+string(validation.Semver170)), artifacts.NoopDownloadProgressor) + downloadDir := t.TempDir() + afacts, err := artifacts.Download(ctx, artifacts.MustNewLocatorFromURL("tag://"+string(validation.Semver170)), artifacts.NoopProgressor(), downloadDir) require.NoError(t, err) t.Cleanup(func() { - require.NoError(t, cleanup()) + require.NoError(t, os.RemoveAll(downloadDir)) }) testAddr := common.HexToAddress("0x4200000000000000000000000000000000000000") + standardGenesisHash := common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae") tests := []struct { name string @@ -49,17 +51,10 @@ func TestScanL2(t *testing.T) { wantReport: L2Report{ Release: string(validation.Semver170), ProvidedGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), - StandardGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), + StandardGenesisHash: standardGenesisHash, AccountDiffs: []AccountDiff{}, }, }, - { - name: "non-canonical L2 contracts locator", - setup: func(_ *types.Header, sc *config.StagedChain, _ *core.Genesis) { - sc.DeploymentL2ContractsVersion.Canonical = false - }, - wantErr: "contracts version is not canonical", - }, { name: "different account balance", setup: func(_ *types.Header, sc *config.StagedChain, genesis *core.Genesis) { @@ -69,7 +64,7 @@ func TestScanL2(t *testing.T) { wantReport: L2Report{ Release: string(validation.Semver170), ProvidedGenesisHash: common.HexToHash("0x42c3817d6176e7764ad7920049859cd97fe217394c3f45171355b8d5b392ae52"), - StandardGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), + StandardGenesisHash: standardGenesisHash, AccountDiffs: []AccountDiff{ { Address: testAddr, @@ -95,7 +90,7 @@ func TestScanL2(t *testing.T) { wantReport: L2Report{ Release: string(validation.Semver170), ProvidedGenesisHash: common.HexToHash("0x233c30d682b8c318aa6a8be73e4123076b40618b9943f517f93c67eecd115319"), - StandardGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), + StandardGenesisHash: standardGenesisHash, AccountDiffs: []AccountDiff{ { Address: common.HexToAddress("0x111"), @@ -124,7 +119,7 @@ func TestScanL2(t *testing.T) { wantReport: L2Report{ Release: string(validation.Semver170), ProvidedGenesisHash: common.HexToHash("0x34ef89a965ff95832f1de620ec385fc4191f695dfffe20ca1595f33586f24374"), - StandardGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), + StandardGenesisHash: standardGenesisHash, AccountDiffs: []AccountDiff{ { Address: testAddr, @@ -147,7 +142,7 @@ func TestScanL2(t *testing.T) { wantReport: L2Report{ Release: string(validation.Semver170), ProvidedGenesisHash: common.HexToHash("0xf80d466dc95792601043a3d769d3d018e0cf5a71386cceab07cc2cd4a94a5f55"), - StandardGenesisHash: common.HexToHash("0xcd901673f97d59259fa09b0b01b8787f5d25d9f1808566990673519be65cc3ae"), + StandardGenesisHash: standardGenesisHash, AccountDiffs: []AccountDiff{ { Address: common.HexToAddress("0x4200000000000000000000000000000000000043"), From fb900358ab5016de86f37a23265bd94ce927c9c0 Mon Sep 17 00:00:00 2001 From: Adrian Sutton Date: Tue, 8 Apr 2025 00:45:45 +1000 Subject: [PATCH 24/55] Add v1.6.0-rc.1 prestate (#965) --- validation/standard/standard-prestates.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/validation/standard/standard-prestates.toml b/validation/standard/standard-prestates.toml index b16316b0ea..7aeefac26b 100644 --- a/validation/standard/standard-prestates.toml +++ b/validation/standard/standard-prestates.toml @@ -1,5 +1,13 @@ latest_stable = "1.5.0" -latest_rc = "1.5.1-rc.1" +latest_rc = "1.6.0-rc.1" + +[[prestates."1.6.0-rc.1"]] +type = "cannon32" +hash = "0x03526dfe02ab00a178e0ab77f7539561aaf5b5e3b46cd3be358f1e501b06d8a9" + +[[prestates."1.6.0-rc.1"]] +type = "cannon64" +hash = "0x03394563dd4a36e95e6d51ce7267ecceeb05fad23e68d2f9eed1affa73e5641a" [[prestates."1.5.1-rc.1"]] type = "cannon32" From 84838da8305c55bdd28c0eea1fd4fd65c097e296 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Wed, 9 Apr 2025 21:03:44 +0200 Subject: [PATCH 25/55] =?UTF-8?q?Revert=20"Add=20new=20value=20for=20EIP-1?= =?UTF-8?q?559=20elasticity=20for=20WorldChain=20Sepolia=20and=20Main?= =?UTF-8?q?=E2=80=A6"=20(#968)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 877ef2c1dc37b3cdc083819b2acb3e86881711ff. --- superchain/configs/mainnet/worldchain.toml | 2 +- superchain/configs/sepolia/worldchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/superchain/configs/mainnet/worldchain.toml b/superchain/configs/mainnet/worldchain.toml index d2e1447d0c..45d5faf2d3 100755 --- a/superchain/configs/mainnet/worldchain.toml +++ b/superchain/configs/mainnet/worldchain.toml @@ -20,7 +20,7 @@ max_sequencer_drift = 1800 holocene_time = 1738238400 # Thu 30 Jan 2025 12:00:00 UTC [optimism] - eip1559_elasticity = 2 + eip1559_elasticity = 10 eip1559_denominator = 50 eip1559_denominator_canyon = 250 diff --git a/superchain/configs/sepolia/worldchain.toml b/superchain/configs/sepolia/worldchain.toml index 3133ee59c7..9faff4ff5b 100755 --- a/superchain/configs/sepolia/worldchain.toml +++ b/superchain/configs/sepolia/worldchain.toml @@ -21,7 +21,7 @@ max_sequencer_drift = 1800 pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC [optimism] - eip1559_elasticity = 2 + eip1559_elasticity = 10 eip1559_denominator = 50 eip1559_denominator_canyon = 250 From 5dc054cdf72b8e4b06238f1d35de1c8348a323f5 Mon Sep 17 00:00:00 2001 From: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:20:59 -0400 Subject: [PATCH 26/55] ops: integrate op-fetcher (#951) * ops: integrate op-fetcher * use L1ProxyAdminOwner instead of OpChainProxyAdminOwner * use cmd/codegen to wrap fetch_onchain and codegen_syncer * revert .gitignore change * refactor CodegenSyncer and fix all ops tests * fetch_onchain: remove unnecessary abstractions * add tests for new helper functions * circleci: add daily-codegen-sync job * UpdateChainList handle new chain addition * update op-fetcher import: use pointer for FaultProofsStatus * go mod tidy * codegen: chain-ids flag is optional comma separated list * remove unused helper function * circleci: update check-codegen job * circleci: fix codegen-sync-all reference * transform op-fetcher proofs struct to unique chainList struct * remove 'just codegen' (needs args now) * circleci: remove daily codegen-sync-all * rebase and revert unnecessary changes * simplify zero-address comparison * pass context from cli handler instead of creating one in helpers * use uint64 for chainId everywhere except cli handlers * remove unused FindChainConfig. Add FindChainConfigs tests * add FS helpers for chainList, CHAINS.md files * remove hardcoded SuperchainIds map * remove FindChainConfigs, add Superchain field to DiskChainConfig * use helper to encapsulate common ChecksummedAddress Unmarshal code * add paths.EnsureDir helper * codegen: add optional superchains flag * mise: add yq (for usage in ci) * cleanup log messages --- .circleci/config.yml | 74 ++++- justfile | 2 - mise.toml | 1 + ops/cmd/codegen/main.go | 89 +++++- ops/cmd/sync_staging/main.go | 25 +- ops/go.mod | 4 +- ops/go.sum | 4 +- ops/internal/config/address.go | 57 +++- ops/internal/config/chain.go | 100 +++++-- ops/internal/config/chain_list.go | 5 + ops/internal/config/superchain.go | 61 +++- ops/internal/manage/codegen.go | 274 ++++++++++++------ ops/internal/manage/codegen_test.go | 268 ++++++++++++++--- ops/internal/manage/collect.go | 21 +- ops/internal/manage/collect_test.go | 14 +- ops/internal/manage/fetch_onchain.go | 157 ++++++++++ ops/internal/manage/fetch_onchain_test.go | 64 ++++ .../{expected-chains.md => CHAINS.md} | 0 ...expected-chainList.json => chainList.json} | 0 ...expected-chainList.toml => chainList.toml} | 0 .../superchain/extra/addresses/.gitkeep | 0 .../extra/addresses/addresses.json} | 1 - ops/internal/paths/paths.go | 46 ++- 23 files changed, 1072 insertions(+), 195 deletions(-) create mode 100644 ops/internal/manage/fetch_onchain.go create mode 100644 ops/internal/manage/fetch_onchain_test.go rename ops/internal/manage/testdata/{expected-chains.md => CHAINS.md} (100%) rename ops/internal/manage/testdata/{expected-chainList.json => chainList.json} (100%) rename ops/internal/manage/testdata/{expected-chainList.toml => chainList.toml} (100%) delete mode 100644 ops/internal/manage/testdata/superchain/extra/addresses/.gitkeep rename ops/internal/manage/testdata/{expected-addresses.json => superchain/extra/addresses/addresses.json} (99%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 238d824dc2..01f7652e27 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -124,6 +124,74 @@ jobs: cd ops go run ./cmd/print_staging_report/main.go + check-codegen: + circleci_ip_ranges: true + docker: + - image: <> + steps: + - utils/checkout-with-mise + - run: + name: check-codegen-for-changed-chains + command: | + set -e + + # Get list of changed files + CHANGED_FILES=$(git diff --name-only origin/main... | grep "^superchain/configs/.*\.toml$" || true) + if [ -z "$CHANGED_FILES" ]; then + echo "No .toml files changed in superchain/configs, skipping codegen check" + exit 0 + fi + + # Extract chain_ids from changed .toml files + CHAIN_IDS="" + CHAIN_ID_COUNT=0 + CHANGED_FILE_COUNT=0 + + for file in $CHANGED_FILES; do + CHANGED_FILE_COUNT=$((CHANGED_FILE_COUNT + 1)) + # Use yq to extract chain_id from TOML + CHAIN_ID=$(yq -p=toml -o=json '.chain_id' "$file" | grep -v "null" | tr -d '"') + + if [ -n "$CHAIN_ID" ]; then + if [ -z "$CHAIN_IDS" ]; then + CHAIN_IDS="$CHAIN_ID" + else + CHAIN_IDS="$CHAIN_IDS,$CHAIN_ID" + fi + CHAIN_ID_COUNT=$((CHAIN_ID_COUNT + 1)) + echo "Found chain_id $CHAIN_ID in $file" + fi + done + echo "Found $CHAIN_ID_COUNT chain_ids in $CHANGED_FILE_COUNT files" + + cd ops + if [ "$CHAIN_ID_COUNT" -ne "$CHANGED_FILE_COUNT" ] && [ "$CHANGED_FILE_COUNT" -gt 0 ]; then + # This accounts for changes to superchain.toml files + echo "Running codegen for all chains\n" + go run ./cmd/codegen \ + --l1-rpc-urls="<< pipeline.parameters.sepolia_rpc_url >>,<< pipeline.parameters.mainnet_rpc_url >>" + else + echo "Running codegen for the following chain_ids: $CHAIN_IDS\n" + go run ./cmd/codegen \ + --l1-rpc-urls="<< pipeline.parameters.sepolia_rpc_url >>,<< pipeline.parameters.mainnet_rpc_url >>" \ + --chain-ids="$CHAIN_IDS" + fi + + if [ -n "$(git status --porcelain)" ] ; then + echo "\n❌ Changes detected after running codegen. Run the following command locally and commit the changes:\n" + echo "go run ./cmd/codegen \\" + # Show the appropriate command flags based on which mode was run + if [ "$CHAIN_ID_COUNT" -ne "$CHANGED_FILE_COUNT" ] && [ "$CHANGED_FILE_COUNT" -gt 0 ]; then + echo " --l1-rpc-urls=\"\"" + else + echo " --l1-rpc-urls=\"\" \\" + echo " --chain-ids=\"$CHAIN_IDS\"" + fi + exit 1 + else + echo "\n✅ All codegen files are up to date" + fi + workflows: main: jobs: @@ -136,13 +204,12 @@ workflows: - run-tool: name: check-genesis-integrity tool: check_genesis_integrity - - run-tool: + - check-codegen: name: check-codegen - tool: codegen - check_diff: true - run-tool: name: check-staging-synced tool: sync_staging + args: --l1-rpc-urls="<< pipeline.parameters.sepolia_rpc_url >>,<< pipeline.parameters.mainnet_rpc_url >>" check_diff: true - check-staging-empty: name: check-staging-empty @@ -155,4 +222,3 @@ workflows: tool: check_chainlist - run-staging-report: name: run-staging-report - diff --git a/justfile b/justfile index a46391056e..1ef701082f 100644 --- a/justfile +++ b/justfile @@ -47,8 +47,6 @@ print-staging-report: (_run_ops_bin 'print_staging_report') check-genesis-integrity: (_run_ops_bin 'check_genesis_integrity') -codegen: (_run_ops_bin 'codegen') - create-config SHORTNAME FILENAME: @just _run_ops_bin "create_config" "--shortname {{SHORTNAME}} --state-filename $(realpath {{FILENAME}})" diff --git a/mise.toml b/mise.toml index ece3589a83..3b4be42d4c 100644 --- a/mise.toml +++ b/mise.toml @@ -3,6 +3,7 @@ # Core dependencies go = "1.23.1" just = "1.37.0" +yq = "4.44.5" # Go dependencies "go:gotest.tools/gotestsum" = "1.12.0" diff --git a/ops/cmd/codegen/main.go b/ops/cmd/codegen/main.go index 050a21ea7b..8794f7d20a 100644 --- a/ops/cmd/codegen/main.go +++ b/ops/cmd/codegen/main.go @@ -3,28 +3,105 @@ package main import ( "fmt" "os" + "strconv" + "strings" + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch/script" + "github.com/ethereum-optimism/superchain-registry/ops/internal/config" "github.com/ethereum-optimism/superchain-registry/ops/internal/manage" "github.com/ethereum-optimism/superchain-registry/ops/internal/output" "github.com/ethereum-optimism/superchain-registry/ops/internal/paths" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" +) + +var ( + L1RPCURLsFlag = &cli.StringFlag{ + Name: "l1-rpc-urls", + Usage: "comma-separated list of L1 RPC URLs (only need multiple if fetching from multiple superchains)", + EnvVars: []string{"L1_RPC_URLS"}, + Required: true, + } + ChainIDFlag = &cli.StringFlag{ + Name: "chain-ids", + Usage: "comma-separated list of l2 chainIds to update (optional, fetches all chains if not provided)", + } + SuperchainsFlag = &cli.StringFlag{ + Name: "superchains", + Usage: "comma-separated list of superchains to update (cannot provide both chain-ids and superchains flags, default to all superchains if not provided)", + } ) func main() { - if err := mainErr(); err != nil { - output.WriteNotOK("application error: %v", err) + app := &cli.App{ + Name: "codegen", + Usage: "uses op-fetcher to fetch onchain config data for chain(s) in the superchain-registry, then propagates the data to codegen files", + Flags: []cli.Flag{ + L1RPCURLsFlag, + ChainIDFlag, + SuperchainsFlag, + }, + Action: CodegenCLI, + } + if err := app.Run(os.Args); err != nil { + output.WriteStderr("%v", err) os.Exit(1) } } -func mainErr() error { +func CodegenCLI(cliCtx *cli.Context) error { + l1RpcUrls := strings.Split(cliCtx.String("l1-rpc-urls"), ",") + chainIdStr := cliCtx.String("chain-ids") + superchainsStr := cliCtx.String("superchains") + if chainIdStr != "" && superchainsStr != "" { + return fmt.Errorf("cannot provide both chain-ids and superchains flags") + } + + var superchains []config.Superchain + if superchainsStr != "" { + superchainStrs := strings.Split(superchainsStr, ",") + for _, superchainStr := range superchainStrs { + superchainStr = strings.TrimSpace(superchainStr) + superchain, err := config.ParseSuperchain(superchainStr) + if err != nil { + return err + } + superchains = append(superchains, superchain) + } + } + + var chainIds []uint64 + if chainIdStr != "" { + chainIdStrs := strings.Split(chainIdStr, ",") + // Convert each string to uint64 + for _, idStr := range chainIdStrs { + idStr = strings.TrimSpace(idStr) + id, err := strconv.ParseUint(idStr, 10, 64) + if err != nil { + return fmt.Errorf("invalid chain ID '%s': %w", idStr, err) + } + chainIds = append(chainIds, id) + } + } + + lgr := log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, false)) wd, err := paths.FindRepoRoot() if err != nil { return fmt.Errorf("failed to get working directory: %w", err) } - if err := manage.GenAllCode(wd); err != nil { - return fmt.Errorf("error generating code: %w", err) + var onchainCfgs map[uint64]script.ChainConfig + ctx := cliCtx.Context + onchainCfgs, err = manage.FetchChains(ctx, lgr, wd, l1RpcUrls, chainIds, superchains) + if err != nil { + return fmt.Errorf("error fetching onchain configs: %w", err) + } + syncer, err := manage.NewCodegenSyncer(lgr, wd, onchainCfgs) + if err != nil { + return fmt.Errorf("error creating codegen syncer: %w", err) + } + if err := syncer.SyncAll(); err != nil { + return fmt.Errorf("error syncing codegen: %w", err) } - return nil } diff --git a/ops/cmd/sync_staging/main.go b/ops/cmd/sync_staging/main.go index aa4548b5d1..85b42de8f1 100644 --- a/ops/cmd/sync_staging/main.go +++ b/ops/cmd/sync_staging/main.go @@ -5,10 +5,13 @@ import ( "fmt" "os" "path" + "strings" + "github.com/ethereum-optimism/superchain-registry/ops/internal/config" "github.com/ethereum-optimism/superchain-registry/ops/internal/manage" "github.com/ethereum-optimism/superchain-registry/ops/internal/output" "github.com/ethereum-optimism/superchain-registry/ops/internal/paths" + "github.com/ethereum/go-ethereum/log" "github.com/urfave/cli/v2" ) @@ -21,6 +24,11 @@ var ( Name: "preserve-input", Usage: "Skip cleanup of staging directory.", } + FlagL1RPCURLs = &cli.StringFlag{ + Name: "l1-rpc-urls", + Usage: "Comma-separated list of L1 RPC URLs", + Required: true, + } ) func main() { @@ -30,6 +38,7 @@ func main() { Flags: []cli.Flag{ FlagCheck, FlagPreserveInput, + FlagL1RPCURLs, }, Action: action, } @@ -96,8 +105,20 @@ func action(cliCtx *cli.Context) error { output.WriteOK("wrote genesis files") - if err := manage.GenAllCode(wd); err != nil { - return fmt.Errorf("failed to generate code: %w", err) + // Codegen + lgr := log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, false)) + l1RpcUrls := strings.Split(cliCtx.String("l1-rpc-urls"), ",") + ctx := cliCtx.Context + onchainCfgs, err := manage.FetchChains(ctx, lgr, wd, l1RpcUrls, []uint64{chainCfg.ChainID}, []config.Superchain{}) + if err != nil { + return fmt.Errorf("error fetching onchain configs: %w", err) + } + syncer, err := manage.NewCodegenSyncer(lgr, wd, onchainCfgs) + if err != nil { + return fmt.Errorf("error creating codegen syncer: %w", err) + } + if err := syncer.SyncAll(); err != nil { + return fmt.Errorf("error syncing codegen: %w", err) } if !noCleanup { diff --git a/ops/go.mod b/ops/go.mod index 97c06174f0..136d1c7750 100644 --- a/ops/go.mod +++ b/ops/go.mod @@ -4,7 +4,7 @@ go 1.23.1 require ( github.com/BurntSushi/toml v1.4.0 - github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d + github.com/ethereum-optimism/optimism v1.12.3-0.20250402215013-5391bf29692d github.com/ethereum/go-ethereum v1.15.3 github.com/lmittmann/w3 v0.17.8 github.com/stretchr/testify v1.10.0 @@ -15,6 +15,7 @@ require ( github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64 github.com/google/go-github/v68 v68.0.0 github.com/klauspost/compress v1.18.0 + golang.org/x/sync v0.10.0 ) require ( @@ -74,7 +75,6 @@ require ( github.com/yusufpapurcu/wmi v1.2.3 // indirect golang.org/x/crypto v0.32.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.29.0 // indirect golang.org/x/term v0.28.0 // indirect golang.org/x/time v0.10.0 // indirect diff --git a/ops/go.sum b/ops/go.sum index 8beba88e2e..ad0cbf982d 100644 --- a/ops/go.sum +++ b/ops/go.sum @@ -87,8 +87,8 @@ github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3 h1:RWHKLhCrQThMfch+QJ1Z github.com/ethereum-optimism/go-ethereum-hdwallet v0.1.3/go.mod h1:QziizLAiF0KqyLdNJYD7O5cpDlaFMNZzlxYNcWsJUxs= github.com/ethereum-optimism/op-geth v1.101503.2-rc.5.0.20250401164435-02dfe8692a3c h1:2uU1Jx+wuqGtWR/qsZrmB+jfR+/hslowPS11bvBAda4= github.com/ethereum-optimism/op-geth v1.101503.2-rc.5.0.20250401164435-02dfe8692a3c/go.mod h1:QUo3fn+45vWqJWzJW+rIzRHUV7NmhhHLPdI87mAn1M8= -github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d h1:SWUqPFKjoh3WfAG2HaKNjwkwzxJ3Jm/ssvYQAF6AbY0= -github.com/ethereum-optimism/optimism v1.13.1-0.20250402215013-5391bf29692d/go.mod h1:Pf1bUvfjbot5RyCmsfPKFR0kcBCT/HZvSlISRtB1+KE= +github.com/ethereum-optimism/optimism v1.12.3-0.20250402215013-5391bf29692d h1:UGWjnYcPm7e0AOWZGyKhgBj+67oq8ZRrJYYu4Kfh7uw= +github.com/ethereum-optimism/optimism v1.12.3-0.20250402215013-5391bf29692d/go.mod h1:Pf1bUvfjbot5RyCmsfPKFR0kcBCT/HZvSlISRtB1+KE= github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64 h1:teDhU4h4ryaE8rSBl+vJJiwKHjxdnnHPkKZ9iNr2R8k= github.com/ethereum-optimism/superchain-registry/validation v0.0.0-20250314162817-2c60e5723c64/go.mod h1:NZ816PzLU1TLv1RdAvYAb6KWOj4Zm5aInT0YpDVml2Y= github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= diff --git a/ops/internal/config/address.go b/ops/internal/config/address.go index 81b21cde4b..bc5ee3f7e3 100644 --- a/ops/internal/config/address.go +++ b/ops/internal/config/address.go @@ -1,6 +1,7 @@ package config import ( + "encoding/json" "fmt" "github.com/ethereum/go-ethereum/common" @@ -19,20 +20,7 @@ func (a *ChecksummedAddress) UnmarshalTOML(data any) error { return fmt.Errorf("expected a string, got %T", data) } - if len(dataStr) != 42 { - return fmt.Errorf("invalid address: %s", dataStr) - } - - if !common.IsHexAddress(dataStr) { - return fmt.Errorf("invalid address: %s", dataStr) - } - - addr := common.HexToAddress(dataStr) - if addr.Hex() != dataStr { - return fmt.Errorf("invalid checksummed address: %s", dataStr) - } - *a = ChecksummedAddress(addr) - return nil + return a.parseAddress(dataStr) } func (a ChecksummedAddress) MarshalTOML() ([]byte, error) { @@ -43,6 +31,43 @@ func (a ChecksummedAddress) String() string { return common.Address(a).Hex() } -func (a ChecksummedAddress) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf(`"%s"`, common.Address(a).Hex())), nil +func (a *ChecksummedAddress) UnmarshalJSON(data []byte) error { + var dataStr string + if err := json.Unmarshal(data, &dataStr); err != nil { + return fmt.Errorf("failed to unmarshal ChecksummedAddress: %w", err) + } + + return a.parseAddress(dataStr) +} + +func (a *ChecksummedAddress) MarshalJSON() ([]byte, error) { + if common.Address(*a) == (common.Address{}) { + // Return null for zero addresses so it doesn't pollute the json output + return []byte("null"), nil + } + return []byte(fmt.Sprintf(`"%s"`, common.Address(*a).Hex())), nil +} + +// Helper function for validating and parsing Ethereum addresses +func (a *ChecksummedAddress) parseAddress(addrStr string) error { + // Validate length + if len(addrStr) != 42 { + return fmt.Errorf("invalid address length: %s", addrStr) + } + + // Validate hex format + if !common.IsHexAddress(addrStr) { + return fmt.Errorf("invalid hex address: %s", addrStr) + } + + // Convert to checksummed address + addr := common.HexToAddress(addrStr) + + // Validate that the address is properly checksummed + if addr.Hex() != addrStr { + return fmt.Errorf("invalid checksummed address: %s", addrStr) + } + + *a = ChecksummedAddress(addr) + return nil } diff --git a/ops/internal/config/chain.go b/ops/internal/config/chain.go index c7288f31e1..37783119bb 100644 --- a/ops/internal/config/chain.go +++ b/ops/internal/config/chain.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/ethereum-optimism/optimism/op-deployer/pkg/deployer/artifacts" + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch/script" "github.com/ethereum-optimism/optimism/op-service/jsonutil" "github.com/ethereum/go-ethereum/common" ) @@ -149,8 +150,8 @@ type Roles struct { ProxyAdminOwner *ChecksummedAddress `json:"ProxyAdminOwner" toml:"ProxyAdminOwner"` Guardian *ChecksummedAddress `json:"Guardian" toml:"Guardian"` Challenger *ChecksummedAddress `json:"Challenger" toml:"Challenger"` - Proposer *ChecksummedAddress `json:"Proposer,omitempty" toml:"Proposer,omitempty"` - UnsafeBlockSigner *ChecksummedAddress `json:"UnsafeBlockSigner,omitempty" toml:"UnsafeBlockSigner,omitempty"` + Proposer *ChecksummedAddress `json:"Proposer" toml:"Proposer"` + UnsafeBlockSigner *ChecksummedAddress `json:"UnsafeBlockSigner" toml:"UnsafeBlockSigner"` BatchSubmitter *ChecksummedAddress `json:"BatchSubmitter" toml:"BatchSubmitter"` } @@ -182,34 +183,93 @@ type AddressesWithRoles struct { Roles } +func CreateAddressesWithRolesFromFetcher(addresses script.Addresses, roles script.Roles) AddressesWithRoles { + addressesWithRoles := AddressesWithRoles{ + Addresses: Addresses{ + AddressManager: NewChecksummedAddress(addresses.AddressManager), + L1CrossDomainMessengerProxy: NewChecksummedAddress(addresses.L1CrossDomainMessengerProxy), + L1ERC721BridgeProxy: NewChecksummedAddress(addresses.L1ERC721BridgeProxy), + L1StandardBridgeProxy: NewChecksummedAddress(addresses.L1StandardBridgeProxy), + L2OutputOracleProxy: NewChecksummedAddress(addresses.L2OutputOracleProxy), + OptimismMintableERC20FactoryProxy: NewChecksummedAddress(addresses.OptimismMintableERC20FactoryProxy), + OptimismPortalProxy: NewChecksummedAddress(addresses.OptimismPortalProxy), + SystemConfigProxy: NewChecksummedAddress(addresses.SystemConfigProxy), + ProxyAdmin: NewChecksummedAddress(addresses.OpChainProxyAdmin), + SuperchainConfig: NewChecksummedAddress(addresses.SuperchainConfig), + AnchorStateRegistryProxy: NewChecksummedAddress(addresses.AnchorStateRegistryProxy), + DisputeGameFactoryProxy: NewChecksummedAddress(addresses.DisputeGameFactoryProxy), + FaultDisputeGame: NewChecksummedAddress(addresses.FaultDisputeGame), + MIPS: NewChecksummedAddress(addresses.Mips), + PermissionedDisputeGame: NewChecksummedAddress(addresses.PermissionedDisputeGame), + PreimageOracle: NewChecksummedAddress(addresses.PreimageOracle), + }, + Roles: Roles{ + SystemConfigOwner: NewChecksummedAddress(roles.SystemConfigOwner), + ProxyAdminOwner: NewChecksummedAddress(roles.OpChainProxyAdminOwner), + Guardian: NewChecksummedAddress(roles.Guardian), + Challenger: NewChecksummedAddress(roles.Challenger), + Proposer: NewChecksummedAddress(roles.Proposer), + UnsafeBlockSigner: NewChecksummedAddress(roles.UnsafeBlockSigner), + BatchSubmitter: NewChecksummedAddress(roles.BatchSubmitter), + }, + } + // Hack until we separate the permissioned and permissionless WETH proxies + if addresses.DelayedWETHPermissionlessGameProxy != (common.Address{}) { + addressesWithRoles.Addresses.DelayedWETHProxy = NewChecksummedAddress(addresses.DelayedWETHPermissionlessGameProxy) + } else { + addressesWithRoles.Addresses.DelayedWETHProxy = NewChecksummedAddress(addresses.DelayedWETHPermissionedGameProxy) + } + + return addressesWithRoles +} + func (a AddressesWithRoles) MarshalJSON() ([]byte, error) { - // Create a map to hold all fields - allFields := make(map[string]*ChecksummedAddress) + // Create a map to hold non-zero address fields + allFields := make(map[string]string) + + // Declare processStruct variable first to allow recursion + var processStruct func(interface{}) + + processStruct = func(structVal interface{}) { + val := reflect.ValueOf(structVal) + typ := reflect.TypeOf(structVal) - for _, embed := range []any{a.Addresses, a.Roles} { - val := reflect.ValueOf(embed) - typ := reflect.TypeOf(embed) for i := 0; i < val.NumField(); i++ { field := val.Field(i) - jsonTag := typ.Field(i).Tag.Get("json") - tagSplit := strings.Split(jsonTag, ",") - fieldName := tagSplit[0] - var omitEmpty bool - if fieldName == "" { - fieldName = typ.Field(i).Name - } - if len(tagSplit) > 1 { - omitEmpty = tagSplit[1] == "omitempty" + // Handle embedded structs + if field.Kind() == reflect.Struct && typ.Field(i).Anonymous { + processStruct(field.Interface()) + continue } - if !omitEmpty && field.IsNil() { - allFields[fieldName] = nil - } else if !field.IsNil() { - allFields[fieldName] = field.Interface().(*ChecksummedAddress) + // Process ChecksummedAddress pointers + if field.Type() == reflect.TypeOf((*ChecksummedAddress)(nil)) { + // Get field name from JSON tag or struct field name + jsonTag := typ.Field(i).Tag.Get("json") + fieldName := strings.Split(jsonTag, ",")[0] + if fieldName == "" { + fieldName = typ.Field(i).Name + } + + // Skip nil pointers + if field.IsNil() { + continue + } + + // Get the address as string + addrPtr := field.Interface().(*ChecksummedAddress) + if addrPtr != nil && *addrPtr != (ChecksummedAddress{}) { + allFields[fieldName] = addrPtr.String() + } + continue } } } + // Process both embedded structs + processStruct(a.Addresses) + processStruct(a.Roles) + return json.Marshal(allFields) } diff --git a/ops/internal/config/chain_list.go b/ops/internal/config/chain_list.go index daad0f6640..5c2866c557 100644 --- a/ops/internal/config/chain_list.go +++ b/ops/internal/config/chain_list.go @@ -11,6 +11,11 @@ type ChainListEntry struct { DataAvailabilityType string `json:"dataAvailabilityType" toml:"data_availability_type"` Parent ChainListEntryParent `json:"parent" toml:"parent"` GasPayingToken *ChecksummedAddress `json:"gasPayingToken,omitempty" toml:"gas_paying_token,omitempty"` + FaultProofs FaultProofs `json:"faultProofs,omitempty" toml:"fault_proofs,omitempty"` +} + +type FaultProofs struct { + Status string `json:"status" toml:"status"` } type ChainListEntryParent struct { diff --git a/ops/internal/config/superchain.go b/ops/internal/config/superchain.go index 9c74a748b8..1f00d906e3 100644 --- a/ops/internal/config/superchain.go +++ b/ops/internal/config/superchain.go @@ -1,6 +1,13 @@ package config -import "fmt" +import ( + "context" + "fmt" + "strings" + + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" +) type Superchain string @@ -27,6 +34,56 @@ func MustParseSuperchain(in string) Superchain { return sup } +// FindValidL1URL finds a valid l1-rpc-url for a given superchain by finding matching l1 chainId +func FindValidL1URL(ctx context.Context, lgr log.Logger, urls []string, superchainId uint64) (string, error) { + lgr.Info("searching for valid l1-rpc-url", "superchainId", superchainId) + for i, url := range urls { + url = strings.TrimSpace(url) + if url == "" { + continue + } + + if err := validateL1ChainID(ctx, url, superchainId); err != nil { + lgr.Warn("l1-rpc-url has mismatched l1 chainId", "urlIndex", i) + continue + } + + lgr.Info("l1-rpc-url has matching l1 chainId", "urlIndex", i) + return url, nil + } + return "", fmt.Errorf("no valid L1 RPC URL found for superchain %d", superchainId) +} + +// validateL1ChainID checks if the l1RpcUrl has the expected chain ID for the superchain +func validateL1ChainID(ctx context.Context, l1RpcUrl string, superchainId uint64) error { + chainID, err := getL1ChainId(ctx, l1RpcUrl) + if err != nil { + return fmt.Errorf("failed to get chainId from l1RpcUrl: %w", err) + } + + if chainID != superchainId { + return fmt.Errorf("l1RpcUrl chainId mismatch: got %d, expected %d", chainID, superchainId) + } + + return nil +} + +// getL1ChainId connects to an Ethereum RPC endpoint and retrieves its chain ID +func getL1ChainId(ctx context.Context, rpcURL string) (uint64, error) { + client, err := ethclient.Dial(rpcURL) + if err != nil { + return 0, fmt.Errorf("failed to connect to L1 RPC: %w", err) + } + defer client.Close() + + chainID, err := client.ChainID(ctx) + if err != nil { + return 0, fmt.Errorf("failed to get chain ID: %w", err) + } + + return chainID.Uint64(), nil +} + func (s *Superchain) UnmarshalText(text []byte) error { sup, err := ParseSuperchain(string(text)) if err != nil { @@ -46,7 +103,7 @@ type SuperchainDefinition struct { } type SuperchainL1 struct { - ChainID uint64 + ChainID uint64 `toml:"chain_id"` PublicRPC string `toml:"public_rpc"` Explorer string `toml:"explorer"` } diff --git a/ops/internal/manage/codegen.go b/ops/internal/manage/codegen.go index 13ea7f67b6..69a221a736 100644 --- a/ops/internal/manage/codegen.go +++ b/ops/internal/manage/codegen.go @@ -5,140 +5,246 @@ import ( _ "embed" "encoding/json" "fmt" - "path" + "os" + "path/filepath" "strconv" + "strings" "text/template" "time" "github.com/BurntSushi/toml" + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch/script" "github.com/ethereum-optimism/superchain-registry/ops/internal/config" "github.com/ethereum-optimism/superchain-registry/ops/internal/fs" - "github.com/ethereum-optimism/superchain-registry/ops/internal/output" "github.com/ethereum-optimism/superchain-registry/ops/internal/paths" + "github.com/ethereum/go-ethereum/log" ) -//go:embed chains.md.tmpl -var chainsReadmeTemplateData string - -var funcMap = template.FuncMap{ - "checkmark": func(in bool) string { - if in { - return "✅" - } +// CodegenSyncer manages syncing of codegen files with on-chain data +type CodegenSyncer struct { + lgr log.Logger + ChainList []config.ChainListEntry + Addresses config.AddressesJSON + inputWd string + outputWd string + onchainCfgs map[uint64]script.ChainConfig + diskCfgs map[uint64]DiskChainConfig +} - return "❌" - }, - "optedInSuperchain": func(in *uint64) string { - if in != nil && *in < uint64(time.Now().Unix()) { - return "✅" - } +type CodegenSyncerOption func(*CodegenSyncer) - return "❌" - }, +func WithOutputDirectory(outputDir string) CodegenSyncerOption { + return func(s *CodegenSyncer) { + s.outputWd = outputDir + } } -var tmpl = template.Must(template.New("chains-readme").Funcs(funcMap).Parse(chainsReadmeTemplateData)) +func NewCodegenSyncer(lgr log.Logger, wd string, chainCfgs map[uint64]script.ChainConfig, opts ...CodegenSyncerOption) (*CodegenSyncer, error) { + // Load addresses.json data + var addresses config.AddressesJSON + addressesData, err := os.ReadFile(paths.AddressesFile(wd)) + if err != nil { + return nil, fmt.Errorf("error reading addresses file: %w", err) + } + if err := json.Unmarshal(addressesData, &addresses); err != nil { + return nil, fmt.Errorf("error unmarshaling addresses.json: %w", err) + } + + // Load chainList.json data + var chainList []config.ChainListEntry + chainListData, err := os.ReadFile(paths.ChainListJsonFile(wd)) + if err != nil { + return nil, fmt.Errorf("error reading chainList file: %w", err) + } + if err := json.Unmarshal(chainListData, &chainList); err != nil { + return nil, fmt.Errorf("error unmarshaling chainList file: %w", err) + } -func GenAllCode(rootP string) error { - if err := GenAddressesFile(rootP); err != nil { - return fmt.Errorf("error generating addresses file: %w", err) + // Load disk chain configs + diskChainCfgsSlice, err := CollectChainConfigs(paths.SuperchainConfigsDir(wd)) + lgr.Info("collected chain configs from disk", "numDiskCfgs", len(diskChainCfgsSlice)) + if err != nil { + return nil, fmt.Errorf("error collecting chain configs: %w", err) } - output.WriteOK("generated addresses file") - if err := GenChainListFile(rootP, path.Join(rootP, "chainList.json")); err != nil { - return fmt.Errorf("error generating JSON chain list: %w", err) + diskChainCfgs := make(map[uint64]DiskChainConfig) + for _, cfg := range diskChainCfgsSlice { + diskChainCfgs[cfg.Config.ChainID] = cfg } - output.WriteOK("generated JSON chain list") - if err := GenChainListFile(rootP, path.Join(rootP, "chainList.toml")); err != nil { - return fmt.Errorf("error generating TOML chain list: %w", err) + + syncer := &CodegenSyncer{ + lgr: lgr, + ChainList: chainList, + Addresses: addresses, + inputWd: wd, + outputWd: wd, + onchainCfgs: chainCfgs, + diskCfgs: diskChainCfgs, } - output.WriteOK("generated TOML chain list") - if err := GenChainsReadme(rootP, path.Join(rootP, "CHAINS.md")); err != nil { - return fmt.Errorf("error generating chains readme: %w", err) + + for _, opt := range opts { + opt(syncer) } - output.WriteOK("generated chains readme") - return nil + + return syncer, nil } -func GenAddressesFile(rootP string) error { - superchains, err := paths.Superchains(rootP) - if err != nil { - return fmt.Errorf("error getting superchains: %w", err) +// SyncAll syncs codegen files with all entries in syncer.onchainCfgs +func (s *CodegenSyncer) SyncAll() error { + if err := s.ProcessAllChains(); err != nil { + return err } - addrs := make(config.AddressesJSON) - for _, superchain := range superchains { - cfgs, err := CollectChainConfigs(paths.SuperchainDir(rootP, superchain)) - if err != nil { - return fmt.Errorf("error collecting chain configs: %w", err) - } + return s.WriteFiles() +} + +// ProcessSingleChain updates syncer's internal data for a given chain +func (s *CodegenSyncer) ProcessSingleChain(chainId uint64, onchainCfg script.ChainConfig) error { + s.lgr.Info("processing chain", "chainId", chainId) + chainIdStr := strconv.FormatUint(chainId, 10) + addressesWithRoles := config.CreateAddressesWithRolesFromFetcher(onchainCfg.Addresses, onchainCfg.Roles) + s.Addresses[chainIdStr] = &addressesWithRoles + + if err := s.UpdateChainList(chainIdStr, onchainCfg); err != nil { + return err + } + + s.lgr.Info("finished processing chain", "chainId", chainId) + return nil +} - for _, cfg := range cfgs { - addrs[strconv.FormatUint(cfg.Config.ChainID, 10)] = &config.AddressesWithRoles{ - Addresses: cfg.Config.Addresses, - Roles: cfg.Config.Roles, - } +// ProcessAllChains reads all input chain files and updates syncer's internal data accordingly +func (s *CodegenSyncer) ProcessAllChains() error { + for chainId, cfg := range s.onchainCfgs { + if err := s.ProcessSingleChain(chainId, cfg); err != nil { + return err } } + return nil +} + +// UpdateChainList updates the ChainList entry for the given chain ID +func (s *CodegenSyncer) UpdateChainList(chainID string, onchainCfg script.ChainConfig) error { + chainIdUint64, err := strconv.ParseUint(chainID, 10, 64) + if err != nil { + return fmt.Errorf("error converting chainID to uint64: %w", err) + } - data, err := json.MarshalIndent(addrs, "", " ") + diskCfg, ok := s.diskCfgs[chainIdUint64] + if !ok { + return fmt.Errorf("disk chain config not found for chain ID %s", chainID) + } + + dir := filepath.Dir(diskCfg.Filepath) + lastDir := filepath.Base(dir) + superchain, err := config.ParseSuperchain(lastDir) if err != nil { - return fmt.Errorf("failed to marshal addresses: %w", err) + return fmt.Errorf("error parsing superchain: %w", err) } - if err := fs.AtomicWrite(paths.AddressesFile(rootP), 0o755, data); err != nil { - return fmt.Errorf("failed to write addresses file: %w", err) + found := false + chain := diskCfg.Config + chainListEntry := chain.ChainListEntry(superchain, diskCfg.ShortName) + + if onchainCfg.FaultProofStatus == nil { + chainListEntry.FaultProofs = config.FaultProofs{Status: "none"} + } else if onchainCfg.FaultProofStatus.RespectedGameType == 1 { + chainListEntry.FaultProofs = config.FaultProofs{Status: "permissioned"} + } else { + chainListEntry.FaultProofs = config.FaultProofs{Status: "permissionless"} } + for i, entry := range s.ChainList { + if entry.ChainID == chainIdUint64 { + s.ChainList[i] = chainListEntry + s.lgr.Info("updating existing chainList entry", "chainID", chainID) + found = true + break + } + } + if !found { + s.ChainList = append(s.ChainList, chainListEntry) + s.lgr.Info("adding new chainList entry", "chainID", chainID) + } return nil } -func GenChainListFile(rootP string, outP string) error { - superchains, err := paths.Superchains(rootP) +// WriteFiles writes all updated data to disk +func (s *CodegenSyncer) WriteFiles() error { + // Write addresses.json + updatedAddressesData, err := json.MarshalIndent(s.Addresses, "", " ") if err != nil { - return fmt.Errorf("error getting superchains: %w", err) + return fmt.Errorf("error marshaling updated addresses: %w", err) } - ext := path.Ext(outP) - var marshaler func([]config.ChainListEntry) ([]byte, error) - switch ext { - case ".json": - marshaler = func(entries []config.ChainListEntry) ([]byte, error) { - return json.MarshalIndent(entries, "", " ") - } - case ".toml": - marshaler = func(entries []config.ChainListEntry) ([]byte, error) { - return toml.Marshal(config.ChainListTOML{ - Chains: entries, - }) - } - default: - return fmt.Errorf("unsupported file extension: %s", ext) + // Ensure the addresses directory exists + addressesPath := paths.AddressesFile(s.outputWd) + if err := paths.EnsureDir(filepath.Dir(addressesPath)); err != nil { + return fmt.Errorf("error creating addresses.json directory: %w", err) + } + if err := os.WriteFile(addressesPath, updatedAddressesData, 0o644); err != nil { + return fmt.Errorf("error writing updated addresses.json: %w", err) } + s.lgr.Info("successfully updated addresses.json", "updatedChains", len(s.onchainCfgs), "totalChains", len(s.Addresses)) - var chains []config.ChainListEntry - for _, superchain := range superchains { - cfgs, err := CollectChainConfigs(paths.SuperchainDir(rootP, superchain)) - if err != nil { - return fmt.Errorf("error collecting chain configs: %w", err) - } + // Write chainList.json + updatedChainListData, err := json.MarshalIndent(s.ChainList, "", " ") + if err != nil { + return fmt.Errorf("error marshaling updated chainList: %w", err) + } + if err := os.WriteFile(paths.ChainListJsonFile(s.outputWd), updatedChainListData, 0o644); err != nil { + return fmt.Errorf("error writing updated chainList.json: %w", err) + } + s.lgr.Info("successfully updated chainList.json", "updatedChains", len(s.onchainCfgs), "totalChains", len(s.ChainList)) - for _, cfg := range cfgs { - chains = append(chains, cfg.Config.ChainListEntry(superchain, cfg.ShortName)) - } + // Write chainList.toml + chainListToml := struct { + Chains []config.ChainListEntry `toml:"chains"` + }{ + Chains: s.ChainList, } - data, err := marshaler(chains) - if err != nil { - return fmt.Errorf("failed to marshal chain list: %w", err) + var buf strings.Builder + encoder := toml.NewEncoder(&buf) + if err := encoder.Encode(chainListToml); err != nil { + return fmt.Errorf("error marshaling updated chainList to TOML: %w", err) } - if err := fs.AtomicWrite(outP, 0o755, data); err != nil { - return fmt.Errorf("failed to write chain list file: %w", err) + if err := os.WriteFile(paths.ChainListTomlFile(s.outputWd), []byte(buf.String()), 0o644); err != nil { + return fmt.Errorf("error writing updated chainList.toml: %w", err) } + s.lgr.Info("successfully updated chainList.toml", "updatedChains", len(s.onchainCfgs), "totalChains", len(s.ChainList)) + + // Write CHAINS.md + if err := GenChainsReadme(s.inputWd, paths.ChainMdFile(s.outputWd)); err != nil { + return fmt.Errorf("error generating readme: %w", err) + } + s.lgr.Info("successfully updated CHAINS.md") return nil } +//go:embed chains.md.tmpl +var chainsReadmeTemplateData string + +var funcMap = template.FuncMap{ + "checkmark": func(in bool) string { + if in { + return "✅" + } + + return "❌" + }, + "optedInSuperchain": func(in *uint64) string { + if in != nil && *in < uint64(time.Now().Unix()) { + return "✅" + } + + return "❌" + }, +} + +var tmpl = template.Must(template.New("chains-readme").Funcs(funcMap).Parse(chainsReadmeTemplateData)) + type ChainsReadmeData struct { Superchains []config.Superchain ChainData [][]*config.Chain diff --git a/ops/internal/manage/codegen_test.go b/ops/internal/manage/codegen_test.go index f060b904f9..18c28d98bb 100644 --- a/ops/internal/manage/codegen_test.go +++ b/ops/internal/manage/codegen_test.go @@ -1,76 +1,262 @@ package manage import ( + "encoding/json" "fmt" "os" + "path/filepath" + "reflect" "strings" "testing" + "github.com/BurntSushi/toml" + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch/script" + "github.com/ethereum-optimism/superchain-registry/ops/internal/config" "github.com/ethereum-optimism/superchain-registry/ops/internal/paths" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" "github.com/stretchr/testify/require" ) -func TestGenAddressesFile(t *testing.T) { - require.NoError(t, GenAddressesFile("testdata")) - - addrsFile := paths.AddressesFile("testdata") +func TestGenChainsReadme(t *testing.T) { + readmeFile, err := os.CreateTemp("", "chains-*.md") + require.NoError(t, err) t.Cleanup(func() { - require.NoError(t, os.Remove(addrsFile)) + require.NoError(t, os.Remove(readmeFile.Name())) }) - expected, err := os.ReadFile("testdata/expected-addresses.json") + require.NoError(t, GenChainsReadme("testdata", readmeFile.Name())) + + expectedBytes, err := os.ReadFile("testdata/CHAINS.md") require.NoError(t, err) - actual, err := os.ReadFile(addrsFile) + actualBytes, err := os.ReadFile(readmeFile.Name()) require.NoError(t, err) + require.Equal(t, strings.TrimSpace(string(expectedBytes)), strings.TrimSpace(string(actualBytes))) +} - require.JSONEq(t, string(expected), string(actual)) +// loadTestAddressesJSON loads the expected addresses JSON from testdata +func loadTestAddressesJSON(t *testing.T) config.AddressesJSON { + data, err := os.ReadFile(paths.AddressesFile("testdata")) + require.NoError(t, err) + + var addresses config.AddressesJSON + err = json.Unmarshal(data, &addresses) + require.NoError(t, err) + + return addresses } -func TestGenChainList(t *testing.T) { - for _, ext := range []string{"toml", "json"} { - t.Run(ext, func(t *testing.T) { - t.Parallel() - - outFile, err := os.CreateTemp("", fmt.Sprintf("chainList-*.%s", ext)) - require.NoError(t, err) - defer outFile.Close() - t.Cleanup(func() { - require.NoError(t, os.Remove(outFile.Name())) - }) - - outPath := outFile.Name() - require.NoError(t, GenChainListFile("testdata", outPath)) - actualBytes, err := os.ReadFile(outPath) - require.NoError(t, err) - expectedBytes, err := os.ReadFile(fmt.Sprintf("testdata/expected-chainList.%s", ext)) - require.NoError(t, err) - require.Equal(t, strings.TrimSpace(string(expectedBytes)), strings.TrimSpace(string(actualBytes))) - }) +// loadTestChainList loads the expected chain list from testdata +func loadTestChainList(t *testing.T) []config.ChainListEntry { + data, err := os.ReadFile(paths.ChainListJsonFile("testdata")) + require.NoError(t, err) + + var chainList []config.ChainListEntry + err = json.Unmarshal(data, &chainList) + require.NoError(t, err) + + return chainList +} + +// createTestChainConfigs creates chain configs for testing based on testdata +func createTestChainConfigs(t *testing.T) map[uint64]script.ChainConfig { + addresses := loadTestAddressesJSON(t) + chainList := loadTestChainList(t) + + chainCfgs := make(map[uint64]script.ChainConfig) + for _, entry := range chainList { + chainID := entry.ChainID + chainIDStr := fmt.Sprintf("%d", chainID) + + // Only include chains that exist in addresses + if chainAddrs, ok := addresses[chainIDStr]; ok { + chainCfgs[chainID] = convertToScriptChainConfig(t, chainAddrs, entry.FaultProofs) + } } - t.Run("any other extension", func(t *testing.T) { - t.Parallel() + return chainCfgs +} - err := GenChainListFile("testdata", "any-path.txt") - require.ErrorContains(t, err, "unsupported file extension") - }) +// convertToScriptChainConfig converts from config types to script types +func convertToScriptChainConfig(t *testing.T, chainAddrs *config.AddressesWithRoles, faultProofStatus config.FaultProofs) script.ChainConfig { + var scriptAddrs script.Addresses + var scriptRoles script.Roles + + // First, convert to a map of string addresses + addressMap := make(map[string]string) + bytes, err := json.Marshal(chainAddrs) + require.NoError(t, err) + err = json.Unmarshal(bytes, &addressMap) + require.NoError(t, err) + + // Now populate the script structs manually using the map + // For each field in scriptAddrs struct + addressVal := reflect.ValueOf(&scriptAddrs).Elem() + for i := 0; i < addressVal.NumField(); i++ { + field := addressVal.Type().Field(i) + jsonTag := strings.Split(field.Tag.Get("json"), ",")[0] + if jsonTag == "" { + jsonTag = field.Name + } + + if addrStr, ok := addressMap[jsonTag]; ok && addrStr != "" { + addr := common.HexToAddress(addrStr) + addressVal.Field(i).Set(reflect.ValueOf(addr)) + } + } + + // For each field in scriptRoles struct + rolesVal := reflect.ValueOf(&scriptRoles).Elem() + for i := 0; i < rolesVal.NumField(); i++ { + field := rolesVal.Type().Field(i) + jsonTag := strings.Split(field.Tag.Get("json"), ",")[0] + if jsonTag == "" { + jsonTag = field.Name + } + + if addrStr, ok := addressMap[jsonTag]; ok && addrStr != "" { + addr := common.HexToAddress(addrStr) + rolesVal.Field(i).Set(reflect.ValueOf(addr)) + } + } + + cfg := script.ChainConfig{ + Addresses: scriptAddrs, + Roles: scriptRoles, + } + if faultProofStatus.Status == "permissioned" { + cfg.FaultProofStatus = &script.FaultProofStatus{ + Permissioned: true, + RespectedGameType: 1, + } + } else if faultProofStatus.Status == "permissionless" { + cfg.FaultProofStatus = &script.FaultProofStatus{ + Permissioned: true, + Permissionless: true, + RespectedGameType: 0, + } + } else { + cfg.FaultProofStatus = nil + } + return cfg } -func TestGenChainsReadme(t *testing.T) { - readmeFile, err := os.CreateTemp("", "chains-*.md") +func TestCodegenSyncer_NewCodegenSyncer(t *testing.T) { + chainCfgs := createTestChainConfigs(t) + + // Test successful initialization + lgr := log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelError, false)) + syncer, err := NewCodegenSyncer(lgr, "./testdata", chainCfgs) + require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, os.Remove(readmeFile.Name())) + require.NotNil(t, syncer) + require.NotEmpty(t, syncer.ChainList) + require.NotEmpty(t, syncer.Addresses) + require.Equal(t, "./testdata", syncer.inputWd) + require.Equal(t, "./testdata", syncer.outputWd) + + // Test initialization with separate output directory + tempDir := t.TempDir() + syncer, err = NewCodegenSyncer(lgr, "./testdata", chainCfgs, WithOutputDirectory(tempDir)) + require.NoError(t, err) + require.Equal(t, "./testdata", syncer.inputWd) + require.Equal(t, tempDir, syncer.outputWd) + + // Test initialization with invalid directory + _, err = NewCodegenSyncer(lgr, "/nonexistent", chainCfgs) + require.Error(t, err) +} + +func TestCodegenSyncer_UpdateChainList(t *testing.T) { + chainCfgs := createTestChainConfigs(t) + var testChainID uint64 + for id := range chainCfgs { + testChainID = id + break + } + + lgr := log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelError, false)) + syncer, err := NewCodegenSyncer(lgr, "testdata", chainCfgs) + require.NoError(t, err) + + err = syncer.UpdateChainList(fmt.Sprintf("%d", testChainID), script.ChainConfig{ + FaultProofStatus: &script.FaultProofStatus{ + RespectedGameType: 0, + }, }) + require.NoError(t, err) - require.NoError(t, GenChainsReadme("testdata", readmeFile.Name())) + // Verify the chain list was updated in memory + for _, chain := range syncer.ChainList { + if chain.ChainID == testChainID { + require.Equal(t, "permissionless", chain.FaultProofs.Status) + } + } + + // Test with invalid chain ID format + err = syncer.UpdateChainList("not-a-number", script.ChainConfig{}) + require.Error(t, err) +} - expectedBytes, err := os.ReadFile("testdata/expected-chains.md") +func TestCodegenSyncer_SyncAll(t *testing.T) { + tempDir := t.TempDir() + chainCfgs := createTestChainConfigs(t) + + for chainID := range chainCfgs { + config := chainCfgs[chainID] + config.FaultProofStatus = &script.FaultProofStatus{ + RespectedGameType: 1, + } + chainCfgs[chainID] = config + } + + lgr := log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelError, false)) + + syncer, err := NewCodegenSyncer(lgr, "testdata", chainCfgs, WithOutputDirectory(tempDir)) require.NoError(t, err) - actualBytes, err := os.ReadFile(readmeFile.Name()) + err = syncer.SyncAll() require.NoError(t, err) - require.Equal(t, strings.TrimSpace(string(expectedBytes)), strings.TrimSpace(string(actualBytes))) + // Verify chainList files were created in tempDir and updated for all chains + chainListData, err := os.ReadFile(paths.ChainListJsonFile(tempDir)) + require.NoError(t, err) + var chainList []config.ChainListEntry + err = json.Unmarshal(chainListData, &chainList) + require.NoError(t, err) + + for chainID := range chainCfgs { + foundUpdatedChain := false + for _, chain := range chainList { + if chain.ChainID == chainID { + require.Equal(t, "permissioned", chain.FaultProofs.Status) + foundUpdatedChain = true + } + } + require.True(t, foundUpdatedChain, "Chain %d not found in written chainList.json", chainID) + } + + // Verify chainList.toml was created and contains updated status + chainListTomlData, err := os.ReadFile(filepath.Join(tempDir, "chainList.toml")) + require.NoError(t, err) + var chainListToml struct { + Chains []config.ChainListEntry `toml:"chains"` + } + err = toml.Unmarshal(chainListTomlData, &chainListToml) + require.NoError(t, err) + + for chainID := range chainCfgs { + foundUpdatedChain := false + for _, chain := range chainListToml.Chains { + if chain.ChainID == chainID { + require.Equal(t, "permissioned", chain.FaultProofs.Status) + foundUpdatedChain = true + } + } + require.True(t, foundUpdatedChain, "Chain %d not found in written chainList.toml", chainID) + } + + _, err = os.Stat(filepath.Join(tempDir, "CHAINS.md")) + require.NoError(t, err) } diff --git a/ops/internal/manage/collect.go b/ops/internal/manage/collect.go index 2978b487c2..6a8c33d12f 100644 --- a/ops/internal/manage/collect.go +++ b/ops/internal/manage/collect.go @@ -17,9 +17,10 @@ import ( const CollectorConcurrency = 8 type DiskChainConfig struct { - ShortName string - Filepath string - Config *config.Chain + ShortName string + Filepath string + Superchain config.Superchain + Config *config.Chain } func CollectChainConfigs(p string) ([]DiskChainConfig, error) { @@ -61,11 +62,19 @@ func CollectChainConfigs(p string) ([]DiskChainConfig, error) { return } + superchainStr := filepath.Base(filepath.Dir(file)) + superchain, err := config.ParseSuperchain(superchainStr) + if err != nil { + firstErr.Set(fmt.Errorf("failed to parse superchain %s: %w", superchainStr, err)) + return + } + mtx.Lock() out = append(out, DiskChainConfig{ - ShortName: strings.TrimSuffix(basename, ".toml"), - Filepath: file, - Config: &chain, + ShortName: strings.TrimSuffix(basename, ".toml"), + Filepath: file, + Superchain: superchain, + Config: &chain, }) mtx.Unlock() } diff --git a/ops/internal/manage/collect_test.go b/ops/internal/manage/collect_test.go index c4fb207fa7..08bd5fde66 100644 --- a/ops/internal/manage/collect_test.go +++ b/ops/internal/manage/collect_test.go @@ -22,14 +22,16 @@ func TestCollectChainConfigs(t *testing.T) { require.Equal(t, []DiskChainConfig{ { - ShortName: "op", - Filepath: paths.ChainConfig("testdata", "sepolia", "op"), - Config: &opConfig, + ShortName: "op", + Filepath: paths.ChainConfig("testdata", "sepolia", "op"), + Superchain: config.SepoliaSuperchain, + Config: &opConfig, }, { - ShortName: "testchain", - Filepath: paths.ChainConfig("testdata", "sepolia", "testchain"), - Config: &testChainConfig, + ShortName: "testchain", + Filepath: paths.ChainConfig("testdata", "sepolia", "testchain"), + Superchain: config.SepoliaSuperchain, + Config: &testChainConfig, }, }, chains) } diff --git a/ops/internal/manage/fetch_onchain.go b/ops/internal/manage/fetch_onchain.go new file mode 100644 index 0000000000..c709eca913 --- /dev/null +++ b/ops/internal/manage/fetch_onchain.go @@ -0,0 +1,157 @@ +package manage + +import ( + "context" + "fmt" + "sync" + + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch" + "github.com/ethereum-optimism/optimism/op-fetcher/pkg/fetcher/fetch/script" + "github.com/ethereum-optimism/superchain-registry/ops/internal/config" + "github.com/ethereum-optimism/superchain-registry/ops/internal/paths" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/log" + "golang.org/x/sync/errgroup" +) + +// FetchChains fetches chain configurations for specified chain IDs or all chains if none specified +func FetchChains(egCtx context.Context, lgr log.Logger, wd string, l1RpcUrls []string, chainIds []uint64, superchains []config.Superchain) (map[uint64]script.ChainConfig, error) { + chainsBySuperchain, err := collectChainsBySuperchain(wd, chainIds, superchains) + if err != nil { + return nil, err + } + + allChainConfigs := make(map[uint64]script.ChainConfig) + var mu sync.Mutex + eg, egCtx := errgroup.WithContext(egCtx) + + superchainIds, err := paths.SuperchainIds(wd) + if err != nil { + return nil, fmt.Errorf("error getting superchain chainIds: %w", err) + } + + for superchain, chains := range chainsBySuperchain { + lgr.Info("fetching superchain", "superchain", superchain, "numChains", len(chains)) + superchainId, ok := superchainIds[superchain] + if !ok { + return nil, fmt.Errorf("missing superchain chainId for superchain %s", superchain) + } + + l1RpcUrl, err := config.FindValidL1URL(egCtx, lgr, l1RpcUrls, superchainId) + if err != nil { + return nil, fmt.Errorf("missing L1 RPC URL for superchain %s", superchain) + } + + for _, cfg := range chains { + // Capture variables for goroutine + currentConfig := cfg + currentRpcUrl := l1RpcUrl + + eg.Go(func() error { + result, err := fetchChainInfo(egCtx, lgr, currentRpcUrl, currentConfig) + if err != nil { + return fmt.Errorf("failed to fetch chain info for chainId %d: %w", currentConfig.Config.ChainID, err) + } + + mu.Lock() + allChainConfigs[currentConfig.Config.ChainID] = result + mu.Unlock() + + lgr.Info("fetched chain config", "chainId", currentConfig.Config.ChainID) + return nil + }) + } + } + + if err := eg.Wait(); err != nil { + return nil, err + } + + lgr.Info("completed fetching", "totalChains", len(allChainConfigs)) + return allChainConfigs, nil +} + +// collectChainsBySuperchain assembles a map of chains grouped by their superchain +// based on provided chainIds or superchains or all chains if neither are provided +func collectChainsBySuperchain(wd string, chainIds []uint64, superchainsInput []config.Superchain) (map[config.Superchain][]DiskChainConfig, error) { + result := make(map[config.Superchain][]DiskChainConfig) + if len(chainIds) > 0 && len(superchainsInput) > 0 { + return nil, fmt.Errorf("cannot provide both chainIds and superchains inputs") + } + + superchains := superchainsInput + if len(superchains) == 0 { + var err error + superchains, err = paths.Superchains(wd) + if err != nil { + return nil, fmt.Errorf("error getting superchains: %w", err) + } + } + + // Create a map for quick chain ID lookup if we're filtering + chainIdMap := make(map[uint64]bool) + for _, id := range chainIds { + chainIdMap[id] = true + } + + foundChainIdMap := make(map[uint64]bool) + + // Process all superchains + for _, superchain := range superchains { + // Collect all chain configs from this superchain + configs, err := CollectChainConfigs(paths.SuperchainDir(wd, superchain)) + if err != nil { + return nil, fmt.Errorf("error collecting chain configs for superchain %s: %w", superchain, err) + } + + // Filter configs if chainIds is specified + if len(chainIds) > 0 { + var filteredConfigs []DiskChainConfig + for _, cfg := range configs { + if chainIdMap[cfg.Config.ChainID] { + filteredConfigs = append(filteredConfigs, cfg) + foundChainIdMap[cfg.Config.ChainID] = true + } + } + + // Only add to map if we found matching chains for this superchain + if len(filteredConfigs) > 0 { + result[superchain] = filteredConfigs + } + } else { + // If no chain IDs specified, include all chains + result[superchain] = configs + } + } + + if len(chainIds) > 0 { + // Ensure all requested chainIds were found + for _, chainId := range chainIds { + if !foundChainIdMap[chainId] { + return nil, fmt.Errorf("chainId %d not found", chainId) + } + } + } + + return result, nil +} + +// fetchChainInfo handles the common logic for creating an op-fetcher instance using it to fetch chain info +func fetchChainInfo(ctx context.Context, lgr log.Logger, l1RpcUrl string, cfg DiskChainConfig) (script.ChainConfig, error) { + fetcher, err := fetch.NewFetcher( + lgr, + l1RpcUrl, + common.HexToAddress(cfg.Config.Addresses.SystemConfigProxy.String()), + common.HexToAddress(cfg.Config.Addresses.L1StandardBridgeProxy.String()), + ) + if err != nil { + return script.ChainConfig{}, fmt.Errorf("error creating fetcher for chain %d: %w", cfg.Config.ChainID, err) + } + + result, err := fetcher.FetchChainInfo(ctx) + if err != nil { + return script.ChainConfig{}, fmt.Errorf("error fetching chain info for chain %d: %w", cfg.Config.ChainID, err) + } + + return script.CreateChainConfig(result), nil +} diff --git a/ops/internal/manage/fetch_onchain_test.go b/ops/internal/manage/fetch_onchain_test.go new file mode 100644 index 0000000000..64bc2615eb --- /dev/null +++ b/ops/internal/manage/fetch_onchain_test.go @@ -0,0 +1,64 @@ +package manage + +import ( + "path/filepath" + "testing" + + "github.com/ethereum-optimism/superchain-registry/ops/internal/config" + "github.com/stretchr/testify/require" +) + +func TestCollectChainsBySuperchain(t *testing.T) { + testdataDir, err := filepath.Abs("testdata") + require.NoError(t, err, "Failed to get absolute path to testdata") + + // Known testdata chainIds + opSepolia := uint64(11155420) + testChain := uint64(1952805748) + + t.Run("all chains", func(t *testing.T) { + chains, err := collectChainsBySuperchain(testdataDir, []uint64{}, []config.Superchain{}) + require.NoError(t, err) + + require.Equal(t, len(chains[config.SepoliaSuperchain]), 2) + require.Equal(t, len(chains[config.MainnetSuperchain]), 0) + require.Equal(t, len(chains[config.SepoliaDev0Superchain]), 0) + }) + + t.Run("single chain", func(t *testing.T) { + chains, err := collectChainsBySuperchain(testdataDir, []uint64{opSepolia}, []config.Superchain{}) + require.NoError(t, err) + + require.Equal(t, len(chains[config.SepoliaSuperchain]), 1) + require.Equal(t, len(chains[config.MainnetSuperchain]), 0) + require.Equal(t, len(chains[config.SepoliaDev0Superchain]), 0) + }) + + t.Run("two chains", func(t *testing.T) { + chains, err := collectChainsBySuperchain(testdataDir, []uint64{opSepolia, testChain}, []config.Superchain{}) + require.NoError(t, err) + + require.Equal(t, len(chains[config.SepoliaSuperchain]), 2) + require.Equal(t, len(chains[config.MainnetSuperchain]), 0) + require.Equal(t, len(chains[config.SepoliaDev0Superchain]), 0) + }) + + t.Run("fails for non-existent chainId", func(t *testing.T) { + _, err := collectChainsBySuperchain(testdataDir, []uint64{999999999}, []config.Superchain{}) + require.Error(t, err) + }) + + t.Run("sepolia superchain", func(t *testing.T) { + chains, err := collectChainsBySuperchain(testdataDir, []uint64{}, []config.Superchain{config.SepoliaSuperchain}) + require.NoError(t, err) + + require.Equal(t, len(chains[config.SepoliaSuperchain]), 2) + require.Equal(t, len(chains[config.MainnetSuperchain]), 0) + require.Equal(t, len(chains[config.SepoliaDev0Superchain]), 0) + }) + + t.Run("fails if both chainIds and superchains are provided", func(t *testing.T) { + _, err := collectChainsBySuperchain(testdataDir, []uint64{opSepolia}, []config.Superchain{config.SepoliaSuperchain}) + require.Error(t, err) + }) +} diff --git a/ops/internal/manage/testdata/expected-chains.md b/ops/internal/manage/testdata/CHAINS.md similarity index 100% rename from ops/internal/manage/testdata/expected-chains.md rename to ops/internal/manage/testdata/CHAINS.md diff --git a/ops/internal/manage/testdata/expected-chainList.json b/ops/internal/manage/testdata/chainList.json similarity index 100% rename from ops/internal/manage/testdata/expected-chainList.json rename to ops/internal/manage/testdata/chainList.json diff --git a/ops/internal/manage/testdata/expected-chainList.toml b/ops/internal/manage/testdata/chainList.toml similarity index 100% rename from ops/internal/manage/testdata/expected-chainList.toml rename to ops/internal/manage/testdata/chainList.toml diff --git a/ops/internal/manage/testdata/superchain/extra/addresses/.gitkeep b/ops/internal/manage/testdata/superchain/extra/addresses/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ops/internal/manage/testdata/expected-addresses.json b/ops/internal/manage/testdata/superchain/extra/addresses/addresses.json similarity index 99% rename from ops/internal/manage/testdata/expected-addresses.json rename to ops/internal/manage/testdata/superchain/extra/addresses/addresses.json index c6468f3af6..0aaa487669 100644 --- a/ops/internal/manage/testdata/expected-addresses.json +++ b/ops/internal/manage/testdata/superchain/extra/addresses/addresses.json @@ -40,7 +40,6 @@ "SystemConfigOwner": "0x0000000000000000000000000000000000000001", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", - "Challenger": null, "Proposer": "0x0000000000000000000000000000000000000001", "UnsafeBlockSigner": "0x0000000000000000000000000000000000000001", "BatchSubmitter": "0x0000000000000000000000000000000000000001" diff --git a/ops/internal/paths/paths.go b/ops/internal/paths/paths.go index 99a08eb960..94d7d8914d 100644 --- a/ops/internal/paths/paths.go +++ b/ops/internal/paths/paths.go @@ -8,6 +8,7 @@ import ( "path" "path/filepath" + "github.com/BurntSushi/toml" "github.com/ethereum-optimism/superchain-registry/ops/internal/config" ) @@ -51,12 +52,39 @@ func ChainConfig(wd string, superchain config.Superchain, shortName string) stri return path.Join(SuperchainDir(wd, superchain), shortName+".toml") } +func SuperchainIds(wd string) (map[config.Superchain]uint64, error) { + superchains, err := Superchains(wd) + if err != nil { + return nil, fmt.Errorf("failed to get superchains: %w", err) + } + + superchainIds := make(map[config.Superchain]uint64) + for _, superchain := range superchains { + superchainFile := SuperchainConfig(wd, superchain) + data, err := os.ReadFile(superchainFile) + if err != nil { + return nil, fmt.Errorf("failed to read superchain config: %w", err) + } + + var superchainDef config.SuperchainDefinition + if err := toml.Unmarshal(data, &superchainDef); err != nil { + return nil, fmt.Errorf("failed to unmarshal superchain config: %w", err) + } + superchainIds[superchain] = superchainDef.L1.ChainID + } + return superchainIds, nil +} + func SuperchainConfig(wd string, superchain config.Superchain) string { return path.Join(SuperchainDir(wd, superchain), "superchain.toml") } +func SuperchainConfigsDir(wd string) string { + return path.Join(wd, "superchain", "configs") +} + func Superchains(wd string) ([]config.Superchain, error) { - configsDir := path.Join(wd, "superchain", "configs") + configsDir := SuperchainConfigsDir(wd) dir, err := os.ReadDir(configsDir) if err != nil { @@ -84,6 +112,18 @@ func AddressesFile(wd string) string { return path.Join(ExtraDir(wd), "addresses", "addresses.json") } +func ChainListJsonFile(wd string) string { + return path.Join(wd, "chainList.json") +} + +func ChainListTomlFile(wd string) string { + return path.Join(wd, "chainList.toml") +} + +func ChainMdFile(wd string) string { + return path.Join(wd, "CHAINS.md") +} + func ValidationsDir(wd string) string { return path.Join(wd, "validation", "standard") } @@ -105,6 +145,10 @@ func RequireDir(p string) error { return nil } +func EnsureDir(p string) error { + return os.MkdirAll(p, 0o755) +} + func RequireRoot(wd string) error { p := StagingDir(wd) if err := RequireDir(p); err != nil { From 51804a33655ddb4feeb0ad88960d9a81acdf6e62 Mon Sep 17 00:00:00 2001 From: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:34:19 -0400 Subject: [PATCH 27/55] codegen: initial use of op-fetcher (#963) --- chainList.json | 170 ++++++++- chainList.toml | 108 ++++++ superchain/extra/addresses/addresses.json | 414 +++++++++------------- 3 files changed, 440 insertions(+), 252 deletions(-) diff --git a/chainList.json b/chainList.json index 5b0225a653..0f75f54ee6 100755 --- a/chainList.json +++ b/chainList.json @@ -16,7 +16,10 @@ "type": "L2", "chain": "mainnet" }, - "gasPayingToken": "0xA2120b9e674d3fC3875f415A7DF52e382F141225" + "gasPayingToken": "0xA2120b9e674d3fC3875f415A7DF52e382F141225", + "faultProofs": { + "status": "none" + } }, { "name": "BOB", @@ -34,6 +37,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -52,6 +58,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -71,7 +80,10 @@ "type": "L2", "chain": "mainnet" }, - "gasPayingToken": "0x04E9D7e336f79Cdab911b06133D3Ca2Cd0721ce3" + "gasPayingToken": "0x04E9D7e336f79Cdab911b06133D3Ca2Cd0721ce3", + "faultProofs": { + "status": "none" + } }, { "name": "Cyber Mainnet", @@ -89,6 +101,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -107,6 +122,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -125,6 +143,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -144,7 +165,10 @@ "type": "L2", "chain": "mainnet" }, - "gasPayingToken": "0xE7C6BF469e97eEB0bFB74C8dbFF5BD47D4C1C98a" + "gasPayingToken": "0xE7C6BF469e97eEB0bFB74C8dbFF5BD47D4C1C98a", + "faultProofs": { + "status": "permissioned" + } }, { "name": "Ink", @@ -162,6 +186,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -180,6 +207,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -198,6 +228,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -216,6 +249,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -234,6 +270,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -252,6 +291,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -270,6 +312,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -288,6 +333,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -306,6 +354,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -324,6 +375,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -342,6 +396,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -360,6 +417,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -378,6 +438,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -396,6 +459,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -414,6 +480,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -432,6 +501,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -450,6 +522,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -468,6 +543,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -486,6 +564,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -504,6 +585,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -522,6 +606,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -540,6 +627,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "none" } }, { @@ -558,6 +648,9 @@ "parent": { "type": "L2", "chain": "mainnet" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -576,6 +669,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -595,7 +691,10 @@ "type": "L2", "chain": "sepolia" }, - "gasPayingToken": "0x46d878bf7BF62Ec542953CB89Ac0bF58d991181e" + "gasPayingToken": "0x46d878bf7BF62Ec542953CB89Ac0bF58d991181e", + "faultProofs": { + "status": "none" + } }, { "name": "Boba Sepolia Testnet", @@ -613,6 +712,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -631,6 +733,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -649,6 +754,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -667,6 +775,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -685,6 +796,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -703,6 +817,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -721,6 +838,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -739,6 +859,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -757,6 +880,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -775,6 +901,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -793,6 +922,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -811,6 +943,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -829,6 +964,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -847,6 +985,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -865,6 +1006,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -883,6 +1027,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -901,6 +1048,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -919,6 +1069,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "permissioned" } }, { @@ -937,6 +1090,9 @@ "parent": { "type": "L2", "chain": "sepolia" + }, + "faultProofs": { + "status": "none" } }, { @@ -955,6 +1111,9 @@ "parent": { "type": "L2", "chain": "sepolia-dev-0" + }, + "faultProofs": { + "status": "permissionless" } }, { @@ -973,6 +1132,9 @@ "parent": { "type": "L2", "chain": "sepolia-dev-0" + }, + "faultProofs": { + "status": "permissionless" } } ] \ No newline at end of file diff --git a/chainList.toml b/chainList.toml index a24b9f739d..6224d54320 100755 --- a/chainList.toml +++ b/chainList.toml @@ -11,6 +11,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "BOB" @@ -24,6 +26,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Base" @@ -37,6 +41,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Binary Mainnet" @@ -51,6 +57,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Cyber Mainnet" @@ -64,6 +72,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Ethernity" @@ -77,6 +87,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Funki" @@ -90,6 +102,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "HashKey Chain" @@ -104,6 +118,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Ink" @@ -117,6 +133,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Lisk" @@ -130,6 +148,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Lyra Chain" @@ -143,6 +163,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Metal L2" @@ -156,6 +178,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Mint Mainnet" @@ -169,6 +193,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Mode" @@ -182,6 +208,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "OP Mainnet" @@ -195,6 +223,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Orderly Mainnet" @@ -208,6 +238,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Polynomial" @@ -221,6 +253,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "RACE Mainnet" @@ -234,6 +268,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Redstone" @@ -247,6 +283,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Settlus Mainnet" @@ -260,6 +298,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Shape" @@ -273,6 +313,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "SnaxChain" @@ -286,6 +328,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Soneium" @@ -299,6 +343,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Superseed" @@ -312,6 +358,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Swan Chain Mainnet" @@ -325,6 +373,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Swellchain" @@ -338,6 +388,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Unichain" @@ -351,6 +403,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "World Chain" @@ -364,6 +418,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Xterio Chain (ETH)" @@ -377,6 +433,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "Zora" @@ -390,6 +448,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "none" [[chains]] name = "arena-z" @@ -403,6 +463,8 @@ [chains.parent] type = "L2" chain = "mainnet" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Base Sepolia Testnet" @@ -416,6 +478,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Binary Sepolia" @@ -430,6 +494,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Boba Sepolia Testnet" @@ -443,6 +509,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Creator Chain Testnet" @@ -456,6 +524,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Cyber Testnet" @@ -469,6 +539,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Ethernity Testnet" @@ -482,6 +554,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Funki Sepolia Testnet" @@ -495,6 +569,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Ink Sepolia" @@ -508,6 +584,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Lisk Sepolia Testnet" @@ -521,6 +599,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Metal L2 Testnet" @@ -534,6 +614,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Mode Testnet" @@ -547,6 +629,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "OP Sepolia Testnet" @@ -560,6 +644,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "Pivotal Sepolia" @@ -573,6 +659,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "RACE Testnet" @@ -586,6 +674,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Settlus Sepolia" @@ -599,6 +689,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Shape Sepolia Testnet" @@ -612,6 +704,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Soneium Testnet Minato" @@ -625,6 +719,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Unichain Sepolia Testnet" @@ -638,6 +734,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "World Chain Sepolia Testnet" @@ -651,6 +749,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "Zora Sepolia Testnet" @@ -664,6 +764,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "permissioned" [[chains]] name = "arena-z-testnet" @@ -677,6 +779,8 @@ [chains.parent] type = "L2" chain = "sepolia" + [chains.fault_proofs] + status = "none" [[chains]] name = "Base devnet 0" @@ -690,6 +794,8 @@ [chains.parent] type = "L2" chain = "sepolia-dev-0" + [chains.fault_proofs] + status = "permissionless" [[chains]] name = "OP Labs Sepolia devnet 0" @@ -703,3 +809,5 @@ [chains.parent] type = "L2" chain = "sepolia-dev-0" + [chains.fault_proofs] + status = "permissionless" diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index 4cee5330a7..9af2506d91 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -1,72 +1,74 @@ { "10": { "AddressManager": "0xdE1FCfB0851916CA5101820A69b13a4E276bd81F", - "AnchorStateRegistryProxy": "0x18DAc71c228D1C32c99489B7323d441E1175e443", + "AnchorStateRegistryProxy": "0x1c68ECfbf9C8B1E6C0677965b3B9Ecf9A104305b", "BatchSubmitter": "0x6887246668a3b87F54DeB3b94Ba47a6f63F32985", "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", - "DelayedWETHProxy": "0x82511d494B5C942BE57498a70Fdd7184Ee33B975", + "DelayedWETHProxy": "0x323dFC63c9B83CB83f40325AaB74b245937cbdF0", "DisputeGameFactoryProxy": "0xe5965Ab5962eDc7477C8520243A95517CD252fA9", - "FaultDisputeGame": "0xA6f3DFdbf4855a43c529bc42EDE96797252879af", + "FaultDisputeGame": "0xbA94955CA3422fC57f9D982a0BaD2a9c88e2a9D0", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1", "L1ERC721BridgeProxy": "0x5a7749f83b81B301cAb5f48EB8516B986DAef23D", "L1StandardBridgeProxy": "0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1", - "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0x75505a97BD334E7BD3C476893285569C4136Fa0F", "OptimismPortalProxy": "0xbEb5Fc579115071764c7423A4f12eDde41f106Ed", - "PermissionedDisputeGame": "0x050ed6F6273c7D836a111E42153BC00D0380b87d", - "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", + "PermissionedDisputeGame": "0xd113ad136a0dF1c7FfB7F1606Be1c778bCfE2f3b", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x473300df21D047806A082244b417f96b32f13A33", "ProxyAdmin": "0x543bA4AADBAb8f9025686Bd03993043599c6fB04", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0x847B5c174615B1B7fDF770882256e2D3E95b9D92", "SystemConfigProxy": "0x229047fed2591dbec1eF1118d64F7aF3dB9EB290", "UnsafeBlockSigner": "0xAAAA45d9549EDA09E70937013520214382Ffc4A2" }, "11011": { "AddressManager": "0x42721d8512d62aA26B2Cfa1AE18bEEd5a9Ab1337", - "AnchorStateRegistryProxy": "0x41ea3c370896632121Cdde1b94a4eCcf23DA4532", + "AnchorStateRegistryProxy": "0x1d5c8daABf84b2b2DA7e4fdcf4e9b7095964689F", "BatchSubmitter": "0x6fF556Fa7CaFEc55aE77C5C1d58A010be75f9991", - "Challenger": "0xa9ABe4af69BEA2f381ca600f625Eb3E6b7559266", - "DelayedWETHProxy": "0x7cc9cA91BA4f92F4C967E93a1AAd97beB18d3877", - "DisputeGameFactoryProxy": "0x93eaa7A1E7d7af7eD9D612F9957988C8631c33e8", - "Guardian": "0xa9ABe4af69BEA2f381ca600f625Eb3E6b7559266", + "Challenger": "0x945185C01fb641bA3E63a9bdF66575e35a407837", + "DelayedWETHProxy": "0xe1Ed4c6D1960563D62e54633a00d2B4D777af1cb", + "DisputeGameFactoryProxy": "0x575697F2c20Bd63415E5B24656d935D4b81b8220", + "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xF9F730650e1AB4D23E2ac983934271ca7c5EF293", "L1ERC721BridgeProxy": "0x19f02c55254d2644eF94f30C74A932D64e1D4F86", "L1StandardBridgeProxy": "0x341ab1DAFdfB73b3D6D075ef10b29e3cACB2A653", - "L2OutputOracleProxy": "0x532dDCed3440Eab81c529Ac8b0d7e429B5C05c52", - "MIPS": "0xaCf1Ed7357E41f652407ae6cFE1024705c758C38", + "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0x46085E2e648488e49FBeaF6544b8e9Dc96df8BDd", "OptimismPortalProxy": "0xfF8Ca2B4d8122E41441F7ccDCf61b8692198Bd1E", - "PreimageOracle": "0x8F3B1c59eD4439ebF564604aA4B93130DA4CD1D5", + "PermissionedDisputeGame": "0x24A7be4E07D5b19CB4cE6c9374dE00F628830b7a", + "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", "Proposer": "0xf8Ed03b83c15aa3d0b52095F3c9971225948B777", "ProxyAdmin": "0xd60a706Bf6108F090d055787B9B353FA7EEE1355", - "ProxyAdminOwner": "0x4c4526C8C55c4e1a6F2aaf91e37f07c97786e0f5", - "SuperchainConfig": "0xe5b3692266FF4Ab8A96A9C7Da6EeEe532CCc7916", + "ProxyAdminOwner": "0x945185C01fb641bA3E63a9bdF66575e35a407837", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0xa9ABe4af69BEA2f381ca600f625Eb3E6b7559266", "SystemConfigProxy": "0xa1aC91ED91EbE40E00d61E233c8026318b4da5fb", "UnsafeBlockSigner": "0xbB4f4B3a46361653BE9DB255D8ff2D004F0FB248" }, "11155420": { "AddressManager": "0x9bFE9c5609311DF1c011c47642253B78a4f33F4B", - "AnchorStateRegistryProxy": "0x218CD9489199F321E1177b56385d333c5B598629", + "AnchorStateRegistryProxy": "0xDB2727Fc71176Bf8ED630F4142e0439733588e85", "BatchSubmitter": "0x8F23BB38F531600e5d8FDDaAEC41F13FaB46E98c", "Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "DelayedWETHProxy": "0xcdFdC692a53B4aE9F81E0aEBd26107Da4a71dB84", "DisputeGameFactoryProxy": "0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1", - "FaultDisputeGame": "0xF3CcF0C4b51D42cFe6073F0278c19A8D1900e856", + "FaultDisputeGame": "0x1851253aD7214F7b39E541befB6626669Cb2446f", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef", "L1ERC721BridgeProxy": "0xd83e03D576d23C9AEab8cC44Fa98d058D2176D1f", "L1StandardBridgeProxy": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1", - "MIPS": "0x47B0E34C1054009e696BaBAAd56165e1e994144d", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0x868D59fF9710159C2B330Cc0fBDF57144dD7A13b", "OptimismPortalProxy": "0x16Fc5058F25648194471939df75CF27A2fdC48BC", - "PermissionedDisputeGame": "0xbbDBdfe37C02439764dE0e41C906e4396B5B3914", - "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", + "PermissionedDisputeGame": "0x7717296CAC5d39d362eB77a94c95483bEbAe214e", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x49277EE36A024120Ee218127354c4a3591dc90A9", "ProxyAdmin": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "SystemConfigProxy": "0x034edD2A225f7f429A63E0f1D2084B9E0A93b538", "UnsafeBlockSigner": "0x57CACBB0d30b01eb2462e5dC940c161aff3230D3" @@ -78,19 +80,20 @@ "Challenger": "0x8c20c40180751d93E939DDDee3517AE0d1EBeAd2", "DelayedWETHProxy": "0xE99696a028171e31a72828A196C27c2Dd670E1aa", "DisputeGameFactoryProxy": "0x2419423C72998eb1c6c15A235de2f112f8E38efF", - "FaultDisputeGame": "0x54416A2E28E8cbC761fbce0C7f107307991282e5", + "FaultDisputeGame": "0x030aca4aea0CF48BD53dca03b34e35D05B9635C7", "Guardian": "0x8c20c40180751d93E939DDDee3517AE0d1EBeAd2", "L1CrossDomainMessengerProxy": "0x18e72C15FEE4e995454b919EfaA61D8f116F82dd", "L1ERC721BridgeProxy": "0x1bb726658E039E8a9A4ac21A41fE5a0704760461", "L1StandardBridgeProxy": "0x6D8bC564EF04AaF355a10c3eb9b00e349dd077ea", - "MIPS": "0xceDE5949A189aC60F41F1385a86DBce7Bd3B1943", + "MIPS": "0x2B82752b3809A6B7f1662536aF72c519000610e3", "OptimismMintableERC20FactoryProxy": "0xA16b8db3b5Cdbaf75158F34034B0537e528E17e2", "OptimismPortalProxy": "0x76114bd29dFcC7a9892240D317E6c7C2A281Ffc6", - "PermissionedDisputeGame": "0x50573970b291726B881b204eD9F3c1D507e504cD", + "PermissionedDisputeGame": "0x4001542871a610A551b11DCAaeA52dC5CA6FDB6a", "PreimageOracle": "0xB73342DdD69620e5Ab2Cc604Dad46434C2338025", "Proposer": "0x95014c45078354Ff839f14192228108Eac82E00A", "ProxyAdmin": "0x18d890A46A3556e7F36f28C79F6157BC7a59f867", "ProxyAdminOwner": "0x4377BB0F0103992b31eC12b4d796a8687B8dC8E9", + "SuperchainConfig": "0x02d91Cf852423640d93920BE0CAdceC0E7A00FA7", "SystemConfigOwner": "0x8c20c40180751d93E939DDDee3517AE0d1EBeAd2", "SystemConfigProxy": "0xa6b72407e2dc9EBF84b839B69A24C88929cf20F7", "UnsafeBlockSigner": "0xa95B83e39AA78B00F12fe431865B563793D97AF5" @@ -98,17 +101,11 @@ "111557560": { "AddressManager": "0x4E9874640d6a670B7F4c7A1370bC303Bb46F360f", "BatchSubmitter": "0x90BB84339856530192CD002533cd7f1290Fc5142", - "Challenger": "0x66530799037b46913e52e9e0144D15ab6ed954f5", - "DisputeGameFactoryProxy": "0x99f0f9B0E7B16B10042E0935CE34F2fCebBE13C1", "Guardian": "0x66530799037b46913e52e9e0144D15ab6ed954f5", "L1CrossDomainMessengerProxy": "0xB88ee11d822bEc8055f19711458dE8593E7117A3", - "L1ERC721BridgeProxy": "0x524e85D2B49497561c53EFEB4B126Aa63883B480", "L1StandardBridgeProxy": "0xAA1bD6D4d8cFD37330a917bc678CB38BEFAf44E6", "L2OutputOracleProxy": "0xD94Ce9E4886A6dcEbC7cF993f4b38F5276516643", - "MIPS": "0xD0E6c40D8462466633BAa2d24796d788A08b2e9F", - "OptimismMintableERC20FactoryProxy": "0xCfc893490072F14F19ed6dF2b0d985f908ACEE50", "OptimismPortalProxy": "0x06C9Cadb0346c8E142fb8299cEF3EB5120d4c9b6", - "PreimageOracle": "0xceF1e04Fd7413C4a7287DF9099Ac57EEd48fB8f2", "Proposer": "0x69ffD6a97141B632631Ef7f56cCeA6a36f02bD7F", "ProxyAdmin": "0x6FcE62e16720BE713e77C954d6f1e6bC8B8d9F48", "ProxyAdminOwner": "0x642A102cD63f039930f99b4657f41Fd4AD7699d6", @@ -120,8 +117,6 @@ "1135": { "AddressManager": "0x2dF7057d3F25212E51aFEA8dA628668229Ea423f", "BatchSubmitter": "0xa6Ea2f3299b63c53143c993d2d5E60A69Cd6Fe24", - "Challenger": "0xBeA2Bc852a160B8547273660E22F4F08C2fa9Bbb", - "DisputeGameFactoryProxy": "0x0479e6757eb4743843b309DDDF78E6bA242F38BE", "Guardian": "0xBeA2Bc852a160B8547273660E22F4F08C2fa9Bbb", "L1CrossDomainMessengerProxy": "0x31B72D76FB666844C41EdF08dF0254875Dbb7edB", "L1ERC721BridgeProxy": "0x3A44A3b263FB631cdbf25f339e2D29497511A81f", @@ -139,18 +134,25 @@ }, "11763072": { "AddressManager": "0x882a60911d00867Fe4ea632C479cc48e583A8D69", + "AnchorStateRegistryProxy": "0xfb17A817168BD4DFd48Fb6C9fd07B4409501e3E0", "BatchSubmitter": "0x7A43fD33e42054C965eE7175dd4590D2BDba79cB", - "Challenger": "0x5a533AaAC6cd81605b301a1077BC393A94658B6D", - "Guardian": "0x4F43c7422a9b2AC4BC6145Bd4eE206EA73cF8266", + "Challenger": "0x9892742025C43cdBb22034Df7486E55aE4C476d4", + "DelayedWETHProxy": "0x9dc3d8500c295e95D5C4EBDeD3222a74fF19e524", + "DisputeGameFactoryProxy": "0xe545eDE9d1FaDaD12984c31467F56405884b9398", + "FaultDisputeGame": "0x6bcD345Cf9dF8eD3aA9b0a66aC1cC1414d8238b9", + "Guardian": "0x8c20c40180751d93E939DDDee3517AE0d1EBeAd2", "L1CrossDomainMessengerProxy": "0x2cbD403d5BA3949D24ee4dF57805eaC612C2662f", "L1ERC721BridgeProxy": "0xc3016ED03E087d092d576B585F5222fFD9cadc10", "L1StandardBridgeProxy": "0x5638e55db5Fcf7A58df525F1098E8569C8DbA80c", - "L2OutputOracleProxy": "0xB5901509329307E3f910f333Fa9C4B4A8EE7CE1A", + "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0xEAa11178375e6B1078d815d6F9F85cBbb69b09Cd", "OptimismPortalProxy": "0x579c82A835B884336B632eeBeCC78FA08D3291Ec", - "Proposer": "0xf99C2Da4822Af652fe1BF55F99713980efe5D261", + "PermissionedDisputeGame": "0x0941dACCAaDE2EDf36614d5eF0e1cb6ee8676cD4", + "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", + "Proposer": "0xBcB04FC753D36dcEeBe9Df7E18E23c46D1fcEA3c", "ProxyAdmin": "0xC5aE9023bFA79124ffA50169E1423E733D0166f1", "ProxyAdminOwner": "0xAf6E0E871f38c7B653700F7CbAEDafaa2784D430", + "SuperchainConfig": "0x02d91Cf852423640d93920BE0CAdceC0E7A00FA7", "SystemConfigOwner": "0xAf6E0E871f38c7B653700F7CbAEDafaa2784D430", "SystemConfigProxy": "0x7F67DC4959cb3E532B10A99F41bDD906C46FdFdE", "UnsafeBlockSigner": "0xfd7bc3C58Fe4D4296F11F7843ebbA84D729A24B9" @@ -167,7 +169,7 @@ "L1CrossDomainMessengerProxy": "0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6", "L1ERC721BridgeProxy": "0xD04D0D87E0bd4D2E50286760a3EF323FeA6849Cf", "L1StandardBridgeProxy": "0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA", - "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4", + "MIPS": "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C", "OptimismMintableERC20FactoryProxy": "0xA2B597EaeAcb6F627e088cbEaD319e934ED5edad", "OptimismPortalProxy": "0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2", "PermissionedDisputeGame": "0xC457172937fFa9306099ec4F2317903254Bf7223", @@ -182,43 +184,39 @@ }, "1301": { "AddressManager": "0xEf1295ED471DFEC101691b946fb6B4654E88f98A", - "AnchorStateRegistryProxy": "0xf971F1b0D80eb769577135b490b913825BfcF00B", + "AnchorStateRegistryProxy": "0x042395c8cC570A20288911dc32E75Beae82aaaa2", "BatchSubmitter": "0x4AB3387810eF500bfe05a49dc53A44C222cbab3e", "Challenger": "0x921D59f383E9B86b3161a356013b6F8b40CF43C4", + "DelayedWETHProxy": "0x4E7e6dC46CE003A1E353B6848BF5a4fc1FeAC8Ae", "DisputeGameFactoryProxy": "0xeff73e5aa3B9AEC32c659Aa3E00444d20a84394b", - "Guardian": "0xD032D9E1F3b3ca6362EC56FbC9d689565F759825", + "FaultDisputeGame": "0x4745808Cc649f290439763214fC40Ac905806d8D", + "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x448A37330A60494E666F6DD60aD48d930AEbA381", "L1ERC721BridgeProxy": "0x4696b5e042755103fe558738Bcd1ecEe7A45eBfe", "L1StandardBridgeProxy": "0xea58fcA6849d79EAd1f26608855c2D6407d54Ce2", - "MIPS": "0x1cEc5b1954302F6FAf45515145C72d7f7266546c", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0xDf7977C3005730329A160637E8CB9f1675A4d9Be", "OptimismPortalProxy": "0x0d83dab629f0e0F9d36c0Cbc89B69a489f0751bD", - "PermissionedDisputeGame": "0x2A82958845ddc647cE1D45F44a7038d6A2D363Ac", - "PreimageOracle": "0xAd0a6f4F1503048C34D90dF845c37c876407355a", + "PermissionedDisputeGame": "0x2275D0c824116aD516987048fFfaBAC6B0C3A29B", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xA25B0eF1CC3ee12a0a167B5BF44dB1a9c166474e", "ProxyAdmin": "0x2BF403E5353A7a082ef6bb3Ae2Be3B866D8D3ea4", "ProxyAdminOwner": "0xd363339eE47775888Df411A163c586a8BdEA9dbf", "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", - "SystemConfigOwner": "0xB6185370E3db2472EC7Ec4A2826954D2d4923B9f", + "SystemConfigOwner": "0x325B777f8F0bC71fb6b617Bc41A8703CA7077891", "SystemConfigProxy": "0xaeE94b9aB7752D3F7704bDE212c0C6A0b701571D", "UnsafeBlockSigner": "0x565B71025Ab4de80AcA33c62E51439af56301493" }, "16481": { "AddressManager": "0x40601f9c44ec842E3fAA45CAd15d475B450d9277", - "AnchorStateRegistryProxy": "0x76b5568B3FE823c8D4Dbb1d64e055F9e8D847fAb", "BatchSubmitter": "0xc122b4d47644BBD7A98E41Dd242D20054A11f720", - "Challenger": "0xC121E7f785AC0E5B1da6C7316326412D1c4Eb28c", - "DelayedWETHProxy": "0xE446Ecee5BD4102f6366ef3551906ADc40f3Fc2A", - "DisputeGameFactoryProxy": "0xcB97C9224Af16C95b8D8959A2752eF1832EB8BA9", "Guardian": "0xC121E7f785AC0E5B1da6C7316326412D1c4Eb28c", "L1CrossDomainMessengerProxy": "0x1F6393C113b9C221fbcFB17c163C88d4bDa172b0", "L1ERC721BridgeProxy": "0x079ba88EDD1BE4FEFb5011B61714Df9eF092Ad8f", "L1StandardBridgeProxy": "0x788De2B0Dd35808a05eAFf7aAf5578B21E0dd9A7", "L2OutputOracleProxy": "0x8A5F3B0897d9B9bA09fd2974F3aBE038C15AaBa9", - "MIPS": "0x183A472b3e8724d4309895c8F1615Ad49b6cC469", "OptimismMintableERC20FactoryProxy": "0x9aEe2cF874fe76bF91cD63722Db45212bE48C5e3", "OptimismPortalProxy": "0x923B28e0037A799A1e60368e60c92dFfba982162", - "PreimageOracle": "0xb3AAb329abB207583659E2546e9f24F32eA668e1", "Proposer": "0xC12309Aac4bd25DBF7Df460fdDd93f621ee5DA3B", "ProxyAdmin": "0xd79bd9c4A711D053c7F2e62526e3c4442B6b526f", "ProxyAdminOwner": "0x1D60661F40ACC64E38fcAdE8979D22a9B9278E6E", @@ -230,7 +228,6 @@ "1740": { "AddressManager": "0x394f844B9A0FC876935d1b0b791D9e94Ad905e8b", "BatchSubmitter": "0xdb80Eca386AC72a55510e33CF9CF7533e75916eE", - "Challenger": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x5D335Aa7d93102110879e3B54985c5F08146091E", "L1ERC721BridgeProxy": "0x5d6cE6917dBeeacF010c96BfFdaBE89e33a30309", @@ -238,15 +235,17 @@ "L2OutputOracleProxy": "0x75a6B961c8da942Ee03CA641B09C322549f6FA98", "OptimismMintableERC20FactoryProxy": "0x49Ff2C4be882298e8CA7DeCD195c207c42B45F66", "OptimismPortalProxy": "0x01D4dfC994878682811b2980653D03E589f093cB", + "Proposer": "0x2D70F9A866dE34C0f738F8cb2AF1361b5aF18CAa", "ProxyAdmin": "0xF7Bc4b3a78C7Dd8bE9B69B3128EEB0D6776Ce18A", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0x23BA22Dd7923F3a3f2495bB32a6f3c9b9CD1EC6C", - "SystemConfigProxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2" + "SystemConfigProxy": "0x5D63A8Dc2737cE771aa4a6510D063b6Ba2c4f6F2", + "UnsafeBlockSigner": "0x3C1A357c4c77843d34750dBee68C589ACB4F5f9B" }, "1750": { "AddressManager": "0xd4b1EC0DEc3C7F12abD3ec27B7514880ae1C3a37", "BatchSubmitter": "0xC94C243f8fb37223F3EB2f7961F7072602A51B8B", - "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x0a47A44f1B2bb753474f8c830322554A96C9934D", "L1ERC721BridgeProxy": "0x50D700e97967F9115e3f999bDB263d69F6704680", @@ -257,6 +256,7 @@ "Proposer": "0xC8187d40AD440328104A52BBed2D8Efc5ab1F1F6", "ProxyAdmin": "0x37Ff0ae34dadA1A95A4251d10ef7Caa868c7AC99", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "SystemConfigProxy": "0x7BD909970B0EEdcF078De6Aeff23ce571663b8aA", "UnsafeBlockSigner": "0x4a65F5da5e80DEFfEA844eAa15CE130e80605dc5" @@ -264,43 +264,38 @@ "177": { "AddressManager": "0x679A65aD62972Ea3561F40A12e93CcA6f79F35E6", "AnchorStateRegistryProxy": "0x4deC2aA521108d78d983c0c12656c6CF8631F2ED", - "BatchSubmitter": "0x9391791f7CB74F8BFDA65edc0749efd964311b55", + "BatchSubmitter": "0xf09ebb62b5ba0cf402b77aBA61691cBCf005206f", "Challenger": "0xFCF35CeE40325db21c3dc5b45849251E78Be47eb", "DelayedWETHProxy": "0xBb70D595147A141e268532BFEF61A8c25054d26D", "DisputeGameFactoryProxy": "0x04Ec030f362CE5A0b5Fe2d4B4219f287C2EBDE50", + "FaultDisputeGame": "0xC3E7f3606aeAC543bD268a637c6847E92d69B8aA", "Guardian": "0xC7fCbE26c1Db751d63869F72F782a56710f6be5A", "L1CrossDomainMessengerProxy": "0x899F07862D3A03F70E07b7f01183934b485d2e97", "L1ERC721BridgeProxy": "0xd4C83D93c6fAE3E0804B785F9Cf465BE95449D04", "L1StandardBridgeProxy": "0x2171E6d3B7964fA9654Ce41dA8a8fFAff2Cc70be", - "L2OutputOracleProxy": "0x1c8D97E21f868f8b87fa9B16Fc77d46d7B0b48A2", "MIPS": "0x7447b25b91336127042CC6899B2C15668a1Ab8BA", "OptimismMintableERC20FactoryProxy": "0x0407af506d86bFA5e401099b2fC2355590638f19", "OptimismPortalProxy": "0xe7Aa79B59CAc06F9706D896a047fEb9d3BDA8bD3", + "PermissionedDisputeGame": "0x78075eA46A562c3201E61664645c0f0537a8DDd5", "PreimageOracle": "0x5B9bEf4d8C36FB013c70d0A6F455807c6BD5270b", - "Proposer": "0x66b8F8425ecB610239e79E3517feFddCf85Af41a", + "Proposer": "0xC55763132E9b76766D62e59728b3933F54C998C5", "ProxyAdmin": "0x7986eD289935A0F47FC434C00cDE309fE2c51f1C", "ProxyAdminOwner": "0x441F31C4cdf772558D4EA31f3114de59aE145E7c", "SuperchainConfig": "0xfd1255b6c09D939E7F3896A16C32CDBCD6F8B40A", "SystemConfigOwner": "0x29Fbda675Fa5a07B621C2C1a6E3F874C14F612F3", "SystemConfigProxy": "0x43F8DeFe3E9286D152E91BB16a248808E7247198", - "UnsafeBlockSigner": "0xBc80De532cf87543aaD3267Cc8A4cAA2813130E7" + "UnsafeBlockSigner": "0xCc467FdB41B5b5A4E23021CAd69ED27550a41694" }, "183": { "AddressManager": "0x464Ca56D40f94E8A50eFa7F5b90c59D956a0efC9", - "AnchorStateRegistryProxy": "0x31EE18F4dbCa6A9C8599508Ec70aB98cb1118e9e", "BatchSubmitter": "0x43Ca061Ea80FBB4A2b5515F4be4e953b191147aF", - "Challenger": "0xBeA2Bc852a160B8547273660E22F4F08C2fa9Bbb", - "DelayedWETHProxy": "0xde1999df1f225D638ad3ca2C9EB5b2E52730D950", - "DisputeGameFactoryProxy": "0xFcdb270B674911D321F1014c347EaBB1c55134FB", "Guardian": "0xBeA2Bc852a160B8547273660E22F4F08C2fa9Bbb", "L1CrossDomainMessengerProxy": "0x226A1e4A3D8e64A9De8423F9344348c179C72CB2", "L1ERC721BridgeProxy": "0x00050ae93fBFaf5823A4ae229E4651F7F7A02FfA", "L1StandardBridgeProxy": "0x908C324c35fF36F64236A7CDa4D50f3003E9C5C3", "L2OutputOracleProxy": "0x0eB331B615030819464225Ecd373e5FFBE502DC4", - "MIPS": "0x94cE3d0B2243250d3f33dF45FAaEac273CA945fE", "OptimismMintableERC20FactoryProxy": "0x45BEaf3Bd26b76796692b1Ef1E67469B84ADB914", "OptimismPortalProxy": "0xDA29f0B4da6c23f6c1aF273945c290C0268c4ea9", - "PreimageOracle": "0xA0455F010561671c640d80f51851D51318aC32aB", "Proposer": "0xF49212F977986347b73345D382a811e148751eED", "ProxyAdmin": "0x0bc380347A0B7aF5453492CAF20e1E38bc0Abc2f", "ProxyAdminOwner": "0xB68361AAac2Bc8a4b8BFe36B8C6d0B429b5930ea", @@ -312,13 +307,10 @@ "185": { "AddressManager": "0xEa4165C5CDCA155779803A113d8391b741bA5228", "BatchSubmitter": "0x68bdFecE01535090c8f3C27ec3b1AE97E83fA4aA", - "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "Guardian": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "L1CrossDomainMessengerProxy": "0xf80be9f7a74ab776b69d3F0dC5C08c39b3A0bA19", - "L1ERC721BridgeProxy": "0xC2C908F3226d9082130D8e48378CD2eFb08B521D", "L1StandardBridgeProxy": "0x2b3F201543adF73160bA42E1a5b7750024F30420", "L2OutputOracleProxy": "0xB751A613f2Db932c6cdeF5048E6D2af05F9B98ED", - "OptimismMintableERC20FactoryProxy": "0xF02012065Ef6121a2A59EA0C590f42803Cf101EA", "OptimismPortalProxy": "0x59625d1FE0Eeb8114a4d13c863978F39b3471781", "Proposer": "0x3d53Df1e69A32F98dFCcf23CCB689763E21A78bA", "ProxyAdmin": "0xc684075a7Cc997Aa2e72152c330BDAc73FeacbDF", @@ -329,20 +321,20 @@ }, "1868": { "AddressManager": "0xB24bFEeCE1B3b7A44559F4Cbc21BeD312b130b70", - "AnchorStateRegistryProxy": "0x61f89A381E0BE13BD8Ab356cf4B7301BC97d7522", + "AnchorStateRegistryProxy": "0x190B6ecEE5A2ddF39669288B9B8daEa4641ae8b1", "BatchSubmitter": "0x6776BE80dBAda6A02B5F2095cF13734ac303B8d1", "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", - "DelayedWETHProxy": "0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f", + "DelayedWETHProxy": "0x9AEA1FD851b63d57Ba4Fc556B0e0c170126C9EAf", "DisputeGameFactoryProxy": "0x512A3d2c7a43BD9261d2B8E8C9c70D4bd4D503C0", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x9CF951E3F74B644e621b36Ca9cea147a78D4c39f", "L1ERC721BridgeProxy": "0x5933e323bE8896DfaCd1cD671442F27dAA10a053", "L1StandardBridgeProxy": "0xeb9bf100225c214Efc3E7C651ebbaDcF85177607", - "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0xc1047e30EFC9E172cFe7aa0219895B6a43fC415F", "OptimismPortalProxy": "0x88e529A6ccd302c948689Cd5156C83D4614FAE92", - "PermissionedDisputeGame": "0x42D15f045159Ce4adE9EDC7da5704eF36056c936", - "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", + "PermissionedDisputeGame": "0x1661af719956198628F7e67087F19f8A79524a1d", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x400c164C4a8cA84385B70EEd6eB03ea847c8E1b8", "ProxyAdmin": "0x89889B569c3a505f3640ee1Bd0ac1D557f436D2a", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", @@ -354,7 +346,7 @@ "1923": { "AddressManager": "0xa54a84f17c2180148c762D79bC57BdfF7FdAFC8A", "AnchorStateRegistryProxy": "0x14387438EE964e826A4EAeB95B2BCe7754174dD1", - "BatchSubmitter": "0xf854cd5B26bfd73d51236c0122798907Ed65B1f2", + "BatchSubmitter": "0xeb18EA5dEDeE42e7af378991DFEb719D21c17b4C", "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", "DelayedWETHProxy": "0x89c98736A806176Fe85283c1cB727ffBdeaf37A9", "DisputeGameFactoryProxy": "0x87690676786cDc8cCA75A472e483AF7C8F2f0F57", @@ -373,24 +365,24 @@ "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0x06F7fB1C74147e34Fce04a6828c7BF809B038d0E", "SystemConfigProxy": "0xD3d4c6B703978a5d24FecF3a70a51127667Ff1A4", - "UnsafeBlockSigner": "0x6967D304E9b7E26b5eb3f5A1FD1239DaAD3215E6" + "UnsafeBlockSigner": "0xc28bAd2A2D3E915d132795D2963D0e0459664D68" }, "1946": { "AddressManager": "0x6e8A77673109783001150DFA770E6c662f473DA9", - "AnchorStateRegistryProxy": "0xa4AbebA1612Cf731843460791e1A925c84d0991C", + "AnchorStateRegistryProxy": "0x2f3432d169128c49881Cc190520bE6096a9A8D2c", "BatchSubmitter": "0xF0AB0441c8f4B89b561aE685B98c6aD5175e0CAB", "Challenger": "0xB278818732E5BEbb742dc4Aa0617ccd1Dec76b65", + "DelayedWETHProxy": "0xf6Db90462FEbEB7567fBD064d2ff14a8d0280f3E", "DisputeGameFactoryProxy": "0xB3Ad2c38E6e0640d7ce6aA952AB3A60E81bf7a01", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x0184245D202724dc28a2b688952Cb56C882c226F", "L1ERC721BridgeProxy": "0x2bfb22cd534a462028771a1cA9D6240166e450c4", "L1StandardBridgeProxy": "0x5f5a404A5edabcDD80DB05E8e54A78c9EBF000C2", - "L2OutputOracleProxy": "0x710e5286C746eC38beeB7538d0146f60D27be343", - "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0x6069BC38c6185f2db0d161f08eC8d1657F6078Df", "OptimismPortalProxy": "0x65ea1489741A5D72fFdD8e6485B216bBdcC15Af3", - "PermissionedDisputeGame": "0x3D570de1039B337bE88934A778A8ff0E9FB274D2", - "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", + "PermissionedDisputeGame": "0x2087cbc6eC893a31405D56025Cd1aE648dA3982c", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xa759A2C80Ec4C6421829862da30dD34436114502", "ProxyAdmin": "0xff9d236641962Cebf9DBFb54E7b8e91F99f10Db0", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", @@ -401,20 +393,14 @@ }, "2192": { "AddressManager": "0xd7BF8B8618c21F337d8eD30aC797Fa330eb94411", - "AnchorStateRegistryProxy": "0xe184371E73A90f7676A3f518964B409c49aF17B2", "BatchSubmitter": "0x060b915cA4904b56adA63565626b9c97F6CaD212", - "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", - "DelayedWETHProxy": "0xface4DD95FF0Ce212928C7B6D160b84D6df28BB2", - "DisputeGameFactoryProxy": "0x8aF5b3ED56D4a822532A07a84C499d600eCD5cf5", "Guardian": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", "L1CrossDomainMessengerProxy": "0x2A4fC0E3B365052d71B9853Efd0123985559f62E", "L1ERC721BridgeProxy": "0x45561F85e43Ac0d2258c0F0C16540ce128EA1634", "L1StandardBridgeProxy": "0xA5fb68C24b02852e8B514E98A1014faf12547Fa5", "L2OutputOracleProxy": "0xF8f3EbF2469C00A00EA9D1D04913B73896268B25", - "MIPS": "0x10C68eE05b4f9773b5D77b9eb7023DDe3F8D7741", "OptimismMintableERC20FactoryProxy": "0xeEC78bcEA0EfBbA6e1BE7aFc58C93b70f97d3A6A", "OptimismPortalProxy": "0x936D881b4760D5e9b6D55b774f65c509236b4743", - "PreimageOracle": "0x133790bDaE0aCFd5288d8974318CE408678E2380", "Proposer": "0x85C73d8F7a3C95667779E0d9b8104982A5C1d04e", "ProxyAdmin": "0x672B75103c0CbFdCC4A40737a80724f87a8A25D7", "ProxyAdminOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", @@ -425,20 +411,14 @@ }, "233": { "AddressManager": "0x2d34a143D7BeAD8F75479C841e3AAbF6c4AFdeC8", - "AnchorStateRegistryProxy": "0xB065B32927C3114c0e0Df16d3887F4Fd12eF7117", "BatchSubmitter": "0x973A9E30D6D11355A459A69E7CbFBa61C7627736", - "Challenger": "0x097955A7aa7966d55D781688Aa1493493AB513Af", - "DelayedWETHProxy": "0x21676D682F11f3e46cCe1797B19205Dda78f0f6C", - "DisputeGameFactoryProxy": "0x64d0Bce6eD7c16CAC7817F3597758E31AFacD01B", "Guardian": "0x097955A7aa7966d55D781688Aa1493493AB513Af", "L1CrossDomainMessengerProxy": "0x1c8b6a6F3E3612c79E62460a6e44C24D1EfF2FDa", "L1ERC721BridgeProxy": "0xBf0D43e12eF74dC21917e1D6175702AD673e1283", "L1StandardBridgeProxy": "0xFd1a12b7a04B13c031d8b075BA5b9080a2CF246f", "L2OutputOracleProxy": "0x11118536F94Bc7C98bBaf9194bE13FC1987293cd", - "MIPS": "0xfed5EDD40bfbEFC99432BBb4F2cEcd450c4c8675", "OptimismMintableERC20FactoryProxy": "0x0D085b528E1F9F48018b46f9aC3696f16B7007F9", "OptimismPortalProxy": "0x1F24d471Ef7291c7F97DBD2f76299b30D3e3B6E3", - "PreimageOracle": "0x4abd4d6D11c5D7cE392b2b0544E37314710F53c2", "Proposer": "0xBf1374D8c2E98074368326786343f1aDE19d5ccD", "ProxyAdmin": "0x7eA23A9Df2E3E491757a9FF6c32083a44BE560e6", "ProxyAdminOwner": "0x5a19d3Afd327Bd01D390eb52c11C2A9a79BcFB32", @@ -450,8 +430,6 @@ "254": { "AddressManager": "0x55Aec4EE11dA7d655565cCc2EB3bF21a46C94e6f", "BatchSubmitter": "0xde794bEc196832474f2F218135bFd0f7cA7fb038", - "Challenger": "0x3FcB6E08A960EF52Ec3101A444f71A2Fd964b248", - "DisputeGameFactoryProxy": "0x2069FC7097b7784FCA21aa459e57E95C0046EeCD", "Guardian": "0x3FcB6E08A960EF52Ec3101A444f71A2Fd964b248", "L1CrossDomainMessengerProxy": "0x15567C4FfD9109795dFf1D9A5233D10aef0738D2", "L1ERC721BridgeProxy": "0x1Ccf7e62889E6A93413DEAFC4e390Bd4047bDC32", @@ -469,40 +447,40 @@ }, "2702128": { "AddressManager": "0xBdF852e2cc26Ea3C2dee7b493B1Fc12dA406175a", - "BatchSubmitter": "0x7d6251D49A102a330CfB46d132982781620700Cb", - "Challenger": "0xfA8d42bDE52C2B8B05fE5EeCbAdEa6CB698A0Bc5", - "DAChallengeAddress": "0x16193e14197c10109F3e81b938153A04A2a00190", - "DelayedWETHProxy": "0x0eCe16401A80551345bB672f177f51A8755FF775", - "DisputeGameFactoryProxy": "0x443164F044D8840479234e00E7aD5bb06b85fC78", + "BatchSubmitter": "0x39857a92E26648438d9c7dDDa1Ee3e481dea54B3", "Guardian": "0xdF3700a9Cf9c7506Ca3B41E6ba991476677A8787", "L1CrossDomainMessengerProxy": "0x702dF90E92A6841c9013faE6D724ddFA8F141d5C", "L1ERC721BridgeProxy": "0x28d56C3BBbe4807c19Cc81E6D5207Fb681C3726b", "L1StandardBridgeProxy": "0x2AD84AbD52050956AcC9c490D024b821A59e3FB6", "L2OutputOracleProxy": "0x5A0492D20D984eE904E46E6Ff24572bc755abb28", - "MIPS": "0x253DdBb3549e0CEFaaaA7f71BE502C5b94771dDc", "OptimismMintableERC20FactoryProxy": "0x515A0c8b1d9574C65EA1924eCd767B1d9b6AC32f", "OptimismPortalProxy": "0xBC2bEDA4ce7A1f40aa458322A33B44081b2F545A", - "PreimageOracle": "0x089A4754538B74Ff63Bc6AbeaD7A95973aB03572", - "Proposer": "0x7d2f9b38866141Bf090DD670A826F27eA2408Ad4", + "Proposer": "0xE4Cb2fd9E409ABE977EC946D54b59034C39AB07D", "ProxyAdmin": "0x9e48d6bBca781c23392Ec459BfB3657C40a794A8", "ProxyAdminOwner": "0xfF75Bd7672b79f2562fAf98D488bbb3Db1cD1574", "SuperchainConfig": "0xcbF423525a5471Fc5037a5397F99f6F09fe41379", "SystemConfigOwner": "0xCf06c459AE59d4f47469BcE535afC3485Ce89dBf", "SystemConfigProxy": "0x6E99cdE188DAAFeEcb6eD8AC28B98dE4c8eE5D6C", - "UnsafeBlockSigner": "0xcbdD38Ce74BA96F0ae3D2E608DA96Ec744c80A7E" + "UnsafeBlockSigner": "0x7a4e92aD7E40C8df264eD18010847e6C27AB3d82" }, "28882": { "AddressManager": "0xC62C429390B7bCE9960fa647d5556CA7238168AB", + "AnchorStateRegistryProxy": "0x0B13DAf233542e01cA7fb527D725578E4875F652", "BatchSubmitter": "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8", "Challenger": "0x17070B4AF21625106E7971983Aa524f59EA40c57", + "DelayedWETHProxy": "0x386023521b8379CCbB6Edbc6C01A9EB32e693f62", + "DisputeGameFactoryProxy": "0x29Bd67B23cAC0E6bbDe1373E3859Dd25510f3331", + "FaultDisputeGame": "0x5D20776Fb8D91181873F210bFb89eAA694217c0b", "Guardian": "0x66930dd34EA64bD4B9F32464e363511b49966C5D", "L1CrossDomainMessengerProxy": "0x9253E76E2fA3f72aF18e08914b3528F725779495", "L1ERC721BridgeProxy": "0x13B397A08322973B45e063F29746Fb278f189916", "L1StandardBridgeProxy": "0x244d7b81EE3949788Da5F1178D911e83bA24E157", - "L2OutputOracleProxy": "0xdBdb238185f9BB40f742aE249f9a083381EC39eC", + "MIPS": "0xC331b49Ac58dcaD21063177C735FD5215309BAE1", "OptimismMintableERC20FactoryProxy": "0xE6ebece6936528804BB4c43AdcA10c2623919852", "OptimismPortalProxy": "0xB079E6FA9B3eb072fEbf7F746044834eab308dB6", - "Proposer": "0x0AB197DdeE146c01A0C6Cadf3d91fbb4340A999A", + "PermissionedDisputeGame": "0x49A14B793Dd55099111E3Fe9c9DF34c927d2193D", + "PreimageOracle": "0xF68050E774c2C26C1f1587522e6Df1f684eb1A58", + "Proposer": "0xC5125722937c0Fea053c602261238bF9f3B2450F", "ProxyAdmin": "0x66930dd34EA64bD4B9F32464e363511b49966C5D", "ProxyAdminOwner": "0x17070B4AF21625106E7971983Aa524f59EA40c57", "SuperchainConfig": "0x029A23c6E9D3026f984cd1Fd9C47906e4F5327F3", @@ -513,13 +491,10 @@ "291": { "AddressManager": "0x87630a802a3789463eC4b00f89b27b1e9f6b92e9", "BatchSubmitter": "0xf8dB8Aba597fF36cCD16fECfbb1B816B3236E9b8", - "Challenger": "0xcE10372313Ca39Fbf75A09e7f4c0E57F070259f4", "Guardian": "0xcE10372313Ca39Fbf75A09e7f4c0E57F070259f4", "L1CrossDomainMessengerProxy": "0xc76543A64666d9a073FaEF4e75F651c88e7DBC08", - "L1ERC721BridgeProxy": "0x934Ab59Ef14b638653b1C0FEf7aB9a72186393DC", "L1StandardBridgeProxy": "0xe07eA0436100918F157DF35D01dCE5c11b16D1F1", "L2OutputOracleProxy": "0x5e76821C3c1AbB9fD6E310224804556C61D860e0", - "OptimismMintableERC20FactoryProxy": "0x7a69a90d8ea11E9618855da55D09E6F953730686", "OptimismPortalProxy": "0x91493a61ab83b62943E6dCAa5475Dd330704Cc84", "Proposer": "0x74BaD482a7f73C8286F50D8Aa03e53b7d24A5f3B", "ProxyAdmin": "0xb570F4aD27e7De879A2E4F2F3DE27dBaBc20E9B9", @@ -530,45 +505,32 @@ }, "33979": { "AddressManager": "0x5a4ebF927338EA6af377caEee99C85088908f57D", - "AnchorStateRegistryProxy": "0x48eB5A81CC3a8955d0DabD6eEd45ac09C7c1889f", - "BatchSubmitter": "0x73c98Cf34AF1f7D798e8e6f34b16037530Bffc41", - "Challenger": "0x9f8b2470ffECbca2FFda20B9e10f6a12F33BC2Ce", - "DAChallengeAddress": "0xF40b807c2407e1d7dabb85f3ceefd5EACc7bF3CD", - "DelayedWETHProxy": "0x7992352f723d1209CDd9B786dEF1fBd8DC6511DB", - "DisputeGameFactoryProxy": "0x2Dc9d2Cb1Ba0b8A46AE252ab4FBE1ad5C5c3B795", + "BatchSubmitter": "0x4712454AddDbAbACaAb84916546899CA9690A6fF", "Guardian": "0x052a8cd5967bc3Bdb5660c989a3A68bCA683A077", "L1CrossDomainMessengerProxy": "0x8F56a665c376A08b604DD32ee6E88667A6093172", "L1ERC721BridgeProxy": "0x94519dD4BA8ba20Aaad14f7C6cD00fa1bB0192E9", "L1StandardBridgeProxy": "0xA2C1C1A473250094a6244F2bcf6Cb51F670Ad3aC", "L2OutputOracleProxy": "0x1A9aE6486caEc0504657351ac473B3dF8A1367cb", - "MIPS": "0x29564D1B96A1308E6930F88665576763Ed4837E2", "OptimismMintableERC20FactoryProxy": "0x87e75DcC1BB4e5B42cB5c52eB5832d6eCC3bFeF4", "OptimismPortalProxy": "0x5C9C7f98eD153a2deAA981eB5C97B31744AccF22", - "PreimageOracle": "0xd8f66eFeC53CeA76C597827ba5Bf3F68D29f2fA8", - "Proposer": "0x7a7690bBAb496537Ac59B45B4c59d789233BcA16", + "Proposer": "0xA1ddae0829c3bD4096c34aEC58b2BC21e3a6d10E", "ProxyAdmin": "0xD069C4724f9bC15FA53b3b2516594512AEf8c957", "ProxyAdminOwner": "0x89CB6669f87c165E7128F4a57476EE4Daa7ffbCD", "SuperchainConfig": "0xD3B2Ee457Cf8F05f00c17BFe509b43BA04c9e5a2", - "SystemConfigOwner": "0xc0CE2761d5cC92d25dB6ccD95e4b9483eD22D11B", + "SystemConfigOwner": "0x3D389212A78FD7D4600C9483470e59630C293416", "SystemConfigProxy": "0xD39a6CcCFa23cb741bB530497e42EC337f1215a8", - "UnsafeBlockSigner": "0x843458b6De651E02dFD5bFFea0e9cfb3eca293EF" + "UnsafeBlockSigner": "0xa54e493641d097d164A6a2D8F9895303344d88A9" }, "3397901": { "AddressManager": "0x6ECc4a306cD20f8041d63B3Db8ecA46b713cDEcC", "BatchSubmitter": "0xDa19a4E4d1DbC69bACf13435f08F76cED9B3C245", - "Challenger": "0x542A7142093d536Bf277FA3B0410883ac4e121dc", - "DAChallengeAddress": "0x12C6A7dB25b20347CA6F5d47E56D5E8219871C6d", - "DelayedWETHProxy": "0x31D0D1D3Fc27B3f174E544364e7Bb836980162d1", - "DisputeGameFactoryProxy": "0xEc7C6E35f4e5361D279d5Fe7222F3F45A8A83352", "Guardian": "0xdf3d6FA42Fe4225E6A042C4eD191d7E5D8252E6f", "L1CrossDomainMessengerProxy": "0x6F82D895E223Dde65DA28a8bbD14f3eF79cBF3b8", "L1ERC721BridgeProxy": "0x598D245Ea85FBfBceCe6c62232bbCAB688D3F68b", "L1StandardBridgeProxy": "0x1ba82f688eF3C5B4363Ff667254ed4DC59E97477", "L2OutputOracleProxy": "0xB25812386D1Cb976b50de7387F5CBc10Fec3F27c", - "MIPS": "0x71483031c5D2927Ea83807d5C88bd8EccFaF292d", "OptimismMintableERC20FactoryProxy": "0x8eE8eB6B829C382cA395D35C40Dcd2ef8AE57c68", "OptimismPortalProxy": "0xCeE7ef4dDF482447FE14c605Ea94B37cBE87Ca9D", - "PreimageOracle": "0x2DE051316aaD761A3eBd6fF008D714805bD02c56", "Proposer": "0x0b8AA7c355917016496e999a80F1737ef9c0C962", "ProxyAdmin": "0xB3E1F3ab2A22049Cc155ebA7089Ea20A5EAB99ca", "ProxyAdminOwner": "0x814973b1ec9Eb9172996931dE7BF1380bd64a824", @@ -580,7 +542,6 @@ "34443": { "AddressManager": "0x50eF494573f28Cad6B64C31b7a00Cdaa48306e15", "BatchSubmitter": "0x99199a22125034c808ff20f377d91187E8050F2E", - "Challenger": "0x309Fe2536d01867018D120b40e4676723C53A14C", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x95bDCA6c8EdEB69C98Bd5bd17660BaCef1298A6f", "L1ERC721BridgeProxy": "0x2901dA832a4D0297FF0691100A8E496626cc626D", @@ -591,30 +552,31 @@ "Proposer": "0x674F64D64Ddc198db83cd9047dF54BF89cCD0ddB", "ProxyAdmin": "0x470d87b1dae09a454A43D1fD772A561a03276aB7", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "SystemConfigProxy": "0x5e6432F18Bc5d497B1Ab2288a025Fbf9D69E2221", "UnsafeBlockSigner": "0xa7fA9CA4ac88686A542C0f830d7378eAB4A0278F" }, "360": { "AddressManager": "0xcee78437aE9e15cee9c78E63757E0153c0FD7479", - "AnchorStateRegistryProxy": "0x02987E7294379B9DDa99d593b0C94c68266222D1", + "AnchorStateRegistryProxy": "0x6ace93AF6E8b36803577381be9f02A552e81C10D", "BatchSubmitter": "0xF7ca543d652E38692fD12f989eb55b5327eC9A20", - "Challenger": "0xee1Af3f99AF8C5b93512FbE2A3f0dD5568CE087f", - "DelayedWETHProxy": "0xfEc7865DAc5139886585F03146Ff61D9b31c2d57", - "DisputeGameFactoryProxy": "0x575Aecd84083f93877291901907698F7db0Bd8b0", - "Guardian": "0xee1Af3f99AF8C5b93512FbE2A3f0dD5568CE087f", + "Challenger": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", + "DelayedWETHProxy": "0x846d9469BAaF481f8516f7c1d03990672B68CB09", + "DisputeGameFactoryProxy": "0x2c03e8BF8b16Af89079852BE87f0e9eC674a5952", + "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x2b18602877181C3cB72C687E2A771E123A3788E3", "L1ERC721BridgeProxy": "0xe9d3E49b0636016c5fE9eaA2347948D0bA9f15Af", "L1StandardBridgeProxy": "0x62Edd5f4930Ea92dCa3fB81689bDD9b9d076b57B", - "L2OutputOracleProxy": "0x6Ef8c69CfE4635d866e3E02732068022c06e724D", - "MIPS": "0xD30c2Cd3cd6112E61FDfb03e4b232564d7e5C91f", + "MIPS": "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C", "OptimismMintableERC20FactoryProxy": "0x319322906beAdf69dF5d4607169c63D692B1aDC1", "OptimismPortalProxy": "0xEB06fFa16011B5628BaB98E29776361c83741dd3", - "PreimageOracle": "0xDF6a16a71d0BC7a1Bbe8FffB33700eC3d9448A5B", + "PermissionedDisputeGame": "0x8090Ac33F4C9A1A220492487390dbe0c3b56a37A", + "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", "Proposer": "0x0D8a607F3d2de86adD04Df00f06794cB339A40de", "ProxyAdmin": "0x11B190Ae661c6d6884dFEE48E215691E0DdB842e", - "ProxyAdminOwner": "0xacAF178b5048CB56712dc59E95fBA72F7990A005", - "SuperchainConfig": "0x125664BEf08177ca43f6f301E63118b1e4cCDe09", + "ProxyAdminOwner": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0xee1Af3f99AF8C5b93512FbE2A3f0dD5568CE087f", "SystemConfigProxy": "0xfF11e41D5C4F522E423Ff6C064Ff8D55AF8f7355", "UnsafeBlockSigner": "0x9C66333c504F3A4f5593D0e9739434744cCC5B5d" @@ -622,8 +584,6 @@ "4202": { "AddressManager": "0x27Bb4A7cd8FB20cb816BF4Aac668BF841bb3D5d3", "BatchSubmitter": "0x246E119a5BcC2875161b23E4e602e25cEcE96E37", - "Challenger": "0x19De6D30Bf43654B7244B8adA135E1AA639bF091", - "DisputeGameFactoryProxy": "0x9AA3890a87E6BD2CB85Dad1A5D8B0A9D669e658a", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x857824E6234f7733ecA4e9A76804fd1afa1A3A2C", "L1ERC721BridgeProxy": "0xb4E988CF1aD8C361D56118437502A8f11C7FaA01", @@ -644,13 +604,12 @@ "AnchorStateRegistryProxy": "0xD4D7A57DCC563756DeD99e224E144A6Bf0327099", "BatchSubmitter": "0xdBBE3D8c2d2b22A2611c5A94A9a12C2fCD49Eb29", "Challenger": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", - "DelayedWETHProxy": "0xF9adF7c9502C5C60352C20a4d22683422DbD061F", + "DelayedWETHProxy": "0x4E6dE8B4c2D5aD6c603648f78311a21558D37A53", "DisputeGameFactoryProxy": "0x069c4c579671f8c120b1327a73217D01Ea2EC5ea", - "Guardian": "0xB2aa0C2C4fD6BFCBF699d4c787CD6Cc0dC461a9d", + "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0xf931a81D18B1766d15695ffc7c1920a62b7e710a", "L1ERC721BridgeProxy": "0x1Df436AfDb2fBB40F1fE8bEd4Fc89A0D0990a8E9", "L1StandardBridgeProxy": "0x470458C91978D2d929704489Ad730DC3E3001113", - "L2OutputOracleProxy": "0x19A6d1E9034596196295CF148509796978343c5D", "MIPS": "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C", "OptimismMintableERC20FactoryProxy": "0x82Cb528466cF22412d89bdBE9bCF04856790dD0e", "OptimismPortalProxy": "0xd5ec14a83B7d95BE1E2Ac12523e2dEE12Cbeea6C", @@ -669,13 +628,12 @@ "AnchorStateRegistryProxy": "0x1333d5E5201D760444A399E77b3D337eBDB0DD07", "BatchSubmitter": "0x0f3ff4731D7a10B89ED79AD1Fd97844d7F66B96d", "Challenger": "0x945185C01fb641bA3E63a9bdF66575e35a407837", - "DelayedWETHProxy": "0x4F4B8Adf1af4b61bb62F68b7aF1c37f8A6311663", + "DelayedWETHProxy": "0xAEB3CfD5aAba01cfd12E6017a9a307a218cdD7E2", "DisputeGameFactoryProxy": "0x8Ec1111f67Dad6b6A93B3F42DfBC92D81c98449A", - "Guardian": "0xe78a0A96C5D6aE6C606418ED4A9Ced378cb030A0", + "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x7768c821200554d8F359A8902905Ba9eDe5659a9", "L1ERC721BridgeProxy": "0x3580505c56f8560E3777E92Fb27f70fD20c5B493", "L1StandardBridgeProxy": "0xd7DF54b3989855eb66497301a4aAEc33Dbb3F8DE", - "L2OutputOracleProxy": "0xc8886f8BAb6Eaeb215aDB5f1c686BF699248300e", "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0x2D272eF54Ee8EF5c2Ff3523559186580b158cd57", "OptimismPortalProxy": "0xFf6EBa109271fe6d4237EeeD4bAb1dD9A77dD1A4", @@ -691,20 +649,14 @@ }, "5330": { "AddressManager": "0x0a1B34aA2047AD1AbEF8aC085b1a7802Ed9dbCF0", - "AnchorStateRegistryProxy": "0xaC1e4B08300C6c4705918089ee10b286b3ec24df", "BatchSubmitter": "0xa9B074B27DE97f492F8F07fD7C213400E4ca5391", - "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", - "DelayedWETHProxy": "0xEc4DC88475A2887e73b2073b60425575FD693c0a", - "DisputeGameFactoryProxy": "0x8b097CF1f9BbD9cbFD0DD561858a1FCbC8857Be0", "Guardian": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", "L1CrossDomainMessengerProxy": "0x3a30AEd8fa7717aC2D8454D82c125cF6B875061a", "L1ERC721BridgeProxy": "0xA99f82730e68968a78AA21522FC7eb90DB76D8Cb", "L1StandardBridgeProxy": "0x8b0576E39F1233679109F9b40cFcC2a7E0901Ede", "L2OutputOracleProxy": "0x693A0F8854F458D282DE3C5b69E8eE5EEE8aA949", - "MIPS": "0x7F4F96cD3719F2829117c8C5E810e01dBD6846Ba", "OptimismMintableERC20FactoryProxy": "0x484529223d68a0Cf85902Bf5E781394f0D0f837C", "OptimismPortalProxy": "0x2c2150aa5c75A24fB93d4fD2F2a895D618054f07", - "PreimageOracle": "0xB18202e3E4dbF7AbCEa623A38526AAD5A64DcD59", "Proposer": "0xB2354BDF5925d03cA06B03a7bD7386Bd685cE814", "ProxyAdmin": "0xF3b7697c9C0CbdE923f34991F2D19cC1c66612bD", "ProxyAdminOwner": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", @@ -724,9 +676,11 @@ "L1CrossDomainMessengerProxy": "0x9BdA922e6f1bD53c24F9bCFb88B9638199A82CEb", "L1ERC721BridgeProxy": "0xCcfa1f8A93640488E3E1AE90A0edAf44680E9f82", "L1StandardBridgeProxy": "0xFD4918e51d1e5aa2195C42654CF769b152C9d9C0", + "MIPS": "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C", "OptimismMintableERC20FactoryProxy": "0x44e9388e88Bb8edE446d62590d8A4C6d34813e98", "OptimismPortalProxy": "0xFc1D560eB01443e31B0EB56620703E80e42A7E4e", "PermissionedDisputeGame": "0xf9534EBc84082dF9d35Fb1Ed8786bF8cE8a90294", + "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", "Proposer": "0x1bC6Df949b8eDC8EE61adB99d578A7a6E6Ff7310", "ProxyAdmin": "0xd35FeF329Bb6569baa373BDa702F3dfF59D57321", "ProxyAdminOwner": "0xA4fB12D15Eb85dc9284a7df0AdBC8B696EdbbF1d", @@ -740,18 +694,20 @@ "AnchorStateRegistryProxy": "0xC31B23208e7F7f8c8bC2Ce6816cbB6867C026b1f", "BatchSubmitter": "0x26A1bABee918f55bfdDB002066C63678147B03A2", "Challenger": "0xAC165b92E4f98D0Dfd9fB7d2aB474feE56B98A0d", - "DelayedWETHProxy": "0xe2a6eFaC27793D4cC9a14B3BF3089817cFA41AA9", + "DelayedWETHProxy": "0xf3b850AAB81595ea88Db1599146Cc20158796233", "DisputeGameFactoryProxy": "0x017D15a6854CCAaa89c63d1A9fea8da45Ced97Cf", - "Guardian": "0x8C7E4A51acb17719D225bd17598B8a94B46c8767", + "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xffAe0c2cf1547057CD0828e3B01aF11C266C1b3C", "L1ERC721BridgeProxy": "0xbD07617F0Ce47DB1cd51Eb6b9b5E7b3c109410F2", "L1StandardBridgeProxy": "0x1Fe9c3b11Ed334fC049aE9a92Ec290aA69C39267", + "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0x71c23513fA05827e168b5A4dCa1f1C81A9a5EEf4", "OptimismPortalProxy": "0x55585368857DcC7E0F89475d28963977DB0b1Ee1", - "PermissionedDisputeGame": "0xEb0d28F0474103480eCD393C8e0C64C003a4914e", + "PermissionedDisputeGame": "0x331D3A78af58b618895e88a3027F761B45F2382d", + "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", "Proposer": "0x3Fb1cAa16477704bD679C5a883D9DbB1924F4Ee0", "ProxyAdmin": "0x4b339825002823Af8B6cA1Ecdf5F9D08cA1f584A", - "ProxyAdminOwner": "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6", + "ProxyAdminOwner": "0x945185C01fb641bA3E63a9bdF66575e35a407837", "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0xC5019AC7B57Ae7918BC3430a92D92bCcD3079aB6", "SystemConfigProxy": "0x7f73514A7eC19f3F51E3c607D536560818dF4205", @@ -759,21 +715,21 @@ }, "57073": { "AddressManager": "0x9b7C9BbD6d540A8A4dEDd935819fC4408Ba71153", - "AnchorStateRegistryProxy": "0xde744491BcF6b2DD2F32146364Ea1487D75E2509", + "AnchorStateRegistryProxy": "0x2fc99fd16D8D3F6F66d164aA84E244c567E58A3d", "BatchSubmitter": "0x500d7Ea63CF2E501dadaA5feeC1FC19FE2Aa72Ac", "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", - "DelayedWETHProxy": "0x3Beaca17eaE5643FB1479AA5f4B1fF75cc4b9B50", + "DelayedWETHProxy": "0xf6b1554F483C391414d3830927E3600c105AaE6E", "DisputeGameFactoryProxy": "0x10d7B35078d3baabB96Dd45a9143B94be65b12CD", - "FaultDisputeGame": "0x6A8eFcba5642EB15D743CBB29545BdC44D5Ad8cD", + "FaultDisputeGame": "0x69361c9134D620B704C2a72c58523a4373eCe86f", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x69d3Cf86B2Bf1a9e99875B7e2D9B6a84426c171f", "L1ERC721BridgeProxy": "0x661235a238B11191211fa95D4Dd9E423d521E0Be", "L1StandardBridgeProxy": "0x88FF1e5b602916615391F55854588EFcBB7663f0", - "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0xA8B389A82e088b164cD03230e900980CcED34d29", "OptimismPortalProxy": "0x5d66C1782664115999C47c9fA5cd031f495D3e4F", - "PermissionedDisputeGame": "0x0A780bE3eB21117b1bBCD74cf5D7624A3a482963", - "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", + "PermissionedDisputeGame": "0x4699D20479dfD20e15CaB4FCB6F2a7CC6fE35443", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x65436ddCbc026F34118954F229f7F132b696b3B4", "ProxyAdmin": "0xd56045E68956FCe2576E680c95a4750cf8241f79", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", @@ -785,13 +741,10 @@ "60808": { "AddressManager": "0xF2dc77c697e892542cC53336178a78Bb313DFDC7", "BatchSubmitter": "0x08F9F14fF43E112B18c96f0986F28Cb1878f1D11", - "Challenger": "0xC91482A96e9c2A104d9298D1980eCCf8C4dc764E", "Guardian": "0xC91482A96e9c2A104d9298D1980eCCf8C4dc764E", "L1CrossDomainMessengerProxy": "0xE3d981643b806FB8030CDB677D6E60892E547EdA", - "L1ERC721BridgeProxy": "0x5fF93263D5181b2A826f8c51d54BC0da2d20D50a", "L1StandardBridgeProxy": "0x3F6cE1b36e5120BBc59D0cFe8A5aC8b6464ac1f7", "L2OutputOracleProxy": "0xdDa53E23f8a32640b04D7256e651C1db98dB11C1", - "OptimismMintableERC20FactoryProxy": "0x5557408ab14013ce9Dbb300dE0D87D386BB09cb6", "OptimismPortalProxy": "0x8AdeE124447435fE03e3CD24dF3f4cAE32E65a3E", "Proposer": "0x7cB1022D30b9860C36b243E7B181A1d46f618C69", "ProxyAdmin": "0x0d9f416260598313Be6FDf6B010f2FbC34957Cd0", @@ -802,44 +755,32 @@ }, "624": { "AddressManager": "0x8173904703995c6BbA59a42B8bBf8405F978758a", - "AnchorStateRegistryProxy": "0x275Abd1eB1FBaAB40Dcef5f3A588e2dF65801edc", - "BatchSubmitter": "0x7f9D9c1BCE1062E1077845eA39a0303429600a06", - "Challenger": "0x79DdF0745D14783cDC2a05624c585Ddce07F4A02", - "DelayedWETHProxy": "0x161914F701d090824c1A8a0f4e5666938f12848d", - "DisputeGameFactoryProxy": "0x0D7e0590c58e4aC9B14B3eD6163CF55223931699", + "BatchSubmitter": "0x68d5BBf3a01ECbB47CE38Cf64a7d6C0eA618040f", "Guardian": "0x87aab081Ac9F8ce80fb048f23280DF019036BA1d", "L1CrossDomainMessengerProxy": "0x807d21e416434ae92c8E5bcA4d506781aFbBa380", "L1ERC721BridgeProxy": "0x1b396e4dC6ECB0be33CF01C5a34E1a3a7D03c378", "L1StandardBridgeProxy": "0xD1B30378CBF968E5525e8835219A5726A1e71D10", "L2OutputOracleProxy": "0x012f4baa6e0F5Ac4dFDF47BDdd9CF68a2B17821e", - "MIPS": "0x4e66D89DDF5A9d86836ABb1d05Ff8fDb5aD32c9A", "OptimismMintableERC20FactoryProxy": "0xa641e14B685b5E652865e14A4fBc07e51371D124", "OptimismPortalProxy": "0x5ff88fcF8e9947f45F4cAf8FFd5231B5DdF05e0A", - "PreimageOracle": "0xB9fF3A5835144b0d2F4267A21e0c74458907c870", - "Proposer": "0x2b6cD940ABE0CAF2fd89155b99522548c00EBaB1", + "Proposer": "0xe615dC682b340e00c2d80472a281CbD5A2b68ae7", "ProxyAdmin": "0x38593Cce8FaB9887Ef9760f5F6aB3d6C595143cF", "ProxyAdminOwner": "0x48EC051349dDc7E8baBafCBfe27696ECF2A8a8B3", "SuperchainConfig": "0x34bb53D7C525114A27F0FE2aF91bdDAd186abb12", - "SystemConfigOwner": "0x25A6E7c6f3d0fE89A656Fcf065614B74E55099fF", + "SystemConfigOwner": "0x666372fEfB85dA96a1a56667638321605afe95bC", "SystemConfigProxy": "0x7aC7e5989EaC278B7BbfeF560871a2026baD472c", - "UnsafeBlockSigner": "0xDbad225D1C0DaBc27f6a9d250dBb136413C0DFb4" + "UnsafeBlockSigner": "0x666bfb2Bac23cf5fE3308301A3c5130f92D96B07" }, "625": { "AddressManager": "0xd1d82d6FC94962fe25912C181375352D4A10c6f0", - "AnchorStateRegistryProxy": "0xb86eC23019C6c3f2FbC38502D26b7009d2A300Be", "BatchSubmitter": "0x9CF89F8cB7cC94C579426f967d9517cd2e9adf29", - "Challenger": "0xD7E60cd8fBeA5142a207042c477e1359Df5FA688", - "DelayedWETHProxy": "0x017e8A21e37AE4bFC482170656B1eBF8390BF880", - "DisputeGameFactoryProxy": "0x096b38bDC80B5BF5B5Fb4e1A75Ae38BDa520474A", "Guardian": "0xD7E60cd8fBeA5142a207042c477e1359Df5FA688", "L1CrossDomainMessengerProxy": "0x33Dc556A5df0B8998dC2640c78E531Ae1dB7925d", "L1ERC721BridgeProxy": "0x7c95EebEA6f68875b4093D9c2211Fd26067a808F", "L1StandardBridgeProxy": "0x3B78C3B41b3e3fC6bdf0bD3060C9E2471401C098", "L2OutputOracleProxy": "0xF3699f96cBdD3868B64352669805D96d1Fb6431d", - "MIPS": "0xb51FFE0a519291Cbc0080A4F497A2bb4ac0A1C04", "OptimismMintableERC20FactoryProxy": "0xD47e937d602FFba8597b4F042c7A49E1149392fC", "OptimismPortalProxy": "0xFBEd910ca54F013bfeA67Bd4DC836263bdd0b46C", - "PreimageOracle": "0x029E58272e3B5f7B69AA4455473FcC8C8B8DEAC3", "Proposer": "0x6087Ec0371C2950d018ec97D8A1573d412DFbDBE", "ProxyAdmin": "0xF42CfF60b92a151911D99F3Ed36ba1266511fd43", "ProxyAdminOwner": "0x5A11a7a6ca68819C601A4136BFbDFBa26D5f043e", @@ -850,45 +791,32 @@ }, "65536": { "AddressManager": "0xF1C911e0c1E6dd08c8a7C80c9890e2037e0504c6", - "AnchorStateRegistryProxy": "0x4dAA22Ec75406E8ea2c70610115850912A770A3a", - "BatchSubmitter": "0x5BEF09f138921eF7985d83AAB97da1dB6E4dd190", - "Challenger": "0x34Faa77b4D1686E399c96deF0de31D30572eaa9F", - "DAChallengeAddress": "0x08c5DCDD5e46d31CC1591ee15b084663507597f3", - "DelayedWETHProxy": "0xd015f61F3CB26560507D758a726c77d18Bf849bB", - "DisputeGameFactoryProxy": "0xB52337F38747D6931f2976eEa24A3f3F6B7CDEA2", + "BatchSubmitter": "0x12a593227Efb69EA634e2169E2c0A8246BB0B1B3", "Guardian": "0xa5822fb7E3Fb516E518e2629E6786e93858e41F4", "L1CrossDomainMessengerProxy": "0x825C858149F1E775a0f4Aeb172037B970bE7B736", "L1ERC721BridgeProxy": "0x00bd00c5C7F60e222D9CB8040270Ba929241A280", "L1StandardBridgeProxy": "0xE639919b92AB6DD238aEACc6F2A8d6e355D17bd5", "L2OutputOracleProxy": "0xdbf381984c4515Fe3285D3C55fDfb3054C52c261", - "MIPS": "0x2B0293A059a2715935fA9459C9F3a4dcE2BC6331", "OptimismMintableERC20FactoryProxy": "0xa74b7baF04867E62B7824268e96144E503A23666", "OptimismPortalProxy": "0xD52ba64CBE1e3B44167f810622fBef36bE24d95c", - "PreimageOracle": "0x4a7bd533Be022E7a2911c3C61e7E11e7a32Ee77d", - "Proposer": "0x8c6F6580C846634C5DA08c40AE308DE23006a679", + "Proposer": "0x5B08eCA5C0cc5Ea1EBF03881c30EbF800f76F5a6", "ProxyAdmin": "0x7617f4a55d62b9EE49578D9C90593e58E607415F", "ProxyAdminOwner": "0x03eC1C43434E2f910A2fb984906cd2470fdb39c8", "SuperchainConfig": "0xDf87154Ed6cF332931b70014bA3d9dF423074FfF", - "SystemConfigOwner": "0x49eC5Bd8C9cC35Ce26b87E534d2E36980621dDD2", + "SystemConfigOwner": "0x5E2FC552288857cfE709C398Ecac448314dE1320", "SystemConfigProxy": "0x72934D7AEDC1A2d889ca89Aaf064CD9455E64d00", - "UnsafeBlockSigner": "0xA940a669DAe672111FD02Df597Cf7De7Cf758fAD" + "UnsafeBlockSigner": "0x373771221e39e1Ca16e981179CEcF1bE38ac70d9" }, "66665": { "AddressManager": "0x35236AF82c775965183A7B9cf94fe8bF5665b072", - "AnchorStateRegistryProxy": "0x1C2b5dbDbA4da7cBe669E73B7f18041E16ECB993", "BatchSubmitter": "0xa488310ab2F8Aa3294903930023BCab5880cB1BA", - "Challenger": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7", - "DelayedWETHProxy": "0x77877C3A557457Edc27c5f650CE2f4521585a3EC", - "DisputeGameFactoryProxy": "0x5Eb3040aeebc69595B4Bdc4eCB97323330f14517", "Guardian": "0xA9FF930151130fd19DA1F03E5077AFB7C78F8503", "L1CrossDomainMessengerProxy": "0x19f3D95A281F9Cf6aA2c6e8b7cA7c6Be83e41F3A", "L1ERC721BridgeProxy": "0xe82526042dae3F8800f87232b5146ED4012eE426", "L1StandardBridgeProxy": "0x78558fd5C8DC65D10753f004Bfc4cFA8E199C668", "L2OutputOracleProxy": "0x54E9BE93b9a1aca9C0293dB7710D9D18273aFE1D", - "MIPS": "0x09Fee86Ee30D0cF86A8E48089F958c1C04fA5700", "OptimismMintableERC20FactoryProxy": "0xd33347F9C147304c27B9502F1ad93B556bD9df12", "OptimismPortalProxy": "0x1Cb215554f36f518791B2e7359a73c96bFcadf69", - "PreimageOracle": "0x7328668bbe05eB322B208410652cD41A6bd07A83", "Proposer": "0x4C67831dba16b1e60CF8f626424082A62F1A2FE5", "ProxyAdmin": "0xB235B455eDD534bcAC6028F38029Cc128b144582", "ProxyAdminOwner": "0x23BA22Dd7923F3a3f2495bB32a6f3c9b9CD1EC6C", @@ -900,7 +828,6 @@ "6805": { "AddressManager": "0x3d2BdE87466Cae97011702D2C305fd40EEBbbF0a", "BatchSubmitter": "0x8CDa8351236199AF7532baD53D683Ddd9B275d89", - "Challenger": "0x2E7B9465B25C081c07274A31DbD05C6146f67961", "Guardian": "0x2E7B9465B25C081c07274A31DbD05C6146f67961", "L1CrossDomainMessengerProxy": "0xf54B2BAEF894cfF5511A5722Acaac0409F2F2d89", "L1ERC721BridgeProxy": "0x0f33D824d74180598311b3025095727BeA61f219", @@ -918,40 +845,39 @@ }, "6806": { "AddressManager": "0x1B573Db1000eA419B6dE8eB482C6d394179Bd1A3", + "AnchorStateRegistryProxy": "0x7220581f363f28dA8C75c863942c54867C7C3A19", "BatchSubmitter": "0x584D61A30C7Ef1E8D547eE02099dADC487f49889", - "Challenger": "0xE6869aF6c871614df04902870Bb13d4505E1586c", - "Guardian": "0xE6869aF6c871614df04902870Bb13d4505E1586c", + "Challenger": "0x777bf55BA06395C8b2c05DD43D0A40001d1B9982", + "DelayedWETHProxy": "0x43e5d5B0c9d12E50ea23990E490F07E18A6333EB", + "DisputeGameFactoryProxy": "0xbDC16b0E8C18C5E13Ed02221Aa85598AF486A88f", + "FaultDisputeGame": "0x9bA6DBf003DeA8b69F4C205f7EA0224B3Daa74De", + "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xdaeab17598938A4f27E50AC771249Ad7df12Ea7D", "L1ERC721BridgeProxy": "0xBafb1a6e54e7750aF29489D65888d1c96Dfd66Df", "L1StandardBridgeProxy": "0x289179e9d43A35D47239456251F9c2fdbf9fbeA2", - "L2OutputOracleProxy": "0xccac2B8FFc4f778242105F3a9E6B3Ae3F827fC6a", + "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0xbd023e7F08AE0274dCEd397D4B6630D697aC738A", "OptimismPortalProxy": "0xF2891fc6819CDd6BD9221874619BB03A6277d72A", + "PermissionedDisputeGame": "0x2C53c9e748DBE5d9daccA2994c1c1637AAad8523", + "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", "Proposer": "0x5a145E3F466FD6cC095214C700359df7894BaD21", "ProxyAdmin": "0x4a0E8415e3eB85E7393445FD8E588283b62216C8", "ProxyAdminOwner": "0xAc78E9B3Aa9373AE4bE2Ba5Bc9F716d7A746A65E", - "SuperchainConfig": "0x1696a64C7F170E46D32088E8eC29193300C35817", - "SystemConfigOwner": "0xE6869aF6c871614df04902870Bb13d4505E1586c", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", + "SystemConfigOwner": "0x84db348d3DD6519444556a116225f4dAa5aDB6B4", "SystemConfigProxy": "0x07e7A3F25aA73dA15bc19B71FEF8f5511342a409", "UnsafeBlockSigner": "0x89eA88ef4AC23f4C7Fdc611Fc9cD1c50DF702C2C" }, "690": { "AddressManager": "0xFe27f187A9E46104a932189dDF229871E06B22F8", - "AnchorStateRegistryProxy": "0xc51ac31BcEFB64D999AF10129Cb7693EeE7c1179", "BatchSubmitter": "0xA31cb9Bc414601171D4537580f98F66C03aECd43", - "Challenger": "0xb356B146F1629c49C44344464F69BCDAfb4bb664", - "DAChallengeAddress": "0x97A2dA87d3439b172e6DD027220e01c9Cb565B80", - "DelayedWETHProxy": "0xa130523fD22e2a9D78F8aB232b01ff552845B4A9", - "DisputeGameFactoryProxy": "0x8f68E849eaf8EB943536F9d1D49Ea9C9b5868b98", "Guardian": "0xb356B146F1629c49C44344464F69BCDAfb4bb664", "L1CrossDomainMessengerProxy": "0x592C1299e0F8331D81A28C0FC7352Da24eDB444a", "L1ERC721BridgeProxy": "0x4FFB98dBC3086bA85d5E626a6EbC3D0d08533fF4", "L1StandardBridgeProxy": "0xc473ca7E02af24c129c2eEf51F2aDf0411c1Df69", "L2OutputOracleProxy": "0xa426A052f657AEEefc298b3B5c35a470e4739d69", - "MIPS": "0x66D6be83984e3F026B4a9e2D8Fb082ecDBd43648", "OptimismMintableERC20FactoryProxy": "0x5f962474834Cf1981Df6232e4b6431d3d10cb71D", "OptimismPortalProxy": "0xC7bCb0e8839a28A1cFadd1CF716de9016CdA51ae", - "PreimageOracle": "0xE7d0fE72637B3C949cd81c63A4Ff1fb23feeF3b2", "Proposer": "0x4c465E58946145bb2BFC38833154f5A3B5728CF7", "ProxyAdmin": "0xCC53b447aFe07926423aB96D5496b1af30485ED2", "ProxyAdminOwner": "0x70FdbCb066eD3621647Ddf61A1f40aaC6058Bc89", @@ -962,42 +888,39 @@ }, "7560": { "AddressManager": "0x19b5804B88F10262A55ac731f28A3BbC4209853a", - "BatchSubmitter": "0xf0748C52EDC23135d9845CDFB91279Cf61ee14b4", - "Challenger": "0x87bD2cFf3b59d615b1Eac7A7f809B5e5f0Ee6752", - "DAChallengeAddress": "0x10E34EfE14E4D270C0f77Bf1aF01b6C832161B49", - "DelayedWETHProxy": "0x588dAd44201885ff23068f1142e303D52d103919", - "DisputeGameFactoryProxy": "0xbF4676f21a7889E0Fd61BcDc9b98E60b01C1B36F", + "BatchSubmitter": "0x6AdE72DA6C1d47c856f13CD01Aac22A90D722e01", "Guardian": "0x0C883f622b4ccbF1e8ce86217998f87e6d36BCE4", "L1CrossDomainMessengerProxy": "0x3c01ebF22e9c111528c1E027D68944eDaB08Dfc9", "L1ERC721BridgeProxy": "0x4F4B716627D2Ba0439327Ce8B563b4443aF47Dbd", "L1StandardBridgeProxy": "0x12a580c05466eefb2c467C6b115844cDaF55B255", "L2OutputOracleProxy": "0xa669A743b065828682eE16109273F5CFeF5e676d", - "MIPS": "0x0048defcA9F0Da952CFD1Ae9F8e962937d3E4143", "OptimismMintableERC20FactoryProxy": "0x51A00470Eb50D758EcFF3B96DB0bF4A8e86268F4", "OptimismPortalProxy": "0x1d59bc9fcE6B8E2B1bf86D4777289FFd83D24C99", - "PreimageOracle": "0x0747ef2570e3dbF65F0a12B371F19ca4a66a8DdE", - "Proposer": "0xF2987f0A626c8D29dFB2E0A21144ca3026d6F1E1", + "Proposer": "0x0DE6711cE623d03f0888310ca3A04a69DE0E12e1", "ProxyAdmin": "0x7E54107731EC43e78DA678DFa5fB6222Ad036e03", "ProxyAdminOwner": "0xc2259E7Fb719411f97aBdCdf449f6Ba3B9D75398", "SuperchainConfig": "0x1aeC4c3BE47C30d0BEfa7514Cf9D99EaC596959D", - "SystemConfigOwner": "0xc76C563185d01284AdbC9cF5bb909162dD2F15e7", + "SystemConfigOwner": "0x68ca4cDCb0F47457273B554E60ff8321D5C133E4", "SystemConfigProxy": "0x5D1F4bbaF6D484fA9D5D9705f92dE6063bff6055", - "UnsafeBlockSigner": "0xa7A4D6d5920b93D0FE590f9524Ef17f24EE1F5B8" + "UnsafeBlockSigner": "0x1F316F0F898AAb1919F9Fb9183F8D1900F721AdB" }, "763373": { "AddressManager": "0x3454F9df5E750F1383e58c1CB001401e7A4f3197", - "AnchorStateRegistryProxy": "0x89126a987717207d4E990ed2e8880fd170DceA1A", + "AnchorStateRegistryProxy": "0xDa9916204568e2A8d689f775747D9e7FE17F7560", "BatchSubmitter": "0x21e57C21530Bc33F12Ba96C9dDC135488365002F", "Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", - "DelayedWETHProxy": "0x180AC451088B8f87006ab0CA98a01507e42AC456", + "DelayedWETHProxy": "0xc69C1ACcdAb9ae28780A238D987a1ACc8bd0FC56", "DisputeGameFactoryProxy": "0x860e626c700AF381133D9f4aF31412A2d1DB3D5d", + "FaultDisputeGame": "0x43736dE4Bd35482d828B79eA673b76ab1699626f", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x9fE1d3523F5342535E6E7770ED09ed85Dbc1Acc2", "L1ERC721BridgeProxy": "0xd1C901BBD7796546A7bA2492e0E199911fAE68c7", "L1StandardBridgeProxy": "0x33f60714BbD74d62b66D79213C348614DE51901C", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0x686F782A749D1854f6Fa3F948450f4c65c6674f0", "OptimismPortalProxy": "0x5c1d29C6c9C8b0800692acC95D700bcb4966A1d7", - "PermissionedDisputeGame": "0xA8808360F7bc16Da81938e5C29400D18BeA651C4", + "PermissionedDisputeGame": "0x65e5ec10f922Cf7e61ead974525a2795Bd4fdA9a", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xB15d792E30C5b7f67CBe5fe9Ba76685b537B4543", "ProxyAdmin": "0xd7dB319a49362b2328cf417a934300cCcB442C8d", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", @@ -1009,7 +932,6 @@ "7777777": { "AddressManager": "0xEF8115F2733fb2033a7c756402Fc1deaa56550Ef", "BatchSubmitter": "0x625726c858dBF78c0125436C943Bf4b4bE9d9033", - "Challenger": "0xcA4571b1ecBeC86Ea2E660d242c1c29FcB55Dc72", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0xdC40a14d9abd6F410226f1E6de71aE03441ca506", "L1ERC721BridgeProxy": "0x83A4521A3573Ca87f3a971B169C5A0E1d34481c3", @@ -1020,6 +942,7 @@ "Proposer": "0x48247032092e7b0ecf5dEF611ad89eaf3fC888Dd", "ProxyAdmin": "0xD4ef175B9e72cAEe9f1fe7660a6Ec19009903b49", "ProxyAdminOwner": "0x5a0Aae59D09fccBdDb6C6CcEB07B7279367C3d2A", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0xC72aE5c7cc9a332699305E29F68Be66c73b60542", "SystemConfigProxy": "0xA3cAB0126d5F504B071b81a3e8A2BBBF17930d86", "UnsafeBlockSigner": "0x3Dc8Dfd0709C835cAd15a6A27e089FF4cF4C9228" @@ -1051,13 +974,10 @@ "8008": { "AddressManager": "0x287bBa8116F2fc5a642bfD6027EBf5AD6522655C", "BatchSubmitter": "0x67a44CE38627F46F20b1293960559eD85Dd194F1", - "Challenger": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "Guardian": "0x4a4962275DF8C60a80d3a25faEc5AA7De116A746", "L1CrossDomainMessengerProxy": "0x36725a5e0040deB7C697d46C0e24390702b202e0", - "L1ERC721BridgeProxy": "0xD5890BBAFaFdce942597757385E55174569e8d1A", "L1StandardBridgeProxy": "0x3Be64BF2b9C2dE637067C7AAb6baE5EDf9fEBA55", "L2OutputOracleProxy": "0xe512D477Cc89196AF2cE837f6AB8EA30e199f757", - "OptimismMintableERC20FactoryProxy": "0x994233366C8E11da5c525AB903c04e7AFB2915bD", "OptimismPortalProxy": "0x034cbb620d1e0e4C2E29845229bEAc57083b04eC", "Proposer": "0x5DA28F0186051a9F7b9eE2553FFdc165EB0A6714", "ProxyAdmin": "0x3c68b1d45f4faa4F028c3DC8910fA3247c7f0a1f", @@ -1068,49 +988,50 @@ }, "8453": { "AddressManager": "0x8EfB6B5c4767B09Dc9AA6Af4eAA89F749522BaE2", - "AnchorStateRegistryProxy": "0xdB9091e48B1C42992A1213e6916184f9eBDbfEDf", + "AnchorStateRegistryProxy": "0x496286e5eE7758de84Dd17e6d2d97afC2ACE4cc7", "BatchSubmitter": "0x5050F69a9786F081509234F1a7F4684b5E5b76C9", - "Challenger": "0x6F8C5bA3F59ea3E76300E3BEcDC231D656017824", + "Challenger": "0x8Ca1E12404d16373Aef756179B185F27b2994F3a", "DelayedWETHProxy": "0xa2f2aC6F5aF72e494A227d79Db20473Cf7A1FFE8", "DisputeGameFactoryProxy": "0x43edB88C4B80fDD2AdFF2412A7BebF9dF42cB40e", - "FaultDisputeGame": "0xCd3c0194db74C23807D4B90A5181e1B28cF7007C", + "FaultDisputeGame": "0x13FbBDefa7D9B147A1777a8A5B0f30379E007ac3", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x866E82a600A1414e583f7F13623F1aC5d58b0Afa", "L1ERC721BridgeProxy": "0x608d94945A64503E642E6370Ec598e519a2C1E53", "L1StandardBridgeProxy": "0x3154Cf16ccdb4C6d922629664174b904d80F2C35", - "L2OutputOracleProxy": "0x56315b90c40730925ec5485cf004d835058518A0", - "MIPS": "0x16e83cE5Ce29BF90AD9Da06D2fE6a15d5f344ce4", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0x05cc379EBD9B30BbA19C6fA282AB29218EC61D84", "OptimismPortalProxy": "0x49048044D57e1C92A77f79988d21Fa8fAF74E97e", - "PermissionedDisputeGame": "0x19009dEBF8954B610f207D5925EEDe827805986e", - "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", + "PermissionedDisputeGame": "0x8BD2e80e6D1cf1e5C5f0c69972fE2f02B9C046Aa", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x642229f238fb9dE03374Be34B0eD8D9De80752c5", "ProxyAdmin": "0x0475cBCAebd9CE8AfA5025828d5b98DFb67E059E", "ProxyAdminOwner": "0x7bB41C3008B3f03FE483B28b8DB90e19Cf07595c", + "SuperchainConfig": "0x95703e0982140D16f8ebA6d158FccEde42f04a4C", "SystemConfigOwner": "0x14536667Cd30e52C0b458BaACcB9faDA7046E056", "SystemConfigProxy": "0x73a79Fab69143498Ed3712e519A88a918e1f4072", "UnsafeBlockSigner": "0xAf6E19BE0F9cE7f8afd49a1824851023A8249e8a" }, "84532": { "AddressManager": "0x709c2B8ef4A9feFc629A8a2C1AF424Dc5BD6ad1B", - "AnchorStateRegistryProxy": "0x4C8BA32A5DAC2A720bb35CeDB51D6B067D104205", + "AnchorStateRegistryProxy": "0x0729957c92A1F50590A84cb2D65D761093f3f8eB", "BatchSubmitter": "0xfc56E7272EEBBBA5bC6c544e159483C4a38f8bA3", - "Challenger": "0xDa3037Ff70Ac92CD867c683BD807e5A484857405", - "DelayedWETHProxy": "0x7698b262B7a534912c8366dD8a531672deEC634e", + "Challenger": "0x8b8c52B04A38f10515C52670fcb23f3C4C44474F", + "DelayedWETHProxy": "0x489c2E5ebe0037bDb2DC039C5770757b8E54eA1F", "DisputeGameFactoryProxy": "0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1", - "FaultDisputeGame": "0x8A9bA50a785c3868bEf1FD4924b640A5e0ed54CF", + "FaultDisputeGame": "0x861EB6dFE0FDe8c8A63E8606Fa487ee870f65E72", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xC34855F4De64F1840e5686e64278da901e261f20", "L1ERC721BridgeProxy": "0x21eFD066e581FA55Ef105170Cc04d74386a09190", "L1StandardBridgeProxy": "0xfd0Bf71F60660E2f608ed56e1659C450eB113120", - "MIPS": "0xFF760A87E41144b336E29b6D4582427dEBdB6dee", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0xb1efB9650aD6d0CC1ed3Ac4a0B7f1D5732696D37", "OptimismPortalProxy": "0x49f53e41452C74589E85cA1677426Ba426459e85", - "PermissionedDisputeGame": "0x593D20C4c69485B95D11507239BE2C725ea2A6fD", - "PreimageOracle": "0x627F825CBd48c4102d36f287be71f4234426b9e4", + "PermissionedDisputeGame": "0xd53394d4f67653074aCf0B264954fe5E4F72D24f", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x037637067c1DbE6d2430616d8f54Cb774Daa5999", "ProxyAdmin": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", "ProxyAdminOwner": "0x0fe884546476dDd290eC46318785046ef68a0BA9", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0x0fe884546476dDd290eC46318785046ef68a0BA9", "SystemConfigProxy": "0xf272670eb55e895584501d564AfEB048bEd26194", "UnsafeBlockSigner": "0xb830b99c95Ea32300039624Cb567d324D4b1D83C" @@ -1118,7 +1039,6 @@ "919": { "AddressManager": "0x83D45725d6562d8CD717673D6bb4c67C07dC1905", "BatchSubmitter": "0x4e6BD53883107B063c502dDd49F9600Dc51b3DDc", - "Challenger": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xc19a60d9E8C27B9A43527c3283B4dd8eDC8bE15C", "L1ERC721BridgeProxy": "0x015a8c2e0a5fEd579dbb05fd290e413Adc6FC24A", @@ -1129,6 +1049,7 @@ "Proposer": "0xe9e08A478e3a773c1B5D59014A0FDb901e6d1d69", "ProxyAdmin": "0xE7413127F29E050Df65ac3FC9335F85bB10091AE", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0x23BA22Dd7923F3a3f2495bB32a6f3c9b9CD1EC6C", "SystemConfigProxy": "0x15cd4f6e0CE3B4832B33cB9c6f6Fe6fc246754c2", "UnsafeBlockSigner": "0x93A14E6894eEB4FF6a373E1Ad4f498c3a207afe4" @@ -1136,13 +1057,10 @@ "957": { "AddressManager": "0xC845F9C4004EB35a8bde8ad89C4760a9c0e65CAB", "BatchSubmitter": "0x14e4E97bDc195d399Ad8E7FC14451C279FE04c8e", - "Challenger": "0x91F4be0C264FAFA1fEd75c4440910Cba2cAd98e8", "Guardian": "0x91F4be0C264FAFA1fEd75c4440910Cba2cAd98e8", "L1CrossDomainMessengerProxy": "0x5456f02c08e9A018E42C39b351328E5AA864174A", - "L1ERC721BridgeProxy": "0x6CC3268794c5d3E3d9d52adEfC748B59d536cb22", "L1StandardBridgeProxy": "0x61E44dC0dae6888B5a301887732217d5725B0bFf", "L2OutputOracleProxy": "0x1145E7848c8B64c6cab86Fd6D378733385c5C3Ba", - "OptimismMintableERC20FactoryProxy": "0x08Dea366F26C25a08C8D1C3568ad07d1e587136d", "OptimismPortalProxy": "0x85eA9c11cf3D4786027F7FD08F4406b15777e5f8", "Proposer": "0x03e820562ffd2e0390787caD706EaF1FF98C2608", "ProxyAdmin": "0x35d5D43271548c984662d4879FBc8e041Bc1Ff93", @@ -1153,20 +1071,14 @@ }, "9897": { "AddressManager": "0x5b7996f61650a6f4920F2C8eF4BfaF4f64a07638", - "AnchorStateRegistryProxy": "0xBB5B16c3ffdB21F67b1d7b1158517ce62D95AA68", "BatchSubmitter": "0xaBecfbb176FA579ee7E1Ed1947E375B118433be0", - "Challenger": "0x776beE5229Eb00349D6Fc956EFAD7985ee36804d", - "DelayedWETHProxy": "0x8A91337Fd5113669CC368F2b9D5aed8f6c4458c9", - "DisputeGameFactoryProxy": "0xD9E9933Cc6EF672C93d2a42494b0D2BF14C05544", "Guardian": "0x776beE5229Eb00349D6Fc956EFAD7985ee36804d", "L1CrossDomainMessengerProxy": "0xCC226A3B7b5ec4D4d698418fC2C0492950136Ba7", "L1ERC721BridgeProxy": "0x11d7f6f2E59Fc12E61DbfafE7790e54CAb01b434", "L1StandardBridgeProxy": "0x76A4B2CC5d210729Fb3DE13CeE250663bdac73A6", "L2OutputOracleProxy": "0xf2574585eC7ba515Fd86402B84A60D5eFb51B0Ff", - "MIPS": "0x379094D2ED496ca4FfaF1B17Ad4BA3e152Fb8486", "OptimismMintableERC20FactoryProxy": "0x88404B147e158e65fe7C9E7A9f50DD278F5e5e6e", "OptimismPortalProxy": "0x2188047AD28B78D975cE319dfcDa5D06c2a6a68b", - "PreimageOracle": "0x0e4371a13E53563F7A635380CF2DB6eCD620F444", "Proposer": "0xBF80C17ee655837E25208436ed543217899B4bd8", "ProxyAdmin": "0x554D3431CF89e680610CFBFb9B558777e0a72F39", "ProxyAdminOwner": "0xb33c6A58C26666F04054E8b0D939e17D6eB1a155", @@ -1177,18 +1089,24 @@ }, "999999999": { "AddressManager": "0x27c9392144DFcB6dab113F737356C32435cD1D55", + "AnchorStateRegistryProxy": "0x50C0232e3d1F7B8a8e18f6Ab1abE04BB6c713c87", "BatchSubmitter": "0x3Cd868E221A3be64B161D596A7482257a99D857f", "Challenger": "0x45eFFbD799Ab49122eeEAB75B78D9C56A187F9A7", + "DelayedWETHProxy": "0xa8fDce8F78AE428b7497eBda3684593A572EAfAe", + "DisputeGameFactoryProxy": "0xA983A71253Eb74e5E86A4E4eD9F37113FC25f2BF", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x1bDBC0ae22bEc0c2f08B4dd836944b3E28fe9b7A", "L1ERC721BridgeProxy": "0x16B0a4f451c4CB567703367e587E15Ac108e4311", "L1StandardBridgeProxy": "0x5376f1D543dcbB5BD416c56C189e4cB7399fCcCB", - "L2OutputOracleProxy": "0x2615B481Bd3E5A1C0C7Ca3Da1bdc663E8615Ade9", + "MIPS": "0x69470D6970Cd2A006b84B1d4d70179c892cFCE01", "OptimismMintableERC20FactoryProxy": "0x5F3bdd57f01e88cE2F88f00685D30D6eb51A187c", "OptimismPortalProxy": "0xeffE2C6cA9Ab797D418f0D91eA60807713f3536f", + "PermissionedDisputeGame": "0x4f500fE7c59aFb843fe47967EB6D0b8bE809F066", + "PreimageOracle": "0x92240135b46fc1142dA181f550aE8f595B858854", "Proposer": "0xe8326a5839175dE7f467e66D8bB443aa70DA1c3e", "ProxyAdmin": "0xE17071F4C216Eb189437fbDBCc16Bb79c4efD9c2", "ProxyAdminOwner": "0x1Eb2fFc903729a0F03966B917003800b145F56E2", + "SuperchainConfig": "0xC2Be75506d5724086DEB7245bd260Cc9753911Be", "SystemConfigOwner": "0x23BA22Dd7923F3a3f2495bB32a6f3c9b9CD1EC6C", "SystemConfigProxy": "0xB54c7BFC223058773CF9b739cC5bd4095184Fb08", "UnsafeBlockSigner": "0x3609513933100689bd1f84782529A99239842344" From 4791054602a56a72705ac7ecd601433c9c955791 Mon Sep 17 00:00:00 2001 From: Sebastian Stammler Date: Fri, 11 Apr 2025 12:58:32 +0200 Subject: [PATCH 28/55] mainnet: Schedule Isthmus hardfork on Mainnet Superchain (#972) * mainnet: Schedule Isthmus hardfork on Mainnet Superchain * Fri 9 May 2025 16:00:01 UTC * unix timestamp 1746806401 * skip superchain.toml in check-codegen cci job --- .circleci/config.yml | 5 +++++ superchain/configs/mainnet/arena-z.toml | 1 + superchain/configs/mainnet/base.toml | 1 + superchain/configs/mainnet/bob.toml | 1 + superchain/configs/mainnet/ethernity.toml | 1 + superchain/configs/mainnet/ink.toml | 1 + superchain/configs/mainnet/lisk.toml | 1 + superchain/configs/mainnet/lyra.toml | 1 + superchain/configs/mainnet/metal.toml | 1 + superchain/configs/mainnet/mint.toml | 1 + superchain/configs/mainnet/mode.toml | 1 + superchain/configs/mainnet/op.toml | 1 + superchain/configs/mainnet/orderly.toml | 1 + superchain/configs/mainnet/polynomial.toml | 1 + superchain/configs/mainnet/snax.toml | 1 + superchain/configs/mainnet/soneium.toml | 1 + superchain/configs/mainnet/superchain.toml | 3 ++- superchain/configs/mainnet/tbn.toml | 1 + superchain/configs/mainnet/unichain.toml | 1 + superchain/configs/mainnet/zora.toml | 1 + 20 files changed, 25 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 01f7652e27..c9e273da9a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -148,6 +148,11 @@ jobs: CHANGED_FILE_COUNT=0 for file in $CHANGED_FILES; do + # If the file is the superchain.toml file, skip it + if [[ "$file" == *"superchain.toml" ]]; then + continue + fi + CHANGED_FILE_COUNT=$((CHANGED_FILE_COUNT + 1)) # Use yq to extract chain_id from TOML CHAIN_ID=$(yq -p=toml -o=json '.chain_id' "$file" | grep -v "null" | tr -d '"') diff --git a/superchain/configs/mainnet/arena-z.toml b/superchain/configs/mainnet/arena-z.toml index b56168f0e1..9db0dc48be 100755 --- a/superchain/configs/mainnet/arena-z.toml +++ b/superchain/configs/mainnet/arena-z.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 20 diff --git a/superchain/configs/mainnet/base.toml b/superchain/configs/mainnet/base.toml index 00b813ddc6..2345b27c9f 100755 --- a/superchain/configs/mainnet/base.toml +++ b/superchain/configs/mainnet/base.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/bob.toml b/superchain/configs/mainnet/bob.toml index 0eaf62231e..06a630d566 100755 --- a/superchain/configs/mainnet/bob.toml +++ b/superchain/configs/mainnet/bob.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/ethernity.toml b/superchain/configs/mainnet/ethernity.toml index 6ebcc791ef..6253d95554 100755 --- a/superchain/configs/mainnet/ethernity.toml +++ b/superchain/configs/mainnet/ethernity.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 20 diff --git a/superchain/configs/mainnet/ink.toml b/superchain/configs/mainnet/ink.toml index f68c9f6263..886266e432 100755 --- a/superchain/configs/mainnet/ink.toml +++ b/superchain/configs/mainnet/ink.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC holocene_time = 1742396400 # Wed 19 Mar 2025 15:00:00 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/lisk.toml b/superchain/configs/mainnet/lisk.toml index 09750358ab..319a4f7101 100755 --- a/superchain/configs/mainnet/lisk.toml +++ b/superchain/configs/mainnet/lisk.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 20 diff --git a/superchain/configs/mainnet/lyra.toml b/superchain/configs/mainnet/lyra.toml index bf43a39738..62384b149c 100755 --- a/superchain/configs/mainnet/lyra.toml +++ b/superchain/configs/mainnet/lyra.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/metal.toml b/superchain/configs/mainnet/metal.toml index 4578147742..72271a7a7e 100755 --- a/superchain/configs/mainnet/metal.toml +++ b/superchain/configs/mainnet/metal.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/mint.toml b/superchain/configs/mainnet/mint.toml index 2bbd2dc9e9..2d71d81d98 100755 --- a/superchain/configs/mainnet/mint.toml +++ b/superchain/configs/mainnet/mint.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/mode.toml b/superchain/configs/mainnet/mode.toml index 5150687221..3a59da7d0a 100755 --- a/superchain/configs/mainnet/mode.toml +++ b/superchain/configs/mainnet/mode.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/op.toml b/superchain/configs/mainnet/op.toml index be2e27a997..6fc1a1acea 100755 --- a/superchain/configs/mainnet/op.toml +++ b/superchain/configs/mainnet/op.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/orderly.toml b/superchain/configs/mainnet/orderly.toml index 4b898be6eb..341b5020ce 100755 --- a/superchain/configs/mainnet/orderly.toml +++ b/superchain/configs/mainnet/orderly.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/polynomial.toml b/superchain/configs/mainnet/polynomial.toml index 81a525730c..50610cda36 100755 --- a/superchain/configs/mainnet/polynomial.toml +++ b/superchain/configs/mainnet/polynomial.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/snax.toml b/superchain/configs/mainnet/snax.toml index eb9f52ab9a..3113dac747 100755 --- a/superchain/configs/mainnet/snax.toml +++ b/superchain/configs/mainnet/snax.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/soneium.toml b/superchain/configs/mainnet/soneium.toml index 39ad546c7a..39e6ad4c5f 100755 --- a/superchain/configs/mainnet/soneium.toml +++ b/superchain/configs/mainnet/soneium.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC holocene_time = 1738573200 # Mon 3 Feb 2025 09:00:00 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/superchain.toml b/superchain/configs/mainnet/superchain.toml index a496bffe93..54fe807482 100644 --- a/superchain/configs/mainnet/superchain.toml +++ b/superchain/configs/mainnet/superchain.toml @@ -8,7 +8,8 @@ delta_time = 1708560000 # Thu 22 Feb 2024 00:00:00 UTC ecotone_time = 1710374401 # Thu 14 Mar 2024 00:00:01 UTC fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC -holocene_time = 1736445601 # Thu 09 Jan 2025 18:00:01 UTC +holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC +isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [l1] chain_id = 1 diff --git a/superchain/configs/mainnet/tbn.toml b/superchain/configs/mainnet/tbn.toml index 0f2775ef9a..c083b40114 100755 --- a/superchain/configs/mainnet/tbn.toml +++ b/superchain/configs/mainnet/tbn.toml @@ -20,6 +20,7 @@ gas_paying_token = "0x04E9D7e336f79Cdab911b06133D3Ca2Cd0721ce3" fjord_time = 1725536344 # Thu 5 Sep 2024 11:39:04 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/unichain.toml b/superchain/configs/mainnet/unichain.toml index 9dd7ac7c23..a059984d37 100755 --- a/superchain/configs/mainnet/unichain.toml +++ b/superchain/configs/mainnet/unichain.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 0 # Thu 1 Jan 1970 00:00:00 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 diff --git a/superchain/configs/mainnet/zora.toml b/superchain/configs/mainnet/zora.toml index d722342fa3..081eda7800 100755 --- a/superchain/configs/mainnet/zora.toml +++ b/superchain/configs/mainnet/zora.toml @@ -19,6 +19,7 @@ max_sequencer_drift = 600 fjord_time = 1720627201 # Wed 10 Jul 2024 16:00:01 UTC granite_time = 1726070401 # Wed 11 Sep 2024 16:00:01 UTC holocene_time = 1736445601 # Thu 9 Jan 2025 18:00:01 UTC + isthmus_time = 1746806401 # Fri 9 May 2025 16:00:01 UTC [optimism] eip1559_elasticity = 6 From 712a84f44501322ca61901c2729aa3a56726a602 Mon Sep 17 00:00:00 2001 From: Paul Dowman Date: Fri, 11 Apr 2025 09:20:51 -0600 Subject: [PATCH 29/55] Add prestates for op-program/1.6.0-rc.2 (#973) --- validation/standard/standard-prestates.toml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/validation/standard/standard-prestates.toml b/validation/standard/standard-prestates.toml index 7aeefac26b..1cab49bc57 100644 --- a/validation/standard/standard-prestates.toml +++ b/validation/standard/standard-prestates.toml @@ -1,5 +1,13 @@ latest_stable = "1.5.0" -latest_rc = "1.6.0-rc.1" +latest_rc = "1.6.0-rc.2" + +[[prestates."1.6.0-rc.2"]] +type = "cannon32" +hash = "0x03513e996556589f633fe1d38d694f63bc93cca5df559af37631b30875a829e9" + +[[prestates."1.6.0-rc.2"]] +type = "cannon64" +hash = "0x03682932cec7ce0a3874b19675a6bbc923054a7b321efc7d3835187b172494b6" [[prestates."1.6.0-rc.1"]] type = "cannon32" From 1139c0c4cb8c7c6fb2137e1f5593c96525b5ddfb Mon Sep 17 00:00:00 2001 From: Sam Stokes <35908605+bitwiseguy@users.noreply.github.com> Date: Mon, 14 Apr 2025 13:21:06 -0400 Subject: [PATCH 30/55] codegen: rerun 20250414 (#976) --- superchain/extra/addresses/addresses.json | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/superchain/extra/addresses/addresses.json b/superchain/extra/addresses/addresses.json index 9af2506d91..27786d48d1 100755 --- a/superchain/extra/addresses/addresses.json +++ b/superchain/extra/addresses/addresses.json @@ -55,15 +55,15 @@ "Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "DelayedWETHProxy": "0xcdFdC692a53B4aE9F81E0aEBd26107Da4a71dB84", "DisputeGameFactoryProxy": "0x05F9613aDB30026FFd634f38e5C4dFd30a197Fa1", - "FaultDisputeGame": "0x1851253aD7214F7b39E541befB6626669Cb2446f", + "FaultDisputeGame": "0x38c2b9A214cDc3bBBc4915Dae8c2F0a7917952Dd", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef", "L1ERC721BridgeProxy": "0xd83e03D576d23C9AEab8cC44Fa98d058D2176D1f", "L1StandardBridgeProxy": "0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1", - "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", + "MIPS": "0xF027F4A985560fb13324e943edf55ad6F1d15Dc1", "OptimismMintableERC20FactoryProxy": "0x868D59fF9710159C2B330Cc0fBDF57144dD7A13b", "OptimismPortalProxy": "0x16Fc5058F25648194471939df75CF27A2fdC48BC", - "PermissionedDisputeGame": "0x7717296CAC5d39d362eB77a94c95483bEbAe214e", + "PermissionedDisputeGame": "0x3dbfB370be95Eb598C8b89B45d7c101dC1679AB9", "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x49277EE36A024120Ee218127354c4a3591dc90A9", "ProxyAdmin": "0x189aBAAaa82DfC015A588A7dbaD6F13b1D3485Bc", @@ -159,21 +159,21 @@ }, "130": { "AddressManager": "0x8098F676033A377b9Defe302e9fE6877cD63D575", - "AnchorStateRegistryProxy": "0x318A642db9e24A85318B8BF18eFd5287BA38643B", + "AnchorStateRegistryProxy": "0xD5D0e176be44E61eaB3Cf1FA8153758dF603376f", "BatchSubmitter": "0x2F60A5184c63ca94f82a27100643DbAbe4F3f7Fd", "Challenger": "0x9BA6e03D8B90dE867373Db8cF1A58d2F7F006b3A", "DelayedWETHProxy": "0xc9edb4E340f4E9683B4557bD9db8f9d932177C86", "DisputeGameFactoryProxy": "0x2F12d621a16e2d3285929C9996f478508951dFe4", - "FaultDisputeGame": "0x08f0F8F4E792d21E16289dB7a80759323C446F61", + "FaultDisputeGame": "0xd2C3C6f4A4c5AA777bD6c476AEa58439Db0dD844", "Guardian": "0x09f7150D8c019BeF34450d6920f6B3608ceFdAf2", "L1CrossDomainMessengerProxy": "0x9A3D64E386C18Cb1d6d5179a9596A4B5736e98A6", "L1ERC721BridgeProxy": "0xD04D0D87E0bd4D2E50286760a3EF323FeA6849Cf", "L1StandardBridgeProxy": "0x81014F44b0a345033bB2b3B21C7a1A308B35fEeA", - "MIPS": "0x5fE03a12C1236F9C22Cb6479778DDAa4bce6299C", + "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", "OptimismMintableERC20FactoryProxy": "0xA2B597EaeAcb6F627e088cbEaD319e934ED5edad", "OptimismPortalProxy": "0x0bd48f6B86a26D3a217d0Fa6FfE2B491B956A7a2", - "PermissionedDisputeGame": "0xC457172937fFa9306099ec4F2317903254Bf7223", - "PreimageOracle": "0x9c065e11870B891D214Bc2Da7EF1f9DDFA1BE277", + "PermissionedDisputeGame": "0x5FE2BECc3dec340d3df04351DB8E728CbE4c7450", + "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xD5F0E2912C70771C589CD8bB087EDE0Dab4AFA9A", "ProxyAdmin": "0x3B73Fa8d82f511A3caE17B5a26E4E1a2d5E2f2A4", "ProxyAdminOwner": "0x6d5B183F538ABB8572F5cD17109c617b994D5833", @@ -378,10 +378,10 @@ "L1CrossDomainMessengerProxy": "0x0184245D202724dc28a2b688952Cb56C882c226F", "L1ERC721BridgeProxy": "0x2bfb22cd534a462028771a1cA9D6240166e450c4", "L1StandardBridgeProxy": "0x5f5a404A5edabcDD80DB05E8e54A78c9EBF000C2", - "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", + "MIPS": "0xF027F4A985560fb13324e943edf55ad6F1d15Dc1", "OptimismMintableERC20FactoryProxy": "0x6069BC38c6185f2db0d161f08eC8d1657F6078Df", "OptimismPortalProxy": "0x65ea1489741A5D72fFdD8e6485B216bBdcC15Af3", - "PermissionedDisputeGame": "0x2087cbc6eC893a31405D56025Cd1aE648dA3982c", + "PermissionedDisputeGame": "0x697a4684576d8a76d4B11E83E9B6F3b61Bf04755", "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xa759A2C80Ec4C6421829862da30dD34436114502", "ProxyAdmin": "0xff9d236641962Cebf9DBFb54E7b8e91F99f10Db0", @@ -911,15 +911,15 @@ "Challenger": "0xfd1D2e729aE8eEe2E146c033bf4400fE75284301", "DelayedWETHProxy": "0xc69C1ACcdAb9ae28780A238D987a1ACc8bd0FC56", "DisputeGameFactoryProxy": "0x860e626c700AF381133D9f4aF31412A2d1DB3D5d", - "FaultDisputeGame": "0x43736dE4Bd35482d828B79eA673b76ab1699626f", + "FaultDisputeGame": "0xBd72dD2fB74a537B9B47B454614A15B066Cc464a", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0x9fE1d3523F5342535E6E7770ED09ed85Dbc1Acc2", "L1ERC721BridgeProxy": "0xd1C901BBD7796546A7bA2492e0E199911fAE68c7", "L1StandardBridgeProxy": "0x33f60714BbD74d62b66D79213C348614DE51901C", - "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", + "MIPS": "0xF027F4A985560fb13324e943edf55ad6F1d15Dc1", "OptimismMintableERC20FactoryProxy": "0x686F782A749D1854f6Fa3F948450f4c65c6674f0", "OptimismPortalProxy": "0x5c1d29C6c9C8b0800692acC95D700bcb4966A1d7", - "PermissionedDisputeGame": "0x65e5ec10f922Cf7e61ead974525a2795Bd4fdA9a", + "PermissionedDisputeGame": "0x97766954BAF17e3a2BfA43728830f0Fa647F7546", "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0xB15d792E30C5b7f67CBe5fe9Ba76685b537B4543", "ProxyAdmin": "0xd7dB319a49362b2328cf417a934300cCcB442C8d", @@ -1018,15 +1018,15 @@ "Challenger": "0x8b8c52B04A38f10515C52670fcb23f3C4C44474F", "DelayedWETHProxy": "0x489c2E5ebe0037bDb2DC039C5770757b8E54eA1F", "DisputeGameFactoryProxy": "0xd6E6dBf4F7EA0ac412fD8b65ED297e64BB7a06E1", - "FaultDisputeGame": "0x861EB6dFE0FDe8c8A63E8606Fa487ee870f65E72", + "FaultDisputeGame": "0x340c1364D299ED55B193d4eFcecBAD8c3Fb104c4", "Guardian": "0x7a50f00e8D05b95F98fE38d8BeE366a7324dCf7E", "L1CrossDomainMessengerProxy": "0xC34855F4De64F1840e5686e64278da901e261f20", "L1ERC721BridgeProxy": "0x21eFD066e581FA55Ef105170Cc04d74386a09190", "L1StandardBridgeProxy": "0xfd0Bf71F60660E2f608ed56e1659C450eB113120", - "MIPS": "0xaA59A0777648BC75cd10364083e878c1cCd6112a", + "MIPS": "0xF027F4A985560fb13324e943edf55ad6F1d15Dc1", "OptimismMintableERC20FactoryProxy": "0xb1efB9650aD6d0CC1ed3Ac4a0B7f1D5732696D37", "OptimismPortalProxy": "0x49f53e41452C74589E85cA1677426Ba426459e85", - "PermissionedDisputeGame": "0xd53394d4f67653074aCf0B264954fe5E4F72D24f", + "PermissionedDisputeGame": "0x6F67E57C143321e266bac32A0D9D22d88cE1b3e5", "PreimageOracle": "0x1fb8cdFc6831fc866Ed9C51aF8817Da5c287aDD3", "Proposer": "0x037637067c1DbE6d2430616d8f54Cb774Daa5999", "ProxyAdmin": "0x0389E59Aa0a41E4A413Ae70f0008e76CAA34b1F3", From b3d020de42abeebeb5786ea5508aa08d12bdf4cd Mon Sep 17 00:00:00 2001 From: Yashvardhan Kukreja Date: Tue, 15 Apr 2025 02:33:08 +0530 Subject: [PATCH 31/55] fix: arena-z testnet pectra blob schedule time (#977) * fix: arena-z testnet pectra blob schedule time Signed-off-by: Yashvardhan Kukreja * fix Signed-off-by: Yashvardhan Kukreja * fix: pectra_blob_schedule_time Signed-off-by: Yashvardhan Kukreja --------- Signed-off-by: Yashvardhan Kukreja --- superchain/configs/sepolia/arena-z-testnet.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/superchain/configs/sepolia/arena-z-testnet.toml b/superchain/configs/sepolia/arena-z-testnet.toml index 25eb5dc108..008599e3c0 100755 --- a/superchain/configs/sepolia/arena-z-testnet.toml +++ b/superchain/configs/sepolia/arena-z-testnet.toml @@ -18,6 +18,7 @@ max_sequencer_drift = 600 fjord_time = 0 # Thu 1 Jan 1970 00:00:00 UTC granite_time = 1723478400 # Mon 12 Aug 2024 16:00:00 UTC holocene_time = 1732633200 # Tue 26 Nov 2024 15:00:00 UTC + pectra_blob_schedule_time = 1742486400 # Thu 20 Mar 2025 16:00:00 UTC [optimism] eip1559_elasticity = 10 From 65e2a8714f72b9455a1e0581ab945d00d1982995 Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Tue, 15 Apr 2025 16:47:56 -0700 Subject: [PATCH 32/55] feat: add Boba Sepolia (28882) Changes to be committed: new file: superchain/configs/sepolia/boba.toml new file: superchain/extra/genesis/sepolia/boba.json.zst --- superchain/configs/sepolia/boba.toml | 59 ++++++++++++++++++ .../extra/genesis/sepolia/boba.json.zst | Bin 0 -> 208 bytes 2 files changed, 59 insertions(+) create mode 100644 superchain/configs/sepolia/boba.toml create mode 100644 superchain/extra/genesis/sepolia/boba.json.zst diff --git a/superchain/configs/sepolia/boba.toml b/superchain/configs/sepolia/boba.toml new file mode 100644 index 0000000000..b6d79816c9 --- /dev/null +++ b/superchain/configs/sepolia/boba.toml @@ -0,0 +1,59 @@ +name = "Boba Sepolia Testnet" +chain_id = 28882 +public_rpc = "https://sepolia.boba.network" +sequencer_rpc = "https://sepolia.boba.network" +explorer = "https://testnet.bobascan.com" +superchain_level = 1 +batch_inbox_addr = "0xfFf0000000000000000000000000000000028882" +block_time = 2 +seq_window_size = 3600 +max_sequencer_drift = 600 +data_availability_type = "eth-da" + +[hardforks] + regolith_time = 1705600788 + canyon_time = 1705600788 # Thu 18 Jan 2024 17:59:48 UTC + delta_time = 1709078400 # Wed 28 Feb 2024 00:00:00 UTC + ecotone_time = 1709078400 # Wed 28 Feb 2024 00:00:00 UTC + fjord_time = 1722297600 # Tue 30 Jul 2024 00:00:00 UTC + granite_time = 1726470000 # Mon 16 Sep 2024 07:00:00 UTC + holocene_time = 1736150400 # Mon Jan 06 08:00:00 UTC + pectra_blob_schedule_time = 1743534000 # Tue Apr 01 2025 19:00:00 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1705600788 + [genesis.l1] + hash = "0x632d8caedbfd573e09c1b49134bd5147147e0904e0f04eba15c662be0258f517" + number = 5109513 + [genesis.l2] + hash = "0x097654c4c932c97808933b42179388f7bbcefaed3bd93fdf69157e19f1deea0e" + number = 511 + [genesis.system_config] + batcherAddress = "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8" + overhead = "0x0000000000000000000000000000000000000000000000000000000000000834" + scalar = "0x00000000000000000000000000000000000000000000000000000000000f4240" + gasLimit = 30000000 + +[addresses] + SystemConfigOwner = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + ProxyAdminOwner = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + Guardian = "0x66930dd34EA64bD4B9F32464e363511b49966C5D" + Challenger = "0x17070B4AF21625106E7971983Aa524f59EA40c57" + Proposer = "0x0AB197DdeE146c01A0C6Cadf3d91fbb4340A999A" + UnsafeBlockSigner = "0x274a47436C7C896827633805d924d41BBa1D19e9" + BatchSubmitter = "0xf598b6388eC06945021699F0bbb23dfCFc5edbE8" + AddressManager = "0xC62C429390B7bCE9960fa647d5556CA7238168AB" + L1CrossDomainMessengerProxy = "0x9253E76E2fA3f72aF18e08914b3528F725779495" + L1ERC721BridgeProxy = "0x13B397A08322973B45e063F29746Fb278f189916" + L1StandardBridgeProxy = "0x244d7b81EE3949788Da5F1178D911e83bA24E157" + L2OutputOracleProxy = "0xdBdb238185f9BB40f742aE249f9a083381EC39eC" + OptimismMintableERC20FactoryProxy = "0xE6ebece6936528804BB4c43AdcA10c2623919852" + OptimismPortalProxy = "0xB079E6FA9B3eb072fEbf7F746044834eab308dB6" + SystemConfigProxy = "0xfDC9bCE032cEF55a71b4fde9B9a2198ad1551965" + ProxyAdmin = "0x66930dd34EA64bD4B9F32464e363511b49966C5D" + SuperchainConfig = "0x029A23c6E9D3026f984cd1Fd9C47906e4F5327F3" diff --git a/superchain/extra/genesis/sepolia/boba.json.zst b/superchain/extra/genesis/sepolia/boba.json.zst new file mode 100644 index 0000000000000000000000000000000000000000..4e5253290dd54f0d5ba54e4871637cb6705a590c GIT binary patch literal 208 zcmV;>05AV2wJ-f=y!a+A1OoL10Fy=*3TT4@L@-U2du3Kr$J-x-9#=zKn0TiRaZk6j z_|STP?x`!5MZ<^y1Z`LY2w)(B@&zt%fq(!63IG8JatK%js%1S9+#FPVy~5M&jyib{32IxpPbpIhCsMajIaLO?u@k~UBVgN{NCMibXo z;r`)zS8lmgaI}PX#BkkK`%~4W4eY6{R>m}4_{~-aFO97hcW)sGzD8d9zQtB2_byTh KqEZ1wjHQRJ#8m14 literal 0 HcmV?d00001 From 4f4e5be07a6b18691f4c5f700bedd79e0defe8ac Mon Sep 17 00:00:00 2001 From: Michael Montour Date: Tue, 15 Apr 2025 16:48:42 -0700 Subject: [PATCH 33/55] feat: add Boba Sepolia Devnet (288882) Changes to be committed: new file: superchain/configs/sepolia-dev-0/boba.toml new file: superchain/extra/genesis/sepolia-dev-0/boba.json.zst --- superchain/configs/sepolia-dev-0/boba.toml | 57 ++++++++++++++++++ .../extra/genesis/sepolia-dev-0/boba.json.zst | Bin 0 -> 52526 bytes 2 files changed, 57 insertions(+) create mode 100644 superchain/configs/sepolia-dev-0/boba.toml create mode 100755 superchain/extra/genesis/sepolia-dev-0/boba.json.zst diff --git a/superchain/configs/sepolia-dev-0/boba.toml b/superchain/configs/sepolia-dev-0/boba.toml new file mode 100644 index 0000000000..6c6cb4cc09 --- /dev/null +++ b/superchain/configs/sepolia-dev-0/boba.toml @@ -0,0 +1,57 @@ +name = "Boba Devnet" +chain_id = 288882 +public_rpc = "https://devnet.boba.network" +sequencer_rpc = "https://devnet.boba.network" +explorer = "" +superchain_level = 1 +batch_inbox_addr = "0xfFF0000000000000000000000000000000288882" +block_time = 2 +seq_window_size = 3600 +max_sequencer_drift = 600 +data_availability_type = "eth-da" +gas_paying_token = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE" + +[hardforks] + regolith_time = 0 + canyon_time = 1724692140 # Mon 26 Aug 2024 17:09:00 UTC + delta_time = 1724692140 # Mon 26 Aug 2024 17:09:00 UTC + ecotone_time = 1724692141 # Mon 26 Aug 2024 17:09:01 UTC + fjord_time = 1724692150 # Mon 26 Aug 2024 17:09:10 UTC + granite_time = 1724914800 # Thu Aug 29 07:00:00 UTC + holocene_time = 1732435200 # Mon Nov 25 08:00:00 UTC + pectra_blob_schedule_time = 1743534000 # Tue Apr 01 2025 19:00:00 UTC + +[optimism] + eip1559_elasticity = 6 + eip1559_denominator = 50 + eip1559_denominator_canyon = 250 + +[genesis] + l2_time = 1724692140 + [genesis.l1] + hash = "0xb6404ecff691edd6895c474f4dfca5b3e27b92a19deabd80cbe05c75c1b4c924" + number = 6576100 + [genesis.l2] + hash = "0xe919706177d2c568ed21a4b443d421c8098b4e453a29bd432258fab3f7fe1d07" + number = 0 + [genesis.system_config] + batcherAddress = "0xe40d3fB61A6a9e16ffD17ae4Ed225dE00a4B16fd" + overhead = "0x0000000000000000000000000000000000000000000000000000000000000834" + scalar = "0x00000000000000000000000000000000000000000000000000000000000f4240" + gasLimit = 30000000 + +[addresses] + SystemConfigOwner = "0xe62B0E3a9F715493301eBdEC8310C899eae5b30c" + ProxyAdminOwner = "0xe62B0E3a9F715493301eBdEC8310C899eae5b30c" + Guardian = "0xe62B0E3a9F715493301eBdEC8310C899eae5b30c" + Challenger = "0xe62B0E3a9F715493301eBdEC8310C899eae5b30c" + Proposer = "0x10AAf74A0735332b0fFB11935abA51F2A4170F91" + UnsafeBlockSigner = "0x9e43BFCbcb21fCcc1Dfb41a3DaB1ACfaE3C03834" + BatchSubmitter = "0xe40d3fB61A6a9e16ffD17ae4Ed225dE00a4B16fd" + L1ERC721BridgeProxy = "0x57B679c04EAe2A9cee67414511E4A9f5a9F674E3" + L2OutputOracleProxy = "0xcFf51852d3E96912ea1cC8C6F12D6c86b0B37B4F" + OptimismMintableERC20FactoryProxy = "0xd5C40568cB199cCc3bC6d4931742074225781686" + OptimismPortalProxy = "0xD00d5Cc5620697a31014E5594AABba590793836D" + SystemConfigProxy = "0xcc3c025036612B849340D6866eC0bd4d2d794a36" + ProxyAdmin = "0xd7D6C90d94156dBd1251a57c28c7336F8B464C66" + SuperchainConfig = "0x59230BEeaF4225B1E2C4ED391592c8962bb97ba4" diff --git a/superchain/extra/genesis/sepolia-dev-0/boba.json.zst b/superchain/extra/genesis/sepolia-dev-0/boba.json.zst new file mode 100755 index 0000000000000000000000000000000000000000..f14c2576bef5ccf27b6a6b4453efbe3eda9d1ecc GIT binary patch literal 52526 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