infrastructure-upgrade/lib/v3-core/test/shared/fixtures.ts
T-Hax 735546619e
init
Signed-off-by: T-Hax <>
2023-04-08 18:46:18 +00:00

93 lines
3.3 KiB
TypeScript

import { BigNumber } from 'ethers'
import { ethers } from 'hardhat'
import { MockTimeUniswapV3Pool } from '../../typechain/MockTimeUniswapV3Pool'
import { TestERC20 } from '../../typechain/TestERC20'
import { UniswapV3Factory } from '../../typechain/UniswapV3Factory'
import { TestUniswapV3Callee } from '../../typechain/TestUniswapV3Callee'
import { TestUniswapV3Router } from '../../typechain/TestUniswapV3Router'
import { MockTimeUniswapV3PoolDeployer } from '../../typechain/MockTimeUniswapV3PoolDeployer'
import { Fixture } from 'ethereum-waffle'
interface FactoryFixture {
factory: UniswapV3Factory
}
async function factoryFixture(): Promise<FactoryFixture> {
const factoryFactory = await ethers.getContractFactory('UniswapV3Factory')
const factory = (await factoryFactory.deploy()) as UniswapV3Factory
return { factory }
}
interface TokensFixture {
token0: TestERC20
token1: TestERC20
token2: TestERC20
}
async function tokensFixture(): Promise<TokensFixture> {
const tokenFactory = await ethers.getContractFactory('TestERC20')
const tokenA = (await tokenFactory.deploy(BigNumber.from(2).pow(255))) as TestERC20
const tokenB = (await tokenFactory.deploy(BigNumber.from(2).pow(255))) as TestERC20
const tokenC = (await tokenFactory.deploy(BigNumber.from(2).pow(255))) as TestERC20
const [token0, token1, token2] = [tokenA, tokenB, tokenC].sort((tokenA, tokenB) =>
tokenA.address.toLowerCase() < tokenB.address.toLowerCase() ? -1 : 1
)
return { token0, token1, token2 }
}
type TokensAndFactoryFixture = FactoryFixture & TokensFixture
interface PoolFixture extends TokensAndFactoryFixture {
swapTargetCallee: TestUniswapV3Callee
swapTargetRouter: TestUniswapV3Router
createPool(
fee: number,
tickSpacing: number,
firstToken?: TestERC20,
secondToken?: TestERC20
): Promise<MockTimeUniswapV3Pool>
}
// Monday, October 5, 2020 9:00:00 AM GMT-05:00
export const TEST_POOL_START_TIME = 1601906400
export const poolFixture: Fixture<PoolFixture> = async function (): Promise<PoolFixture> {
const { factory } = await factoryFixture()
const { token0, token1, token2 } = await tokensFixture()
const MockTimeUniswapV3PoolDeployerFactory = await ethers.getContractFactory('MockTimeUniswapV3PoolDeployer')
const MockTimeUniswapV3PoolFactory = await ethers.getContractFactory('MockTimeUniswapV3Pool')
const calleeContractFactory = await ethers.getContractFactory('TestUniswapV3Callee')
const routerContractFactory = await ethers.getContractFactory('TestUniswapV3Router')
const swapTargetCallee = (await calleeContractFactory.deploy()) as TestUniswapV3Callee
const swapTargetRouter = (await routerContractFactory.deploy()) as TestUniswapV3Router
return {
token0,
token1,
token2,
factory,
swapTargetCallee,
swapTargetRouter,
createPool: async (fee, tickSpacing, firstToken = token0, secondToken = token1) => {
const mockTimePoolDeployer = (await MockTimeUniswapV3PoolDeployerFactory.deploy()) as MockTimeUniswapV3PoolDeployer
const tx = await mockTimePoolDeployer.deploy(
factory.address,
firstToken.address,
secondToken.address,
fee,
tickSpacing
)
const receipt = await tx.wait()
const poolAddress = receipt.events?.[0].args?.pool as string
return MockTimeUniswapV3PoolFactory.attach(poolAddress) as MockTimeUniswapV3Pool
},
}
}