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');
{
"data": {
"Raydium_LiquidityPoolv4": [
{
"_updatedAt": "2024-02-22T08:27:44.842",
"amountWaveRatio": 0,
"baseDecimal": 5,
"baseLotSize": 100000,
"baseMint": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
"baseNeedTakePnl": 6299466356,
"baseTotalPnl": 52495552977,
"baseVault": "5z2chms4j9LgdyjP7enSh57zyqHE98MBRRe5mFNrKgrk",
"depth": 3,
"lpMint": "A2jzgGKWtvwotf911xBmt8mvGsbFUrLNi5WpCWMULUYo",
"lpReserve": 100000,
"lpVault": "11111111111111111111111111111111",
"marketId": "6vLCCVv1gL8f3g5JpnY45AHa5Mr7vm4Bq1dA7wxnKT8i",
"marketProgramId": "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX",
"maxOrder": 7,
"maxPriceMultiplier": 1000000000,
"minPriceMultiplier": 1,
"minSeparateDenominator": 10000,
"minSeparateNumerator": 5,
"minSize": 1000000000,
"nonce": 254,
"openOrders": "6PEKpDM7uYKztUeHzjusSaWH1pj1AUdPJ9f7DwkD7DYT",
"orderbookToInitTime": 0,
"owner": "GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ",
"pnlDenominator": 100,
"pnlNumerator": 12,
"poolOpenTime": 1699732346,
"punishCoinAmount": 0,
"punishPcAmount": 0,
"quoteDecimal": 9,
"quoteLotSize": 10000000,
"quoteMint": "DPms8ohqvpkqeugP88Y9JWhrLDHGsmVbPuU8C9XnuVXG",
"quoteNeedTakePnl": 362827514337973,
"quoteTotalPnl": 3023562619483117,
"quoteVault": "BqJ1V5FvaCVMVW96T52EGfUhmwRjaYDyr5agSkc2eusr",
"resetFlag": 0,
"state": 2,
"status": 6,
"swapBase2QuoteFee": 4019326191169825,
"swapBaseInAmount": 8472638529675,
"swapBaseOutAmount": 15770228586046,
"swapFeeDenominator": 10000,
"swapFeeNumerator": 25,
"swapQuote2BaseFee": 21181596329,
"swapQuoteInAmount": 1607730476467929300,
"swapQuoteOutAmount": 865072348842825000,
"systemDecimalValue": 1000000000,
"targetOrders": "4LtBSgEeBj7FuEdLfYdhYiW31ngvx8ffAXdmhkWBnGrQ",
"tradeFeeDenominator": 10000,
"tradeFeeNumerator": 25,
"volMaxCutRatio": 500,
"withdrawQueue": "11111111111111111111111111111111",
"pubkey": "qdTc6SbmxL3uMn8fCFsm4gLDUTa5gZitMf48SrpXb1V"
},
<Array of more responses . . . >
]
}
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