diff --git a/packages/regenesis-surgery/scripts/constants.ts b/packages/regenesis-surgery/scripts/constants.ts index 702a86ccea41a..91f10665dd742 100644 --- a/packages/regenesis-surgery/scripts/constants.ts +++ b/packages/regenesis-surgery/scripts/constants.ts @@ -32,7 +32,9 @@ export const UNISWAP_V3_CONTRACT_ADDRESSES = [ '0xEe6A57eC80ea46401049E92587E52f5Ec1c24785', // NonfungibleTokenPositionManager '0xC36442b4a4522E871399CD717aBDD847Ab11FE88', - // UniswapInterfaceMulticall + // UniswapInterfaceMulticall (OP KOVAN) + '0x1F98415757620B543A52E61c46B32eB19261F984', + // UniswapInterfaceMulticall (OP MAINNET) '0x90f872b3d8f33f305e0250db6A2761B354f7710A', ] diff --git a/packages/regenesis-surgery/scripts/handlers.ts b/packages/regenesis-surgery/scripts/handlers.ts index 10953b5afb8aa..121cf1f705d61 100644 --- a/packages/regenesis-surgery/scripts/handlers.ts +++ b/packages/regenesis-surgery/scripts/handlers.ts @@ -61,7 +61,7 @@ export const handlers: { const l1Messenger = new ethers.Contract( data.configs.l1MessengerAddress, getContractInterface('OVM_L1CrossDomainMessenger'), - data.l1MainnetProvider + data.l1Provider ) const l2SentMessageEvents = await l2Messenger.queryFilter( @@ -256,10 +256,10 @@ export const handlers: { }) // Get the pool's code. - let poolCode = await data.l1TestnetProvider.getCode(pool.newAddress) + let poolCode = await data.ropstenProvider.getCode(pool.newAddress) if (poolCode === '0x') { console.log('Could not find pool code, deploying to testnet...') - const UniswapV3Factory = getUniswapV3Factory(data.l1TestnetWallet) + const UniswapV3Factory = getUniswapV3Factory(data.ropstenWallet) await UniswapV3Factory.createPool(pool.token0, pool.token1, pool.fee) // Repeatedly try to get the remote pool code from the testnet. @@ -270,7 +270,7 @@ export const handlers: { throw new Error(`unable to create pool with data: ${pool}`) } - poolCode = await data.l1TestnetProvider.getCode(pool.newAddress) + poolCode = await data.ropstenProvider.getCode(pool.newAddress) await sleep(5000) } } @@ -282,7 +282,18 @@ export const handlers: { } }, [AccountType.UNISWAP_V3_OTHER]: async (account, data) => { - const code = await data.l1MainnetProvider.getCode(account.address) + let code = await data.ethProvider.getCode(account.address) + + if (code === '0x') { + throw new Error(`account code is empty: ${account.address}`) + } + + // Replace references to L1 WETH address with the L2 WETH address. + code = code.replace( + /c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2/g, + '4200000000000000000000000000000000000006' + ) + return { ...account, code, diff --git a/packages/regenesis-surgery/scripts/surgery.ts b/packages/regenesis-surgery/scripts/surgery.ts index 59c94694165f3..975b476d8a59b 100644 --- a/packages/regenesis-surgery/scripts/surgery.ts +++ b/packages/regenesis-surgery/scripts/surgery.ts @@ -152,20 +152,23 @@ const main = async () => { console.log('Generating pool cache...') const poolHashCache = makePoolHashCache(pools) - // Get a reference to the L1 testnet provider and wallet, used for deploying Uniswap pools. - console.log('Connecting to L1 testnet provider...') - const l1TestnetProvider = new ethers.providers.JsonRpcProvider( - configs.l1TestnetProviderUrl + // Get a reference to the ropsten provider and wallet, used for deploying Uniswap pools. + console.log('Connecting to ropsten provider...') + const ropstenProvider = new ethers.providers.JsonRpcProvider( + configs.ropstenProviderUrl ) - const l1TestnetWallet = new ethers.Wallet( - configs.l1TestnetPrivateKey, - l1TestnetProvider + const ropstenWallet = new ethers.Wallet( + configs.ropstenPrivateKey, + ropstenProvider ) - // Get a reference to the L1 mainnet provider. - console.log('Connecting to L1 mainnet provider...') - const l1MainnetProvider = new ethers.providers.JsonRpcProvider( - configs.l1MainnetProviderUrl + // Get a reference to the L1 provider. + console.log('Connecting to L1 provider...') + const l1Provider = new ethers.providers.JsonRpcProvider(configs.l1ProviderUrl) + + console.log('Connecting to ETH provider...') + const ethProvider = new ethers.providers.JsonRpcProvider( + configs.ethProviderUrl ) // Do the surgery process and get the new genesis dump. @@ -176,9 +179,10 @@ const main = async () => { pools, poolHashCache, etherscanDump, - l1TestnetProvider, - l1TestnetWallet, - l1MainnetProvider, + ropstenProvider, + ropstenWallet, + ethProvider, + l1Provider, l2Provider, configs, }) diff --git a/packages/regenesis-surgery/scripts/types.ts b/packages/regenesis-surgery/scripts/types.ts index e2cead1ed0a43..1bb04af532f74 100644 --- a/packages/regenesis-surgery/scripts/types.ts +++ b/packages/regenesis-surgery/scripts/types.ts @@ -5,11 +5,12 @@ export interface SurgeryConfigs { etherscanFilePath: string genesisFilePath: string outputFilePath: string - l2ProviderUrl: string l2NetworkName: 'mainnet' | 'kovan' - l1MainnetProviderUrl: string - l1TestnetProviderUrl: string - l1TestnetPrivateKey: string + l2ProviderUrl: string + l1ProviderUrl: string + ropstenProviderUrl: string + ropstenPrivateKey: string + ethProviderUrl: string l1MessengerAddress: string stateDumpHeight: number startIndex: number @@ -91,10 +92,11 @@ export interface SurgeryDataSources { pools: UniswapPoolData[] poolHashCache: PoolHashCache etherscanDump: EtherscanContract[] - l1TestnetProvider: ethers.providers.JsonRpcProvider - l1TestnetWallet: ethers.Wallet - l1MainnetProvider: ethers.providers.JsonRpcProvider + ropstenProvider: ethers.providers.JsonRpcProvider + ropstenWallet: ethers.Wallet + l1Provider: ethers.providers.JsonRpcProvider l2Provider: ethers.providers.JsonRpcProvider + ethProvider: ethers.providers.JsonRpcProvider configs: SurgeryConfigs } diff --git a/packages/regenesis-surgery/scripts/utils.ts b/packages/regenesis-surgery/scripts/utils.ts index 15ef6c500aedf..7b7b4a0a3131f 100644 --- a/packages/regenesis-surgery/scripts/utils.ts +++ b/packages/regenesis-surgery/scripts/utils.ts @@ -144,9 +144,10 @@ export const loadConfigs = (): SurgeryConfigs => { const outputFilePath = reqenv('REGEN__OUTPUT_FILE') const l2ProviderUrl = reqenv('REGEN__L2_PROVIDER_URL') const l2NetworkName = reqenv('REGEN__L2_NETWORK_NAME') - const l1MainnetProviderUrl = reqenv('REGEN__L1_PROVIDER_URL') - const l1TestnetProviderUrl = reqenv('REGEN__L1_TESTNET_PROVIDER_URL') - const l1TestnetPrivateKey = reqenv('REGEN__L1_TESTNET_PRIVATE_KEY') + const l1ProviderUrl = reqenv('REGEN__L1_PROVIDER_URL') + const ropstenProviderUrl = reqenv('REGEN__ROPSTEN_PROVIDER_URL') + const ropstenPrivateKey = reqenv('REGEN__ROPSTEN_PRIVATE_KEY') + const ethProviderUrl = reqenv('REGEN__ETH_PROVIDER_URL') const l1MessengerAddress = reqenv('REGEN__L1_MESSENGER_ADDRESS') const stateDumpHeight = parseInt(reqenv('REGEN__STATE_DUMP_HEIGHT'), 10) const startIndex = parseInt(process.env.START_INDEX || '0', 10) @@ -163,11 +164,12 @@ export const loadConfigs = (): SurgeryConfigs => { etherscanFilePath, genesisFilePath, outputFilePath, - l2ProviderUrl, l2NetworkName, - l1MainnetProviderUrl, - l1TestnetProviderUrl, - l1TestnetPrivateKey, + l2ProviderUrl, + l1ProviderUrl, + ropstenProviderUrl, + ropstenPrivateKey, + ethProviderUrl, l1MessengerAddress, stateDumpHeight, startIndex,