62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
|
import { Fixture } from 'ethereum-waffle'
|
||
|
import { ethers } from 'hardhat'
|
||
|
import { v3RouterFixture } from './externalFixtures'
|
||
|
import { constants } from 'ethers'
|
||
|
import {
|
||
|
IWETH9,
|
||
|
MockTimeNonfungiblePositionManager,
|
||
|
MockTimeSwapRouter,
|
||
|
NonfungibleTokenPositionDescriptor,
|
||
|
TestERC20,
|
||
|
IUniswapV3Factory,
|
||
|
} from '../../typechain'
|
||
|
|
||
|
const completeFixture: Fixture<{
|
||
|
weth9: IWETH9
|
||
|
factory: IUniswapV3Factory
|
||
|
router: MockTimeSwapRouter
|
||
|
nft: MockTimeNonfungiblePositionManager
|
||
|
nftDescriptor: NonfungibleTokenPositionDescriptor
|
||
|
tokens: [TestERC20, TestERC20, TestERC20]
|
||
|
}> = async ([wallet], provider) => {
|
||
|
const { weth9, factory, router } = await v3RouterFixture([wallet], provider)
|
||
|
|
||
|
const tokenFactory = await ethers.getContractFactory('TestERC20')
|
||
|
const tokens: [TestERC20, TestERC20, TestERC20] = [
|
||
|
(await tokenFactory.deploy(constants.MaxUint256.div(2))) as TestERC20, // do not use maxu256 to avoid overflowing
|
||
|
(await tokenFactory.deploy(constants.MaxUint256.div(2))) as TestERC20,
|
||
|
(await tokenFactory.deploy(constants.MaxUint256.div(2))) as TestERC20,
|
||
|
]
|
||
|
|
||
|
const nftDescriptorLibraryFactory = await ethers.getContractFactory('NFTDescriptor')
|
||
|
const nftDescriptorLibrary = await nftDescriptorLibraryFactory.deploy()
|
||
|
const positionDescriptorFactory = await ethers.getContractFactory('NonfungibleTokenPositionDescriptor', {
|
||
|
libraries: {
|
||
|
NFTDescriptor: nftDescriptorLibrary.address,
|
||
|
},
|
||
|
})
|
||
|
const nftDescriptor = (await positionDescriptorFactory.deploy(
|
||
|
tokens[0].address
|
||
|
)) as NonfungibleTokenPositionDescriptor
|
||
|
|
||
|
const positionManagerFactory = await ethers.getContractFactory('MockTimeNonfungiblePositionManager')
|
||
|
const nft = (await positionManagerFactory.deploy(
|
||
|
factory.address,
|
||
|
weth9.address,
|
||
|
nftDescriptor.address
|
||
|
)) as MockTimeNonfungiblePositionManager
|
||
|
|
||
|
tokens.sort((a, b) => (a.address.toLowerCase() < b.address.toLowerCase() ? -1 : 1))
|
||
|
|
||
|
return {
|
||
|
weth9,
|
||
|
factory,
|
||
|
router,
|
||
|
tokens,
|
||
|
nft,
|
||
|
nftDescriptor,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default completeFixture
|