getAccountInfo
RPC 方法是查询 Solana 区块链的基本工具。它允许您检索与特定账户公钥相关的所有存储信息。这包括账户的 lamport 余额、拥有它的程序、是否可执行以及其存储的数据。
常见用例
- 检查 SOL 余额: 确定任何账户的本机 SOL 余额。
- 验证账户存在性: 检查具有给定公钥的账户是否已初始化(即,是否有 lamports 或数据)。
- 检查程序账户: 检索由程序拥有的账户中存储的数据,这对于理解程序的状态至关重要。
- 识别账户所有者: 找出哪个程序是账户的所有者。这有助于确定如何解释账户的数据或它是否是系统拥有的账户。
- 检查账户是否可执行: 确定账户是否包含已部署的程序。
参数
-
publicKey
(字符串,必需):要查询的账户的 base-58 编码公钥。 -
config
(对象,可选):一个配置对象,包含以下字段:commitment
(字符串,可选):指定用于查询的承诺级别。默认为finalized
。finalized
:节点将查询由集群的绝大多数确认的最近区块,已达到最大锁定。confirmed
:节点将查询由集群的绝大多数投票的最近区块。processed
:节点将查询其最近的区块。请注意,该区块可能不完整。
encoding
(字符串,可选):账户数据的编码。默认为base64
。base58
(慢)base64
base64+zstd
(如果数据被压缩)jsonParsed
:如果账户数据是已知的程序状态(例如,代币账户、质押账户),节点将尝试将其解析为 JSON 结构。对于通用程序账户,这通常会回退到二进制(base64)。
dataSlice
(对象,可选):将返回的账户数据限制为特定的切片。仅适用于base58
、base64
或base64+zstd
编码。offset
(数字):从账户数据开始的字节数以开始切片。length
(数字):要返回的字节数。
minContextSlot
(数字,可选):请求可以在其上评估的最小槽位。
响应
如果找到该账户,result
字段将包含一个具有两个主要属性的对象:
-
context
(对象):包含有关请求的元数据。slot
(数字):检索信息的槽位。apiVersion
(字符串,可选):RPC API 版本。
-
value
(对象 | null):如果账户不存在,这将是null
。否则,它是一个包含以下内容的对象:lamports
(数字):账户拥有的 lamports 数量(1 SOL = 1,000,000,000 lamports)。owner
(字符串):拥有此账户的程序的 base-58 编码公钥。data
(数组 | 对象 | 字符串):存储在账户中的数据。格式取决于请求中使用的encoding
参数。- 对于
base64
(默认),base58
,base64+zstd
:这通常是一个数组[encoded_string, encoding_format]
,例如,["string_data", "base64"]
。 - 对于
jsonParsed
:如果数据可被 RPC 节点解析(例如,对于 SPL Token 账户),这可以是一个 JSON 对象。否则,如果数据未被识别为标准布局,可能会默认为["", "base64"]
或类似情况。
- 对于
executable
(布尔值):如果账户包含一个程序,则为true
,否则为false
。rentEpoch
(数字):此账户将在下一个纪元欠租金。space
(数字,可选):数据的字节长度。(注意:官方 Solana 文档列出space
,而一些 RPC 提供商可能会包含它。它表示为账户数据分配的总空间)。有关 账户数据和反序列化 的更多详细信息,请参阅我们的详细指南。
value
字段将是 null
。
示例:获取账户信息
让我们在主网上获取 Serum Program V3 ID (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin
) 的信息。
注意: 在下面的示例中,将 YOUR_API_KEY
替换为您实际的 Helius API 密钥。
开发者提示
- 性能: 对于需要频繁检查多个账户的应用程序,考虑使用
getMultipleAccounts
来批量请求并减少往返次数。 - 数据反序列化:
data
字段通常需要根据所属程序的数据结构进行反序列化。通常需要特定于程序的工具和库(例如,SPL Token 库用于代币账户)。我们关于反序列化账户数据的博客文章提供了有用的技术和示例。 - 速率限制: 注意 RPC 节点的速率限制,特别是在查询大量账户或频繁请求时。
- 成本管理:
getAccountInfo
通常是低成本查询,但频繁轮询可能会累积。优化您的查询模式。 - 明智使用
jsonParsed
: 虽然jsonParsed
很方便,但它可能不支持所有账户类型,并且如果程序更新其数据结构,其输出可能会改变。对于关键应用程序,使用已知布局解析二进制数据提供了更高的稳定性。 - 考虑
dataSlice
: 如果您只需要账户数据的一小部分,使用dataSlice
来减少传输的数据量,并可能降低查询成本。