유동성 제거하기
개요 (Overview)
포지션 줄이기 (Decreasing a Position)
예시 코드 (Example Code)
import { PublicKey, SystemProgram } from "@solana/web3.js";
import { BN } from "@project-serum/anchor";
import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token";
// Define the shares to remove from each bin
// The number of shares must match the position width (upper_bin_id - lower_bin_id + 1)
const sharesToRemove = [
new BN(100000), // Shares to remove from bin 1
new BN(200000), // Shares to remove from bin 2
new BN(300000), // Shares to remove from bin 3
// ... and so on for each bin in the position
];
// Derive bin array PDAs
const [binArrayLowerPda] = PublicKey.findProgramAddressSync(
[Buffer.from("bin_array"), pairPda.toBuffer(), Buffer.from([0])],
program.programId
);
const [binArrayUpperPda] = PublicKey.findProgramAddressSync(
[Buffer.from("bin_array"), pairPda.toBuffer(), Buffer.from([1])],
program.programId
);
await program.methods
.decreasePosition(sharesToRemove)
.accounts({
pair: pairPda,
position: positionPda,
binArrayLower: binArrayLowerPda,
binArrayUpper: binArrayUpperPda,
tokenMintX: tokenMintX,
tokenMintY: tokenMintY,
tokenVaultX: tokenVaultXPda,
tokenVaultY: tokenVaultYPda,
userVaultX: userVaultXPda,
userVaultY: userVaultYPda,
positionTokenAccount: positionTokenAccount,
tokenProgramX: TOKEN_PROGRAM_ID,
tokenProgramY: TOKEN_PROGRAM_ID,
positionTokenProgram: TOKEN_2022_PROGRAM_ID,
user: wallet.publicKey,
})
.signers([wallet.payer])
.rpc();
포지션 종료하기 (Closing a Position)
예시 코드 (Example Code)
제거할 지분 계산하기 (Calculating Shares to Remove)
예시 수식식
Last updated