HTTP 方法
getProgramAccountsV2
getProgramAccounts 的增强版本,支持基于游标的分页和 changedSinceSlot,用于高效查询由特定 Solana 程序拥有的大量账户,并进行增量更新。
POST
getProgramAccountsV2
概述
getProgramAccountsV2 是标准 getProgramAccounts 方法的增强版本,专为需要有效查询特定Solana程序拥有的大量账户集的应用程序而设计。此方法引入了基于光标的分页和增量更新功能。
V2 中的新功能:
- 基于游标的分页:配置请求上限为每次1到10,000个账户
- 增量更新:使用
changedSinceSlot仅获取最近修改的账户 - 更好的性能:防止超时,并减少大数据集的内存使用
- 向后兼容:支持所有现有的
getProgramAccounts参数 - 可选的
withContext:true在result.context下添加slot和apiVersion;省略或false则不包含
主要优势
可扩展查询
通过有效分页处理拥有数百万个账户的程序
实时同步
使用
changedSinceSlot 进行增量更新和实时数据同步防止超时
以前超时的大型查询现在通过分页可靠运行
内存高效
分块处理数据而不是一次性加载所有内容到内存
分页最佳实践
基本分页模式
增量更新
性能提示
- 从较小的限制开始(1000),并根据网络性能增加
- 使用合适的编码:便捷使用
jsonParsed,性能使用base64 - 应用过滤器在分页前减少数据集大小
- 存储
paginationKey以便查询中断时恢复 - 监控响应时间并相应调整限制
withContext(可选)
布尔值在程序配置对象(params[1])上。只有 result 的形状发生变化,不改变过滤器、限制或分页。
从 getProgramAccounts 迁移
从原方法迁移非常简单 - 只需替换方法名称并添加分页参数:相关方法
getProgramAccounts
无分页的原始方法
getTokenAccountsByOwnerV2
用于令牌账户查询的 V2 方法
请求参数
要查询账户的 Solana 程序公钥(地址),作为 base-58 编码字符串。
请求的承诺级别。
confirmedfinalizedprocessed
请求可以评估的最小槽。
当
true 时,返回 result.context(快照元数据:slot, apiVersion)并在 result.value 下嵌套 accounts 和 paginationKey。当 false 或省略时,这些字段直接出现在 result 上(例如 result.accounts)。应用相同的过滤器和限制。返回账户数据的编码格式。
jsonParsedbase58base64base64+zstd
请求账户数据的切片。
返回的字节数。
开始读取的字节偏移量。
每个请求返回的最大账户数量(1-10,000)。
Base-58编码的分页游标,用于获取后续页面。使用先前响应中的paginationKey。
仅返回在此槽位编号处或之后修改的账户。对增量更新很有用。
强大的过滤系统,可高效查询特定的Solana账户数据模式。
请求体
application/json
JSON-RPC 协议版本。
可用选项:
2.0 示例:
"2.0"
请求的唯一标识符。
示例:
"1"
要调用的 RPC 方法名称。
可用选项:
getProgramAccountsV2 示例:
"getProgramAccountsV2"
增强分页方法的参数。
要查询账户的 Solana 程序公钥(地址),以 base-58 编码的字符串形式。
示例:
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
getProgramAccountsV2