跳转到主要内容
getMultipleAccounts RPC 方法是一种高效的方式,可以同时获取一组 Solana 账户的信息。与其为每个账户单独发起 getAccountInfo 请求,getMultipleAccounts 允许您批量处理这些请求,从而减少网络开销并提高应用程序的响应速度。

常见用例

  • 批量加载账户数据: 当您的应用程序需要显示或处理多个已知账户的数据时(例如,用户的代币账户,一组链上程序配置)。
  • 投资组合追踪器: 获取用户拥有的多个代币账户的余额和状态。
  • 市场界面: 通过一次性获取账户数据来显示多个 NFT 或上市项目的详细信息。
  • 提高 dApp 性能: 显著减少 RPC 调用次数,从而加快加载时间并改善用户体验,特别是在处理大量账户时。

请求参数

  1. pubkeys (array of string, 必需):
    • 要查询的账户的 base-58 编码公钥字符串数组。
    • 每个请求最多 100 个公钥。
    • 示例:["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
  2. options (object, 可选): 包含以下一个或多个字段的配置对象:
    • commitment (string): 指定查询的承诺级别(例如,"finalized", "confirmed", "processed")。
    • encoding (string): 账户数据的编码。选项包括:
      • "base64" (默认): 标准 base64 编码。
      • "base58": 较慢,但在某些情况下可能有用。
      • "base64+zstd": base64 编码的 zstd 压缩数据。
      • "jsonParsed": 如果账户由 RPC 节点具有解析器的程序拥有(例如,SPL 代币程序,Stake 程序),data 字段将是一个 JSON 对象。这对于结构化数据非常有用。
    • dataSlice (object): 允许您仅获取账户数据的特定部分。这对于只需要大账户中的一小部分信息时非常有用。
      • offset (usize): 从账户数据开始的字节偏移量。
      • length (usize): 从偏移量开始返回的字节数。
      • 注意:dataSlice 仅适用于 base58, base64, 或 base64+zstd 编码。
    • minContextSlot (u64): 请求可以在其上进行评估的最小槽位。

响应结构

JSON-RPC 响应对象将包含一个 result 字段,其中包括:
  • context (object):
    • slot (u64): 获取信息的槽位。
    • apiVersion (string, 可选): 节点的 API 版本。

示例

1. 获取两个账户的基本信息

此示例获取两个账户的数据:SOL Llama(一个 NFT)和 Serum Dex Program v3。
# Replace <api-key> with your Helius API key
# SOL Llama Mint: Abug4qgG1x23AEdjS2h9CEJ1m6ha2Z22LdK2kL2pys3F
# Serum Dex Program v3: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getMultipleAccounts",
    "params": [
      [
        "Abug4qgG1x23AEdjS2h9CEJ1m6ha2Z22LdK2kL2pys3F",
        "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"
      ]
    ]
  }'

2. 获取解析的代币账户数据

此示例获取两个 SPL 代币账户的数据,并请求 jsonParsed 编码以获取结构化数据。
# Replace <api-key> with your Helius API key
# Example USDC Token Account 1: GqoZ2MCrdTtygoX1F2b8X7F2tDXxNxyvMvykR9RzQW8p
# Example USDT Token Account 2: HYnLMbkaPMh9W2aPNy2yP4LzLSWWw9zSCYEZdX2g2E7m
curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getMultipleAccounts",
    "params": [
      [
        "GqoZ2MCrdTtygoX1F2b8X7F2tDXxNxyvMvykR9RzQW8p",
        "HYnLMbkaPMh9W2aPNy2yP4LzLSWWw9zSCYEZdX2g2E7m"
      ],
      {
        "encoding": "jsonParsed"
      }
    ]
  }'

开发者提示

  • 最多 100 个账户: 每次调用最多可以请求 100 个账户。
  • 原子性: 请求不是原子的,如果一个账户查找失败,其他账户可能仍然成功。检查 value 数组中的每个元素是否为 null
  • jsonParsed 便利性: 在处理常见账户类型如 SPL 代币账户时,强烈推荐使用 jsonParsed 编码,因为它可以避免手动反序列化。
  • dataSlice 用于大账户: 对于非常大的账户(例如某些程序状态账户),使用 dataSlice 仅获取必要的字节以避免过多的数据传输。
  • 错误处理: 准备好处理响应 value 数组中的 null 条目,表示账户未找到或无法获取。
通过利用getMultipleAccounts,您可以构建更高性能和可扩展的Solana应用程序。
I