如何提取 Solana 上代币的流动性详情
- 原文链接:blogs.shyft.to/how-to-fetch...
- 译者:AI翻译官,校对:翻译小组
- 本文链接:learnblockchain.cn/article…
在这篇博客中,我们将指导你通过 Shyft 的 Solana DeFi API 从所有主要的 dex 获取代币的流动性。
从多个 DEX 获取流动性详情对于使用传统方法(如 getProgramAccounts)的开发者来说可能是繁琐和低效的。Shyft 的 DeFi API 通过提供来自主要协议(如 Raydium 和 Orca)的快速聚合 Solana DeFi 数据简化了这个过程。在本博客中,我们将展示如何使用 Shyft 的 API 来简化流动性检索,并将其与传统 RPC 方法进行比较,展示它们的效率和易用性。
要使用 Shyft 的 API,请遵循以下简单步骤:
这里是可供使用的 Replit 代码,可供快速分叉和测试。
你可以使用 getProgramAccounts
检索特定程序(或 DEX)流动性信息或相关 DeFi 数据。这涉及对账户数据应用 memcmp
过滤器,如下面的示例所示。
const accounts = await connection.getProgramAccounts(
RAYDIUM_PROGRAM_ID.AmmV4,
{
commitment: 'confirmed',
filters: [
{ dataSize: LIQUIDITY_STATE_LAYOUT_V4.span },
{
memcmp: {
offset: LIQUIDITY_STATE_LAYOUT_V4.offsetOf("baseMint"),
bytes: tokenA.toBase58(),
},
}
],
}
);
这种方法可行,但存在一些挑战。它速度较慢,返回的原始数据需要额外处理,从多个 DEX 获取数据需要分别调用和自定义解析。现在,让我们看看 Shyft 的 DeFi API 如何简化这个过程。
让我们探索如何使用 Shyft 的 DeFi API 查询 Solana 上某个代币的流动性信息。API 端点如下:
GET https://defi.shyft.to/v0/pools/get_by_token
此 API 调用所需的参数:
**token**
:我们要获取流动性池详情的代币地址**limit**
:这是一个可选参数,用于分页。指定每页显示的项目数量。默认值为 100。**page**
:在显示由 limit 指定的项目时,指定页面编号。这也是可选的。**dex**
:这接受一个 Dex 名称字符串数组,用于获取我们需要的数据。如果未提及,则返回所有 DEX 的数据。DEX 的完整名称列表可以在 这里 找到。请注意,与所有 Shyft API 一样,这些 API 也需要在标题部分添加`x-api-key`身份验证参数,指定你在仪表板上的 Shyft API 密钥。
如果未指定 dex
字段,则将为指定的代币地址返回所有 支持的 dex 的流动性详情。此 API 也支持分页,返回的响应大致如下所示。
{
"success": true,
"message": "Pools fetched successfully",
"result": {
"page": 1,
"limit": 1,
"dexes": {
"meteoraAmm": {
"pools": [
{
"lpMint": "9ZgdREVJDG5apT7gPt6CAPBYvfhUcDecFUvbXaxoKunj",
"tokenAMint": "7Z3thA2ZmMuapEmEGiB6rxoYmDDnnEv717NydgeoXhex",
"tokenBMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"aVault": "6Fzmt8UixGEK6sJkjc6ET2VUqK3wkvBoJGHB85J2ek7M",
"bVault": "3ESUFCnRNgZ7Mn2mPPUMmXYaKU8jpnV9VtA17M7t2mHQ",
"aVaultLp": "8gyv8AwYqCNKC2FkFMzZy4pPeQazM9Svad29XcXDYcrk",
"bVaultLp": "9C7fTkTBczhsdhjNWSJdLX27gSizyoTHdmQAVH1ZNZgg",
"aVaultBump": 255,
"enabled": true
}
],
"programId": "Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"
},
"openbookV2": {
"pools": [
{
"pubkey": "2ZNDYtUpfenGZcjhcrQeNJ8Bs4ecVJKQEE4oNBCkejxj",
"lamports": 6792960,
"bump": 255,
"baseDecimals": 9,
"quoteDecimals": 6,
"padding1": 0,
"marketAuthority": "BY68afooPNzRE6n9iQmpGwioLU7fzAfUsMXmThjmkYa9",
"timeExpiry": 1713753898,
"collectFeeAdmin": "7ihN8QaTfNoDTRTQGULCzbUT3PHwPDTu5Brcu4iT2paP"
}
],
"programId": "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb"
},
"orca": {
"pools": [
{
"whirlpoolsConfig": "2LecshUwdy9xi7meFgHtFJQNSKk4KdTrcpvaB56dP2NQ",
"feeRate": 3000,
"protocolFeeRate": 1300,
"liquidity": 0,
"sqrtPrice": 178194428756287260,
"tickCurrentIndex": -92800,
"protocolFeeOwedA": 0,
"protocolFeeOwedB": 0,
"tokenMintA": "5PmpMzWjraf3kSsGEKtqdUsCoLhptg4yriZ17LKKdBBy",
"tokenVaultA": "Dy6ktGLX9So2jwUAGzJA811b2XxXVfP4NfRvgvAUXkZ5",
"feeGrowthGlobalA": 102588657235574930000,
"tokenMintB": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"tokenVaultB": "AVxMdgRUUt28vrMjvq1jR2CxdcRtA2sqBdotrjrgNCiy"
}
],
"programId": "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"
},
"raydiumAmm": {
"pools": [
{
"pubkey": "5oAvct85WyF7Sj73VYHbyFJkdRJ28D8m4z4Sxjvzuc6n",
"lamports": 7124800,
"status": 6,
"nonce": 254,
"maxOrder": 7,
"depth": 3,
"baseDecimal": 9,
"quoteDecimal": 6,
"state": 1
}
],
"programId": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"
}
}
}
}
}
}
与传统的 getProgramAccounts
RPC 调用相比,Shyft 的 DeFi API 提供了几项关键优势,使 DeFi 数据更易于获取:
getProgramAccounts
方法不同,Shyft 的 DeFi API 提供了卓越的响应时间(低于 500ms),确保及时获取关键信息。此外,该 API 还支持分页,因此接收的数据不会给你造成负担。这些增强使得 Shyft 的 DeFi API 成为访问 Solana 上 DeFi 数据更强大和高效的替代方案。
你可以在我们的 replit 这里找到与本文相关的所有代码。你可以分叉它并用来构建创新解决方案。
你可以探索我们其他相关的文章: 在 Solana 上流式传输实时数据, 使用 gRPC 实时数据流:账户、交易、区块,如何在 Solana 上流式传输实时 Pump.fun 更新,以及在 Raydium 上跟踪新池。
如需额外支持,请加入我们的 Discord 服务器 或关注我们的 Twitter 以获取最新更新。我们的团队在这里帮助你利用这一创新技术。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!