getMultipleAccounts
RPC 方法是一种高效的方式,可以同时获取一组 Solana 账户的信息。与其为每个账户单独发起 getAccountInfo
请求,getMultipleAccounts
允许您批量处理这些请求,从而减少网络开销并提高应用程序的响应速度。
常见用例
- 批量加载账户数据: 当您的应用程序需要显示或处理多个已知账户的数据时(例如,用户的代币账户,一组链上程序配置)。
- 投资组合追踪器: 获取用户拥有的多个代币账户的余额和状态。
- 市场界面: 通过一次性获取账户数据来显示多个 NFT 或上市项目的详细信息。
- 提高 dApp 性能: 显著减少 RPC 调用次数,从而加快加载时间并改善用户体验,特别是在处理大量账户时。
请求参数
-
pubkeys
(array
ofstring
, 必需):- 要查询的账户的 base-58 编码公钥字符串数组。
- 每个请求最多 100 个公钥。
- 示例:
["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
-
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。2. 获取解析的代币账户数据
此示例获取两个 SPL 代币账户的数据,并请求jsonParsed
编码以获取结构化数据。
开发者提示
- 最多 100 个账户: 每次调用最多可以请求 100 个账户。
- 原子性: 请求不是原子的,如果一个账户查找失败,其他账户可能仍然成功。检查
value
数组中的每个元素是否为null
。 jsonParsed
便利性: 在处理常见账户类型如 SPL 代币账户时,强烈推荐使用jsonParsed
编码,因为它可以避免手动反序列化。dataSlice
用于大账户: 对于非常大的账户(例如某些程序状态账户),使用dataSlice
仅获取必要的字节以避免过多的数据传输。- 错误处理: 准备好处理响应
value
数组中的null
条目,表示账户未找到或无法获取。
getMultipleAccounts
,您可以构建更高性能和可扩展的Solana应用程序。