포지션 소각하기 (유동성 제거)

판게아의 풀에 존재하는 포지션에서 자산을 전체 또는 일부 인출하는 예제입니다.

import { ethers } from "ethers";
import {BigNumber} from "@ethersproject/bignumber";

/// concentrated Liquidity Pool Manager의 주소 (네트워크 별로 맞추어 지정)
const poolManagerAddress = "0xEd52BD01b0608a6B6d4f4E03aFfCe16c1FF19c23";

/// web3 Provider (metamask provider / jsonRPC provider 등)
const provider = ethers.getDefaultProvider();

// 포지션에서 소각하기
async function burnPosition(
    tokenId:number,  // tokenId
    amount:string,   // 소각할 유동성 갯수
    recipient:string // 수취받을 계정
) {
      const poolManager = await ConcentratedLiquidityPoolManager__factory.connect(positionManagerAddress, provider);
      const tx = await poolManager.burn(
            tokenId, // 유동성을 꺼낼 포지션, 모든 유동성 제거 시 제거
            amount, // 소각할 유동성 크기, poolManager.positions(tokenId)을 통해 liquidity를 알수 있습니다.
            recipient,
            0, // token0에 대한 슬리피지, token0에 대해 이 이상 받지 않으면 revert
            0, // token1에 대한 슬리피지, token1에 대해 이 이상 받지 않으면 revert
            false // unwrap, wklay를 klay로 받고 싶은 경우에만 trues
      );
      await tx.wait();
}

Last updated