Get Pools By Token Address

Fetch liquidity pools for different tokens.

One of the most basic use case is to fetch pools of a particular token. If you want to fetch all liquidity pools for Bonk token, you need to apply where filter on baseMint or quoteMint fields. Moreover, token could either be used as a baseMint or quoteMint, so we will use the _or operator to check for both fields.

Fetch all liquidity pools for Bonk token

import { gql, GraphQLClient } from "graphql-request";

const endpoint = `https://programs.shyft.to/v0/graphql/?api_key=YOUR-KEY`;

const graphQLClient = new GraphQLClient(endpoint, {
  method: `POST`,
  jsonSerializer: {
    parse: JSON.parse,
    stringify: JSON.stringify,
  },
});

function queryLpByToken(token:string) {
  // Get all proposalsV2 accounts
  const query = gql`
    query MyQuery($where: Raydium_LiquidityPoolv4_bool_exp) {
  Raydium_LiquidityPoolv4(
    where: $where
  ) {
    _updatedAt
    amountWaveRatio
    baseDecimal
    baseLotSize
    baseMint
    baseNeedTakePnl
    baseTotalPnl
    baseVault
    depth
    lpMint
    lpReserve
    lpVault
    marketId
    marketProgramId
    maxOrder
    maxPriceMultiplier
    minPriceMultiplier
    minSeparateDenominator
    minSeparateNumerator
    minSize
    nonce
    openOrders
    orderbookToInitTime
    owner
    pnlDenominator
    pnlNumerator
    poolOpenTime
    punishCoinAmount
    punishPcAmount
    quoteDecimal
    quoteLotSize
    quoteMint
    quoteNeedTakePnl
    quoteTotalPnl
    quoteVault
    resetFlag
    state
    status
    swapBase2QuoteFee
    swapBaseInAmount
    swapBaseOutAmount
    swapFeeDenominator
    swapFeeNumerator
    swapQuote2BaseFee
    swapQuoteInAmount
    swapQuoteOutAmount
    systemDecimalValue
    targetOrders
    tradeFeeDenominator
    tradeFeeNumerator
    volMaxCutRatio
    withdrawQueue
    pubkey
  }
}`;

//Tokens can be either baseMint or quoteMint, so we will check for both with an _or operator
  const variables = {
    where: {
    _or: [
          {baseMint:{_eq:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"}},
          {quoteMint:{_eq:"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"}},  
      ]}
  };

  graphQLClient.request(query, variables).then(console.log);
}

  queryLpByToken('DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263');

Fetch all JUP-USDC pools

You can also fetch pools for a particular pair of tokens. For that you need to apply where filter on both baseMint and quoteMint.

import { gql, GraphQLClient } from "graphql-request";

const endpoint = `https://programs.shyft.to/v0/graphql/?api_key=YOUR-KEY`;

const graphQLClient = new GraphQLClient(endpoint, {
  method: `POST`,
  jsonSerializer: {
    parse: JSON.parse,
    stringify: JSON.stringify,
  },
});

function queryLpPair(tokenOne:string, tokenTwo:string) {
//You can see we are fetching less fields, so you can coose and fetch only what you want.
const query = gql`
    query MyQuery {
  Raydium_LiquidityPoolv4(
    where: {
    baseMint: {_eq: ${JSON.stringify(tokenOne)}},
    quoteMint: {_eq: ${JSON.stringify(tokenTwo)}}}
  ) {
    baseDecimal
    baseLotSize
    baseMint
    baseVault
    lpMint
    lpReserve
    lpVault
    marketId
    marketProgramId
    openOrders
    owner
    poolOpenTime
    quoteDecimal
    quoteLotSize
    quoteMint
    quoteNeedTakePnl
    quoteTotalPnl
    quoteVault
    status
    pubkey
  }
}`;

  graphQLClient.request(query).then(console.log);
}

queryLpPair('JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');

Sort Liquidity Pools

You can also apply sorts based on poolOpenTime or lpReserve or any other field you like using order_by.

import { gql, GraphQLClient } from "graphql-request";

const endpoint = `https://programs.shyft.to/v0/graphql/?api_key=YOUR-KEY`;

const graphQLClient = new GraphQLClient(endpoint, {
  method: `POST`,
  jsonSerializer: {
    parse: JSON.parse,
    stringify: JSON.stringify,
  },
});

function queryLpPair(tokenOne:string, tokenTwo: string) {
  const query = gql`
    query MyQuery($where: Raydium_LiquidityPoolv4_bool_exp,
    $order_by: [Raydium_LiquidityPoolv4_order_by!]) {
  Raydium_LiquidityPoolv4(
    where: $where
    order_by: $order_by
  ) {
    amountWaveRatio
    baseDecimal
    baseLotSize
    baseMint
    baseNeedTakePnl
    baseTotalPnl
    baseVault
    depth
    lpMint
    lpReserve
    lpVault
    marketId
    marketProgramId
    maxOrder
    maxPriceMultiplier
    minPriceMultiplier
    minSeparateDenominator
    minSeparateNumerator
    minSize
    nonce
    openOrders
    orderbookToInitTime
    owner
    pnlDenominator
    pnlNumerator
    poolOpenTime
    punishCoinAmount
    punishPcAmount
    quoteDecimal
    quoteLotSize
    quoteMint
    quoteNeedTakePnl
    quoteTotalPnl
    quoteVault
    resetFlag
    state
    status
    swapBase2QuoteFee
    swapBaseInAmount
    swapBaseOutAmount
    swapFeeDenominator
    swapFeeNumerator
    swapQuote2BaseFee
    swapQuoteInAmount
    swapQuoteOutAmount
    systemDecimalValue
    targetOrders
    tradeFeeDenominator
    tradeFeeNumerator
    volMaxCutRatio
    withdrawQueue
    pubkey
  }
}`;

  const variables = {
    where: {
      baseMint: {
        _eq: tokenOne,
      },
      quoteMint: {
        _eq: tokenTwo,
      }
    },
    order_by: [
      {
        poolOpenTime: "desc"
      }
    ]
  };

  graphQLClient.request(query, variables).then(console.log);
}

queryLpPair('JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN',
'So11111111111111111111111111111111111111112');

Last updated