Skip to main content
The ixProvideLiquidityClassic method on the MarketThree class provides liquidity using a combination of base assets and PT tokens. Unlike ixWrapperProvideLiquidity which only takes base assets, this method allows you to supply PT tokens you already hold alongside base assets.

Usage

import { MarketThree, LOCAL_ENV } from "@exponent-labs/exponent-sdk";
import { Connection, PublicKey, Transaction, sendAndConfirmTransaction, Keypair } from "@solana/web3.js";

const connection = new Connection("https://api.mainnet-beta.solana.com");
const market = await MarketThree.load(LOCAL_ENV, connection, marketAddress);

const { ixs, setupIxs, signers } = await market.ixProvideLiquidityClassic({
  depositor: wallet.publicKey,
  amountBase: 5_000_000_000n,
  amountPt: 5_000_000_000n,
  minLpOut: 9_000_000_000n,
  lowerTickApy: 0.05,  // 5% APY
  upperTickApy: 0.15,  // 15% APY
});

const tx = new Transaction().add(...setupIxs, ...ixs);
const signature = await sendAndConfirmTransaction(connection, tx, [wallet, ...signers]);
The signers array contains the generated LP position keypair. You must include it when signing the transaction.

Required Parameters

ParameterTypeDescription
depositorPublicKeyThe depositor’s wallet public key
amountBasebigintAmount of base asset to provide
amountPtbigintAmount of PT tokens to provide
minLpOutbigintMinimum amount of LP tokens to receive
lowerTickApynumberLower bound APY for the liquidity range
upperTickApynumberUpper bound APY for the liquidity range

Optional Parameters

ParameterTypeDescription
tokenSyDepositorPublicKeyIntermediate SY token account. Defaults to depositor’s ATA
tokenYtDepositorPublicKeyDestination YT token account. Defaults to depositor’s ATA
tokenPtDepositorPublicKeySource PT token account. Defaults to depositor’s ATA
tokenBaseDepositorPublicKeySource base token account. Defaults to depositor’s ATA
lpPositionParamKeypair | PublicKeyLP position account. Defaults to a generated Keypair

Returns

Returns a Promise<PreparedInstruction> with the following structure:
{
  ixs: TransactionInstruction[],      // Main instructions to execute
  setupIxs: TransactionInstruction[], // Setup instructions for creating ATAs
  signers?: Keypair[]                 // Optional signers (lpPosition if generated)
}