From f6166e537a6e038eb05cb3be82879cdb22f856d4 Mon Sep 17 00:00:00 2001 From: Luiz Date: Fri, 26 Jun 2026 21:57:01 -0300 Subject: [PATCH 1/2] Add Unichain and Worldchain deployments --- .env.mainnet.example | 16 +++++++++ .env.testnet.example | 18 ++++++++++ deployments/arbitrum-sepolia.json | 4 ++- deployments/arbitrum.json | 4 ++- deployments/base-sepolia.json | 15 ++++++-- deployments/base.json | 4 ++- deployments/ethereum-sepolia.json | 13 ++++++- deployments/ethereum.json | 12 ++++++- deployments/linea-sepolia.json | 4 ++- deployments/linea.json | 4 ++- deployments/optimism-sepolia.json | 4 ++- deployments/optimism.json | 4 ++- deployments/scroll-sepolia.json | 4 ++- deployments/scroll.json | 4 ++- deployments/unichain-sepolia.json | 25 +++++++++++++ deployments/unichain.json | 22 ++++++++++++ deployments/worldchain-sepolia.json | 25 +++++++++++++ deployments/worldchain.json | 25 +++++++++++++ deployments/zksync.json | 4 ++- foundry.toml | 2 ++ remappings.txt | 18 ++++++++-- scripts/deployment/DeployBase.s.sol | 4 +++ .../block-hash-pusher/DeployBuffers.s.sol | 2 ++ .../block-hash-pusher/DeployPushers.s.sol | 16 +++++++++ scripts/deployment/deploy.sh | 36 +++++++++++++++++++ .../provers/deploy-child-provers.sh | 16 +++++++++ .../provers/deploy-parent-provers.sh | 20 +++++++++++ 27 files changed, 309 insertions(+), 16 deletions(-) create mode 100644 deployments/unichain-sepolia.json create mode 100644 deployments/unichain.json create mode 100644 deployments/worldchain-sepolia.json create mode 100644 deployments/worldchain.json diff --git a/.env.mainnet.example b/.env.mainnet.example index 4fb5147..16a4017 100644 --- a/.env.mainnet.example +++ b/.env.mainnet.example @@ -5,6 +5,8 @@ OPTIMISM_RPC_URL= LINEA_RPC_URL= SCROLL_RPC_URL= BASE_RPC_URL= +UNICHAIN_RPC_URL= +WORLD_RPC_URL= OWNER= DEPLOYER_PRIVATE_KEY= @@ -58,6 +60,20 @@ ZKSYNC_GATEWAY_ZK_CHAIN=0x6E96D1172a6593D5027Af3c2664C5112Ca75F2B9 ZKSYNC_L2_LOGS_ROOT_HASH_SLOT=15 ZKSYNC_GATEWAY_CHAIN_ID=9075 +#Unichain Envs +UNICHAIN_CHAIN_ID=130 +UNICHAIN_ANCHOR_GAME_SLOT=2 +UNICHAIN_ANCHOR_STATE_REGISTRY=0x318a642db9e24a85318b8bf18efd5287ba38643b +UNICHAIN_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x9a3d64e386c18cb1d6d5179a9596a4b5736e98a6 +UNICHAIN_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007 + +#Worldchain Envs +WORLD_CHAIN_ID=480 +WORLD_ANCHOR_GAME_SLOT=2 +WORLD_ANCHOR_STATE_REGISTRY=0xD4D7A57DCC563756DeD99e224E144A6Bf0327099 +WORLD_L1_CROSS_DOMAIN_MESSENGER_PROXY=0xf931a81D18B1766d15695ffc7c1920a62b7e710a +WORLD_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007 + diff --git a/.env.testnet.example b/.env.testnet.example index d943dd2..891dafc 100644 --- a/.env.testnet.example +++ b/.env.testnet.example @@ -5,6 +5,8 @@ OPTIMISM_RPC_URL= LINEA_RPC_URL= SCROLL_RPC_URL= BASE_RPC_URL= +UNICHAIN_RPC_URL= +WORLD_RPC_URL= OWNER= DEPLOYER_PRIVATE_KEY= @@ -58,6 +60,22 @@ ZKSYNC_GATEWAY_ZK_CHAIN=0xFFDbb7B7F35A8b81618F64d95BCc878297759744 ZKSYNC_L2_LOGS_ROOT_HASH_SLOT=15 ZKSYNC_GATEWAY_CHAIN_ID=32657 +#Unichain Envs +UNICHAIN_CHAIN_ID=1301 +UNICHAIN_ANCHOR_GAME_SLOT=2 +UNICHAIN_ANCHOR_STATE_REGISTRY=0xf971f1b0d80eb769577135b490b913825bfcf00b +UNICHAIN_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x448a37330a60494e666f6dd60ad48d930aeba381 +UNICHAIN_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007 + +#Worldchain Envs +WORLD_CHAIN_ID=4801 +WORLD_ANCHOR_GAME_SLOT=2 +WORLD_ANCHOR_STATE_REGISTRY=0x1333d5E5201D760444A399E77b3D337eBDB0DD07 +WORLD_L1_CROSS_DOMAIN_MESSENGER_PROXY=0x7768c821200554d8F359A8902905Ba9eDe5659a9 +WORLD_L2_CROSS_DOMAIN_MESSENGER=0x4200000000000000000000000000000000000007 + + + diff --git a/deployments/arbitrum-sepolia.json b/deployments/arbitrum-sepolia.json index 04132b9..929ae60 100644 --- a/deployments/arbitrum-sepolia.json +++ b/deployments/arbitrum-sepolia.json @@ -13,7 +13,9 @@ "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4", - "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } }, "provers": { diff --git a/deployments/arbitrum.json b/deployments/arbitrum.json index ee3c848..cf92972 100644 --- a/deployments/arbitrum.json +++ b/deployments/arbitrum.json @@ -20,7 +20,9 @@ "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6", - "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } } } \ No newline at end of file diff --git a/deployments/base-sepolia.json b/deployments/base-sepolia.json index b3ffb0a..70ac492 100644 --- a/deployments/base-sepolia.json +++ b/deployments/base-sepolia.json @@ -4,14 +4,25 @@ "receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059", "broadcaster-oracle": "0x0a6edD8A400b6db1bbe0d21Ecef07c4Fce983248", "input-settler-escrow": "0x1CC9260E285C2C8AC8D2E7102F3978056Ec1d0a8", - "output-settler-simple": "0x52602D7cc3D833F5d28ee6D01C7F82C9b2322e10" + "output-settler-simple": "0x52602D7cc3D833F5d28ee6D01C7F82C9b2322e10", + "pusher": "0x83F6E54fCA233CC3A7D117b26CF035109d5bC166", + "buffer": "0xcf118D7a3635F9B18B4aa88bFCDB4fa51c73719D" }, "copies": { "ethereum-sepolia": { "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", - "arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6" + "arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde", + "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4" + } + }, + "provers": { + "ethereum-sepolia": { + "pointer": "0x2801362E0E0aA838e3edE528c183c548Bc8F91C1", + "prover": "0x6279680a02ADAE52C76A3B3881aE4631C9459598" } } } \ No newline at end of file diff --git a/deployments/base.json b/deployments/base.json index b3c29cb..ff1b163 100644 --- a/deployments/base.json +++ b/deployments/base.json @@ -14,7 +14,9 @@ "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", - "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6" + "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "provers": { diff --git a/deployments/ethereum-sepolia.json b/deployments/ethereum-sepolia.json index b466ad6..fbeb9e7 100644 --- a/deployments/ethereum-sepolia.json +++ b/deployments/ethereum-sepolia.json @@ -10,7 +10,10 @@ "linea-sepolia": "0x2aC21Fcfd6905eF13FA9bc0F874f3524029cB443", "scroll-sepolia": "0xF99b4E792aCaBa74cb2d1A5D3fDBDFfe630C0a8e", "zksync-sepolia": "0xc69281Edb758A5dDD7A13e12b4F3d81b14Bd983B", - "optimism-sepolia": "0x2c4ded0d5883646AEAD86a6C748c871afa819125" + "optimism-sepolia": "0x2c4ded0d5883646AEAD86a6C748c871afa819125", + "base-sepolia": "0x83F6E54fCA233CC3A7D117b26CF035109d5bC166", + "unichain-sepolia": "0xcBF1db810c116e21fbf957530b73768924Fb2D02", + "worldchain-sepolia": "0x9D8F530FCCfaCA291980E102FE258D90edf8B97B" }, "provers": { "arbitrum-sepolia": { @@ -36,6 +39,14 @@ "base-sepolia": { "pointer": "0x391691A1a0a491A65adc1d0af97DF810e64EE2F8", "prover": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" + }, + "unichain-sepolia": { + "pointer": "0xD455FF97E70a1157e026666A3927e190bBaD80C6", + "prover": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5" + }, + "worldchain-sepolia": { + "pointer": "0xA9D21baf6af39a575F286b60632Db1cf68C0d586", + "prover": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } } } \ No newline at end of file diff --git a/deployments/ethereum.json b/deployments/ethereum.json index 6b01443..d0de84e 100644 --- a/deployments/ethereum.json +++ b/deployments/ethereum.json @@ -31,6 +31,14 @@ "base": { "pointer": "0x8645f22Bc5d6b9531a76E20d3eD749A55117F47C", "prover": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + }, + "unichain": { + "pointer": "0xfCBBd10A0B1891D11A897E9DC76a0e7EA9700e96", + "prover": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1" + }, + "worldchain": { + "pointer": "0x55a199009A4e82Bc1D3a2f87761E919fd0f976Ae", + "prover": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "pushers": { @@ -38,6 +46,8 @@ "scroll": "0x331475638c7B3356c3E1d1Ff0c1477F7D8B8fB04", "zksync": "0x32e6E59958Cb6C7C528573a42456955E1EC3FF12", "optimism": "0xcf118D7a3635F9B18B4aa88bFCDB4fa51c73719D", - "base": "0xcBF1db810c116e21fbf957530b73768924Fb2D02" + "base": "0xcBF1db810c116e21fbf957530b73768924Fb2D02", + "unichain": "0x9dA2E2A3B08D968C43977244D2933d6Db7Aa20d0", + "worldchain": "0xC4a018A5A0c0DFAfbf149CBF01292d076759019F" } } \ No newline at end of file diff --git a/deployments/linea-sepolia.json b/deployments/linea-sepolia.json index 7bcedf8..751562a 100644 --- a/deployments/linea-sepolia.json +++ b/deployments/linea-sepolia.json @@ -13,7 +13,9 @@ "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4", - "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } }, "provers": { diff --git a/deployments/linea.json b/deployments/linea.json index ba3b29b..42c2677 100644 --- a/deployments/linea.json +++ b/deployments/linea.json @@ -14,7 +14,9 @@ "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6", - "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "provers": { diff --git a/deployments/optimism-sepolia.json b/deployments/optimism-sepolia.json index d6f1350..42f50ac 100644 --- a/deployments/optimism-sepolia.json +++ b/deployments/optimism-sepolia.json @@ -14,7 +14,9 @@ "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4", - "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } }, "provers": { diff --git a/deployments/optimism.json b/deployments/optimism.json index 2d008f2..cae5d14 100644 --- a/deployments/optimism.json +++ b/deployments/optimism.json @@ -14,7 +14,9 @@ "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6", "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", - "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "provers": { diff --git a/deployments/scroll-sepolia.json b/deployments/scroll-sepolia.json index 8da6338..914f9f4 100644 --- a/deployments/scroll-sepolia.json +++ b/deployments/scroll-sepolia.json @@ -13,7 +13,9 @@ "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4", - "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6" + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } }, "provers": { diff --git a/deployments/scroll.json b/deployments/scroll.json index 7d5c68a..56c8ac4 100644 --- a/deployments/scroll.json +++ b/deployments/scroll.json @@ -14,7 +14,9 @@ "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6", - "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "provers": { diff --git a/deployments/unichain-sepolia.json b/deployments/unichain-sepolia.json new file mode 100644 index 0000000..8f84e15 --- /dev/null +++ b/deployments/unichain-sepolia.json @@ -0,0 +1,25 @@ +{ + "contracts": { + "broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27", + "receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059", + "pusher": "0xcBF1db810c116e21fbf957530b73768924Fb2D02", + "buffer": "0x32e6E59958Cb6C7C528573a42456955E1EC3FF12" + }, + "copies": { + "ethereum-sepolia": { + "arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6", + "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", + "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", + "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde", + "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4" + } + }, + "provers": { + "ethereum-sepolia": { + "pointer": "0x2801362E0E0aA838e3edE528c183c548Bc8F91C1", + "prover": "0xb6E801704a1c7F0Da8a8d9Fce0F9893B3D026102" + } + } +} \ No newline at end of file diff --git a/deployments/unichain.json b/deployments/unichain.json new file mode 100644 index 0000000..432f7c5 --- /dev/null +++ b/deployments/unichain.json @@ -0,0 +1,22 @@ +{ + "contracts": { + "broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27", + "receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059", + "pusher": "0x9dA2E2A3B08D968C43977244D2933d6Db7Aa20d0", + "buffer": "0x410ff404d6290DA6F4532F638E334392585369a7" + }, + "copies": { + "ethereum": { + "arbitrum": "0xfdB7609b3fFd817454fDF8409b01399DF4a45adD", + "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", + "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" + } + }, + "provers": { + "ethereum": { + "pointer": "0x1c7ca0a4d176A03Fe93C1f5d6555f2ED724B6b04", + "prover": "0x4585CB6e9ce262a679539469dd5D1e1f53FcA556" + } + } +} \ No newline at end of file diff --git a/deployments/worldchain-sepolia.json b/deployments/worldchain-sepolia.json new file mode 100644 index 0000000..331295a --- /dev/null +++ b/deployments/worldchain-sepolia.json @@ -0,0 +1,25 @@ +{ + "contracts": { + "broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27", + "receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059", + "pusher": "0x9D8F530FCCfaCA291980E102FE258D90edf8B97B", + "buffer": "0x02C24F850871F3757dCadB97110E56B39245Ed01" + }, + "copies": { + "ethereum-sepolia": { + "arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6", + "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", + "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", + "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "zksync-sepolia": "0xf5e56d9d93267631f69dB9388d38e9c487830bD4" + } + }, + "provers": { + "ethereum-sepolia": { + "pointer": "0x2801362E0E0aA838e3edE528c183c548Bc8F91C1", + "prover": "0x8EA3069b07dDbCC9556356329783C47cd11AdB01" + } + } +} \ No newline at end of file diff --git a/deployments/worldchain.json b/deployments/worldchain.json new file mode 100644 index 0000000..c970b71 --- /dev/null +++ b/deployments/worldchain.json @@ -0,0 +1,25 @@ +{ + "contracts": { + "broadcaster": "0x536c398D9bBAf896b128C99bB7c78CfA3243AE27", + "receiver": "0x16681d01c9169aacaFB6BbCBaF4c7C3002C63059", + "pusher": "0xC4a018A5A0c0DFAfbf149CBF01292d076759019F", + "buffer": "0x62260B99D6515CF3c5130886ba4B20b291BD4122" + }, + "copies": { + "ethereum": { + "arbitrum": "0xfdB7609b3fFd817454fDF8409b01399DF4a45adD", + "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", + "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", + "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6" + } + }, + "provers": { + "ethereum": { + "pointer": "0x1c7ca0a4d176A03Fe93C1f5d6555f2ED724B6b04", + "prover": "0x9532fb9ff076fDD01DA455f7ff7703F05757E5ac" + } + } +} \ No newline at end of file diff --git a/deployments/zksync.json b/deployments/zksync.json index 50dd23e..b0ebbd7 100644 --- a/deployments/zksync.json +++ b/deployments/zksync.json @@ -14,7 +14,9 @@ "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", - "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723" + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "unichain": "0x0321E65bECf81141aBf4CE6CAF25937E3839cAa1", + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" } }, "provers": { diff --git a/foundry.toml b/foundry.toml index a3750be..922cb47 100644 --- a/foundry.toml +++ b/foundry.toml @@ -7,6 +7,8 @@ script = "scripts" optimizer = true optimizer_runs = 200 via_ir = true +evm_version = "prague" +auto_detect_remappings = false fs_permissions = [ { access = 'read', path = './test/proofs/arbitrum' }, diff --git a/remappings.txt b/remappings.txt index a441b90..c5d4338 100644 --- a/remappings.txt +++ b/remappings.txt @@ -2,6 +2,20 @@ forge-std/=lib/forge-std/src/ @openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/ @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ @eth-optimism/=node_modules/@eth-optimism/ -@arbitrum/nitro-contracts/=node_modules/@arbitrum/nitro-contracts +@arbitrum/nitro-contracts/=node_modules/@arbitrum/nitro-contracts/ @scroll-tech/scroll-contracts/=lib/scroll-contracts/src/ -@linea-contracts/=lib/linea-monorepo/contracts/src/ \ No newline at end of file +@linea-contracts/=lib/linea-monorepo/contracts/src/ +@matterlabs/=lib/era-contracts/lib/ +ds-test/=lib/scroll-contracts/lib/ds-test/src/ +era-contracts/=lib/era-contracts/ +erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/ +halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/ +hardhat/=lib/scroll-contracts/node_modules/hardhat/ +linea-monorepo/=lib/linea-monorepo/ +murky/=lib/era-contracts/lib/murky/ +openzeppelin-contracts-upgradeable-v4/=lib/era-contracts/lib/openzeppelin-contracts-upgradeable-v4/ +openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/ +openzeppelin-contracts-v4/=lib/era-contracts/lib/openzeppelin-contracts-v4/ +openzeppelin-contracts/=lib/openzeppelin-contracts/ +scroll-contracts/=lib/scroll-contracts/ +solmate/=lib/scroll-contracts/lib/solmate/src/ diff --git a/scripts/deployment/DeployBase.s.sol b/scripts/deployment/DeployBase.s.sol index 1d021f9..babd7f6 100644 --- a/scripts/deployment/DeployBase.s.sol +++ b/scripts/deployment/DeployBase.s.sol @@ -27,6 +27,8 @@ contract DeployBase is Script { if (chainId == 11155420) return "optimism-sepolia"; if (chainId == 300) return "zksync-sepolia"; if (chainId == 84532) return "base-sepolia"; + if (chainId == 1301) return "unichain-sepolia"; + if (chainId == 4801) return "worldchain-sepolia"; if (chainId == 1) return "ethereum"; if (chainId == 42161) return "arbitrum"; @@ -35,6 +37,8 @@ contract DeployBase is Script { if (chainId == 10) return "optimism"; if (chainId == 324) return "zksync"; if (chainId == 8453) return "base"; + if (chainId == 130) return "unichain"; + if (chainId == 480) return "worldchain"; revert InvalidChainId(chainId); } diff --git a/scripts/deployment/block-hash-pusher/DeployBuffers.s.sol b/scripts/deployment/block-hash-pusher/DeployBuffers.s.sol index 68e6c0c..b8607d4 100644 --- a/scripts/deployment/block-hash-pusher/DeployBuffers.s.sol +++ b/scripts/deployment/block-hash-pusher/DeployBuffers.s.sol @@ -44,6 +44,8 @@ contract DeployBuffers is DeployBase { } else if ( keccak256(bytes(chainType)) == keccak256(bytes("optimism")) || keccak256(bytes(chainType)) == keccak256(bytes("base")) + || keccak256(bytes(chainType)) == keccak256(bytes("unichain")) + || keccak256(bytes(chainType)) == keccak256(bytes("worldchain")) ) { buffer = address(new OptimismBuffer(messenger, pusherAddress)); } else { diff --git a/scripts/deployment/block-hash-pusher/DeployPushers.s.sol b/scripts/deployment/block-hash-pusher/DeployPushers.s.sol index b92ee86..5a717be 100644 --- a/scripts/deployment/block-hash-pusher/DeployPushers.s.sol +++ b/scripts/deployment/block-hash-pusher/DeployPushers.s.sol @@ -16,18 +16,24 @@ contract DeployPushers is DeployBase { address zkSyncDiamond = vm.envAddress("ZKSYNC_DIAMOND"); address opL1CrossDomainMessengerProxy = vm.envAddress("OPTIMISM_L1_CROSS_DOMAIN_MESSENGER_PROXY"); address baseL1CrossDomainMessengerProxy = vm.envAddress("BASE_L1_CROSS_DOMAIN_MESSENGER_PROXY"); + address unichainL1CrossDomainMessengerProxy = vm.envAddress("UNICHAIN_L1_CROSS_DOMAIN_MESSENGER_PROXY"); + address worldL1CrossDomainMessengerProxy = vm.envAddress("WORLD_L1_CROSS_DOMAIN_MESSENGER_PROXY"); uint256 lineaChainId = vm.envUint("LINEA_CHAIN_ID"); uint256 scrollChainId = vm.envUint("SCROLL_CHAIN_ID"); uint256 zksyncChainId = vm.envUint("ZKSYNC_CHAIN_ID"); uint256 optimismChainId = vm.envUint("OPTIMISM_CHAIN_ID"); uint256 baseChainId = vm.envUint("BASE_CHAIN_ID"); + uint256 unichainChainId = vm.envUint("UNICHAIN_CHAIN_ID"); + uint256 worldChainId = vm.envUint("WORLD_CHAIN_ID"); string memory lineaName = _chainName(lineaChainId); string memory scrollName = _chainName(scrollChainId); string memory zksyncName = _chainName(zksyncChainId); string memory optimismName = _chainName(optimismChainId); string memory baseName = _chainName(baseChainId); + string memory unichainName = _chainName(unichainChainId); + string memory worldName = _chainName(worldChainId); vm.startBroadcast(); if (!_isPusherDeployed(lineaName)) { @@ -55,6 +61,16 @@ contract DeployPushers is DeployBase { _writePusher(baseName, address(basePusher)); _writeContractAtChain(baseChainId, "pusher", address(basePusher)); } + if (!_isPusherDeployed(unichainName)) { + OptimismPusher unichainPusher = new OptimismPusher(unichainL1CrossDomainMessengerProxy); + _writePusher(unichainName, address(unichainPusher)); + _writeContractAtChain(unichainChainId, "pusher", address(unichainPusher)); + } + if (!_isPusherDeployed(worldName)) { + OptimismPusher worldPusher = new OptimismPusher(worldL1CrossDomainMessengerProxy); + _writePusher(worldName, address(worldPusher)); + _writeContractAtChain(worldChainId, "pusher", address(worldPusher)); + } vm.stopBroadcast(); } } diff --git a/scripts/deployment/deploy.sh b/scripts/deployment/deploy.sh index 3269541..2065169 100644 --- a/scripts/deployment/deploy.sh +++ b/scripts/deployment/deploy.sh @@ -39,6 +39,16 @@ CHAIN_TYPE="base" \ RPC_URL="$BASE_RPC_URL" \ bash scripts/deployment/deploy-protocol.sh +echo "Deploying Broadcaster and Receiver contracts on Unichain..." +CHAIN_TYPE="unichain" \ +RPC_URL="$UNICHAIN_RPC_URL" \ +bash scripts/deployment/deploy-protocol.sh + +echo "Deploying Broadcaster and Receiver contracts on World Chain..." +CHAIN_TYPE="worldchain" \ +RPC_URL="$WORLD_RPC_URL" \ +bash scripts/deployment/deploy-protocol.sh + echo "Deploying Broadcaster and Receiver contracts on ZkSync..." CHAIN_TYPE="zksync" \ RPC_URL="$ZKSYNC_RPC_URL" \ @@ -79,6 +89,16 @@ echo "Deploying ParentToChildProver contracts on Base..." CHAIN_TYPE="base" \ RPC_URL="$BASE_RPC_URL" bash scripts/deployment/provers/deploy-parent-provers.sh +# Unichain +echo "Deploying ParentToChildProver contracts on Unichain..." +CHAIN_TYPE="unichain" \ +RPC_URL="$UNICHAIN_RPC_URL" bash scripts/deployment/provers/deploy-parent-provers.sh + +# World Chain +echo "Deploying ParentToChildProver contracts on World Chain..." +CHAIN_TYPE="worldchain" \ +RPC_URL="$WORLD_RPC_URL" bash scripts/deployment/provers/deploy-parent-provers.sh + # ZkSync echo "Deploying ParentToChildProver contracts on ZkSync..." CHAIN_TYPE="zksync" \ @@ -140,6 +160,22 @@ CHILD_CHAIN_ID="$BASE_CHAIN_ID" \ MESSENGER="$BASE_L2_CROSS_DOMAIN_MESSENGER" \ RPC_URL="$BASE_RPC_URL" bash scripts/deployment/block-hash-pusher/deploy-buffers.sh +# Unichain +echo "Deploying Buffer contract for Unichain..." +CHAIN_TYPE="unichain" \ +PARENT_CHAIN_ID="$ETHEREUM_CHAIN_ID" \ +CHILD_CHAIN_ID="$UNICHAIN_CHAIN_ID" \ +MESSENGER="$UNICHAIN_L2_CROSS_DOMAIN_MESSENGER" \ +RPC_URL="$UNICHAIN_RPC_URL" bash scripts/deployment/block-hash-pusher/deploy-buffers.sh + +# World Chain +echo "Deploying Buffer contract for World Chain..." +CHAIN_TYPE="worldchain" \ +PARENT_CHAIN_ID="$ETHEREUM_CHAIN_ID" \ +CHILD_CHAIN_ID="$WORLD_CHAIN_ID" \ +MESSENGER="$WORLD_L2_CROSS_DOMAIN_MESSENGER" \ +RPC_URL="$WORLD_RPC_URL" bash scripts/deployment/block-hash-pusher/deploy-buffers.sh + # ======================================================================================== # Deploy ChildToParentProver contracts # ======================================================================================== diff --git a/scripts/deployment/provers/deploy-child-provers.sh b/scripts/deployment/provers/deploy-child-provers.sh index a430811..8feca88 100755 --- a/scripts/deployment/provers/deploy-child-provers.sh +++ b/scripts/deployment/provers/deploy-child-provers.sh @@ -45,6 +45,22 @@ forge script scripts/deployment/provers/DeployOptimismChildToParent.s.sol \ --broadcast \ $VERIFY_FLAGS +HOME_CHAIN_ID=$UNICHAIN_CHAIN_ID \ +TARGET_CHAIN_ID=$ETHEREUM_CHAIN_ID \ +forge script scripts/deployment/provers/DeployOptimismChildToParent.s.sol \ + --rpc-url "$UNICHAIN_RPC_URL" \ + --private-key "$DEPLOYER_PRIVATE_KEY" \ + --broadcast \ + $VERIFY_FLAGS + +HOME_CHAIN_ID=$WORLD_CHAIN_ID \ +TARGET_CHAIN_ID=$ETHEREUM_CHAIN_ID \ +forge script scripts/deployment/provers/DeployOptimismChildToParent.s.sol \ + --rpc-url "$WORLD_RPC_URL" \ + --private-key "$DEPLOYER_PRIVATE_KEY" \ + --broadcast \ + $VERIFY_FLAGS + HOME_CHAIN_ID=$ZKSYNC_CHAIN_ID \ TARGET_CHAIN_ID=$ETHEREUM_CHAIN_ID \ forge script scripts/deployment/provers/DeployZkSyncChildToParent.s.sol \ diff --git a/scripts/deployment/provers/deploy-parent-provers.sh b/scripts/deployment/provers/deploy-parent-provers.sh index d053840..4a7e46b 100755 --- a/scripts/deployment/provers/deploy-parent-provers.sh +++ b/scripts/deployment/provers/deploy-parent-provers.sh @@ -59,6 +59,26 @@ forge script scripts/deployment/provers/DeployOptimismParentToChild.s.sol \ --broadcast \ $VERIFY_FLAGS +ANCHOR_STATE_REGISTRY=$UNICHAIN_ANCHOR_STATE_REGISTRY \ +ANCHOR_GAME_SLOT=$UNICHAIN_ANCHOR_GAME_SLOT \ +HOME_CHAIN_ID=$ETHEREUM_CHAIN_ID \ +TARGET_CHAIN_ID=$UNICHAIN_CHAIN_ID \ +forge script scripts/deployment/provers/DeployOptimismParentToChild.s.sol \ + --rpc-url "$RPC_URL" \ + --private-key "$DEPLOYER_PRIVATE_KEY" \ + --broadcast \ + $VERIFY_FLAGS + +ANCHOR_STATE_REGISTRY=$WORLD_ANCHOR_STATE_REGISTRY \ +ANCHOR_GAME_SLOT=$WORLD_ANCHOR_GAME_SLOT \ +HOME_CHAIN_ID=$ETHEREUM_CHAIN_ID \ +TARGET_CHAIN_ID=$WORLD_CHAIN_ID \ +forge script scripts/deployment/provers/DeployOptimismParentToChild.s.sol \ + --rpc-url "$RPC_URL" \ + --private-key "$DEPLOYER_PRIVATE_KEY" \ + --broadcast \ + $VERIFY_FLAGS + GATEWAY_ZK_CHAIN=$ZKSYNC_GATEWAY_ZK_CHAIN \ L2_LOGS_ROOT_HASH_SLOT=$ZKSYNC_L2_LOGS_ROOT_HASH_SLOT \ CHILD_CHAIN_ID=$ZKSYNC_CHAIN_ID \ From 5fbef8d1fa373ac5ea67b2f4418db0e707d044be Mon Sep 17 00:00:00 2001 From: Luiz Date: Fri, 26 Jun 2026 22:18:20 -0300 Subject: [PATCH 2/2] add missing deployments --- deployments/unichain.json | 5 ++++- deployments/zksync-sepolia.json | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/deployments/unichain.json b/deployments/unichain.json index 432f7c5..7be3393 100644 --- a/deployments/unichain.json +++ b/deployments/unichain.json @@ -10,7 +10,10 @@ "arbitrum": "0xfdB7609b3fFd817454fDF8409b01399DF4a45adD", "linea": "0x347Fdf829FeE4289c520F23b3537e273EA41AE30", "scroll": "0xa50B98CF3fcC4226eA724223DeA1B9F9ECDa3F70", - "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2" + "worldchain": "0x7785fD313Ad4fDbFB14A4cAbc52bd779f1B29db2", + "optimism": "0x6B0e07592261540cF9D141d894b8A17FE1A04a98", + "base": "0xfBc1Edd87a700DBD7eaa3E038E54E6C7fFba1723", + "zksync": "0x4148d6E5cF0a095dB68f20A99DBf1232D8BB1cC6" } }, "provers": { diff --git a/deployments/zksync-sepolia.json b/deployments/zksync-sepolia.json index 741ab1f..188d411 100644 --- a/deployments/zksync-sepolia.json +++ b/deployments/zksync-sepolia.json @@ -12,7 +12,10 @@ "arbitrum-sepolia": "0x3ed2414D931f28Ef85D2E5e74e509d6FEDB812F6", "linea-sepolia": "0x3E36338736c590753F071D90779b0449bD576834", "scroll-sepolia": "0x2635119429AFE9ed4b5dC38f71D12f1A241231Ec", - "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a" + "optimism-sepolia": "0x9B22f2bB9a5ECbEd10984f47c1A5FE8C551Fbf6a", + "base-sepolia": "0x853C0c8873FB6c2c71777373AD71BEa04f3755A6", + "unichain-sepolia": "0x2FA80623487a1dd8Ff800b1F221E90F5F36307c5", + "worldchain-sepolia": "0x1e4e51a19ac80b2eA820E2857F1Cf28a0219CFde" } }, "provers": {