diff --git a/config/global.json b/config/global.json index 1e714645a..d6a0c0ebb 100644 --- a/config/global.json +++ b/config/global.json @@ -94,7 +94,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", diff --git a/config/networks.json b/config/networks.json index bf6935104..d3eb1ea53 100644 --- a/config/networks.json +++ b/config/networks.json @@ -6,7 +6,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://eth.drpc.org", + "verificationType": "etherscan", + "explorerUrl": "https://etherscan.io", + "explorerApiUrl": "https://api.etherscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-mainnet.safe.global/api", + "safeAddress": "0x37347dD595C49212C5FC2D95EA10d1085896f51E" }, "arbitrum": { "name": "Arbitrum One", @@ -15,7 +22,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://arbitrum.drpc.org", + "verificationType": "etherscan", + "explorerUrl": "https://arbiscan.io", + "explorerApiUrl": "https://api.arbiscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-arbitrum.safe.global/api", + "safeAddress": "0x9e606d0d2BbA344b911e2F4Eab95d9235A83fe15" }, "aurora": { "name": "Aurora", @@ -24,7 +38,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xC9BdeEd33CD01541e1eeD10f90519d2C06Fe3feB", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.aurora.dev", + "verificationType": "etherscan", + "explorerUrl": "https://aurorascan.dev", + "explorerApiUrl": "https://aurorascan.dev/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-aurora.safe.global/api", + "safeAddress": "0xC7291F249424A35b17976F057D2C97B30c92b88C" }, "avalanche": { "name": "Avalanche C-Chain", @@ -33,7 +54,14 @@ "nativeCurrency": "AVAX", "wrappedNativeAddress": "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://api.avax.network/ext/bc/C/rpc", + "verificationType": "etherscan", + "explorerUrl": "https://snowtrace.io", + "explorerApiUrl": "https://api.snowtrace.io", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-avalanche.safe.global/api", + "safeAddress": "0x27d4eb2854d93a1A7Df8e2aeD1a535b080a6f6e4" }, "base": { "name": "Base", @@ -42,7 +70,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.base.org", + "verificationType": "etherscan", + "explorerUrl": "https://basescan.org", + "explorerApiUrl": "https://api.basescan.org/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-base.safe.global/api", + "safeAddress": "0x1F6974C11B833Eb52ea07E0B442510165D87d82e" }, "blast": { "name": "Blast", @@ -51,7 +86,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4300000000000000000000000000000000000004", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.blast.io", + "verificationType": "etherscan", + "explorerUrl": "https://blastscan.io", + "explorerApiUrl": "https://api.blastscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.blast-safe.io/api", + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "boba": { "name": "Boba Network", @@ -60,7 +102,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.boba.network", + "verificationType": "etherscan", + "explorerUrl": "https://bobascan.com", + "explorerApiUrl": "https://api.bobascan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction.mainnet.boba.network/api", + "safeAddress": "0x05d34Bd70E0CBf8b82423d0C2ee8b2a8f02E4128" }, "bsc": { "name": "BNB Smart Chain", @@ -69,7 +118,14 @@ "nativeCurrency": "BNB", "wrappedNativeAddress": "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.ankr.com/bsc", + "verificationType": "etherscan", + "explorerUrl": "https://bscscan.com", + "explorerApiUrl": "https://api.bscscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-bsc.safe.global/api", + "safeAddress": "0x20B6b31D76E054C3e4de6154fEca385Ca58c7C15" }, "celo": { "name": "Celo", @@ -78,7 +134,14 @@ "nativeCurrency": "CELO", "wrappedNativeAddress": "0x471EcE3750Da237f93B8E339c536989b8978a438", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://forno.celo.org", + "verificationType": "etherscan", + "explorerUrl": "https://celoscan.io", + "explorerApiUrl": "https://api.celoscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-celo.safe.global/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "fantom": { "name": "Fantom", @@ -87,7 +150,14 @@ "nativeAddress": "0x0000000000000000000000000000000000000000", "wrappedNativeAddress": "0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.ankr.com/fantom", + "verificationType": "etherscan", + "explorerUrl": "https://ftmscan.com", + "explorerApiUrl": "https://api.ftmscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-txservice.fantom.network/api", + "safeAddress": "0x9B325B1c43BB3c018FcDB24A64E05EF4B8B8057b" }, "fraxtal": { "name": "Fraxtal", @@ -96,7 +166,14 @@ "nativeCurrency": "frxETH", "wrappedNativeAddress": "0xfc00000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.frax.com", + "verificationType": "etherscan", + "explorerUrl": "https://fraxscan.com", + "explorerApiUrl": "https://api.fraxscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://transaction-frax.safe.optimism.io/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "fuse": { "name": "Fuse", @@ -105,7 +182,14 @@ "nativeCurrency": "FUSE", "wrappedNativeAddress": "0x0BE9e53fd7EDaC9F859882AfdDa116645287C629", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.fuse.io", + "verificationType": "etherscan", + "explorerUrl": "https://explorer.fuse.io", + "explorerApiUrl": "https://explorer.fuse.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://transaction-fuse.safe.fuse.io/api", + "safeAddress": "0x5336e97bA7332FAC20281Bda8B790c8892245Ded" }, "gnosis": { "name": "Gnosis Chain", @@ -114,7 +198,14 @@ "nativeCurrency": "XDAI", "wrappedNativeAddress": "0xe91d153e0b41518a2ce8dd3d7944fa863463a97d", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.gnosischain.com", + "verificationType": "etherscan", + "explorerUrl": "https://gnosisscan.io", + "explorerApiUrl": "https://api.gnosisscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-gnosis-chain.safe.global/api", + "safeAddress": "0x2bC523875b59A1Ddd03CEB1F1b28c5B0e8e6654A" }, "gravity": { "name": "Gravity Alpha Mainnet", @@ -123,7 +214,14 @@ "nativeCurrency": "G", "wrappedNativeAddress": "0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.ankr.com/gravity", + "verificationType": "blockscout", + "explorerUrl": "https://explorer.gravity.xyz", + "explorerApiUrl": "https://explorer.gravity.xyz/api", + "multicallAddress": "0xf8ac4BEB2F75d2cFFb588c63251347fdD629B92c", + "safeApiUrl": "https://safe.gravity.xyz/txs/api", + "safeAddress": "0x245B16CaCE8730b009c5352186DcE7d73c3037A1" }, "immutablezkevm": { "name": "Immutable zkEVM", @@ -132,7 +230,14 @@ "nativeCurrency": "IMX", "wrappedNativeAddress": "0x3a0c2ba54d6cbd3121f01b96dfd20e99d1696c9d", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.immutable.com", + "verificationType": "etherscan", + "explorerUrl": "https://explorer.immutable.com", + "explorerApiUrl": "https://explorer.immutable.com/api", + "multicallAddress": "0x236bdA4589e44e6850f5aC6a74BfCa398a86c6c0", + "safeApiUrl": "https://transaction.safe.immutable.com/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "kaia": { "name": "Kaia", @@ -141,7 +246,14 @@ "nativeCurrency": "KLAYTN", "wrappedNativeAddress": "0x19aac5f612f524b754ca7e7c41cbfa2e981a4432", "status": "inactive", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://public-en.node.kaia.io", + "verificationType": "etherscan", + "explorerUrl": "https://kaiascope.com", + "explorerApiUrl": "https://api-cypress.klaytnscope.com/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://docs-safe.kaia.io/txs-cypress/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "linea": { "name": "Linea", @@ -150,7 +262,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.linea.build", + "verificationType": "etherscan", + "explorerUrl": "https://lineascan.build", + "explorerApiUrl": "https://api.lineascan.build/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://safe-transaction-linea.safe.global/api", + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "mantle": { "name": "Mantle", @@ -159,7 +278,14 @@ "nativeCurrency": "MNT", "wrappedNativeAddress": "0x78c1b0c915c4faa5fffa6cabf0219da63d7f4cb8", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mantle.drpc.org", + "verificationType": "etherscan", + "explorerUrl": "https://mantlescan.xyz/", + "explorerApiUrl": "https://api.mantlescan.xyz/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.multisig.mantle.xyz/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "metis": { "name": "Metis Andromeda Mainnet", @@ -168,7 +294,14 @@ "nativeCurrency": "METIS", "wrappedNativeAddress": "0x75cb093E4D61d2A2e65D8e0BBb01DE8d89b53481", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://andromeda.metis.io/?owner=1088", + "verificationType": "etherscan", + "explorerUrl": "https://explorer.metis.io", + "explorerApiUrl": "https://api.routescan.io/v2/network/mainnet/evm/1088/etherscan/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://metissafe.tech/txs/api", + "safeAddress": "0x925cD8289Ac2d617F52974da8338867f3bB62d56" }, "mode": { "name": "Mode", @@ -177,7 +310,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mode.drpc.org", + "verificationType": "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": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "moonbeam": { "name": "Moonbeam", @@ -186,7 +326,14 @@ "nativeCurrency": "GLMR", "wrappedNativeAddress": "0xacc15dc74880c9944775448304b263d191c6077f", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://moonbeam.public.blastapi.io", + "verificationType": "etherscan", + "explorerUrl": "https://moonscan.io", + "explorerApiUrl": "https://api-moonbeam.moonscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.multisig.moonbeam.network/api", + "safeAddress": "0xB51E43CeCAB8A42cD6225e16C9C3a3ba1A76871A" }, "moonriver": { "name": "Moonriver", @@ -195,7 +342,14 @@ "nativeCurrency": "MOVR", "wrappedNativeAddress": "0x98878b06940ae243284ca214f92bb71a2b032b8a", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://moonriver.public.blastapi.io", + "verificationType": "etherscan", + "explorerUrl": "https://moonriver.moonscan.io", + "explorerApiUrl": "https://api-moonriver.moonscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.moonriver.multisig.moonbeam.network/api", + "safeAddress": "0xfC78B018B4daD77351095f00D92934A9A851DA34" }, "optimism": { "name": "Optimism", @@ -204,7 +358,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4200000000000000000000000000000000000006", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://mainnet.optimism.io", + "verificationType": "etherscan", + "explorerUrl": "https://optimistic.etherscan.io", + "explorerApiUrl": "https://api-optimistic.etherscan.io/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-optimism.safe.global/api", + "safeAddress": "0xa8892eA3fdDeF2aa8AfB1E3643a3284f978A5114" }, "polygon": { "name": "Polygon", @@ -213,7 +374,14 @@ "nativeCurrency": "MATIC", "wrappedNativeAddress": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://polygon-rpc.com", + "verificationType": "etherscan", + "explorerUrl": "https://polygonscan.com", + "explorerApiUrl": "https://api.polygonscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-polygon.safe.global/api", + "safeAddress": "0x8BCC385948C73736423D38cc567cFEdE0F1826A3" }, "polygonzkevm": { "name": "Polygon zkEVM", @@ -222,7 +390,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x4f9a0e7fd2bf6067db6994cf12e4495df938e6e9", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://zkevm-rpc.com", + "verificationType": "etherscan", + "explorerUrl": "https://zkevm.polygonscan.com", + "explorerApiUrl": "https://api-zkevm.polygonscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-zkevm.safe.global/api", + "safeAddress": "0x9575B9fC42dec56D3772B3df5DA047a1f1D55582" }, "rootstock": { "name": "Rootstock", @@ -231,7 +406,14 @@ "nativeCurrency": "RBTC", "wrappedNativeAddress": "0x542FDA317318eBf1d3DeAF76E0B632741a7e677d", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://public-node.rsk.co", + "verificationType": "blockscout", + "explorerUrl": "https://rootstock.blockscout.com", + "explorerApiUrl": "https://rootstock.blockscout.com/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.safe.rootstock.io/api", + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "scroll": { "name": "Scroll", @@ -240,7 +422,14 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x5300000000000000000000000000000000000004", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.scroll.io", + "verificationType": "etherscan", + "explorerUrl": "https://scrollscan.com", + "explorerApiUrl": "https://api.scrollscan.com/api", + "multicallAddress": "0xca11bde05977b3631167028862be2a173976ca11", + "safeApiUrl": "https://safe-transaction-scroll.safe.global/api", + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" }, "sei": { "name": "Sei Network", @@ -249,7 +438,30 @@ "nativeCurrency": "SEI", "wrappedNativeAddress": "0xe30fedd158a2e3b13e9badaeabafc5516e95e8c7", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://evm-rpc.sei-apis.com", + "verificationType": "etherscan", + "explorerUrl": "https://seitrace.com", + "explorerApiUrl": "https://seitrace.com/pacific-1/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.sei-safe.protofire.io/api", + "safeAddress": "0xdf61270fDC1A892874Fd3C0143A0A4CBA74F4EF1" + }, + "taiko": { + "name": "Taiko", + "chainId": 167000, + "nativeAddress": "0x0000000000000000000000000000000000000000", + "nativeCurrency": "ETH", + "wrappedNativeAddress": "0xA51894664A773981C6C112C43ce576f315d5b1B6", + "status": "active", + "type": "mainnet", + "rpcUrl": "https://rpc.taiko.xyz", + "verificationType": "etherscan", + "explorerUrl": "https://taikoscan.io", + "explorerApiUrl": "https://api.taikoscan.io/api", + "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11", + "safeApiUrl": "https://transaction.safe.taiko.xyz/api", + "safeAddress": "0xa89a87986e8ee1Ac8fDaCc5Ac91627010Ec9f772" }, "xlayer": { "name": "X Layer", @@ -258,7 +470,14 @@ "nativeCurrency": "OKB", "wrappedNativeAddress": "0xe538905cf8410324e03a5a23c1c177a474d59b2b", "status": "active", - "type": "mainnet" + "type": "mainnet", + "rpcUrl": "https://rpc.xlayer.tech", + "verificationType": "etherscan", + "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", @@ -267,43 +486,14 @@ "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://mainnet.era.zksync.io", + "verificationType": "etherscan", + "explorerUrl": "https://era.zksync.network", + "explorerApiUrl": "https://api-era.zksync.network/api", + "multicallAddress": "0xF9cda624FBC7e059355ce98a31693d299FACd963", + "safeApiUrl": "https://safe-transaction-zksync.safe.global/api", + "safeAddress": "0x02f1272aEaCaf7BD8b30278bc2AA381Cc623A744" }, "localanvil": { "name": "Local Anvil (temporary Foundry test network)", @@ -312,6 +502,13 @@ "nativeCurrency": "ETH", "wrappedNativeAddress": "0x0000000000000000000000000000000000000000", "status": "active", - "type": "testnet" + "type": "testnet", + "rpcUrl": "http://localhost:8545", + "verificationType": "etherscan", + "explorerUrl": "", + "explorerApiUrl": "", + "multicallAddress": "", + "safeApiUrl": "", + "safeAddress": "" } } 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/safe/config.ts b/script/deploy/safe/config.ts index 104897222..86664c4a2 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', diff --git a/script/deploy/safe/confirm-safe-tx.ts b/script/deploy/safe/confirm-safe-tx.ts index 57e9a2cbf..d2c71184c 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) @@ -123,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) diff --git a/script/deploy/zksync/017_deploy_token_wrapper.ts b/script/deploy/zksync/017_deploy_token_wrapper.ts index e57453f6f..eae86b0f3 100644 --- a/script/deploy/zksync/017_deploy_token_wrapper.ts +++ b/script/deploy/zksync/017_deploy_token_wrapper.ts @@ -7,7 +7,7 @@ import { 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) 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 }