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  }