For the complete documentation index, see llms.txt. This page is also available as Markdown.

포지션 생성하기 (유동성 추가)

판게아의 풀에 포지션을 새로 생성하거나 이미 존재하는 포지션에 유동성을 추가로 예치하는 예제입니다.

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