Token Trading

Trading Process

1. Get Quotes

Jupiter Quote

const quoteParams = {
  inputMint: isBuy
    ? "So11111111111111111111111111111111111111112"
    : tokenAddress,
  outputMint: isBuy
    ? tokenAddress
    : "So11111111111111111111111111111111111111112",
  amount: amountInLamports,
  slippageBps: 500, // 5% slippage
};

Meteora Quote

const client = new DynamicBondingCurveClient(connection);
const quote = await client.pool.swapQuote({
  virtualPool: poolState,
  config: configState,
  swapBaseForQuote: !isBuy,
  amountIn: new BN(amount),
  slippageBps: 500,
});

2. Execute Trade

Buy Tokens

Parameters:

const swapParams = {
  provider: walletProvider,
  userPublicKey: "user_address",
  tokenAddress: "token_address",
  amount: 1.0, // SOL amount
  isBuy: true,
  slippage: 0.05, // 5% slippage
};

Sell Tokens

Parameters:

const swapParams = {
  provider: walletProvider,
  userPublicKey: "user_address",
  tokenAddress: "token_address",
  amount: 1000000, // token amount
  isBuy: false,
  slippage: 0.05,
};

Routing Logic

Internal Trading (Meteora DLMM)

  • Token not graduated (status !== "graduated")

  • Not migrated to Meteora (no migrateAmmId)

  • Uses Dynamic Bonding Curve

External Trading (Jupiter)

  • Token graduated (status === "graduated")

  • Migrated to Meteora (has migrateAmmId)

  • Aggregates optimal prices from multiple DEXs

Balance Queries

SOL Balance

Function: Query user SOL balance

const solBalance = await getSolBalance(userPublicKey);

Token Balance

Function: Query user specific token balance

const tokenBalance = await getTokenPreviousBalance(userPublicKey, tokenAddress);

Transaction Status

Transaction Confirmation

const confirmation = await connection.confirmTransaction(
  signature,
  "confirmed"
);
if (confirmation.value.err) {
  throw new Error("Transaction failed");
}

Error Handling

  • Insufficient Balance: Check SOL and token balances

  • Excessive Slippage: Adjust slippage settings or get new quotes

  • Network Congestion: Increase priority fees

  • Pool Does Not Exist: Confirm token address is correct

Key Points

  • Automatically detects trading path (internal/external)

  • Supports custom slippage settings

  • Real-time balance queries

  • Transaction status monitoring

  • Error retry mechanism

Last updated