config.ts 5.44 KB
Newer Older
1 2
/* External Imports */
import { Signer, ContractFactory, Contract } from 'ethers'
3
import { Overrides } from '@ethersproject/contracts'
4 5 6 7 8 9 10 11 12 13 14 15

/* Internal Imports */
import { getContractFactory } from '../contract-defs'

export interface RollupDeployConfig {
  deploymentSigner: Signer
  ovmGasMeteringConfig: {
    minTransactionGasLimit: number
    maxTransactionGasLimit: number
    maxGasPerQueuePerEpoch: number
    secondsPerEpoch: number
  }
16 17
  ovmGlobalContext: {
    ovmCHAINID: number
18
    L2CrossDomainMessengerAddress: string
19
  }
20 21 22 23
  transactionChainConfig: {
    sequencer: string | Signer
    forceInclusionPeriodSeconds: number
  }
24 25 26 27
  stateChainConfig: {
    fraudProofWindowSeconds: number
    sequencerPublishWindowSeconds: number
  }
Kevin Ho's avatar
Kevin Ho committed
28 29 30
  ethConfig: {
    initialAmount: number
  }
31 32 33 34
  whitelistConfig: {
    owner: string | Signer
    allowArbitraryContractDeployment: boolean
  }
35
  deployOverrides?: Overrides
36
  dependencies?: string[]
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
}

export interface ContractDeployParameters {
  factory: ContractFactory
  params?: any[]
  afterDeploy?: (contracts?: { [name: string]: Contract }) => Promise<void>
}

export interface ContractDeployConfig {
  [name: string]: ContractDeployParameters
}

export const makeContractDeployConfig = async (
  config: RollupDeployConfig,
  AddressManager: Contract
): Promise<ContractDeployConfig> => {
  return {
54 55 56 57
    OVM_L2CrossDomainMessenger: {
      factory: getContractFactory('OVM_L2CrossDomainMessenger'),
      params: [AddressManager.address],
    },
58 59
    OVM_L1CrossDomainMessenger: {
      factory: getContractFactory('OVM_L1CrossDomainMessenger'),
60 61 62 63 64 65 66 67
      params: [],
    },
    Proxy__OVM_L1CrossDomainMessenger: {
      factory: getContractFactory('Lib_ResolvedDelegateProxy'),
      params: [AddressManager.address, 'OVM_L1CrossDomainMessenger'],
      afterDeploy: async (contracts): Promise<void> => {
        const xDomainMessenger = getContractFactory(
          'OVM_L1CrossDomainMessenger'
68 69 70
        )
          .connect(config.deploymentSigner)
          .attach(contracts.Proxy__OVM_L1CrossDomainMessenger.address)
71
        await xDomainMessenger.initialize(AddressManager.address)
72 73 74 75
        await AddressManager.setAddress(
          'OVM_L2CrossDomainMessenger',
          config.ovmGlobalContext.L2CrossDomainMessengerAddress
        )
76
      },
77 78 79 80 81 82 83
    },
    OVM_CanonicalTransactionChain: {
      factory: getContractFactory('OVM_CanonicalTransactionChain'),
      params: [
        AddressManager.address,
        config.transactionChainConfig.forceInclusionPeriodSeconds,
      ],
Mark Tyneway's avatar
Mark Tyneway committed
84
      afterDeploy: async (contracts): Promise<void> => {
85 86 87 88 89
        const sequencer = config.transactionChainConfig.sequencer
        const sequencerAddress =
          typeof sequencer === 'string'
            ? sequencer
            : await sequencer.getAddress()
90 91 92 93
        await AddressManager.setAddress(
          'OVM_DecompressionPrecompileAddress',
          '0x4200000000000000000000000000000000000005'
        )
94
        await AddressManager.setAddress('OVM_Sequencer', sequencerAddress)
Mark Tyneway's avatar
Mark Tyneway committed
95 96
        await AddressManager.setAddress('Sequencer', sequencerAddress)
        await contracts.OVM_CanonicalTransactionChain.init()
97 98 99 100
      },
    },
    OVM_StateCommitmentChain: {
      factory: getContractFactory('OVM_StateCommitmentChain'),
101 102 103 104 105
      params: [
        AddressManager.address,
        config.stateChainConfig.fraudProofWindowSeconds,
        config.stateChainConfig.sequencerPublishWindowSeconds,
      ],
Mark Tyneway's avatar
Mark Tyneway committed
106 107 108
      afterDeploy: async (contracts): Promise<void> => {
        await contracts.OVM_StateCommitmentChain.init()
      },
109
    },
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
    OVM_DeployerWhitelist: {
      factory: getContractFactory('OVM_DeployerWhitelist'),
      params: [],
    },
    OVM_L1MessageSender: {
      factory: getContractFactory('OVM_L1MessageSender'),
      params: [],
    },
    OVM_L2ToL1MessagePasser: {
      factory: getContractFactory('OVM_L2ToL1MessagePasser'),
      params: [],
    },
    OVM_SafetyChecker: {
      factory: getContractFactory('OVM_SafetyChecker'),
      params: [],
    },
126 127
    OVM_ExecutionManager: {
      factory: getContractFactory('OVM_ExecutionManager'),
128 129 130
      params: [
        AddressManager.address,
        config.ovmGasMeteringConfig,
131
        config.ovmGlobalContext,
132
      ],
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
    },
    OVM_StateManager: {
      factory: getContractFactory('OVM_StateManager'),
      params: [await config.deploymentSigner.getAddress()],
      afterDeploy: async (contracts): Promise<void> => {
        await contracts.OVM_StateManager.setExecutionManager(
          contracts.OVM_ExecutionManager.address
        )
      },
    },
    OVM_StateManagerFactory: {
      factory: getContractFactory('OVM_StateManagerFactory'),
    },
    OVM_FraudVerifier: {
      factory: getContractFactory('OVM_FraudVerifier'),
      params: [AddressManager.address],
    },
    OVM_StateTransitionerFactory: {
      factory: getContractFactory('OVM_StateTransitionerFactory'),
    },
153
    OVM_ECDSAContractAccount: {
154
      factory: getContractFactory('OVM_ECDSAContractAccount'),
155
    },
Kevin Ho's avatar
Kevin Ho committed
156 157 158 159 160 161
    OVM_SequencerEntrypoint: {
      factory: getContractFactory('OVM_SequencerEntrypoint'),
    },
    OVM_ProxySequencerEntrypoint: {
      factory: getContractFactory('OVM_ProxySequencerEntrypoint'),
    },
162
    mockOVM_ECDSAContractAccount: {
163 164
      factory: getContractFactory('mockOVM_ECDSAContractAccount'),
    },
165 166 167
    OVM_BondManager: {
      factory: getContractFactory('mockOVM_BondManager'),
    },
Kevin Ho's avatar
Kevin Ho committed
168 169 170 171
    OVM_ETH: {
      factory: getContractFactory('OVM_ETH'),
      params: [config.ethConfig.initialAmount, 'Ether', 18, 'ETH'],
    },
172 173
  }
}