154 lines
4.0 KiB
TypeScript
154 lines
4.0 KiB
TypeScript
|
import { Wallet } from 'ethers'
|
||
|
import { MockTimeNonfungiblePositionManager } from '../../typechain'
|
||
|
import { FeeAmount, TICK_SPACINGS } from './constants'
|
||
|
import { encodePriceSqrt } from './encodePriceSqrt'
|
||
|
import { getMaxTick, getMinTick } from './ticks'
|
||
|
|
||
|
export async function createPool(
|
||
|
nft: MockTimeNonfungiblePositionManager,
|
||
|
wallet: Wallet,
|
||
|
tokenAddressA: string,
|
||
|
tokenAddressB: string
|
||
|
) {
|
||
|
if (tokenAddressA.toLowerCase() > tokenAddressB.toLowerCase())
|
||
|
[tokenAddressA, tokenAddressB] = [tokenAddressB, tokenAddressA]
|
||
|
|
||
|
await nft.createAndInitializePoolIfNecessary(tokenAddressA, tokenAddressB, FeeAmount.MEDIUM, encodePriceSqrt(1, 1))
|
||
|
|
||
|
const liquidityParams = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: getMinTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
tickUpper: getMaxTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 1000000,
|
||
|
amount1Desired: 1000000,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
return nft.mint(liquidityParams)
|
||
|
}
|
||
|
|
||
|
export async function createPoolWithMultiplePositions(
|
||
|
nft: MockTimeNonfungiblePositionManager,
|
||
|
wallet: Wallet,
|
||
|
tokenAddressA: string,
|
||
|
tokenAddressB: string
|
||
|
) {
|
||
|
if (tokenAddressA.toLowerCase() > tokenAddressB.toLowerCase())
|
||
|
[tokenAddressA, tokenAddressB] = [tokenAddressB, tokenAddressA]
|
||
|
|
||
|
await nft.createAndInitializePoolIfNecessary(tokenAddressA, tokenAddressB, FeeAmount.MEDIUM, encodePriceSqrt(1, 1))
|
||
|
|
||
|
const liquidityParams = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: getMinTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
tickUpper: getMaxTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 1000000,
|
||
|
amount1Desired: 1000000,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
await nft.mint(liquidityParams)
|
||
|
|
||
|
const liquidityParams2 = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: -60,
|
||
|
tickUpper: 60,
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 100,
|
||
|
amount1Desired: 100,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
await nft.mint(liquidityParams2)
|
||
|
|
||
|
const liquidityParams3 = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: -120,
|
||
|
tickUpper: 120,
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 100,
|
||
|
amount1Desired: 100,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
return nft.mint(liquidityParams3)
|
||
|
}
|
||
|
|
||
|
export async function createPoolWithZeroTickInitialized(
|
||
|
nft: MockTimeNonfungiblePositionManager,
|
||
|
wallet: Wallet,
|
||
|
tokenAddressA: string,
|
||
|
tokenAddressB: string
|
||
|
) {
|
||
|
if (tokenAddressA.toLowerCase() > tokenAddressB.toLowerCase())
|
||
|
[tokenAddressA, tokenAddressB] = [tokenAddressB, tokenAddressA]
|
||
|
|
||
|
await nft.createAndInitializePoolIfNecessary(tokenAddressA, tokenAddressB, FeeAmount.MEDIUM, encodePriceSqrt(1, 1))
|
||
|
|
||
|
const liquidityParams = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: getMinTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
tickUpper: getMaxTick(TICK_SPACINGS[FeeAmount.MEDIUM]),
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 1000000,
|
||
|
amount1Desired: 1000000,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
await nft.mint(liquidityParams)
|
||
|
|
||
|
const liquidityParams2 = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: 0,
|
||
|
tickUpper: 60,
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 100,
|
||
|
amount1Desired: 100,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
await nft.mint(liquidityParams2)
|
||
|
|
||
|
const liquidityParams3 = {
|
||
|
token0: tokenAddressA,
|
||
|
token1: tokenAddressB,
|
||
|
fee: FeeAmount.MEDIUM,
|
||
|
tickLower: -120,
|
||
|
tickUpper: 0,
|
||
|
recipient: wallet.address,
|
||
|
amount0Desired: 100,
|
||
|
amount1Desired: 100,
|
||
|
amount0Min: 0,
|
||
|
amount1Min: 0,
|
||
|
deadline: 1,
|
||
|
}
|
||
|
|
||
|
return nft.mint(liquidityParams3)
|
||
|
}
|