github.com/ethereum-optimism/optimism@v1.7.2/packages/sdk/src/utils/chain-constants.ts (about) 1 import { predeploys } from '@eth-optimism/core-utils' 2 import { ethers } from 'ethers' 3 4 // The addresses below should be for the proxy if it is a proxied contract. 5 6 const portalAddresses = { 7 mainnet: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed', 8 goerli: '0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383', 9 sepolia: '0x16Fc5058F25648194471939df75CF27A2fdC48BC', 10 } 11 12 const l2OutputOracleAddresses = { 13 mainnet: '0xdfe97868233d1aa22e815a266982f2cf17685a27', 14 goerli: '0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0', 15 sepolia: '0x90E9c4f8a994a250F6aEfd61CAFb4F2e895D458F', 16 } 17 18 const addressManagerAddresses = { 19 mainnet: '0xdE1FCfB0851916CA5101820A69b13a4E276bd81F', 20 goerli: '0xa6f73589243a6A7a9023b1Fa0651b1d89c177111', 21 sepolia: '0x9bFE9c5609311DF1c011c47642253B78a4f33F4B', 22 } 23 24 const l1StandardBridgeAddresses = { 25 mainnet: '0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1', 26 goerli: '0x636Af16bf2f682dD3109e60102b8E1A089FedAa8', 27 sepolia: '0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1', 28 } 29 30 const l1CrossDomainMessengerAddresses = { 31 mainnet: '0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1', 32 goerli: '0x5086d1eEF304eb5284A0f6720f79403b4e9bE294', 33 sepolia: '0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef', 34 } 35 36 // legacy 37 const stateCommitmentChainAddresses = { 38 mainnet: '0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19', 39 goerli: '0x9c945aC97Baf48cB784AbBB61399beB71aF7A378', 40 sepolia: ethers.constants.AddressZero, 41 } 42 43 // legacy 44 const canonicalTransactionChainAddresses = { 45 mainnet: '0x5E4e65926BA27467555EB562121fac00D24E9dD2', 46 goerli: '0x607F755149cFEB3a14E1Dc3A4E2450Cde7dfb04D', 47 sepolia: ethers.constants.AddressZero, 48 } 49 50 import { 51 L1ChainID, 52 L2ChainID, 53 OEContractsLike, 54 OEL1ContractsLike, 55 OEL2ContractsLike, 56 BridgeAdapterData, 57 } from '../interfaces' 58 import { 59 StandardBridgeAdapter, 60 DAIBridgeAdapter, 61 ECOBridgeAdapter, 62 } from '../adapters' 63 64 export const DEPOSIT_CONFIRMATION_BLOCKS: { 65 [ChainID in L2ChainID]: number 66 } = { 67 [L2ChainID.OPTIMISM]: 50 as const, 68 [L2ChainID.OPTIMISM_GOERLI]: 12 as const, 69 [L2ChainID.OPTIMISM_SEPOLIA]: 12 as const, 70 [L2ChainID.OPTIMISM_HARDHAT_LOCAL]: 2 as const, 71 [L2ChainID.OPTIMISM_HARDHAT_DEVNET]: 2 as const, 72 [L2ChainID.OPTIMISM_BEDROCK_ALPHA_TESTNET]: 12 as const, 73 [L2ChainID.BASE_GOERLI]: 25 as const, 74 [L2ChainID.BASE_SEPOLIA]: 25 as const, 75 [L2ChainID.BASE_MAINNET]: 10 as const, 76 [L2ChainID.ZORA_GOERLI]: 12 as const, 77 [L2ChainID.ZORA_MAINNET]: 50 as const, 78 } 79 80 export const CHAIN_BLOCK_TIMES: { 81 [ChainID in L1ChainID]: number 82 } = { 83 [L1ChainID.MAINNET]: 13 as const, 84 [L1ChainID.GOERLI]: 15 as const, 85 [L1ChainID.SEPOLIA]: 15 as const, 86 [L1ChainID.HARDHAT_LOCAL]: 1 as const, 87 [L1ChainID.BEDROCK_LOCAL_DEVNET]: 15 as const, 88 } 89 90 /** 91 * Full list of default L2 contract addresses. 92 */ 93 export const DEFAULT_L2_CONTRACT_ADDRESSES: OEL2ContractsLike = { 94 L2CrossDomainMessenger: predeploys.L2CrossDomainMessenger, 95 L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser, 96 L2StandardBridge: predeploys.L2StandardBridge, 97 OVM_L1BlockNumber: predeploys.L1BlockNumber, 98 OVM_L2ToL1MessagePasser: predeploys.L2ToL1MessagePasser, 99 OVM_DeployerWhitelist: predeploys.DeployerWhitelist, 100 OVM_ETH: predeploys.LegacyERC20ETH, 101 OVM_GasPriceOracle: predeploys.GasPriceOracle, 102 OVM_SequencerFeeVault: predeploys.SequencerFeeVault, 103 WETH: predeploys.WETH9, 104 BedrockMessagePasser: predeploys.L2ToL1MessagePasser, 105 } 106 107 /** 108 * Loads the L1 contracts for a given network by the network name. 109 * 110 * @param network The name of the network to load the contracts for. 111 * @returns The L1 contracts for the given network. 112 */ 113 const getL1ContractsByNetworkName = (network: string): OEL1ContractsLike => { 114 return { 115 AddressManager: addressManagerAddresses[network], 116 L1CrossDomainMessenger: l1CrossDomainMessengerAddresses[network], 117 L1StandardBridge: l1StandardBridgeAddresses[network], 118 StateCommitmentChain: stateCommitmentChainAddresses[network], 119 CanonicalTransactionChain: canonicalTransactionChainAddresses[network], 120 BondManager: ethers.constants.AddressZero, 121 OptimismPortal: portalAddresses[network], 122 L2OutputOracle: l2OutputOracleAddresses[network], 123 OptimismPortal2: portalAddresses[network], 124 DisputeGameFactory: ethers.constants.AddressZero, 125 } 126 } 127 128 /** 129 * List of contracts that are ignorable when checking for contracts on a given network. 130 */ 131 export const IGNORABLE_CONTRACTS = ['OptimismPortal2', 'DisputeGameFactory'] 132 133 /** 134 * Mapping of L1 chain IDs to the appropriate contract addresses for the OE deployments to the 135 * given network. Simplifies the process of getting the correct contract addresses for a given 136 * contract name. 137 */ 138 export const CONTRACT_ADDRESSES: { 139 [ChainID in L2ChainID]: OEContractsLike 140 } = { 141 [L2ChainID.OPTIMISM]: { 142 l1: getL1ContractsByNetworkName('mainnet'), 143 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 144 }, 145 [L2ChainID.OPTIMISM_GOERLI]: { 146 l1: getL1ContractsByNetworkName('goerli'), 147 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 148 }, 149 [L2ChainID.OPTIMISM_SEPOLIA]: { 150 l1: getL1ContractsByNetworkName('sepolia'), 151 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 152 }, 153 [L2ChainID.OPTIMISM_HARDHAT_LOCAL]: { 154 l1: { 155 AddressManager: '0x5FbDB2315678afecb367f032d93F642f64180aa3' as const, 156 L1CrossDomainMessenger: 157 '0x8A791620dd6260079BF849Dc5567aDC3F2FdC318' as const, 158 L1StandardBridge: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788' as const, 159 StateCommitmentChain: 160 '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9' as const, 161 CanonicalTransactionChain: 162 '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as const, 163 BondManager: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707' as const, 164 // FIXME 165 OptimismPortal: '0x0000000000000000000000000000000000000000' as const, 166 L2OutputOracle: '0x0000000000000000000000000000000000000000' as const, 167 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 168 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 169 }, 170 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 171 }, 172 [L2ChainID.OPTIMISM_HARDHAT_DEVNET]: { 173 l1: { 174 AddressManager: '0x5FbDB2315678afecb367f032d93F642f64180aa3' as const, 175 L1CrossDomainMessenger: 176 '0x8A791620dd6260079BF849Dc5567aDC3F2FdC318' as const, 177 L1StandardBridge: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788' as const, 178 StateCommitmentChain: 179 '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9' as const, 180 CanonicalTransactionChain: 181 '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as const, 182 BondManager: '0x5FC8d32690cc91D4c39d9d3abcBD16989F875707' as const, 183 OptimismPortal: '0x0000000000000000000000000000000000000000' as const, 184 L2OutputOracle: '0x0000000000000000000000000000000000000000' as const, 185 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 186 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 187 }, 188 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 189 }, 190 [L2ChainID.OPTIMISM_BEDROCK_ALPHA_TESTNET]: { 191 l1: { 192 AddressManager: '0xb4e08DcE1F323608229265c9d4125E22a4B9dbAF' as const, 193 L1CrossDomainMessenger: 194 '0x838a6DC4E37CA45D4Ef05bb776bf05eEf50798De' as const, 195 L1StandardBridge: '0xFf94B6C486350aD92561Ba09bad3a59df764Da92' as const, 196 StateCommitmentChain: 197 '0x0000000000000000000000000000000000000000' as const, 198 CanonicalTransactionChain: 199 '0x0000000000000000000000000000000000000000' as const, 200 BondManager: '0x0000000000000000000000000000000000000000' as const, 201 OptimismPortal: '0xA581Ca3353DB73115C4625FFC7aDF5dB379434A8' as const, 202 L2OutputOracle: '0x3A234299a14De50027eA65dCdf1c0DaC729e04A6' as const, 203 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 204 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 205 }, 206 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 207 }, 208 [L2ChainID.BASE_GOERLI]: { 209 l1: { 210 AddressManager: '0x4Cf6b56b14c6CFcB72A75611080514F94624c54e' as const, 211 L1CrossDomainMessenger: 212 '0x8e5693140eA606bcEB98761d9beB1BC87383706D' as const, 213 L1StandardBridge: '0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a' as const, 214 StateCommitmentChain: 215 '0x0000000000000000000000000000000000000000' as const, 216 CanonicalTransactionChain: 217 '0x0000000000000000000000000000000000000000' as const, 218 BondManager: '0x0000000000000000000000000000000000000000' as const, 219 OptimismPortal: '0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA' as const, 220 L2OutputOracle: '0x2A35891ff30313CcFa6CE88dcf3858bb075A2298' as const, 221 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 222 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 223 }, 224 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 225 }, 226 [L2ChainID.BASE_SEPOLIA]: { 227 l1: { 228 AddressManager: '0x709c2B8ef4A9feFc629A8a2C1AF424Dc5BD6ad1B' as const, 229 L1CrossDomainMessenger: 230 '0xC34855F4De64F1840e5686e64278da901e261f20' as const, 231 L1StandardBridge: '0xfd0Bf71F60660E2f608ed56e1659C450eB113120' as const, 232 StateCommitmentChain: 233 '0x0000000000000000000000000000000000000000' as const, 234 CanonicalTransactionChain: 235 '0x0000000000000000000000000000000000000000' as const, 236 BondManager: '0x0000000000000000000000000000000000000000' as const, 237 OptimismPortal: '0x49f53e41452C74589E85cA1677426Ba426459e85' as const, 238 L2OutputOracle: '0x84457ca9D0163FbC4bbfe4Dfbb20ba46e48DF254' as const, 239 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 240 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 241 }, 242 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 243 }, 244 [L2ChainID.BASE_MAINNET]: { 245 l1: { 246 AddressManager: '0x8EfB6B5c4767B09Dc9AA6Af4eAA89F749522BaE2' as const, 247 L1CrossDomainMessenger: 248 '0x866E82a600A1414e583f7F13623F1aC5d58b0Afa' as const, 249 L1StandardBridge: '0x3154Cf16ccdb4C6d922629664174b904d80F2C35' as const, 250 StateCommitmentChain: 251 '0x0000000000000000000000000000000000000000' as const, 252 CanonicalTransactionChain: 253 '0x0000000000000000000000000000000000000000' as const, 254 BondManager: '0x0000000000000000000000000000000000000000' as const, 255 OptimismPortal: '0x49048044D57e1C92A77f79988d21Fa8fAF74E97e' as const, 256 L2OutputOracle: '0x56315b90c40730925ec5485cf004d835058518A0' as const, 257 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 258 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 259 }, 260 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 261 }, 262 // Zora Goerli 263 [L2ChainID.ZORA_GOERLI]: { 264 l1: { 265 AddressManager: '0x54f4676203dEDA6C08E0D40557A119c602bFA246' as const, 266 L1CrossDomainMessenger: 267 '0xD87342e16352D33170557A7dA1e5fB966a60FafC' as const, 268 L1StandardBridge: '0x7CC09AC2452D6555d5e0C213Ab9E2d44eFbFc956' as const, 269 StateCommitmentChain: 270 '0x0000000000000000000000000000000000000000' as const, 271 CanonicalTransactionChain: 272 '0x0000000000000000000000000000000000000000' as const, 273 BondManager: '0x0000000000000000000000000000000000000000' as const, 274 OptimismPortal: '0xDb9F51790365e7dc196e7D072728df39Be958ACe' as const, 275 L2OutputOracle: '0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00' as const, 276 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 277 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 278 }, 279 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 280 }, 281 [L2ChainID.ZORA_MAINNET]: { 282 l1: { 283 AddressManager: '0xEF8115F2733fb2033a7c756402Fc1deaa56550Ef' as const, 284 L1CrossDomainMessenger: 285 '0xdC40a14d9abd6F410226f1E6de71aE03441ca506' as const, 286 L1StandardBridge: '0x3e2Ea9B92B7E48A52296fD261dc26fd995284631' as const, 287 StateCommitmentChain: 288 '0x0000000000000000000000000000000000000000' as const, 289 CanonicalTransactionChain: 290 '0x0000000000000000000000000000000000000000' as const, 291 BondManager: '0x0000000000000000000000000000000000000000' as const, 292 OptimismPortal: '0x1a0ad011913A150f69f6A19DF447A0CfD9551054' as const, 293 L2OutputOracle: '0x9E6204F750cD866b299594e2aC9eA824E2e5f95c' as const, 294 OptimismPortal2: '0x0000000000000000000000000000000000000000' as const, 295 DisputeGameFactory: '0x0000000000000000000000000000000000000000' as const, 296 }, 297 l2: DEFAULT_L2_CONTRACT_ADDRESSES, 298 }, 299 } 300 301 /** 302 * Mapping of L1 chain IDs to the list of custom bridge addresses for each chain. 303 */ 304 export const BRIDGE_ADAPTER_DATA: { 305 [ChainID in L2ChainID]?: BridgeAdapterData 306 } = { 307 [L2ChainID.OPTIMISM]: { 308 wstETH: { 309 Adapter: DAIBridgeAdapter, 310 l1Bridge: '0x76943C0D61395d8F2edF9060e1533529cAe05dE6' as const, 311 l2Bridge: '0x8E01013243a96601a86eb3153F0d9Fa4fbFb6957' as const, 312 }, 313 BitBTC: { 314 Adapter: StandardBridgeAdapter, 315 l1Bridge: '0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128' as const, 316 l2Bridge: '0x158F513096923fF2d3aab2BcF4478536de6725e2' as const, 317 }, 318 DAI: { 319 Adapter: DAIBridgeAdapter, 320 l1Bridge: '0x10E6593CDda8c58a1d0f14C5164B376352a55f2F' as const, 321 l2Bridge: '0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65' as const, 322 }, 323 ECO: { 324 Adapter: ECOBridgeAdapter, 325 l1Bridge: '0xAa029BbdC947F5205fBa0F3C11b592420B58f824' as const, 326 l2Bridge: '0xAa029BbdC947F5205fBa0F3C11b592420B58f824' as const, 327 }, 328 }, 329 [L2ChainID.OPTIMISM_GOERLI]: { 330 DAI: { 331 Adapter: DAIBridgeAdapter, 332 l1Bridge: '0x05a388Db09C2D44ec0b00Ee188cD42365c42Df23' as const, 333 l2Bridge: '0x467194771dAe2967Aef3ECbEDD3Bf9a310C76C65' as const, 334 }, 335 ECO: { 336 Adapter: ECOBridgeAdapter, 337 l1Bridge: '0x9A4464D6bFE006715382D39D183AAf66c952a3e0' as const, 338 l2Bridge: '0x6aA809bAeA2e4C057b3994127cB165119c6fc3B2' as const, 339 }, 340 }, 341 }