Get Pool by Token Addresses
Fetch all liquidity pools involving specific tokens for Meteora DLMM
Liquidity Pools are smart contract based vaults that are associated with specific liquidity token pairs. With SHYFT's GraphQL APIs, we can query Liquidity Pools based on the tokens associated with them for Meteora DLMM. The liquidity pairs are denoted by the following fields: tokenXMint
and tokenYMint
.
You can directly copy paste the following on replit and see it in action.
Fetch Pool for a Liquidity Pair (SOL-USDC)
async function getLBPairByTokenPair(tokenAddressX, tokenAddressY) {
const SHYFT_API_KEY = "YOUR_SHYFT_API_KEY";
//get Pools involving a specific liquidity pair
const operationsDoc = `
query MyQuery {
meteora_dlmm_LbPair(
where: {tokenXMint: {_in: ${JSON.stringify([tokenAddressX, tokenAddressY])}}, tokenYMint: {_in: ${JSON.stringify([tokenAddressX, tokenAddressY])}}}
) {
activationPoint
activationType
activeId
baseKey
binStep
creator
creatorPoolOnOffControl
lastUpdatedAt
oracle
padding4
pairType
parameters
preActivationDuration
preActivationSwapAddress
protocolFee
requireBaseFactorSeed
reserveX
reserveY
status
tokenMintXProgramFlag
tokenMintYProgramFlag
tokenXMint
tokenYMint
}
}
`; //you can cherrypick the fields as per your requirement
const result = await fetch(
`https://programs.shyft.to/v0/graphql/accounts?api_key=${SHYFT_API_KEY}&network=mainnet-beta`, //SHYFT's GQL endpoint
{
method: "POST",
body: JSON.stringify({
query: operationsDoc,
variables: {},
operationName: "MyQuery",
}),
}
);
const { errors, data } = await result.json();
console.dir(data, { depth: null });
}
getLBPairByTokenPair("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "So11111111111111111111111111111111111111112");
//fetching Pools for SOL-USDC pair
{
"data": {
"meteora_dlmm_LbPair": [
{
"_lamports": 7182720,
"activationSlot": 0,
"activeId": -2220,
"baseKey": "11111111111111111111111111111111",
"binStep": 10,
"feeOwner": "6WaLrrRfReGKBYUSkmx2K6AuT21ida4j8at2SUiZdXu8",
"lastUpdatedAt": 0,
"maxSwappedAmount": 0,
"oracle": "4zmHnG4DD693gSrojYKwzAHNG1YKydBXK2oVdxypBC7B",
"pairType": 0,
"protocolFee": {
"amountX": "0",
"amountY": "0"
},
"reserveX": "Dp7VdsZ2N6sxsrezjt1EMHkELBfaAYSVJXVR753zdYJV",
"reserveY": "CZULKXqq1fPYs8xwQGMamZm1pHH5nVnRZzmm5RLnQ33r",
"status": 0,
"swapCapDeactivateSlot": 0,
"tokenXMint": "So11111111111111111111111111111111111111112",
"tokenYMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
},
{
"_lamports": 7182720,
"activationSlot": 0,
"activeId": -258,
"baseKey": "11111111111111111111111111111111",
"binStep": 80,
"feeOwner": "6WaLrrRfReGKBYUSkmx2K6AuT21ida4j8at2SUiZdXu8",
"lastUpdatedAt": 0,
"maxSwappedAmount": 0,
"oracle": "FU4BG5pwU77dFecQ5t7sd3jsdEgwiWEyxqCfufJK4HVa",
"pairType": 0,
"protocolFee": {
"amountX": "0",
"amountY": "0"
},
"reserveX": "CN8k1PtzJz2mGGdf5puwV14Dh1skMRkT42sSvhesf3nT",
"reserveY": "4FkX872Wbo6NK7eNEmMnDRMJnwbu6tQsE6utb5fbDbzv",
"status": 0,
"swapCapDeactivateSlot": 0,
"tokenXMint": "So11111111111111111111111111111111111111112",
"tokenYMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
},
{
"_lamports": 9393934,
"activationSlot": 0,
"activeId": -1282,
"baseKey": "11111111111111111111111111111111",
"binStep": 16,
"feeOwner": "6WaLrrRfReGKBYUSkmx2K6AuT21ida4j8at2SUiZdXu8",
"lastUpdatedAt": 0,
"maxSwappedAmount": 0,
"oracle": "HQQU6RBgoJqtCW26FSkwanSnxQgYfkxUEcFRR1ThU3Me",
"pairType": 0,
"protocolFee": {
"amountX": "0",
"amountY": "0"
},
"reserveX": "5Ys4iNr3MVhXYdtoHtCjcYvMq34MjnkFynaxNihy71M4",
"reserveY": "2GHtKmEEEX2vwqD3btyNUUibhE3DvowojCpLH178t7Pk",
"status": 0,
"swapCapDeactivateSlot": 0,
"tokenXMint": "So11111111111111111111111111111111111111112",
"tokenYMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
] //response shortened for visibility
}
}
Fetch Pool for a particular Token (USDC)
async function getLBPairBySingleToken(tokenAddress) {
const SHYFT_API_KEY = "YOUR_SHYFT_API_KEY";
//get all Lb Pairs for meteora DLMM
const operationsDoc = `
query MyQuery {
meteora_dlmm_LbPair(
where: {_or: [{_or: {tokenXMint: {_eq: ${JSON.stringify(
tokenAddress
)}}}}, {_or: {tokenYMint: {_eq: ${JSON.stringify(tokenAddress)}}}}]}
) {
oracle
pairType
reserveX
reserveY
status
tokenXMint
tokenYMint
lastUpdatedAt
}
}
`; //you can cherrypick the fields as per your requirement
const result = await fetch(
`https://programs.shyft.to/v0/graphql/accounts?api_key=${SHYFT_API_KEY}&network=mainnet-beta`, //SHYFT's GQL endpoint
{
method: "POST",
body: JSON.stringify({
query: operationsDoc,
variables: {},
operationName: "MyQuery",
}),
}
);
const { errors, data } = await result.json();
console.dir(data, { depth: null });
}
getLBPairBySingleToken("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
//getting pools involving USDC token
{
meteora_dlmm_LbPair: [
{
oracle: '4BndseYHGHfcL18oHV8Hamepk2vofdZMDdhNN93txadi',
pairType: 0,
reserveX: 'GzSch1VS18FJkczU3CW8Q4TkkoybX78pcj4Hr5XgUoXW',
reserveY: '86VTDEiFyXupcd2rgH8RjWcvUxXwti32HHdm5FBMfvYi',
status: 0,
tokenXMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
tokenYMint: 'A53BzB7297SXdF6mguQQ8kzqjVYt8pUeHW5m1i8pD6hf',
lastUpdatedAt: 0
},
{
oracle: 'Dw1cNqaZMLPZmgP4uAVUr3kG2EXeWqYTHpamHjYv5URq',
pairType: 0,
reserveX: '6c5aeVQH5EpzBh7cGt53AZSZCZaXYfQcJSFHugiqu2gA',
reserveY: 'ByBUUpfBDviPKht1xAqGFiHUWkMSnfJBi3Xdg3osBme',
status: 0,
tokenXMint: 'EjmDTt8G3T725eFSV7oWmGD8J848guo3LZ1EB3RfwGSw',
tokenYMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
lastUpdatedAt: 0
},
{
oracle: 'HxYW48yPED3dLfYYmWYCNYg4BKQpbGmEYPCZniMcrPhi',
pairType: 0,
reserveX: '2t4WCon8dNMv9WzqYuUs4eW8biFgrk7VXEqDyJfcds7i',
reserveY: 'GktHQ6h4tGvFuc6m9M4gjCXoPnv76PmMSw83xYQ15GTy',
status: 0,
tokenXMint: '25hAyBQfoDhfWx9ay6rarbgvWGwDdNqcHsXS3jQ3mTDJ',
tokenYMint: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
lastUpdatedAt: 0
}
] //response shortend for visibility
}
Please note that the above query fetches all pools involving USDC as tokenXMint as well as tokenYMint in a single GraphQL request.
Last updated
Was this helpful?