I am writing a node js code to swap SOL token to any token. I am using @solana/spl-token-swap node module for the same. First, I am creating an associated address for the token I am swapping to. I am then creating a transaction, and adding swap instructions and then trying to send transaction for the same. I fetched the raw data for the pool from this API

This is how part of my code looks like :-

const swapAuthority = new PublicKey(liquidityJson.authority);
const TokenAPubkey = new PublicKey('So11111111111111111111111111111111111111112');
const TokenBPubkey = new PublicKey('4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R');

let tokenAAccountAddress = await splToken.getAssociatedTokenAddress(
    TokenAPubkey, // mint
    swapAuthority, // owner
    true // allow owner off curve

let tokenBAccountAddress = await splToken.getAssociatedTokenAddress(
      TokenBPubkey, // mint
      swapAuthority, // owner
      true // allow owner off curve
const feeOwner = new PublicKey(

let tokenFeeAccountAddress = await splToken.getAssociatedTokenAddress(
          new PublicKey(lpMint), // mint
          feeOwner, // owner
          true // allow owner off curve
let tokenAccountPool = await splToken.getAssociatedTokenAddress(
            new PublicKey(lpMint), // mint
            swapAuthority, // owner
            true // allow owner off curve

let transaction = new Transaction();

const createSwapInstruction = await Swap.TokenSwap.createInitSwapInstruction(
              **tokenSwapStateAccount**, // Token swap state account
              swapAuthority, // Swap pool authority
              tokenAAccountAddress, // Token A token account
              tokenBAccountAddress, // Token B token account
              new PublicKey(lpMint), // Swap pool token mint
              tokenFeeAccountAddress, // Token fee account
              **swapPoolTokenAccount**, // Swap pool token account
              splToken.TOKEN_PROGRAM_ID, // Token Program ID
              Swap.TOKEN_SWAP_PROGRAM_ID, // Token Swap Program ID
              0, // Trade fee numerator
              10000, // Trade fee denominator
              5, // Owner trade fee numerator
              10000, // Owner trade fee denominator
              0, // Owner withdraw fee numerator
              0, // Owner withdraw fee denominator
              20, // Host fee numerator
              100, // Host fee denominator
              Swap.CurveType.ConstantProduct // Curve type

Now I am confused about, what should be the value of tokenSwapStateAccount and swapPoolTokenAccount ? Where should I get the value of these for any swap pair ? Can anyone guide me to some documentation or example for the same ? I am trying to swap SOL to RAY here.

  • There's some confusion here. The spl-token-swap package only works with the spl-token-swap AMM, but you're trying to trade with Raydium. If you want to trade with Raydium, be sure to use their program and SDKs.
    – Jon C
    Mar 18 at 0:18


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.