如果您计划在 Solana 上构建 DeFi 协议、钱包、NFT 平台或任何类型的支付应用程序,则需要能够检查 Solana SPL 代币帐户的余额。在本指南中,我们将介绍五种简单的方法来检查 SPL 代币帐户的余额:
使用 Solana 的 SPL-Token 命令行界面 (SPL-Token CLI)
使用 Solana 的 JavaScript API
使用 Solana 的 SPL 代币计划 API
使用 cURL 脚本
使用 Rust
依赖 | 版本 |
---|---|
solana 命令行工具 | 1.16.14 |
spl-token-cli | 3.1.1 |
节点.js | 16.15 |
卷曲 | 8.1.12 |
@solana/web3.js | 1.78.5 |
@solana/spl-令牌 | 0.3.7 |
solana-sdk | 1.16.14 |
solana 客户端 | 1.6.14 |
货物 | 1.69.0 |
在查询我们的代币账户之前,让我们快速回顾一下 Solana 的集群,因为我们需要在检查钱包余额时指定一个特定的集群。“Solana 集群是一组验证器,它们共同协作以服务客户端交易并维护账本的完整性。许多集群可能共存。”。事实上,Solana 维护着三个集群,每个集群都有不同的用途:
主网 Beta 版:使用真实代币的生产、无需许可的环境
Devnet:应用程序开发人员测试 Solana 应用程序的游乐场(Devnet 上的代币不是真实的,也没有财务价值)。Devnet 通常运行与 Mainnet Beta 相同的软件版本
测试网:Solana 核心贡献者和验证者对新更新和功能进行压力测试的环境,重点是测试网络性能(测试网上的代币不是真实的,也没有财务价值)
对于本指南,我们将使用Mainnet-Beta
,但您应该知道一个钱包可以同时在每个集群上拥有余额。
方法 1-SPL-Token CLI
我们的第一种方法是使用 Solana SPL-Token CLI 检查钱包余额。如果您尚未安装它,请按照spl.solana.com/token上针对您的操作环境的说明进行操作。为确保安装成功,请打开一个新终端并输入:
spl-token --version
你应该看到类似这样的内容:
您已准备就绪!您需要做的就是准备好您的代币账户地址——如果您不知道您的代币账户地址。
在您的终端中,输入以下命令获取您的钱包余额:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
-u
您可以通过修改(Solana 的 JSON RPC 的 URL)选项来修改搜索以获取不同集群上该钱包的余额。我们已使用-um
以确保我们在 Solana 的主网上进行搜索。要获取开发网或测试网余额,请尝试:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
这些默认集群(mainnet-beta、testnet、devnet)是公共 JSON RPC 端点。如果您计划在 Solana 上进行大量查询或构建,您可能需要一个自己的端点。
您现在可以使用 Solana 上的 USDC 支付 QuickNode 计划。作为第一家接受 Solana 付款的多链提供商,我们正在为开发人员简化流程——无论您是创建新帐户还是管理现有帐户。
您现在可以修改查询以使用您的端点:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u https://example.solana.quiknode.pro/000000/
做得好!
方法 2-Solanaeb3.js
在终端中创建一个新的项目目录和文件balance.js ,并使用以下命令:
mkdir token-address && cd token-address && echo > balance.js
安装 Solana Web3 依赖项:
yarn init -y
yarn add @solana/web3.js@1
或者
npm init -y
npm install --save @solana/web3.js@1
在所选的代码编辑器中打开balance.js ,在第 1 行,需要@solana/web3.js。我们将从此包中解构Connection和PublicKey类。
const { Connection, PublicKey } = require('@solana/web3.js');
您现在可以访问 RPC 端点的日志,从而帮助您更有效地解决问题。如果您在 RPC 调用中遇到问题,只需检查 QuickNode 仪表板中的日志即可快速识别和解决问题。
在第 3-5 行,定义您的钱包、铸币和相关程序(代币程序和相关代币程序):
const QUICKNODE_RPC = 'https://example.solana.quiknode.pro/000000/'; // 👈 Replace with your QuickNode Endpoint OR clusterApiUrl('mainnet-beta')
const SOLANA_CONNECTION = new Connection(QUICKNODE_RPC);
const TOKEN_ADDRESS = new PublicKey('YOUR_TOKEN_ACCOUNT_ADDRESS'); //👈 Replace with your wallet address
最后,通过创建并调用一个新函数来获取您的地址,getTokenBalanceWeb3()
该函数调用ConnectiongetTokenAccountBalance
类上的方法来:
async function getTokenBalanceWeb3(connection, tokenAccount) {
const info = await connection.getTokenAccountBalance(tokenAccount);
if (info.value.uiAmount == null) throw new Error('No balance found');
console.log('Balance (using Solana-Web3.js): ', info.value.uiAmount);
return info.value.uiAmount;
}
getTokenBalanceWeb3(SOLANA_CONNECTION, TOKEN_ADDRESS).catch(err => console.log(err));
返回值包括amount
和uiAmount
。amount
响应包含基于代币铸币的额外小数。这是因为 Solana 将小数作为整数存储在链上以避免浮点运算。uiAmount
响应是amount
除以铸币小数。例如,如果amount
为 1000000000 且铸币小数值为 9,则uiAmount
为 1。如果amount
为 1000000000 且铸币小数值为 6,则uiAmount
为 1000。
运行你的代码。在终端中输入:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
0
你应该看到类似这样的内容:
方法 3 - Solana 代币计划
Solana SPL Token API 使这个过程变得更容易一些。让我们看看如何使用 SPL Token API 获取关联代币帐户的地址。
首先,安装 SPL 令牌程序:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
1
或者
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
2
打开balance.js,在第 1 行(在我们之前的导入之前)需要@solana/spl-token。我们将从这个包中解构getAccount
和getMint
方法。
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
3
现在,在脚本的底部,创建并调用一个新函数,getTokenBalanceSpl
该函数将获取你的代币帐户,然后获取与该代币帐户关联的铸币(用于处理小数):
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
4
虽然这种方法有点冗长,但它是获取代币帐户余额和处理小数的好方法。请注意,我们必须将amount
调用返回的值转换getAccount
为数字(因为返回值是bigint),并且必须获取代币铸币详细信息以获取小数(然后我们用它除以小数amount
以获得余额)。
运行你的代码。在终端中输入:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
0
您应该看到两种方法返回相同的余额:
方法 4URL
cURL 是一个命令行工具和库,用于通过 URL 传输数据。大多数基于 *nix 的系统都具有现成的 cURL 支持。运行以下命令检查您是否具有该支持:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
6
如果您尚未安装,请前往curl.se进行设置。
准备就绪后,您需要做的就是将此 HTTP 请求放入终端中(确保替换您的端点和令牌帐户地址)。在您的终端中输入:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
7
你应该看到类似这样的内容:
注意:如果愿意,您可以使用jq之类的包来返回格式化的 JSON 数据。
请注意,字段中返回了相同的余额result.value.uiAmount
🙌。
方法 5ust
如果你是 Rust 开发人员,你也可以使用Solana Rust SDK。在项目文件夹中,使用以下命令启动一个新项目:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
8
导航到新创建的目录:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
9
将必要的依赖项添加到您的Cargo.toml文件:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
0
打开src/main.rs,在第 1 行导入必要的包:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
1
在第 5-6 行,定义你的代币账户地址:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
2
最后,创建你的main
函数,通过将你的所有者和铸币者的公钥传递到get_token_account_balance
方法中来获取你的地址:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
3
编译并运行代码。在终端中输入:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # for Devnet
# or
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # for Testnet
4
你应该会看到返回相同的令牌地址: