getTokenAccountsByDelegate RPC 方法检索所有已批准特定公钥作为委托的 SPL Token 账户。委托有权对代币账户执行某些操作,例如转移或销毁代币,直至委托金额。
此方法对于管理代理权限的服务或需要发现特定密钥可以代表哪些代币账户执行操作的服务非常有用。
常见用例
- 列出代理资产: 显示已授予特定钱包或程序代理权限的所有代币账户。
- 自动化代币管理: 代表用户执行操作的服务(例如,自动做市商、管理代币化奖励的质押协议)可以使用此方法查找他们有权与之交互的账户。
- 审计代理: 审查哪些账户已将代理权限授予特定地址。
- 撤销代理: 确定需要撤销代理权限的代币账户(尽管撤销本身是一个单独的交易)。
请求参数
-
delegatePubkey(字符串,必填):要查找其关联代币账户的委托账户的 base-58 编码公钥。 -
filter(对象,必填):一个 JSON 对象,必须指定mint或programId以过滤账户:mint(字符串):特定代币铸造的 base-58 编码公钥。如果提供,查询将仅返回此特定代币类型的委托于delegatePubkey的代币账户。programId(字符串):拥有账户的代币程序的 base-58 编码公钥。通常是标准 SPL Token Program (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) 或 Token-2022 Program (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb)。
-
options(对象,可选):一个可选的配置对象,包含以下常见字段:commitment(字符串,可选):指定承诺级别。encoding(字符串,可选):账户数据的编码。强烈建议使用"jsonParsed",因为它返回人类可读的账户信息。其他选项包括"base64","base64+zstd"。如果未指定,默认为"base64"。dataSlice(对象,可选):允许您仅检索账户数据的特定部分。包含offset(usize) 和length(usize) 字段。仅适用于base58,base64, orbase64+zstd编码。minContextSlot(u64, 可选):请求可以评估的最小插槽。
响应结构
JSON-RPC 响应中的result.value 字段是一个对象数组。每个对象表示一个具有 delegatePubkey 作为其委托并匹配 filter 标准的代币账户。数组中的每个对象都有两个字段:
pubkey(字符串):代币账户本身的 base-58 编码公钥。account(对象):包含代币账户详细信息的对象:lamports(u64):代币账户的 lamport 余额(用于租金豁免)。owner(字符串):拥有此账户的程序的公钥(例如,Token Program)。data:账户数据。如果使用"jsonParsed"编码,这将是一个具有program字段(例如,"spl-token")和一个包含结构化信息的parsed字段的对象:parsed.info:包含详细信息的对象,如:mint(字符串):代币的铸币地址。owner(字符串):代币账户的所有者(不是委托人)。tokenAmount(对象):此账户中的代币总余额(amount,decimals,uiAmount,uiAmountString)。delegate(字符串):委托人的公钥(应与请求中的delegatePubkey匹配)。delegatedAmount(对象):委托人被授权管理的代币数量(amount,decimals,uiAmount,uiAmountString)。isNative(布尔值):指示账户是否持有包裹的 SOL。state(字符串):代币账户的状态(例如,"initialized")。
parsed.type(字符串):账户的类型(例如,"account")。
executable(布尔值):账户是否可执行。rentEpoch(u64):此账户将在何时需要支付租金。space(u64, 如果未使用jsonParsed):原始账户数据的字节长度。
jsonParsed 编码):
代码示例
开发者提示
- 过滤器要求: 你必须在过滤参数中提供
mint或programId。如果没有这些过滤器之一,你不能查询所有代币类型的所有委任账户。 - 编码: 强烈建议为
encoding选项使用"jsonParsed",以便更轻松地处理数据,因为它将二进制账户数据解码为结构化的 JSON 格式。 - 性能: 使用
programId查询可能比使用mint更耗费资源,特别是如果委托人对许多不同的代币类型有权限。一些 RPC 提供商可能对这种方法有更严格的速率限制。 - 委任数量: 响应中的
delegatedAmount表示委托人当前被授权使用的代币最大数量。这可能小于账户中的总tokenAmount。 - 撤销委任: 此方法仅检索信息。要撤销委任,代币账户的所有者必须向 SPL Token Program 发送
Revoke指令。
getTokenAccountsByDelegate 查找基于批准的委托人的 SPL 代币账户的全面概述。