포지션 생성하기 (유동성 추가)
판게아의 풀에 포지션을 새로 생성하거나 이미 존재하는 포지션에 유동성을 추가로 예치하는 예제입니다.
import {ethers} from "ethers";
import {BigNumber} from "@ethersproject/bignumber";
import {
ConcentratedLiquidityPool__factory,
ConcentratedLiquidityPoolManager__factory,
ERC20__factory
} from "./types";
/// concentrated Liquidity Pool Manager의 주소 (네트워크 별로 맞추어 지정)
const poolManagerAddress = "0xEd52BD01b0608a6B6d4f4E03aFfCe16c1FF19c23";
/// web3 Provider (metamask provider / jsonRPC provider 등)
const provider = ethers.getDefaultProvider();
// 신규 포지션 생성하기
async function createPosition(
poolAddress:string,
lowerTick:number, // 가격 구간의 하방 선
upperTick:number, // 가격 구간의 상방 선
amount0Desired:BigNumber, // 넣고자 하는 token0 양 (일부 덜 예치될 수 있습니다.)
amount1Desired:BigNumber // 넣고자 하는 token1 양 (일부 덜 예치될 수 있습니다.)
) {
const pool = await ConcentratedLiquidityPool__factory.connect(poolAddress, provider);
const token0 = await ERC20__factory.connect(await pool.token0(), provider);
const token1 = await ERC20__factory.connect(await pool.token1(), provider);
const poolManager = await ConcentratedLiquidityPoolManager__factory.connect(poolManagerAddress, provider);
// first, approve
await (await token0.approve(poolManager.address,amount0Desired)).wait();
await (await token1.approve(poolManager.address, amount1Desired)).wait();
// second, mint postion
const tx = await poolManager.mint(
poolAddress,
0, // lowerOld를 지정하지 않는 경우, 자동으로 탐색 후 넣습니다.
lowerTick,
0, // upperOld를 지정하지 않는 경우, 자동으로 탐색 후 넣습니다.
upperTick,
amount0Desired,
amount1Desired,
0,
0 // positionId = 0 이면, 새로 생성, 아니면 해당 positionId에 추가하기
);
await tx.wait();
}
Last updated