735546619e
Signed-off-by: T-Hax <>
242 lines
8.4 KiB
TypeScript
242 lines
8.4 KiB
TypeScript
import { ethers } from 'hardhat'
|
|
import { LiquidityAmountsTest } from '../typechain/LiquidityAmountsTest'
|
|
import { encodePriceSqrt } from './shared/encodePriceSqrt'
|
|
import { expect } from './shared/expect'
|
|
|
|
import snapshotGasCost from './shared/snapshotGasCost'
|
|
|
|
describe('LiquidityAmounts', async () => {
|
|
let liquidityFromAmounts: LiquidityAmountsTest
|
|
|
|
before('deploy test library', async () => {
|
|
const liquidityFromAmountsTestFactory = await ethers.getContractFactory('LiquidityAmountsTest')
|
|
liquidityFromAmounts = (await liquidityFromAmountsTestFactory.deploy()) as LiquidityAmountsTest
|
|
})
|
|
|
|
describe('#getLiquidityForAmount0', () => {
|
|
it('gas', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(liquidityFromAmounts.getGasCostOfGetLiquidityForAmount0(sqrtPriceAX96, sqrtPriceBX96, 100))
|
|
})
|
|
})
|
|
|
|
describe('#getLiquidityForAmount1', () => {
|
|
it('gas', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(liquidityFromAmounts.getGasCostOfGetLiquidityForAmount1(sqrtPriceAX96, sqrtPriceBX96, 100))
|
|
})
|
|
})
|
|
|
|
describe('#getLiquidityForAmounts', () => {
|
|
it('amounts for price inside', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(1, 1)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const liquidity = await liquidityFromAmounts.getLiquidityForAmounts(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
100,
|
|
200
|
|
)
|
|
expect(liquidity).to.eq(2148)
|
|
})
|
|
|
|
it('amounts for price below', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(99, 110)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const liquidity = await liquidityFromAmounts.getLiquidityForAmounts(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
100,
|
|
200
|
|
)
|
|
expect(liquidity).to.eq(1048)
|
|
})
|
|
|
|
it('amounts for price above', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(111, 100)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const liquidity = await liquidityFromAmounts.getLiquidityForAmounts(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
100,
|
|
200
|
|
)
|
|
expect(liquidity).to.eq(2097)
|
|
})
|
|
|
|
it('amounts for price equal to lower boundary', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceX96 = sqrtPriceAX96
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const liquidity = await liquidityFromAmounts.getLiquidityForAmounts(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
100,
|
|
200
|
|
)
|
|
expect(liquidity).to.eq(1048)
|
|
})
|
|
|
|
it('amounts for price equal to upper boundary', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const sqrtPriceX96 = sqrtPriceBX96
|
|
const liquidity = await liquidityFromAmounts.getLiquidityForAmounts(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
100,
|
|
200
|
|
)
|
|
expect(liquidity).to.eq(2097)
|
|
})
|
|
|
|
it('gas for price below', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(99, 110)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetLiquidityForAmounts(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 100, 200)
|
|
)
|
|
})
|
|
it('gas for price above', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(111, 100)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetLiquidityForAmounts(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 100, 200)
|
|
)
|
|
})
|
|
it('gas for price inside', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(1, 1)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetLiquidityForAmounts(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 100, 200)
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('#getAmount0ForLiquidity', () => {
|
|
it('gas', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(liquidityFromAmounts.getGasCostOfGetAmount0ForLiquidity(sqrtPriceAX96, sqrtPriceBX96, 100))
|
|
})
|
|
})
|
|
|
|
describe('#getLiquidityForAmount1', () => {
|
|
it('gas', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(liquidityFromAmounts.getGasCostOfGetAmount1ForLiquidity(sqrtPriceAX96, sqrtPriceBX96, 100))
|
|
})
|
|
})
|
|
|
|
describe('#getAmountsForLiquidity', () => {
|
|
it('amounts for price inside', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(1, 1)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const { amount0, amount1 } = await liquidityFromAmounts.getAmountsForLiquidity(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
2148
|
|
)
|
|
expect(amount0).to.eq(99)
|
|
expect(amount1).to.eq(99)
|
|
})
|
|
|
|
it('amounts for price below', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(99, 110)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const { amount0, amount1 } = await liquidityFromAmounts.getAmountsForLiquidity(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
1048
|
|
)
|
|
expect(amount0).to.eq(99)
|
|
expect(amount1).to.eq(0)
|
|
})
|
|
|
|
it('amounts for price above', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(111, 100)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const { amount0, amount1 } = await liquidityFromAmounts.getAmountsForLiquidity(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
2097
|
|
)
|
|
expect(amount0).to.eq(0)
|
|
expect(amount1).to.eq(199)
|
|
})
|
|
|
|
it('amounts for price on lower boundary', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceX96 = sqrtPriceAX96
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const { amount0, amount1 } = await liquidityFromAmounts.getAmountsForLiquidity(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
1048
|
|
)
|
|
expect(amount0).to.eq(99)
|
|
expect(amount1).to.eq(0)
|
|
})
|
|
|
|
it('amounts for price on upper boundary', async () => {
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
const sqrtPriceX96 = sqrtPriceBX96
|
|
const { amount0, amount1 } = await liquidityFromAmounts.getAmountsForLiquidity(
|
|
sqrtPriceX96,
|
|
sqrtPriceAX96,
|
|
sqrtPriceBX96,
|
|
2097
|
|
)
|
|
expect(amount0).to.eq(0)
|
|
expect(amount1).to.eq(199)
|
|
})
|
|
|
|
it('gas for price below', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(99, 110)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetAmountsForLiquidity(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 2148)
|
|
)
|
|
})
|
|
it('gas for price above', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(111, 100)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetAmountsForLiquidity(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 1048)
|
|
)
|
|
})
|
|
it('gas for price inside', async () => {
|
|
const sqrtPriceX96 = encodePriceSqrt(1, 1)
|
|
const sqrtPriceAX96 = encodePriceSqrt(100, 110)
|
|
const sqrtPriceBX96 = encodePriceSqrt(110, 100)
|
|
await snapshotGasCost(
|
|
liquidityFromAmounts.getGasCostOfGetAmountsForLiquidity(sqrtPriceX96, sqrtPriceAX96, sqrtPriceBX96, 2097)
|
|
)
|
|
})
|
|
})
|
|
})
|