getTokenAccountBalance RPC 方法返回特定 SPL Token 帐户的代币余额。这对于需要显示或验证代币帐户持有的特定代币数量的应用程序至关重要。
常见用例
- 显示用户代币余额: 向用户展示他们在钱包(关联代币账户)中拥有多少特定代币。
- 验证代币可用性: 在尝试转账或其他操作之前,检查代币账户是否有足够的余额。
- 投资组合跟踪: 汇总用户在不同代币账户中的代币余额。
- 智能合约交互: 智能合约可能会查询代币余额作为其逻辑的一部分(尽管链上程序通常直接从账户信息中访问此数据)。
请求参数
- 代币账户公钥(字符串,必填):要查询的 SPL Token 账户的 base-58 编码公钥。
- 配置对象(对象,可选):一个可选对象,可以包含以下字段:
commitment(字符串,可选):指定查询的承诺级别。如果省略,则使用 RPC 节点的默认承诺(通常是finalized)。
响应结构
JSON-RPC 响应中的result 字段包含一个具有 context 和 value 字段的对象。value 对象持有余额信息:
amount(字符串):代币账户的原始余额,作为字符串表示。这是表示代币最小单位的整数(例如,如果代币有 6 位小数,则“1000000”表示 1 个代币)。decimals(u8):为此代币类型定义的小数位数(由其 mint 决定)。uiAmount(数字 | null):根据decimals计算的浮点数格式的余额。在某些情况下,此字段可能为null或者在某些上下文中被弃用,优先于uiAmountString。uiAmountString(字符串):根据decimals计算的字符串格式的余额。为了避免潜在的浮点不准确,这通常是优先用于显示的。
代码示例
开发者提示
- 代币账户 vs. 铸造账户 vs. 拥有者账户: 确保您提供的是SPL代币账户的公钥,而不是代币的铸造地址或拥有者的钱包地址。通常,您可以使用
getTokenAccountsByOwner获取拥有者的代币账户。 - 小数位: 始终使用
decimals字段来正确解释amount。为了避免浮点精度问题,显示时一般更安全的是使用uiAmountString而非uiAmount。 - 不存在的账户: 如果提供的公钥未对应到现有的代币账户,行为可能会根据RPC提供商或库稍有不同,但通常响应中的
value会是null或抛出错误。JavaScript示例中包含对balance.value的基本检查。 - 承诺水平: 使用不同的承诺水平可能影响您看到余额变动的速度,尤其是对于非常近期的交易。
finalized是最安全的,但延迟最大。
getTokenAccountBalance 方法准确获取并解释 SPL 代币余额。