735546619e
Signed-off-by: T-Hax <>
93 lines
3.3 KiB
TypeScript
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
|
|
},
|
|
}
|
|
}
|