From fe9d04e1b6d113fe0904c39ff23ab0f2b516105d Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Tue, 24 Sep 2024 18:11:10 +0300 Subject: [PATCH 01/10] Add some extra information to networks config --- config/networks.json | 250 ++++++++++++++++++++++++++++++------------- 1 file changed, 175 insertions(+), 75 deletions(-) diff --git a/config/networks.json b/config/networks.json index f6222b671..d018c9aa9 100644 --- a/config/networks.json +++ b/config/networks.json @@ -6,7 +6,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rcpUrl": "https://eth.drpc.org", + "explorerType": "etherscan", + "explorerUrl": "https://etherscan.io", + "explorerApiUrl": "https://api.etherscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "arbitrum": { "name": "Arbitrum One", @@ -15,7 +20,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://arb1.arbitrum.io/rpc", + "explorerType": "etherscan", + "explorerUrl": "https://arbiscan.io", + "explorerApuUrl": "https://api.arbiscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "aurora": { "name": "Aurora", @@ -24,7 +34,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.aurora.dev", + "explorerType": "etherscan", + "explorerUrl": "https://aurorascan.dev", + "explorerApuUrl": "https://aurorascan.dev/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "avalanche": { "name": "Avalanche C-Chain", @@ -33,7 +48,12 @@ "nativeCurrency": "AVAX", "wrappedNativeAddress": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://api.avax.network/ext/bc/C/rpc", + "explorerType": "etherscan", + "explorerUrl": "https://snowtrace.io", + "explorerApuUrl": "https://api.snowtrace.io", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "base": { "name": "Base", @@ -42,7 +62,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.base.org", + "explorerType": "etherscan", + "explorerUrl": "https://basescan.org", + "explorerApuUrl": "https://api.basescan.org/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "blast": { "name": "Blast", @@ -51,7 +76,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4300000000000000000000000000000000000004", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.blast.io", + "explorerType": "etherscan", + "explorerUrl": "https://blastscan.io", + "explorerApuUrl": "https://api.blastscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "boba": { "name": "Boba Network", @@ -60,7 +90,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.boba.network", + "explorerType": "etherscan", + "explorerUrl": "https://bobascan.com", + "explorerApuUrl": "https://api.bobascan.com/api", + "multicallAddress": "i0xca11bde05977b3631167028862be2a173976ca11" }, "bsc": { "name": "BNB Smart Chain", @@ -69,7 +104,12 @@ "nativeCurrency": "BNB", "wrappedNativeAddress": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.ankr.com/bsc", + "explorerType": "etherscan", + "explorerUrl": "https://bscscan.com", + "explorerApuUrl": "https://api.bscscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "celo": { "name": "Celo", @@ -78,7 +118,12 @@ "nativeCurrency": "CELO", "wrappedNativeAddress": "0x471EcE3750Da237f93B8E339c536989b8978a438", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://forno.celo.org", + "explorerType": "etherscan", + "explorerUrl": "https://celoscan.io", + "explorerApuUrl": "https://api.celoscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "fantom": { "name": "Fantom", @@ -87,7 +132,12 @@ "nativeAddress": "0x0000000000000000000000000000000000000000", "wrappedNativeAddress": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.ankr.com/fantom", + "explorerType": "etherscan", + "explorerUrl": "https://ftmscan.com", + "explorerApuUrl": "https://api.ftmscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "fraxtal": { "name": "Fraxtal", @@ -96,7 +146,12 @@ "nativeCurrency": "frxETH", "wrappedNativeAddress": "0xfc00000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.frax.com", + "explorerType": "etherscan", + "explorerUrl": "https://fraxscan.com", + "explorerApuUrl": "https://api.fraxscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "fuse": { "name": "Fuse", @@ -105,7 +160,12 @@ "nativeCurrency": "FUSE", "wrappedNativeAddress": "0x0BE9e53fd7EDaC9F859882AfdDa116645287C629", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.fuse.io", + "explorerType": "etherscan", + "explorerUrl": "https://explorer.fuse.io", + "explorerApuUrl": "https://explorer.fuse.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "gnosis": { "name": "Gnosis Chain", @@ -114,7 +174,12 @@ "nativeCurrency": "XDAI", "wrappedNativeAddress": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.gnosischain.com", + "explorerType": "etherscan", + "explorerUrl": "https://gnosisscan.io", + "explorerApuUrl": "https://api.gnosisscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "gravity": { "name": "Gravity Alpha Mainnet", @@ -123,7 +188,12 @@ "nativeCurrency": "G", "wrappedNativeAddress": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.gravity.xyz", + "explorerType": "blockscout", + "explorerUrl": "https://explorer.gravity.xyz", + "explorerApuUrl": "https://explorer.gravity.xyz/api", + "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c" }, "immutablezkevm": { "name": "Immutable zkEVM", @@ -132,7 +202,12 @@ "nativeCurrency": "IMX", "wrappedNativeAddress": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.immutable.com", + "explorerType": "etherscan", + "explorerUrl": "https://explorer.immutable.com", + "explorerApuUrl": "https://explorer.immutable.com/api", + "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0" }, "kaia": { "name": "Kaia", @@ -141,7 +216,12 @@ "nativeCurrency": "KLAYTN", "wrappedNativeAddress": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://public-en.node.kaia.io", + "explorerType": "etherscan", + "explorerUrl": "https://kaiascope.com", + "explorerApuUrl": "https://api-cypress.klaytnscope.com/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "linea": { "name": "Linea", @@ -150,7 +230,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.linea.build", + "explorerType": "etherscan", + "explorerUrl": "https://lineascan.build", + "explorerApuUrl": "https://api.lineascan.build/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "mantle": { "name": "Mantle", @@ -159,7 +244,12 @@ "nativeCurrency": "MNT", "wrappedNativeAddress": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "0xcA11bde05977b3631167028862bE2a173976CA11", + "explorerType": "etherscan", + "explorerUrl": "https://mantlescan.xyz/", + "explorerApuUrl": "https://api.mantlescan.xyz/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "metis": { "name": "Metis Andromeda Mainnet", @@ -168,7 +258,12 @@ "nativeCurrency": "METIS", "wrappedNativeAddress": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://andromeda.metis.io/?owner=1088", + "explorerType": "etherscan", + "explorerUrl": "https://explorer.metis.io", + "explorerApuUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "mode": { "name": "Mode", @@ -177,7 +272,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.mode.network", + "explorerType": "etherscan", + "explorerUrl": "https://modescan.io", + "explorerApuUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "moonbeam": { "name": "Moonbeam", @@ -186,7 +286,12 @@ "nativeCurrency": "GLMR", "wrappedNativeAddress": "0xacc15dc74880c9944775448304b263d191c6077f", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://moonbeam.public.blastapi.io", + "explorerType": "etherscan", + "explorerUrl": "https://moonscan.io", + "explorerApuUrl": "https://api-moonbeam.moonscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "moonriver": { "name": "Moonriver", @@ -195,7 +300,12 @@ "nativeCurrency": "MOVR", "wrappedNativeAddress": "0x98878b06940ae243284ca214f92bb71a2b032b8a", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://moonriver.public.blastapi.io", + "explorerType": "etherscan", + "explorerUrl": "https://moonriver.moonscan.io", + "explorerApuUrl": "https://api-moonriver.moonscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "optimism": { "name": "Optimism", @@ -204,7 +314,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.optimism.io", + "explorerType": "etherscan", + "explorerUrl": "https://optimistic.etherscan.io", + "explorerApuUrl": "https://api-optimistic.etherscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "polygon": { "name": "Polygon", @@ -213,7 +328,12 @@ "nativeCurrency": "MATIC", "wrappedNativeAddress": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://polygon-rpc.com", + "explorerType": "etherscan", + "explorerUrl": "https://polygonscan.com", + "explorerApuUrl": "https://api.polygonscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "polygonzkevm": { "name": "Polygon zkEVM", @@ -222,7 +342,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://zkevm-rpc.com", + "explorerType": "etherscan", + "explorerUrl": "https://zkevm.polygonscan.com", + "explorerApuUrl": "https://api-zkevm.polygonscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "rootstock": { "name": "Rootstock", @@ -231,7 +356,12 @@ "nativeCurrency": "RBTC", "wrappedNativeAddress": "0x542FDA317318eBf1d3DeAF76E0B632741a7e677d", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://public-node.rsk.co", + "explorerType": "blockscout", + "explorerUrl": "https://rootstock.blockscout.com", + "explorerApuUrl": "https://rootstock.blockscout.com/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "scroll": { "name": "Scroll", @@ -240,7 +370,12 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x5300000000000000000000000000000000000004", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.scroll.io", + "explorerType": "etherscan", + "explorerUrl": "https://scrollscan.com", + "explorerApuUrl": "https://api.scrollscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "sei": { "name": "Sei Network", @@ -249,52 +384,12 @@ "nativeCurrency": "SEI", "wrappedNativeAddress": "0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7", "status": "active", - "type": "mainnet" - }, - "zksync": { - "name": "zkSync Era Mainnet", - "chainId": 324, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "ETH", - "wrappedNativeAddress": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", - "status": "active", - "type": "mainnet" - }, - "bsc-testnet": { - "name": "Binance Smart Chain Testnet", - "chainId": 97, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "BNB", - "wrappedNativeAddress": "", - "status": "active", - "type": "testnet" - }, - "lineatest": { - "name": "Linea Testnet", - "chainId": 59140, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "ETH", - "wrappedNativeAddress": "", - "status": "active", - "type": "testnet" - }, - "mumbai": { - "name": "Mumbai", - "chainId": 80001, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "MATIC", - "wrappedNativeAddress": "", - "status": "active", - "type": "testnet" - }, - "sepolia": { - "name": "Sepolia", - "chainId": 11155111, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "ETH", - "wrappedNativeAddress": "", - "status": "active", - "type": "testnet" + "type": "mainnet", + "rpcUrl": "https://evm-rpc.sei-apis.com", + "explorerType": "etherscan", + "explorerUrl": "https://seitrace.com", + "explorerApuUrl": "https://seitrace.com/pacific-1/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "localanvil": { "name": "Local Anvil (temporary Foundry test network)", @@ -303,6 +398,11 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x0000000000000000000000000000000000000000", "status": "active", - "type": "testnet" + "type": "testnet", + "rpcUrl": "http://localhost:8545", + "explorerType": "etherscan", + "explorerUrl": "", + "explorerApuUrl": "", + "multicallAddress": "" } -} \ No newline at end of file +} From defb3f169cb06b628cc469e2707cd6d659266541 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Tue, 24 Sep 2024 18:11:39 +0300 Subject: [PATCH 02/10] Fix comments --- .env.example | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 3e0e02100..39d858191 100644 --- a/.env.example +++ b/.env.example @@ -27,10 +27,10 @@ ETH_NODE_URI_OPTIMISM=https://1rpc.io/op #[pre-commit-checker: not a secret] ETH_NODE_URI_POLYGON=https://1rpc.io/matic #[pre-commit-checker: not a secret] ETH_NODE_URI_POLYGONZKEVM=https://zkevm-rpc.com #[pre-commit-checker: not a secret] ETH_NODE_URI_ROOTSTOCK=https://rootstock.drpc.org #[pre-commit-checker: not a secret].io -ETH_NODE_URI_SEI=https://evm-rpc.sei-apis.com #[pre-commit-checker: not a secret].io -ETH_NODE_URI_SCROLL=https://1rpc.io/scroll #[pre-commit-checker: not a secret].io -ETH_NODE_URI_TAIKO=https://rpc.taiko.tools #[pre-commit-checker: not a secret].io -ETH_NODE_URI_ZKSYNC=https://zksync2-mainnet.zksync #[pre-commit-checker: not a secret].io +ETH_NODE_URI_SEI=https://evm-rpc.sei-apis.com #[pre-commit-checker: not a secret] +ETH_NODE_URI_SCROLL=https://1rpc.io/scroll #[pre-commit-checker: not a secret] +ETH_NODE_URI_TAIKO=https://rpc.taiko.tools #[pre-commit-checker: not a secret] +ETH_NODE_URI_ZKSYNC=https://zksync2-mainnet.zksync #[pre-commit-checker: not a secret] # Testnet RPCs ETH_NODE_URI_GOERLI=https://rpc.ankr.com/eth_goerli #[pre-commit-checker: not a secret] From 46f39c6c3ffe406a1e0fac0ebb58f24bad0d24b3 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Tue, 24 Sep 2024 18:53:05 +0300 Subject: [PATCH 03/10] Fix linea safe api url --- config/global.json | 4 ++-- script/deploy/safe/config.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/global.json b/config/global.json index 81e0d9950..4448e4d29 100644 --- a/config/global.json +++ b/config/global.json @@ -93,7 +93,7 @@ "gravity": "https://safe.gravity.xyz/txs/api", "immutablezkevm": "https://transaction.safe.immutable.com/api", "kaia": "https://docs-safe.kaia.io/txs-cypress/api", - "linea": "https://transaction.safe.linea.build/api", + "linea": "https://safe-transaction-linea.safe.global/api", "mantle": "https://transaction.multisig.mantle.xyz/api", "metis": "https://metissafe.tech/txs/api", "mode": "https://transaction-mode.safe.optimism.io/api", @@ -146,4 +146,4 @@ "TokenWrapper", "LiFiDEXAggregator" ] -} \ No newline at end of file +} diff --git a/script/deploy/safe/config.ts b/script/deploy/safe/config.ts index ba7eae987..19cdc0060 100644 --- a/script/deploy/safe/config.ts +++ b/script/deploy/safe/config.ts @@ -18,7 +18,7 @@ export const safeApiUrls: Record = { gravity: 'https://safe.gravity.xyz/txs/api', immutablezkevm: 'https://transaction.safe.immutable.com/api', kaia: 'https://docs-safe.kaia.io/txs-cypress/api', - linea: 'https://transaction.safe.linea.build/api', + linea: 'https://safe-transaction-linea.safe.global/api', mantle: 'https://transaction.multisig.mantle.xyz/api', metis: 'https://metissafe.tech/txs/api', mode: 'https://transaction-mode.safe.optimism.io/api', From e7ba702f0edb30ba347f3235017a75a4c7e2d45b Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Wed, 25 Sep 2024 17:38:31 +0300 Subject: [PATCH 04/10] Remove token wrapper config and use networks.json instead --- config/networks.json | 70 +++++++++++-------- config/tokenwrapper.json | 45 ------------ script/deploy/facets/DeployTokenWrapper.s.sol | 4 +- .../deploy/zksync/017_deploy_token_wrapper.ts | 6 +- 4 files changed, 47 insertions(+), 78 deletions(-) delete mode 100644 config/tokenwrapper.json diff --git a/config/networks.json b/config/networks.json index d018c9aa9..5d3859cbb 100644 --- a/config/networks.json +++ b/config/networks.json @@ -24,7 +24,7 @@ "rpcUrl": "https://arb1.arbitrum.io/rpc", "explorerType": "etherscan", "explorerUrl": "https://arbiscan.io", - "explorerApuUrl": "https://api.arbiscan.io/api", + "explorerApiUrl": "https://api.arbiscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "aurora": { @@ -38,7 +38,7 @@ "rpcUrl": "https://mainnet.aurora.dev", "explorerType": "etherscan", "explorerUrl": "https://aurorascan.dev", - "explorerApuUrl": "https://aurorascan.dev/api", + "explorerApiUrl": "https://aurorascan.dev/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "avalanche": { @@ -52,7 +52,7 @@ "rpcUrl": "https://api.avax.network/ext/bc/C/rpc", "explorerType": "etherscan", "explorerUrl": "https://snowtrace.io", - "explorerApuUrl": "https://api.snowtrace.io", + "explorerApiUrl": "https://api.snowtrace.io", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "base": { @@ -66,7 +66,7 @@ "rpcUrl": "https://mainnet.base.org", "explorerType": "etherscan", "explorerUrl": "https://basescan.org", - "explorerApuUrl": "https://api.basescan.org/api", + "explorerApiUrl": "https://api.basescan.org/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "blast": { @@ -80,7 +80,7 @@ "rpcUrl": "https://rpc.blast.io", "explorerType": "etherscan", "explorerUrl": "https://blastscan.io", - "explorerApuUrl": "https://api.blastscan.io/api", + "explorerApiUrl": "https://api.blastscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "boba": { @@ -94,7 +94,7 @@ "rpcUrl": "https://mainnet.boba.network", "explorerType": "etherscan", "explorerUrl": "https://bobascan.com", - "explorerApuUrl": "https://api.bobascan.com/api", + "explorerApiUrl": "https://api.bobascan.com/api", "multicallAddress": "i0xca11bde05977b3631167028862be2a173976ca11" }, "bsc": { @@ -108,7 +108,7 @@ "rpcUrl": "https://rpc.ankr.com/bsc", "explorerType": "etherscan", "explorerUrl": "https://bscscan.com", - "explorerApuUrl": "https://api.bscscan.com/api", + "explorerApiUrl": "https://api.bscscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "celo": { @@ -122,7 +122,7 @@ "rpcUrl": "https://forno.celo.org", "explorerType": "etherscan", "explorerUrl": "https://celoscan.io", - "explorerApuUrl": "https://api.celoscan.io/api", + "explorerApiUrl": "https://api.celoscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "fantom": { @@ -136,7 +136,7 @@ "rpcUrl": "https://rpc.ankr.com/fantom", "explorerType": "etherscan", "explorerUrl": "https://ftmscan.com", - "explorerApuUrl": "https://api.ftmscan.com/api", + "explorerApiUrl": "https://api.ftmscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "fraxtal": { @@ -150,7 +150,7 @@ "rpcUrl": "https://rpc.frax.com", "explorerType": "etherscan", "explorerUrl": "https://fraxscan.com", - "explorerApuUrl": "https://api.fraxscan.com/api", + "explorerApiUrl": "https://api.fraxscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "fuse": { @@ -164,7 +164,7 @@ "rpcUrl": "https://rpc.fuse.io", "explorerType": "etherscan", "explorerUrl": "https://explorer.fuse.io", - "explorerApuUrl": "https://explorer.fuse.io/api", + "explorerApiUrl": "https://explorer.fuse.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "gnosis": { @@ -178,7 +178,7 @@ "rpcUrl": "https://rpc.gnosischain.com", "explorerType": "etherscan", "explorerUrl": "https://gnosisscan.io", - "explorerApuUrl": "https://api.gnosisscan.io/api", + "explorerApiUrl": "https://api.gnosisscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "gravity": { @@ -192,7 +192,7 @@ "rpcUrl": "https://rpc.gravity.xyz", "explorerType": "blockscout", "explorerUrl": "https://explorer.gravity.xyz", - "explorerApuUrl": "https://explorer.gravity.xyz/api", + "explorerApiUrl": "https://explorer.gravity.xyz/api", "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c" }, "immutablezkevm": { @@ -206,7 +206,7 @@ "rpcUrl": "https://rpc.immutable.com", "explorerType": "etherscan", "explorerUrl": "https://explorer.immutable.com", - "explorerApuUrl": "https://explorer.immutable.com/api", + "explorerApiUrl": "https://explorer.immutable.com/api", "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0" }, "kaia": { @@ -220,7 +220,7 @@ "rpcUrl": "https://public-en.node.kaia.io", "explorerType": "etherscan", "explorerUrl": "https://kaiascope.com", - "explorerApuUrl": "https://api-cypress.klaytnscope.com/api", + "explorerApiUrl": "https://api-cypress.klaytnscope.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "linea": { @@ -234,7 +234,7 @@ "rpcUrl": "https://rpc.linea.build", "explorerType": "etherscan", "explorerUrl": "https://lineascan.build", - "explorerApuUrl": "https://api.lineascan.build/api", + "explorerApiUrl": "https://api.lineascan.build/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "mantle": { @@ -248,7 +248,7 @@ "rpcUrl": "0xcA11bde05977b3631167028862bE2a173976CA11", "explorerType": "etherscan", "explorerUrl": "https://mantlescan.xyz/", - "explorerApuUrl": "https://api.mantlescan.xyz/api", + "explorerApiUrl": "https://api.mantlescan.xyz/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "metis": { @@ -262,7 +262,7 @@ "rpcUrl": "https://andromeda.metis.io/?owner=1088", "explorerType": "etherscan", "explorerUrl": "https://explorer.metis.io", - "explorerApuUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", + "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "mode": { @@ -276,7 +276,7 @@ "rpcUrl": "https://mainnet.mode.network", "explorerType": "etherscan", "explorerUrl": "https://modescan.io", - "explorerApuUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", + "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "moonbeam": { @@ -290,7 +290,7 @@ "rpcUrl": "https://moonbeam.public.blastapi.io", "explorerType": "etherscan", "explorerUrl": "https://moonscan.io", - "explorerApuUrl": "https://api-moonbeam.moonscan.io/api", + "explorerApiUrl": "https://api-moonbeam.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "moonriver": { @@ -304,7 +304,7 @@ "rpcUrl": "https://moonriver.public.blastapi.io", "explorerType": "etherscan", "explorerUrl": "https://moonriver.moonscan.io", - "explorerApuUrl": "https://api-moonriver.moonscan.io/api", + "explorerApiUrl": "https://api-moonriver.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "optimism": { @@ -318,7 +318,7 @@ "rpcUrl": "https://mainnet.optimism.io", "explorerType": "etherscan", "explorerUrl": "https://optimistic.etherscan.io", - "explorerApuUrl": "https://api-optimistic.etherscan.io/api", + "explorerApiUrl": "https://api-optimistic.etherscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "polygon": { @@ -332,7 +332,7 @@ "rpcUrl": "https://polygon-rpc.com", "explorerType": "etherscan", "explorerUrl": "https://polygonscan.com", - "explorerApuUrl": "https://api.polygonscan.com/api", + "explorerApiUrl": "https://api.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "polygonzkevm": { @@ -346,7 +346,7 @@ "rpcUrl": "https://zkevm-rpc.com", "explorerType": "etherscan", "explorerUrl": "https://zkevm.polygonscan.com", - "explorerApuUrl": "https://api-zkevm.polygonscan.com/api", + "explorerApiUrl": "https://api-zkevm.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "rootstock": { @@ -360,7 +360,7 @@ "rpcUrl": "https://public-node.rsk.co", "explorerType": "blockscout", "explorerUrl": "https://rootstock.blockscout.com", - "explorerApuUrl": "https://rootstock.blockscout.com/api", + "explorerApiUrl": "https://rootstock.blockscout.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, "scroll": { @@ -374,7 +374,7 @@ "rpcUrl": "https://rpc.scroll.io", "explorerType": "etherscan", "explorerUrl": "https://scrollscan.com", - "explorerApuUrl": "https://api.scrollscan.com/api", + "explorerApiUrl": "https://api.scrollscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" }, "sei": { @@ -388,9 +388,23 @@ "rpcUrl": "https://evm-rpc.sei-apis.com", "explorerType": "etherscan", "explorerUrl": "https://seitrace.com", - "explorerApuUrl": "https://seitrace.com/pacific-1/api", + "explorerApiUrl": "https://seitrace.com/pacific-1/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" }, + "zksync": { + "name": "zkSync Era Mainnet", + "chainId": 324, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", + "status": "active", + "type": "mainnet", + "rpcUrl": "https://mainnet.era.zksync.io", + "explorerType": "etherscan", + "explorerUrl": "https://era.zksync.network", + "explorerApiUrl": "https://api-era.zksync.network/api", + "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963" + }, "localanvil": { "name": "Local Anvil (temporary Foundry test network)", "chainId": 31337, @@ -402,7 +416,7 @@ "rpcUrl": "http://localhost:8545", "explorerType": "etherscan", "explorerUrl": "", - "explorerApuUrl": "", + "explorerApiUrl": "", "multicallAddress": "" } } diff --git a/config/tokenwrapper.json b/config/tokenwrapper.json deleted file mode 100644 index 0821eef37..000000000 --- a/config/tokenwrapper.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "128": "0x5545153ccfca01fbd7dd11c0b23ba694d9509a6f", - "mainnet": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "goerli": "0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6", - "optimism": "0x4200000000000000000000000000000000000006", - "cronos": "0x5c7f8a570d578ed84e63fdfa7b1ee72deae1ae23", - "bsc": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - "okx": "0x8f8526dbfd6e38e3d8307702ca8469bae6c56c15", - "bsc-testnet": "0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd", - "gnosis": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", - "gravity": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", - "velas": "0xc579d1f3cf86749e05cd06f7ade17856c2ce3126", - "fuse": "0x0be9e53fd7edac9f859882afdda116645287c629", - "polygon": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "fantom": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", - "fraxtal": "0xfc00000000000000000000000000000000000006", - "boba": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", - "zksync": "0x5aea5775959fbc2557cc8789bc1bf90a239d9a91", - "optimismTestnet": "0x4200000000000000000000000000000000000006", - "metis": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", - "polygonzkevm": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", - "kaia": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", - "moonbeam": "0xacc15dc74880c9944775448304b263d191c6077f", - "moonriver": "0x98878b06940ae243284ca214f92bb71a2b032b8a", - "mode": "0x4200000000000000000000000000000000000006", - "base": "0x4200000000000000000000000000000000000006", - "evmos": "0xd4949664cd82660aae99bedc034a0dea8a0bd517", - "arbitrum": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", - "celo": "0x471ece3750da237f93b8e339c536989b8978a438", - "avalanche": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "lineatest": "0x2C1b868d6596a18e32E61B901E4060C872647b6C", - "linea": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", - "mumbai": "0x9c3c9283d3e44854697cd22d3faa240cfb032889", - "arbitrumTestnet": "0x42da9eE191833756c618778145A86E6709f70C9b", - "aurora": "0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb", - "harmony": "0xcf664087a5bb0237a0bad6742852ec6c8d69a27a", - "harmonyTestnet": "0x7466d7d0c21fa05f32f5a0fa27e12bdc06348ce2", - "scroll": "0x5300000000000000000000000000000000000004", - "mantle": "0x78c1b0C915c4FAA5FffA6CAbf0219DA63d7f4cb8", - "blast": "0x4300000000000000000000000000000000000004", - "rootstock": "0x542fda317318ebf1d3deaf76e0b632741a7e677d", - "sei": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7", - "taiko": "0xA51894664A773981C6C112C43ce576f315d5b1B6", - "immutablezkevm": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d" -} \ No newline at end of file diff --git a/script/deploy/facets/DeployTokenWrapper.s.sol b/script/deploy/facets/DeployTokenWrapper.s.sol index 0f82840ce..ff964efc5 100644 --- a/script/deploy/facets/DeployTokenWrapper.s.sol +++ b/script/deploy/facets/DeployTokenWrapper.s.sol @@ -23,7 +23,7 @@ contract DeployScript is DeployScriptBase { // get path of global config file string memory tokenWrapperConfig = string.concat( root, - "/config/tokenwrapper.json" + "/config/networks.json" ); // read file into json variable @@ -31,7 +31,7 @@ contract DeployScript is DeployScriptBase { // extract wrapped token address for the given network address wrappedNativeAddress = tokenWrapperConfigJSON.readAddress( - string.concat(".", network) + string.concat(".", network, ".wrappedNativeAddress") ); return abi.encode(wrappedNativeAddress); diff --git a/script/deploy/zksync/017_deploy_token_wrapper.ts b/script/deploy/zksync/017_deploy_token_wrapper.ts index dc0b701e8..eae86b0f3 100644 --- a/script/deploy/zksync/017_deploy_token_wrapper.ts +++ b/script/deploy/zksync/017_deploy_token_wrapper.ts @@ -1,13 +1,13 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types' import { DeployFunction } from 'hardhat-deploy/types' import { ethers, network } from 'hardhat' -import { PeripheryRegistryFacet } from '../typechain' +import { PeripheryRegistryFacet } from '../../../typechain' import { diamondContractName, updateDeploymentLogs, verifyContract, } from './9999_utils' -import globalConfig from '../config/tokenwrapper.json' +import globalConfig from '../../../config/networks.json' const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { // Protect against unwanted redeployments @@ -19,7 +19,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy } = deployments const { deployer } = await getNamedAccounts() - const WRAPPED_NATIVE_ADDRESS = globalConfig[network.name] + const WRAPPED_NATIVE_ADDRESS = globalConfig.zksync.wrappedNativeAddress const diamond = await ethers.getContract(diamondContractName) From 01b31c1e0978d376664cb1ebf0cb7c9457189b11 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Thu, 3 Oct 2024 10:50:55 +0300 Subject: [PATCH 05/10] Add SAFE configs --- config/networks.json | 152 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 122 insertions(+), 30 deletions(-) diff --git a/config/networks.json b/config/networks.json index 5d3859cbb..a25fc2cfb 100644 --- a/config/networks.json +++ b/config/networks.json @@ -11,7 +11,9 @@ "explorerType": "etherscan", "explorerUrl": "https://etherscan.io", "explorerApiUrl": "https://api.etherscan.io/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-mainnet.safe.global/api", + "safeAddress": "" }, "arbitrum": { "name": "Arbitrum One", @@ -25,7 +27,9 @@ "explorerType": "etherscan", "explorerUrl": "https://arbiscan.io", "explorerApiUrl": "https://api.arbiscan.io/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", + "safeAddress": "" }, "aurora": { "name": "Aurora", @@ -39,7 +43,9 @@ "explorerType": "etherscan", "explorerUrl": "https://aurorascan.dev", "explorerApiUrl": "https://aurorascan.dev/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", + "safeAddress": "" }, "avalanche": { "name": "Avalanche C-Chain", @@ -53,7 +59,9 @@ "explorerType": "etherscan", "explorerUrl": "https://snowtrace.io", "explorerApiUrl": "https://api.snowtrace.io", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-avalanche.safe.global/api", + "safeAddress": "" }, "base": { "name": "Base", @@ -67,7 +75,9 @@ "explorerType": "etherscan", "explorerUrl": "https://basescan.org", "explorerApiUrl": "https://api.basescan.org/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-base.safe.global/api", + "safeAddress": "" }, "blast": { "name": "Blast", @@ -81,7 +91,9 @@ "explorerType": "etherscan", "explorerUrl": "https://blastscan.io", "explorerApiUrl": "https://api.blastscan.io/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.blast-safe.io/api", + "safeAddress": "" }, "boba": { "name": "Boba Network", @@ -95,7 +107,9 @@ "explorerType": "etherscan", "explorerUrl": "https://bobascan.com", "explorerApiUrl": "https://api.bobascan.com/api", - "multicallAddress": "i0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction.mainnet.boba.network/api", + "safeAddress": "" }, "bsc": { "name": "BNB Smart Chain", @@ -109,7 +123,9 @@ "explorerType": "etherscan", "explorerUrl": "https://bscscan.com", "explorerApiUrl": "https://api.bscscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-bsc.safe.global/api", + "safeAddress": "" }, "celo": { "name": "Celo", @@ -123,7 +139,9 @@ "explorerType": "etherscan", "explorerUrl": "https://celoscan.io", "explorerApiUrl": "https://api.celoscan.io/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-celo.safe.global/api", + "safeAddress": "" }, "fantom": { "name": "Fantom", @@ -137,7 +155,9 @@ "explorerType": "etherscan", "explorerUrl": "https://ftmscan.com", "explorerApiUrl": "https://api.ftmscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-txservice.fantom.network/api", + "safeAddress": "" }, "fraxtal": { "name": "Fraxtal", @@ -151,7 +171,9 @@ "explorerType": "etherscan", "explorerUrl": "https://fraxscan.com", "explorerApiUrl": "https://api.fraxscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", + "safeAddress": "" }, "fuse": { "name": "Fuse", @@ -165,7 +187,9 @@ "explorerType": "etherscan", "explorerUrl": "https://explorer.fuse.io", "explorerApiUrl": "https://explorer.fuse.io/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", + "safeAddress": "" }, "gnosis": { "name": "Gnosis Chain", @@ -179,7 +203,9 @@ "explorerType": "etherscan", "explorerUrl": "https://gnosisscan.io", "explorerApiUrl": "https://api.gnosisscan.io/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-gnosis-chain.safe.global/api", + "safeAddress": "" }, "gravity": { "name": "Gravity Alpha Mainnet", @@ -193,7 +219,9 @@ "explorerType": "blockscout", "explorerUrl": "https://explorer.gravity.xyz", "explorerApiUrl": "https://explorer.gravity.xyz/api", - "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c" + "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c", + "safeApiUrl": "https://safe.gravity.xyz/txs/api", + "safeAddress": "" }, "immutablezkevm": { "name": "Immutable zkEVM", @@ -207,7 +235,9 @@ "explorerType": "etherscan", "explorerUrl": "https://explorer.immutable.com", "explorerApiUrl": "https://explorer.immutable.com/api", - "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0" + "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0", + "safeApiUrl": "https://transaction.safe.immutable.com/api", + "safeAddress": "" }, "kaia": { "name": "Kaia", @@ -221,7 +251,9 @@ "explorerType": "etherscan", "explorerUrl": "https://kaiascope.com", "explorerApiUrl": "https://api-cypress.klaytnscope.com/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://docs-safe.kaia.io/txs-cypress/api", + "safeAddress": "" }, "linea": { "name": "Linea", @@ -235,7 +267,9 @@ "explorerType": "etherscan", "explorerUrl": "https://lineascan.build", "explorerApiUrl": "https://api.lineascan.build/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-linea.safe.global/api", + "safeAddress": "" }, "mantle": { "name": "Mantle", @@ -249,7 +283,9 @@ "explorerType": "etherscan", "explorerUrl": "https://mantlescan.xyz/", "explorerApiUrl": "https://api.mantlescan.xyz/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.multisig.mantle.xyz/api", + "safeAddress": "" }, "metis": { "name": "Metis Andromeda Mainnet", @@ -263,7 +299,9 @@ "explorerType": "etherscan", "explorerUrl": "https://explorer.metis.io", "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://metissafe.tech/txs/api", + "safeAddress": "" }, "mode": { "name": "Mode", @@ -277,7 +315,9 @@ "explorerType": "etherscan", "explorerUrl": "https://modescan.io", "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://transaction-mode.safe.optimism.io/api", + "safeAddress": "" }, "moonbeam": { "name": "Moonbeam", @@ -291,7 +331,9 @@ "explorerType": "etherscan", "explorerUrl": "https://moonscan.io", "explorerApiUrl": "https://api-moonbeam.moonscan.io/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.multisig.moonbeam.network/api", + "safeAddress": "" }, "moonriver": { "name": "Moonriver", @@ -305,7 +347,9 @@ "explorerType": "etherscan", "explorerUrl": "https://moonriver.moonscan.io", "explorerApiUrl": "https://api-moonriver.moonscan.io/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.moonriver.multisig.moonbeam.network/api", + "safeAddress": "" }, "optimism": { "name": "Optimism", @@ -319,7 +363,9 @@ "explorerType": "etherscan", "explorerUrl": "https://optimistic.etherscan.io", "explorerApiUrl": "https://api-optimistic.etherscan.io/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-optimism.safe.global/api", + "safeAddress": "" }, "polygon": { "name": "Polygon", @@ -333,7 +379,9 @@ "explorerType": "etherscan", "explorerUrl": "https://polygonscan.com", "explorerApiUrl": "https://api.polygonscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-polygon.safe.global/api", + "safeAddress": "" }, "polygonzkevm": { "name": "Polygon zkEVM", @@ -347,7 +395,9 @@ "explorerType": "etherscan", "explorerUrl": "https://zkevm.polygonscan.com", "explorerApiUrl": "https://api-zkevm.polygonscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-zkevm.safe.global/api", + "safeAddress": "" }, "rootstock": { "name": "Rootstock", @@ -361,7 +411,9 @@ "explorerType": "blockscout", "explorerUrl": "https://rootstock.blockscout.com", "explorerApiUrl": "https://rootstock.blockscout.com/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.safe.rootstock.io/api", + "safeAddress": "" }, "scroll": { "name": "Scroll", @@ -375,7 +427,9 @@ "explorerType": "etherscan", "explorerUrl": "https://scrollscan.com", "explorerApiUrl": "https://api.scrollscan.com/api", - "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11" + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-scroll.safe.global/api", + "safeAddress": "" }, "sei": { "name": "Sei Network", @@ -389,7 +443,41 @@ "explorerType": "etherscan", "explorerUrl": "https://seitrace.com", "explorerApiUrl": "https://seitrace.com/pacific-1/api", - "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11" + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.sei-safe.protofire.io/api", + "safeAddress": "" + }, + "taiko": { + "name": "Taiko", + "chainId": , + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "", + "status": "active", + "type": "mainnet", + "rpcUrl": "", + "explorerType": "etherscan", + "explorerUrl": "", + "explorerApiUrl": "", + "multicallAddress": "", + "safeApiUrl": "https://transaction.safe.taiko.xyz/api", + "safeAddress": "" + }, + "xlayer": { + "name": "X Layer", + "chainId": 196, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "OKB", + "wrappedNativeAddress": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", + "status": "active", + "type": "mainnet", + "rpcUrl": "", + "explorerType": "etherscan", + "explorerUrl": "", + "explorerApiUrl": "", + "multicallAddress": "", + "safeApiUrl": "", + "safeAddress": "" }, "zksync": { "name": "zkSync Era Mainnet", @@ -403,7 +491,9 @@ "explorerType": "etherscan", "explorerUrl": "https://era.zksync.network", "explorerApiUrl": "https://api-era.zksync.network/api", - "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963" + "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963", + "safeApiUrl": "https://safe-transaction-zksync.safe.global/api", + "safeAddress": "" }, "localanvil": { "name": "Local Anvil (temporary Foundry test network)", @@ -417,6 +507,8 @@ "explorerType": "etherscan", "explorerUrl": "", "explorerApiUrl": "", - "multicallAddress": "" + "multicallAddress": "", + "safeApiUrl": "", + "safeAddress": "" } } From e92f3ed47c5cc793eca33492ec5ced3704e14acd Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Thu, 3 Oct 2024 17:23:43 +0300 Subject: [PATCH 06/10] Update networks.json --- config/networks.json | 80 +++++++++++++-------------- script/deploy/safe/confirm-safe-tx.ts | 68 ++++++++++++++++++++--- 2 files changed, 101 insertions(+), 47 deletions(-) diff --git a/config/networks.json b/config/networks.json index a25fc2cfb..fde25aaaa 100644 --- a/config/networks.json +++ b/config/networks.json @@ -13,7 +13,7 @@ "explorerApiUrl": "https://api.etherscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-mainnet.safe.global/api", - "safeAddress": "" + "safeAddress": "0x37347dD595C49212C5FC2D95EA10d1085896f51E" }, "arbitrum": { "name": "Arbitrum One", @@ -29,7 +29,7 @@ "explorerApiUrl": "https://api.arbiscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", - "safeAddress": "" + "safeAddress": "0x9e606d0d2BbA344b911e2F4Eab95d9235A83fe15" }, "aurora": { "name": "Aurora", @@ -45,7 +45,7 @@ "explorerApiUrl": "https://aurorascan.dev/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", - "safeAddress": "" + "safeAddress": "0xC7291F249424A35b17976F057D2C97B30c92b88C" }, "avalanche": { "name": "Avalanche C-Chain", @@ -61,7 +61,7 @@ "explorerApiUrl": "https://api.snowtrace.io", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-avalanche.safe.global/api", - "safeAddress": "" + "safeAddress": "0x27d4eb2854d93a1A7Df8e2aeD1a535b080a6f6e4" }, "base": { "name": "Base", @@ -77,7 +77,7 @@ "explorerApiUrl": "https://api.basescan.org/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-base.safe.global/api", - "safeAddress": "" + "safeAddress": "0x1F6974C11B833Eb52ea07E0B442510165D87d82e" }, "blast": { "name": "Blast", @@ -93,7 +93,7 @@ "explorerApiUrl": "https://api.blastscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.blast-safe.io/api", - "safeAddress": "" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "boba": { "name": "Boba Network", @@ -109,7 +109,7 @@ "explorerApiUrl": "https://api.bobascan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction.mainnet.boba.network/api", - "safeAddress": "" + "safeAddress": "0x05d34Bd70E0CBf8b82423d0C2ee8b2a8f02E4128" }, "bsc": { "name": "BNB Smart Chain", @@ -125,7 +125,7 @@ "explorerApiUrl": "https://api.bscscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-bsc.safe.global/api", - "safeAddress": "" + "safeAddress": "0x20B6b31D76E054C3e4de6154fEca385Ca58c7C15" }, "celo": { "name": "Celo", @@ -141,7 +141,7 @@ "explorerApiUrl": "https://api.celoscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://safe-transaction-celo.safe.global/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "fantom": { "name": "Fantom", @@ -157,7 +157,7 @@ "explorerApiUrl": "https://api.ftmscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-txservice.fantom.network/api", - "safeAddress": "" + "safeAddress": "0x9B325B1c43BB3c018FcDB24A64E05EF4B8B8057b" }, "fraxtal": { "name": "Fraxtal", @@ -173,7 +173,7 @@ "explorerApiUrl": "https://api.fraxscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "fuse": { "name": "Fuse", @@ -189,7 +189,7 @@ "explorerApiUrl": "https://explorer.fuse.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", - "safeAddress": "" + "safeAddress": "0x5336e97bA7332FAC20281Bda8B790c8892245Ded" }, "gnosis": { "name": "Gnosis Chain", @@ -205,7 +205,7 @@ "explorerApiUrl": "https://api.gnosisscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-gnosis-chain.safe.global/api", - "safeAddress": "" + "safeAddress": "0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A" }, "gravity": { "name": "Gravity Alpha Mainnet", @@ -221,7 +221,7 @@ "explorerApiUrl": "https://explorer.gravity.xyz/api", "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c", "safeApiUrl": "https://safe.gravity.xyz/txs/api", - "safeAddress": "" + "safeAddress": "0x245B16CaCE8730b009c5352186DcE7d73c3037A1" }, "immutablezkevm": { "name": "Immutable zkEVM", @@ -237,7 +237,7 @@ "explorerApiUrl": "https://explorer.immutable.com/api", "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0", "safeApiUrl": "https://transaction.safe.immutable.com/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "kaia": { "name": "Kaia", @@ -253,7 +253,7 @@ "explorerApiUrl": "https://api-cypress.klaytnscope.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://docs-safe.kaia.io/txs-cypress/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "linea": { "name": "Linea", @@ -269,7 +269,7 @@ "explorerApiUrl": "https://api.lineascan.build/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://safe-transaction-linea.safe.global/api", - "safeAddress": "" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "mantle": { "name": "Mantle", @@ -285,7 +285,7 @@ "explorerApiUrl": "https://api.mantlescan.xyz/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.multisig.mantle.xyz/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "metis": { "name": "Metis Andromeda Mainnet", @@ -301,7 +301,7 @@ "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://metissafe.tech/txs/api", - "safeAddress": "" + "safeAddress": "0x925cD8289Ac2d617F52974da8338867f3bB62d56" }, "mode": { "name": "Mode", @@ -317,7 +317,7 @@ "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-mode.safe.optimism.io/api", - "safeAddress": "" + "safeAddress": "0x925cD8289Ac2d617F52974da8338867f3bB62d56" }, "moonbeam": { "name": "Moonbeam", @@ -333,7 +333,7 @@ "explorerApiUrl": "https://api-moonbeam.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.multisig.moonbeam.network/api", - "safeAddress": "" + "safeAddress": "0xB51E43CeCAB8A42cD6225e16C9C3a3ba1A76871A" }, "moonriver": { "name": "Moonriver", @@ -349,7 +349,7 @@ "explorerApiUrl": "https://api-moonriver.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.moonriver.multisig.moonbeam.network/api", - "safeAddress": "" + "safeAddress": "0xfC78B018B4daD77351095f00D92934A9A851DA34" }, "optimism": { "name": "Optimism", @@ -365,7 +365,7 @@ "explorerApiUrl": "https://api-optimistic.etherscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-optimism.safe.global/api", - "safeAddress": "" + "safeAddress": "0xa8892eA3fdDeF2aa8AfB1E3643a3284f978A5114" }, "polygon": { "name": "Polygon", @@ -381,7 +381,7 @@ "explorerApiUrl": "https://api.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-polygon.safe.global/api", - "safeAddress": "" + "safeAddress": "0x8BCC385948C73736423D38cc567cFEdE0F1826A3" }, "polygonzkevm": { "name": "Polygon zkEVM", @@ -397,7 +397,7 @@ "explorerApiUrl": "https://api-zkevm.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-zkevm.safe.global/api", - "safeAddress": "" + "safeAddress": "0x9575B9fC42dec56D3772B3df5DA047a1f1D55582" }, "rootstock": { "name": "Rootstock", @@ -429,7 +429,7 @@ "explorerApiUrl": "https://api.scrollscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://safe-transaction-scroll.safe.global/api", - "safeAddress": "" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "sei": { "name": "Sei Network", @@ -445,23 +445,23 @@ "explorerApiUrl": "https://seitrace.com/pacific-1/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.sei-safe.protofire.io/api", - "safeAddress": "" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "taiko": { "name": "Taiko", - "chainId": , + "chainId": 167000, "nativeAddress": "0x0000000000000000000000000000000000000000", "nativeCurrency": "ETH", - "wrappedNativeAddress": "", + "wrappedNativeAddress": "0xA51894664A773981C6C112C43ce576f315d5b1B6", "status": "active", "type": "mainnet", - "rpcUrl": "", + "rpcUrl": "https://rpc.taiko.xyz", "explorerType": "etherscan", - "explorerUrl": "", - "explorerApiUrl": "", - "multicallAddress": "", + "explorerUrl": "https://taikoscan.io", + "explorerApiUrl": "https://api.taikoscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.safe.taiko.xyz/api", - "safeAddress": "" + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "xlayer": { "name": "X Layer", @@ -473,11 +473,11 @@ "type": "mainnet", "rpcUrl": "", "explorerType": "etherscan", - "explorerUrl": "", - "explorerApiUrl": "", - "multicallAddress": "", - "safeApiUrl": "", - "safeAddress": "" + "explorerUrl": "https://www.oklink.com/xlayer", + "explorerApiUrl": "https://www.oklink.com/api/v5/explorer/xlayer/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-xlayer.safe.global/api", + "safeAddress": "0x3fD21B437b5E0a903A8376D33824F9BA658756C2" }, "zksync": { "name": "zkSync Era Mainnet", @@ -493,7 +493,7 @@ "explorerApiUrl": "https://api-era.zksync.network/api", "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963", "safeApiUrl": "https://safe-transaction-zksync.safe.global/api", - "safeAddress": "" + "safeAddress": "0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744" }, "localanvil": { "name": "Local Anvil (temporary Foundry test network)", diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 83361a237..57e9a2cbf 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -8,6 +8,9 @@ import consola from 'consola' import * as chains from 'viem/chains' import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' import { getViemChainForNetworkName } from '../../utils/viemScriptHelpers' +import * as dotenv from 'dotenv' +import { SafeMultisigTransactionResponse } from '@safe-global/safe-core-sdk-types' +dotenv.config() const ABI_LOOKUP_URL = `https://api.openchain.xyz/signature-database/v1/lookup?function=%SELECTOR%&filter=true` @@ -29,6 +32,7 @@ const skipNetworks: string[] = [ // 'gnosis', // 'gravity', // 'immutablezkevm', + // 'kaia', // 'linea', // 'mantle', // 'metis', @@ -41,6 +45,7 @@ const skipNetworks: string[] = [ // 'rootstock', // 'scroll', // 'sei', + // 'taiko', // 'zksync', ] const defaultNetworks = allNetworks.filter( @@ -92,6 +97,7 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { const signerAddress = await signer.getAddress() + consola.info('-'.repeat(80)) consola.info('Chain:', chain.name) consola.info('Signer:', signerAddress) @@ -110,6 +116,31 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { safeService.getPendingTransactions(safeAddress) ) + // Function to sign a transaction + const signTransaction = async ( + txToConfirm: SafeMultisigTransactionResponse + ) => { + consola.info('Signing transaction', txToConfirm.safeTxHash) + const signedTx = await protocolKit.signTransaction(txToConfirm) + const dataToBeSigned = signedTx.getSignature(signerAddress)?.data + if (!dataToBeSigned) throw Error(`error while preparing data to be signed)`) + + await retry(() => + safeService.confirmTransaction(txToConfirm.safeTxHash, dataToBeSigned) + ) + consola.success('Transaction signed', txToConfirm.safeTxHash) + } + + // Function to execute a transaction + async function executeTransaction( + txToConfirm: SafeMultisigTransactionResponse + ) { + consola.info('Executing transaction', txToConfirm.safeTxHash) + const exec = await protocolKit.executeTransaction(txToConfirm) + await exec.transactionResponse?.wait() + consola.success('Transaction executed', txToConfirm.safeTxHash) + } + // only show transaction Signer has not confirmed yet const txs = allTx.results.filter( (tx) => @@ -177,7 +208,7 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { storedResponse ?? (await consola.prompt('Action', { type: 'select', - options: ['Sign & Execute Later', 'Execute Now'], + options: ['Sign & Execute Now', 'Sign', 'Execute Now'], })) storedResponses[tx.data!] = action @@ -198,11 +229,17 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { consola.success('Transaction signed', tx.safeTxHash) } + if (action === 'Sign') { + await signTransaction(txToConfirm) + } + + if (action === 'Sign & Execute Now') { + await signTransaction(txToConfirm) + await executeTransaction(txToConfirm) + } + if (action === 'Execute Now') { - consola.info('Executing transaction', tx.safeTxHash) - const exec = await protocolKit.executeTransaction(txToConfirm) - await exec.transactionResponse?.wait() - consola.success('Transaction executed', tx.safeTxHash) + await executeTransaction(txToConfirm) } } } @@ -224,14 +261,31 @@ const main = defineCommand({ privateKey: { type: 'string', description: 'Private key of the signer', - required: true, + required: false, }, }, async run({ args }) { const networks = args.network ? [args.network] : defaultNetworks + // if no privateKey was supplied, read directly from env + let privateKey = args.privateKey + if (!privateKey) { + const key = await consola.prompt( + 'Which private key do you want to use from your .env file?', + { + type: 'select', + options: ['PRIVATE_KEY_PRODUCTION', 'SAFE_SIGNER_PRIVATE_KEY'], + } + ) + + privateKey = process.env[key] ?? '' + + if (privateKey == '') + throw Error(`could not find a key named ${key} in your .env file`) + } + for (const network of networks) { - await func(network, args.privateKey, args.rpcUrl) + await func(network, privateKey, args.rpcUrl) } }, }) From 70dcf7d19e36d5ba436f283e99d9929ef9287654 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 4 Oct 2024 11:28:29 +0300 Subject: [PATCH 07/10] Update SAFE scripts to use new networks.json --- config/networks.json | 29 ++++++--------- script/deploy/safe/confirm-safe-tx.ts | 18 ++++++---- script/utils/viemScriptHelpers.ts | 52 +++++++++++++++++++-------- 3 files changed, 59 insertions(+), 40 deletions(-) diff --git a/config/networks.json b/config/networks.json index d644967b6..522d5e750 100644 --- a/config/networks.json +++ b/config/networks.json @@ -7,7 +7,7 @@ "wrappedNativeAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "status": "active", "type": "mainnet", - "rcpUrl": "https://eth.drpc.org", + "rpcUrl": "https://eth.drpc.org", "explorerType": "etherscan", "explorerUrl": "https://etherscan.io", "explorerApiUrl": "https://api.etherscan.io/api", @@ -23,12 +23,12 @@ "wrappedNativeAddress": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", "status": "active", "type": "mainnet", - "rpcUrl": "https://arb1.arbitrum.io/rpc", + "rpcUrl": "https://arbitrum.drpc.org", "explorerType": "etherscan", "explorerUrl": "https://arbiscan.io", "explorerApiUrl": "https://api.arbiscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", - "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", + "safeApiUrl": "https://safe-transaction-arbitrum.safe.global/api", "safeAddress": "0x9e606d0d2BbA344b911e2F4Eab95d9235A83fe15" }, "aurora": { @@ -188,7 +188,7 @@ "explorerUrl": "https://explorer.fuse.io", "explorerApiUrl": "https://explorer.fuse.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", - "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", + "safeApiUrl": "https://transaction-fuse.safe.fuse.io/api", "safeAddress": "0x5336e97bA7332FAC20281Bda8B790c8892245Ded" }, "gnosis": { @@ -215,7 +215,7 @@ "wrappedNativeAddress": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", "status": "inactive", "type": "mainnet", - "rpcUrl": "https://rpc.gravity.xyz", + "rpcUrl": "https://rpc.ankr.com/gravity", "explorerType": "blockscout", "explorerUrl": "https://explorer.gravity.xyz", "explorerApiUrl": "https://explorer.gravity.xyz/api", @@ -279,7 +279,7 @@ "wrappedNativeAddress": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", "status": "active", "type": "mainnet", - "rpcUrl": "0xcA11bde05977b3631167028862bE2a173976CA11", + "rpcUrl": "https://mantle.drpc.org", "explorerType": "etherscan", "explorerUrl": "https://mantlescan.xyz/", "explorerApiUrl": "https://api.mantlescan.xyz/api", @@ -311,13 +311,13 @@ "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", "type": "mainnet", - "rpcUrl": "https://mainnet.mode.network", + "rpcUrl": "https://mode.drpc.org", "explorerType": "etherscan", "explorerUrl": "https://modescan.io", "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", "safeApiUrl": "https://transaction-mode.safe.optimism.io/api", - "safeAddress": "0x925cD8289Ac2d617F52974da8338867f3bB62d56" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "moonbeam": { "name": "Moonbeam", @@ -413,7 +413,7 @@ "explorerApiUrl": "https://rootstock.blockscout.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", "safeApiUrl": "https://transaction.safe.rootstock.io/api", - "safeAddress": "" + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "scroll": { "name": "Scroll", @@ -471,7 +471,7 @@ "wrappedNativeAddress": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", "status": "active", "type": "mainnet", - "rpcUrl": "", + "rpcUrl": "https://rpc.xlayer.tech", "explorerType": "etherscan", "explorerUrl": "https://www.oklink.com/xlayer", "explorerApiUrl": "https://www.oklink.com/api/v5/explorer/xlayer/api", @@ -479,15 +479,6 @@ "safeApiUrl": "https://safe-transaction-xlayer.safe.global/api", "safeAddress": "0x3fD21B437b5E0a903A8376D33824F9BA658756C2" }, - "xlayer": { - "name": "X Layer", - "chainId": 196, - "nativeAddress": "0x0000000000000000000000000000000000000000", - "nativeCurrency": "OKB", - "wrappedNativeAddress": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", - "status": "active", - "type": "mainnet" - }, "zksync": { "name": "zkSync Era Mainnet", "chainId": 324, diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 57e9a2cbf..1f6c3348e 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -6,15 +6,21 @@ import SafeApiKit from '@safe-global/api-kit' import { ethers } from 'ethers6' import consola from 'consola' import * as chains from 'viem/chains' -import { getSafeUtilityContracts, safeAddresses, safeApiUrls } from './config' -import { getViemChainForNetworkName } from '../../utils/viemScriptHelpers' +import { getSafeUtilityContracts } from './config' +import { + Networks, + getViemChainForNetworkName, +} from '../../utils/viemScriptHelpers' import * as dotenv from 'dotenv' import { SafeMultisigTransactionResponse } from '@safe-global/safe-core-sdk-types' +import networksConfig from '../../../config/networks.json' dotenv.config() +const networks: Networks = networksConfig + const ABI_LOOKUP_URL = `https://api.openchain.xyz/signature-database/v1/lookup?function=%SELECTOR%&filter=true` -const allNetworks = Object.keys(safeAddresses) +const allNetworks = Object.keys(networks) // In order to skip specific networks simple comment them in const skipNetworks: string[] = [ // 'mainnet', @@ -49,7 +55,7 @@ const skipNetworks: string[] = [ // 'zksync', ] const defaultNetworks = allNetworks.filter( - (network) => !skipNetworks.includes(network) + (network) => !skipNetworks.includes(network) || network !== 'localanvil' ) const storedResponses: Record = {} @@ -84,12 +90,12 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { const config: SafeApiKitConfig = { chainId: BigInt(chain.id), - txServiceUrl: safeApiUrls[network.toLowerCase()], + txServiceUrl: networks[network.toLowerCase()].safeApiUrl, } const safeService = new SafeApiKit(config) - const safeAddress = safeAddresses[network.toLowerCase()] + const safeAddress = networks[network.toLowerCase()].safeAddress const parsedRpcUrl = rpcUrl || chain.rpcUrls.default.http[0] const provider = new ethers.JsonRpcProvider(parsedRpcUrl) diff --git a/script/utils/viemScriptHelpers.ts b/script/utils/viemScriptHelpers.ts index c72cbc078..13d22af10 100644 --- a/script/utils/viemScriptHelpers.ts +++ b/script/utils/viemScriptHelpers.ts @@ -1,27 +1,49 @@ -import { Chain } from 'viem' +import { Chain, defineChain } from 'viem' import * as chains from 'viem/chains' +import networksConfig from '../../config/networks.json' -const chainNameMappings: Record = { - zksync: 'zkSync', - polygonzkevm: 'polygonZkEvm', - immutablezkevm: 'immutableZkEvm', - xlayer: 'xLayer', +export type Networks = { + [key: string]: { + name: string + chainId: number + nativeAddress: string + nativeCurrency: string + wrappedNativeAddress: string + status: string + type: string + rpcUrl: string + explorerType: string + explorerUrl: string + explorerApiUrl: string + multicallAddress: string + safeApiUrl: string + safeAddress: string + } } -const chainMap: Record = {} -for (const [k, v] of Object.entries(chains)) { - // @ts-ignore - chainMap[k] = v -} +const networks: Networks = networksConfig export const getViemChainForNetworkName = (networkName: string): Chain => { - const chainName = chainNameMappings[networkName] || networkName - const chain: Chain = chainMap[chainName] + const network = networks[networkName] - if (!chain) + if (!network) throw new Error( - `Chain ${networkName} (aka '${chainName}', if a mapping exists) not supported by viem or requires name mapping. Check if you can find your chain here: https://github.com/wevm/viem/tree/main/src/chains/definitions` + `Chain ${networkName} does not exist. Please check that the network exists in 'config/networks.json'` ) + const chain = defineChain({ + id: network.chainId, + name: network.name, + nativeCurrency: { + decimals: 18, + name: network.nativeCurrency, + symbol: network.nativeCurrency, + }, + rpcUrls: { + default: { + http: [network.rpcUrl], + }, + }, + }) return chain } From afc4c2487c0d1bf9bb72e4b0676f028026eb423a Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 4 Oct 2024 12:24:08 +0300 Subject: [PATCH 08/10] Fix typo --- script/deploy/safe/confirm-safe-tx.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 1f6c3348e..d9444de86 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -129,7 +129,7 @@ const func = async (network: string, privateKey: string, rpcUrl?: string) => { consola.info('Signing transaction', txToConfirm.safeTxHash) const signedTx = await protocolKit.signTransaction(txToConfirm) const dataToBeSigned = signedTx.getSignature(signerAddress)?.data - if (!dataToBeSigned) throw Error(`error while preparing data to be signed)`) + if (!dataToBeSigned) throw Error(`error while preparing data to be signed`) await retry(() => safeService.confirmTransaction(txToConfirm.safeTxHash, dataToBeSigned) From 6d2d7492b707f3984d266b993c4963bd90170305 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Fri, 4 Oct 2024 12:26:03 +0300 Subject: [PATCH 09/10] Fix filter condition --- script/deploy/safe/confirm-safe-tx.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index d9444de86..d2c71184c 100644 --- a/script/deploy/safe/confirm-safe-tx.ts +++ b/script/deploy/safe/confirm-safe-tx.ts @@ -55,7 +55,7 @@ const skipNetworks: string[] = [ // 'zksync', ] const defaultNetworks = allNetworks.filter( - (network) => !skipNetworks.includes(network) || network !== 'localanvil' + (network) => !skipNetworks.includes(network) && network !== 'localanvil' ) const storedResponses: Record = {} From 1f0789251941fb5c10cd4d7c90e122280e05ba33 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Mon, 7 Oct 2024 11:34:26 +0300 Subject: [PATCH 10/10] Change explorerType to verificationType --- config/networks.json | 64 ++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/config/networks.json b/config/networks.json index 522d5e750..d3eb1ea53 100644 --- a/config/networks.json +++ b/config/networks.json @@ -8,7 +8,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://eth.drpc.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://etherscan.io", "explorerApiUrl": "https://api.etherscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -24,7 +24,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://arbitrum.drpc.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://arbiscan.io", "explorerApiUrl": "https://api.arbiscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -40,7 +40,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mainnet.aurora.dev", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://aurorascan.dev", "explorerApiUrl": "https://aurorascan.dev/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -56,7 +56,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://api.avax.network/ext/bc/C/rpc", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://snowtrace.io", "explorerApiUrl": "https://api.snowtrace.io", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -72,7 +72,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mainnet.base.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://basescan.org", "explorerApiUrl": "https://api.basescan.org/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -88,7 +88,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.blast.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://blastscan.io", "explorerApiUrl": "https://api.blastscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -104,7 +104,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mainnet.boba.network", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://bobascan.com", "explorerApiUrl": "https://api.bobascan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -120,7 +120,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.ankr.com/bsc", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://bscscan.com", "explorerApiUrl": "https://api.bscscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -136,7 +136,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://forno.celo.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://celoscan.io", "explorerApiUrl": "https://api.celoscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -152,7 +152,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.ankr.com/fantom", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://ftmscan.com", "explorerApiUrl": "https://api.ftmscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -168,7 +168,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.frax.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://fraxscan.com", "explorerApiUrl": "https://api.fraxscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -184,7 +184,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.fuse.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://explorer.fuse.io", "explorerApiUrl": "https://explorer.fuse.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -200,7 +200,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.gnosischain.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://gnosisscan.io", "explorerApiUrl": "https://api.gnosisscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -216,7 +216,7 @@ "status": "inactive", "type": "mainnet", "rpcUrl": "https://rpc.ankr.com/gravity", - "explorerType": "blockscout", + "verificationType": "blockscout", "explorerUrl": "https://explorer.gravity.xyz", "explorerApiUrl": "https://explorer.gravity.xyz/api", "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c", @@ -232,7 +232,7 @@ "status": "inactive", "type": "mainnet", "rpcUrl": "https://rpc.immutable.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://explorer.immutable.com", "explorerApiUrl": "https://explorer.immutable.com/api", "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0", @@ -248,7 +248,7 @@ "status": "inactive", "type": "mainnet", "rpcUrl": "https://public-en.node.kaia.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://kaiascope.com", "explorerApiUrl": "https://api-cypress.klaytnscope.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -264,7 +264,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.linea.build", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://lineascan.build", "explorerApiUrl": "https://api.lineascan.build/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -280,7 +280,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mantle.drpc.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://mantlescan.xyz/", "explorerApiUrl": "https://api.mantlescan.xyz/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -296,7 +296,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://andromeda.metis.io/?owner=1088", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://explorer.metis.io", "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -312,7 +312,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mode.drpc.org", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://modescan.io", "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/34443/etherscan", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -328,7 +328,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://moonbeam.public.blastapi.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://moonscan.io", "explorerApiUrl": "https://api-moonbeam.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -344,7 +344,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://moonriver.public.blastapi.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://moonriver.moonscan.io", "explorerApiUrl": "https://api-moonriver.moonscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -360,7 +360,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mainnet.optimism.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://optimistic.etherscan.io", "explorerApiUrl": "https://api-optimistic.etherscan.io/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -376,7 +376,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://polygon-rpc.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://polygonscan.com", "explorerApiUrl": "https://api.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -392,7 +392,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://zkevm-rpc.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://zkevm.polygonscan.com", "explorerApiUrl": "https://api-zkevm.polygonscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -408,7 +408,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://public-node.rsk.co", - "explorerType": "blockscout", + "verificationType": "blockscout", "explorerUrl": "https://rootstock.blockscout.com", "explorerApiUrl": "https://rootstock.blockscout.com/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -424,7 +424,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.scroll.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://scrollscan.com", "explorerApiUrl": "https://api.scrollscan.com/api", "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", @@ -440,7 +440,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://evm-rpc.sei-apis.com", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://seitrace.com", "explorerApiUrl": "https://seitrace.com/pacific-1/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -456,7 +456,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.taiko.xyz", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://taikoscan.io", "explorerApiUrl": "https://api.taikoscan.io/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -472,7 +472,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://rpc.xlayer.tech", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://www.oklink.com/xlayer", "explorerApiUrl": "https://www.oklink.com/api/v5/explorer/xlayer/api", "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", @@ -488,7 +488,7 @@ "status": "active", "type": "mainnet", "rpcUrl": "https://mainnet.era.zksync.io", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "https://era.zksync.network", "explorerApiUrl": "https://api-era.zksync.network/api", "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963", @@ -504,7 +504,7 @@ "status": "active", "type": "testnet", "rpcUrl": "http://localhost:8545", - "explorerType": "etherscan", + "verificationType": "etherscan", "explorerUrl": "", "explorerApiUrl": "", "multicallAddress": "",