Skip to content

Solana AMM SDK Functions ​

This document outlines the external functions available for users to interact with the Raydium SDK V2 implementation for DEX operations on Solana.

Entry Points Overview ​

Users interact with the unified Raydium class that provides access to specialized modules:

  • Raydium.load(): Main SDK initialization
  • CLMM: Concentrated Liquidity Market Maker operations
  • CPMM: Constant Product Market Maker with curve calculations
  • Liquidity: AMM liquidity pool management (V4/V5)
  • TradeV2: Advanced trading and routing
  • Farm: Farming/staking operations
  • Launchpad: Token launchpad with pricing curves
  • Account: Token account management
  • Token: Token metadata and information

SDK Initialization ​

Raydium.load(config: RaydiumLoadParams) ​

Initialize the main SDK instance with connection and configuration.

CLMM Module Functions ​

Position Management ​

openPositionFromBase<T>(params: OpenPositionFromBaseParams) ​

Create concentrated liquidity position with base token amounts.

openPositionFromLiquidity<T>(params: OpenPositionFromLiquidityParams) ​

Create position with specific liquidity amounts.

increasePositionFromBase<T>(params: IncreasePositionFromBaseParams) ​

Add liquidity to existing position using base amounts.

increasePositionFromLiquidity<T>(params: IncreasePositionFromLiquidityParams) ​

Add liquidity to existing position using liquidity amounts.

decreaseLiquidity<T>(params: DecreaseLiquidityParams) ​

Remove liquidity from position.

closePosition<T>(params: ClosePositionParams) ​

Close entire position and burn NFT.

Pool Management ​

createPool<T>(params: CreateClmmPoolParams) ​

Create new concentrated liquidity pool.

Swapping ​

swap<T>(params: ClmmSwapParams) ​

Execute token swap through CLMM pool.

swapBaseOut<T>(params: ClmmSwapBaseOutParams) ​

Execute swap with exact output amount.

Reward Management ​

initReward<T>(params: InitRewardParams) ​

Initialize reward pool for position incentives.

setReward<T>(params: SetRewardParams) ​

Configure reward distribution parameters.

collectReward<T>(params: CollectRewardParams) ​

Collect accumulated rewards from positions.

harvestAllRewards<T>(params: HarvestAllRewardsParams) ​

Batch harvest all available rewards.

CPMM Module Functions ​

Pool Operations ​

createPool<T>(params: CreateCpmmPoolParam) ​

Create constant product market maker pool.

addLiquidity<T>(params: AddCpmmLiquidityParams) ​

Add liquidity to CPMM pool.

withdrawLiquidity<T>(params: WithdrawCpmmLiquidityParams) ​

Remove liquidity from CPMM pool.

swap<T>(params: CpmmSwapParams) ​

Execute swap through constant product curve.

LP Token Management ​

lockLp<T>(params: LockCpmmLpParams) ​

Lock LP tokens for rewards or time-based restrictions.

harvestLockLp<T>(params: HarvestLockCpmmLpParams) ​

Harvest rewards from locked LP positions.

Liquidity Module Functions (AMM V4/V5) ​

Standard AMM Operations ​

addLiquidity<T>(params: AddLiquidityParams) ​

Add liquidity to standard AMM pools.

removeLiquidity<T>(params: RemoveParams) ​

Remove liquidity from AMM pools.

swap<T>(params: AmmSwapParams) ​

Execute AMM swap with fixed product curve.

Pool Creation ​

createPoolV4<T>(params: CreatePoolV4Params) ​

Create AMM V4 liquidity pool.

createMarketAndPoolV4<T>(params: CreateMarketAndPoolV4Params) ​

Create market and pool simultaneously.

Migration ​

removeAllLpAndCreateClmmPosition<T>(params: MigrationParams) ​

Migrate AMM position to CLMM concentrated liquidity.

TradeV2 Module Functions ​

Multi-Pool Routing ​

swap<T>(params: TradeSwapParams) ​

Execute optimal routing swap across multiple pools.

getAllRoute(params: GetAllRouteParams) ​

Find all possible trading routes between token pairs.

getAllRouteComputeAmountOut(params: ComputeAllRoutesParams) ​

Calculate output amounts for all available routes.

SOL Wrapping ​

wrapWSol<T>(params: WrapWSolParams) ​

Wrap native SOL to wrapped SOL token.

unWrapWSol<T>(params: UnwrapWSolParams) ​

Unwrap wrapped SOL back to native SOL.

Farm Module Functions ​

Farm Pool Management ​

create<T>(params: CreateFarmParams) ​

Create new farming/staking pool.

deposit<T>(params: FarmDWParam) ​

Stake LP tokens in farm.

withdraw<T>(params: FarmDWParam) ​

Unstake LP tokens from farm.

Reward Management ​

restartReward<T>(params: RestartRewardParams) ​

Restart reward distribution for farm pool.

addNewRewardToken<T>(params: AddNewRewardTokenParams) ​

Add additional reward token to existing farm.

withdrawFarmReward<T>(params: WithdrawFarmRewardParams) ​

Claim accumulated farming rewards.

harvestAllRewards<T>(params: HarvestAllFarmRewardsParams) ​

Batch harvest all available farm rewards.

Launchpad Module Functions ​

Token Launch Management ​

createLaunchpad<T>(params: CreateLaunchpadParams) ​

Launch new token with pricing curve.

Trading on Curves ​

buyToken<T>(params: BuyTokenParams) ​

Purchase tokens using curve pricing.

sellToken<T>(params: SellTokenParams) ​

Sell tokens using curve pricing.

Platform Management ​

createPlatformConfig<T>(params: CreatePlatformConfigParams) ​

Configure launchpad platform parameters.

updatePlatformConfig<T>(params: UpdatePlatformConfigParams) ​

Update platform fee structure and settings.

claimPlatformFee<T>(params: ClaimPlatformFeeParams) ​

Claim accumulated platform fees.

Vesting ​

createVesting<T>(params: CreateVestingParams) ​

Set up token vesting schedule.

claimVesting<T>(params: ClaimVestingParams) ​

Claim vested tokens according to schedule.

Account Module Functions ​

Token Account Management ​

fetchWalletTokenAccounts() ​

Fetch all token accounts for connected wallet.

getOrCreateTokenAccount(params: GetOrCreateTokenAccountParams) ​

Get existing or create new associated token account.

checkOrCreateAta(params: CheckOrCreateAtaParams) ​

Check for and create Associated Token Account if needed.

handleTokenAccount(params: HandleTokenAccountParams) ​

Process multiple token account operations.

Event Listeners ​

addAccountChangeListener(callback: AccountChangeCallback) ​

Listen for token account balance changes.

removeAccountChangeListener(listenerId: string) ​

Remove account change listener.

Token Module Functions ​

Token Information ​

load(params?: TokenLoadParams) ​

Load token lists from Jupiter and custom sources.

getTokenInfo(mint: string | PublicKey) ​

Get comprehensive token metadata and information.

Key Differences from Standard AMM SDKs ​

1. Environment-Based Program ID Configuration ​

Purpose: Supports both testnet and mainnet deployments with different program IDs.

Usage:

typescript
// Mainnet (default)
const raydium = await Raydium.load({
  connection: new Connection(clusterApiUrl("mainnet-beta")),
  environment: "mainnet",
});

// Testnet
const raydium = await Raydium.load({
  connection: new Connection(clusterApiUrl("mainnet-beta")),
  environment: "testnet",
});

2. Multi-Protocol Support ​

Unified Interface: Single SDK supports:

  • CLMM: Concentrated liquidity (Uniswap V3-style)
  • CPMM: Constant product with custom curves
  • AMM V4/V5: Standard automated market makers
  • Cross-Protocol Routing: Optimal routing across all pool types

3. Advanced Transaction Building ​

Transaction Versioning: Support for both Legacy and V0 transactions:

typescript
// V0 transaction (recommended)
const result = await raydium.clmm.swap<TxVersion.V0>({
  // params
});

// Legacy transaction  
const result = await raydium.clmm.swap<TxVersion.Legacy>({
  // params
});

Compute Budget Integration: Built-in compute unit optimization and priority fees.

4. Launchpad Integration with Pricing Curves ​

Custom Curves: Support for multiple pricing mechanisms:

  • Linear: Constant price increase
  • Exponential: Exponential price growth
  • Power: Power function pricing
  • Constant Product: Bonding curve mechanics

5. Comprehensive Reward Systems ​

Multi-Token Rewards: Support for complex reward structures:

  • Position-based rewards (CLMM)
  • LP farming rewards (Traditional AMM)
  • Time-locked staking rewards
  • Platform fee sharing

6. Built-in Account Management ​

ATA Handling: Automatic Associated Token Account creation and management.

Balance Tracking: Real-time token balance monitoring with change listeners.

Access Control Summary ​

SDK Owner (Wallet) ​

Powers:

  • Execute all trading and liquidity operations
  • Create and manage positions across all protocols
  • Participate in farming and launchpad activities
  • Manage token accounts and balances

Environment Configuration ​

Testnet Environment:

  • Uses testnet program IDs for CLMM operations
  • Suitable for development and testing

Mainnet Environment (default):

  • Uses production program IDs
  • Real token operations and value

Protocol-Specific Access ​

CLMM Positions ​

NFT-Based: Each position represented as NFT with full transferability

Farm Participation ​

Stake-Based: Access controlled by LP token ownership and staking

Launchpad Access ​

Token-Based: Participation based on base token holdings and curve mechanics

Error Handling ​

Common Error Types ​

  • EMPTY_CONNECTION: Connection not provided
  • EMPTY_OWNER: Wallet/owner not set
  • INSUFFICIENT_BALANCE: Insufficient token balance
  • SLIPPAGE_EXCEEDED: Price moved beyond slippage tolerance
  • INVALID_POOL: Pool not found or inactive

Transaction Failures ​

  • COMPUTE_BUDGET_EXCEEDED: Transaction requires more compute units
  • BLOCKHASH_EXPIRED: Transaction blockhash expired
  • SIGNATURE_VERIFICATION_FAILED: Invalid signature or signing failure

Usage Notes ​

  1. Environment Consistency: Ensure consistent environment configuration across all operations
  2. Connection Management: Maintain stable RPC connection for optimal performance
  3. Account Pre-funding: Ensure sufficient SOL for transaction fees and rent exemption
  4. Token Account Creation: SDK handles ATA creation automatically when needed
  5. Slippage Protection: All swap operations include configurable slippage protection
  6. Multi-Protocol Routing: TradeV2 automatically routes across optimal liquidity sources
  7. Real-time Data: Built-in caching with configurable refresh intervals for API data
  8. Transaction Versioning: V0 transactions recommended for lower fees and better UX

TypeScript Integration ​

Full Type Safety: Complete TypeScript definitions for all parameters, return types, and configurations.

Generic Transaction Types: Support for both transaction versions with proper typing:

typescript
type SwapResult<T extends TxVersion> = T extends TxVersion.V0 
  ? MakeV0Transaction 
  : MakeTransaction;

Strongly Typed Parameters: All function parameters use TypeScript interfaces with required/optional field validation.

Interface and Type Definitions ​

SDK Initialization ​

RaydiumLoadParams ​

typescript
interface RaydiumLoadParams {
  connection: Connection;
  cluster?: Cluster;
  environment?: Environment; // "testnet" | "mainnet" 
  owner?: PublicKey | Keypair;
  apiRequestInterval?: number;
  apiRequestTimeout?: number;
  signAllTransactions?: SignAllTransactions;
  urlConfigs?: API_URL_CONFIG;
  jupTokenType?: JupTokenType;
  disableFeatureCheck?: boolean;
  blockhashCommitment?: Commitment;
}

CLMM Module Interfaces ​

OpenPositionFromBaseParams ​

typescript
interface OpenPositionFromBaseParams {
  poolInfo: ClmmPoolInfo;
  tickLower: number;
  tickUpper: number;
  baseIn: boolean;
  baseAmountIn: BN;
}

DecreaseLiquidityParams ​

typescript
interface DecreaseLiquidityParams {
  poolInfo: ClmmPoolInfo;
  positionInfo: PersonalPositionState;
  liquidity: BN;
  amountMinA: BN;
  amountMinB: BN;
}

CreateClmmPoolParams ​

typescript
interface CreateClmmPoolParams {
  mint1: ApiV3Token;
  mint2: ApiV3Token;
  ammConfig: ClmmConfigInfo;
  initialPrice: Decimal;
  startTime: BN;
}

ClmmSwapParams ​

typescript
interface ClmmSwapParams {
  poolInfo: ClmmPoolInfo;
  inputMint: PublicKey;
  amountIn: BN;
  amountOutMin: BN;
  sqrtPriceLimitX64?: BN;
}

CPMM Module Interfaces ​

CreateCpmmPoolParam ​

typescript
interface CreateCpmmPoolParam {
  mint1: ApiV3Token;
  mint2: ApiV3Token;
  mintAAmount: BN;
  mintBAmount: BN;
  startTime: BN;
  feeConfig?: {
    tradeFeeBps: number;
    protocolFeeRate: number;
    fundFeeRate: number;
  };
}

AddCpmmLiquidityParams ​

typescript
interface AddCpmmLiquidityParams {
  poolInfo: CpmmRpcData;
  inputAmount: BN;
  baseIn: boolean;
  slippage: number;
}

CpmmSwapParams ​

typescript
interface CpmmSwapParams {
  poolInfo: CpmmRpcData;
  inputMint: PublicKey;
  amountIn: BN;
  amountOutMin: BN;
}

Liquidity Module Interfaces ​

AddLiquidityParams ​

typescript
interface AddLiquidityParams {
  poolInfo: AmmRpcData;
  inputAmount: BN;
  anotherAmount: BN;
  fixedSide: "A" | "B";
  slippage: number;
}

RemoveParams ​

typescript
interface RemoveParams {
  poolInfo: AmmRpcData;
  lpAmount: BN;
  amountOutA: BN;
  amountOutB: BN;
}

TradeV2 Module Interfaces ​

TradeSwapParams ​

typescript
interface TradeSwapParams {
  routeType: "amm" | "clmm" | "cpmm";
  inputMint: PublicKey;
  outputMint: PublicKey;
  amountIn: BN;
  amountOutMin: BN;
  routes?: RouteInfo[];
}

GetAllRouteParams ​

typescript
interface GetAllRouteParams {
  inputMint: PublicKey;
  outputMint: PublicKey;
  inputAmount: BN;
  slippage: number;
}

WrapWSolParams ​

typescript
interface WrapWSolParams {
  amount: BN;
}

Farm Module Interfaces ​

CreateFarmParams ​

typescript
interface CreateFarmParams {
  lpMint: PublicKey;
  rewardMints: PublicKey[];
  rewardPerSecond: BN[];
  startTime: BN;
  endTime: BN;
}

FarmDWParam ​

typescript
interface FarmDWParam {
  farmId: PublicKey;
  lpAmount: BN;
}

Launchpad Module Interfaces ​

CreateLaunchpadParams ​

typescript
interface CreateLaunchpadParams {
  mint: PublicKey;
  curveType: "linear" | "exponential" | "power" | "constant";
  curveConfig: CurveConfig;
  startTime: BN;
  maxSupply: BN;
}

BuyTokenParams ​

typescript
interface BuyTokenParams {
  poolInfo: LaunchpadRpcData;
  baseAmountIn: BN;
  amountOutMin: BN;
}

Account Module Interfaces ​

GetOrCreateTokenAccountParams ​

typescript
interface GetOrCreateTokenAccountParams {
  mint: PublicKey;
  owner?: PublicKey;
  notUseTokenAccount?: boolean;
}

Token Module Interfaces ​

TokenLoadParams ​

typescript
interface TokenLoadParams {
  type?: JupTokenType;
  forceUpdate?: boolean;
}