了解 getTokenAccountsByOwner 的使用案例、代码示例、请求参数、响应结构和提示。
getTokenAccountsByOwner
RPC 方法用于检索由特定公钥拥有的所有 SPL Token 账户。对于需要显示用户代币持有或与其各种代币账户交互的钱包和应用程序来说,这是一个基本方法。
您必须通过特定代币 mint
或 programId
(例如,SPL Token Program 或 Token-2022 Program)来过滤查询。
对于拥有大量代币组合的钱包,考虑使用 getTokenAccountsByOwnerV2
,它提供基于游标的分页支持,每个请求最多可配置 10,000 个账户。
ownerPubkey
(字符串,必需):要检索其代币账户的账户所有者的 base-58 编码公钥。
filter
(对象,必需):一个 JSON 对象,必须指定 mint
或 programId
:
mint
(字符串):特定代币铸造的 base-58 编码公钥。如果提供,将仅返回由 ownerPubkey
拥有的此铸造的代币账户。programId
(字符串):管理账户的 Token Program 的 base-58 编码公钥。常见值有:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
options
(object, optional): 一个可选的配置对象,可以包括:
commitment
(string, optional): 指定承诺级别。encoding
(string, optional): 账户数据的编码。强烈推荐使用"jsonParsed"
。其他选项:"base64"
, "base64+zstd"
。默认使用"base64"
。dataSlice
(object, optional): 用于检索账户数据的特定切片 (offset
: usize, length
: usize)。仅适用于base58
, base64
, 或base64+zstd
编码。minContextSlot
(u64, optional): 查询的最小槽位。result.value
字段是一个对象数组。每个对象对应一个由ownerPubkey
拥有并匹配filter
的SPL Token账户。
value
数组中的每个对象包含:
pubkey
(string): Token账户本身的base-58编码公钥。account
(object): Token账户的详细信息:
lamports
(u64): 免租金的Lamport余额。owner
(string): 拥有程序(例如,Token Program公钥)。data
: 账户数据。如果使用"jsonParsed"
编码,这将包含:
program
(string): 例如,"spl-token"
。parsed
: 一个包含结构化信息的对象:
info
: 详细信息如:
mint
(string): Token的铸造地址。owner
(string): Token账户的所有者(应与请求中的ownerPubkey
匹配)。tokenAmount
(object): Token的余额 (amount
, decimals
, uiAmount
, uiAmountString
)。state
(string): Token账户的状态(例如,"initialized"
)。isNative
(boolean): 如果账户持有包装的SOL。delegate
(string, optional): 如果设置了委托,则为委托地址。delegatedAmount
(object, optional): 如果设置了委托,则为委托金额。type
(string): 例如,"account"
。executable
(boolean): 账户是否可执行。rentEpoch
(u64): 下一个纪元租金到期。space
(u64, if not jsonParsed
): 原始账户数据的字节长度。jsonParsed
编码,过滤条件为 programId
):
mint
或 programId
。没有这些主要过滤器之一,无法查询所有代币类型的所有者的所有代币账户。encoding
选项使用 "jsonParsed"
。它将二进制账户数据解码为更易用的 JSON 结构。programId
过滤时),响应可能会很大。在这种情况下,使用 getTokenAccountsByOwnerV2
,它提供内置的分页支持。programId
:TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
。getTokenAccountsByOwner
RPC 方法的深入理解,使您能够高效地检索任何 Solana 地址的代币账户信息。
getTokenAccountsByOwnerV2
,它提供:
limit
(1-10,000)并使用 paginationKey
导航结果changedSinceSlot
仅获取自特定槽位以来修改的代币账户paginationKey
为 null