Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/regenesis-surgery/scripts/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ export const UNISWAP_V3_CONTRACT_ADDRESSES = [
'0xEe6A57eC80ea46401049E92587E52f5Ec1c24785',
// NonfungibleTokenPositionManager
'0xC36442b4a4522E871399CD717aBDD847Ab11FE88',
// UniswapInterfaceMulticall
// UniswapInterfaceMulticall (OP KOVAN)
'0x1F98415757620B543A52E61c46B32eB19261F984',
// UniswapInterfaceMulticall (OP MAINNET)
'0x90f872b3d8f33f305e0250db6A2761B354f7710A',
]

Expand Down
21 changes: 16 additions & 5 deletions packages/regenesis-surgery/scripts/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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.
Expand All @@ -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)
}
}
Expand All @@ -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,
Expand Down
32 changes: 18 additions & 14 deletions packages/regenesis-surgery/scripts/surgery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -176,9 +179,10 @@ const main = async () => {
pools,
poolHashCache,
etherscanDump,
l1TestnetProvider,
l1TestnetWallet,
l1MainnetProvider,
ropstenProvider,
ropstenWallet,
ethProvider,
l1Provider,
l2Provider,
configs,
})
Expand Down
16 changes: 9 additions & 7 deletions packages/regenesis-surgery/scripts/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}

Expand Down
16 changes: 9 additions & 7 deletions packages/regenesis-surgery/scripts/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -163,11 +164,12 @@ export const loadConfigs = (): SurgeryConfigs => {
etherscanFilePath,
genesisFilePath,
outputFilePath,
l2ProviderUrl,
l2NetworkName,
l1MainnetProviderUrl,
l1TestnetProviderUrl,
l1TestnetPrivateKey,
l2ProviderUrl,
l1ProviderUrl,
ropstenProviderUrl,
ropstenPrivateKey,
ethProviderUrl,
l1MessengerAddress,
stateDumpHeight,
startIndex,
Expand Down