这篇文章详细介绍了在Solana上检查SPL代币账户余额的五种方法,包括使用SPL-Token命令行接口、JavaScript API、SPL Token程序API、cURL脚本和Rust语言,文中提供了具体的代码示例和使用步骤,非常适合开发者了解和应用。
如果你计划在 Solana 上构建 DeFi 协议、钱包、NFT 平台或任何类型的支付应用程序,你需要能够检查 Solana SPL 代币账户的余额。在本指南中,我们将介绍五种简单的方法来检查 SPL 代币账户的余额:
2gS6PA4z17TuboiWyowsHDzdMbhhb4v5GBGSXBQqLG2U
)。如果你不知道你的代币账户地址,请查看我们的 指南:查找 Solana 钱包和铸币的关联代币地址的五种方法依赖项 | 版本 |
---|---|
solana-cli | 1.16.14 |
spl-token-cli | 3.1.1 |
node.js | 16.15 |
curl | 8.1.12 |
@solana/web3.js | 1.78.5 |
@solana/spl-token | 0.3.7 |
solana-sdk | 1.16.14 |
solana-client | 1.6.14 |
cargo | 1.69.0 |
Solana 基础知识:集群
在查询我们的代币账户之前,让我们快速回顾一下 Solana 的集群,因为在检查钱包余额时,我们需要指定一个特定的集群。“Solana 集群是一组验证者共同工作,以服务客户交易并维护账本的完整性。许多集群可能共存。” (来源:docs.solana.com/cluster/overview)。实际上,Solana 维护三个各自服务于不同目的的集群:
在本指南中,我们将使用 Mainnet-Beta
,但你应该知道一个钱包可以同时在每个集群上有余额。
我们首先的方法是使用 Solana SPL-Token CLI 检查钱包的余额。如果尚未安装,请按照你操作环境的说明访问 spl.solana.com/token。为了确保你的安装成功,请打开一个新的终端并输入:
spl-token --version
你应该会看到类似于以下内容:
你准备好了!你只需要将你的代币账户地址准备好——如果你不知道你的代币账户地址,请查看我们的 指南:查找 Solana 钱包和铸币的关联代币地址的五种方法。
在你的终端中,通过输入以下命令获取你的钱包余额:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -um
Solana 基础知识:集群
你可以通过修改 -u
(Solana 的 JSON RPC 的 URL)选项来修改搜索,以获取该钱包在不同集群上的余额。我们使用 -um
确保我们正在 Solana 的主网上进行搜索。要获取 devnet 或 testnet 的余额,请尝试:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u devnet # 用于 Devnet
## 或
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u testnet # 用于 Testnet
这些默认集群(mainnet-beta、testnet、devnet)是公共 JSON RPC 端点。如果你计划进行大量查询或在 Solana 上构建,你可能希望拥有自己的端点。
看看为什么超过 50% 的 Solana 项目选择 QuickNode 并在 这里 注册一个 免费的 账户。你将需要一个主网节点以查询钱包的真实余额:
你现在可以修改查询以使用你的端点:
spl-token balance --address YOUR_TOKEN_ACCOUNT_ADDRESS -u https://example.solana.quiknode.pro/000000/
干得不错!
在你的终端中创建一个新项目目录和文件 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,并在第一行引用 @solana/web3.js。我们将从此包中解构 Connection 和 PublicKey 类。
const { Connection, PublicKey } = require('@solana/web3.js');
在第 3-5 行中,定义你的钱包、铸币和相关程序(代币程序和关联代币程序):
const QUICKNODE_RPC = 'https://example.solana.quiknode.pro/000000/'; // 👈 替换为你的 QuickNode 端点或 clusterApiUrl('mainnet-beta')
const SOLANA_CONNECTION = new Connection(QUICKNODE_RPC);
const TOKEN_ADDRESS = new PublicKey('YOUR_TOKEN_ACCOUNT_ADDRESS'); //👈 替换为你的钱包地址
最后,通过创建并调用一个新函数 getTokenBalanceWeb3()
来获取你的地址,该函数调用 Connection 类上的 getTokenAccountBalance
方法:
async function getTokenBalanceWeb3(connection, tokenAccount) {
const info = await connection.getTokenAccountBalance(tokenAccount);
if (info.value.uiAmount == null) throw new Error('未找到余额');
console.log('余额 (使用 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。
运行你的代码。在你的终端输入,
node balance
你应该会看到类似于以下内容:
干得不错!
Solana SPL Token API 使这个过程变得更加简单。让我们看看如何使用 SPL Token API 获取关联代币账户的地址。
首先,安装 SPL Token Program:
yarn add @solana/spl-token
或
npm install --save @solana/spl-token
打开 balance.js,在第一行(在之前的导入之前)引用 @solana/spl-token。我们将从此包中解构 getAccount
和 getMint
方法。
const { getAccount, getMint } = require('@solana/spl-token');
现在,在脚本的底部创建并调用一个新函数 getTokenBalanceSpl
,该函数将获取你的代币账户,然后获取与该代币账户关联的铸币(以处理小数):
async function getTokenBalanceSpl(connection, tokenAccount) {
const info = await getAccount(connection, tokenAccount);
const amount = Number(info.amount);
const mint = await getMint(connection, info.mint);
const balance = amount / (10 ** mint.decimals);
console.log('余额 (使用 Solana-Tokene Program): ', balance);
return balance;
}
getTokenBalanceSpl(SOLANA_CONNECTION, TOKEN_ADDRESS).catch(err => console.log(err));
尽管这种方法稍微冗长,但它是获取代币账户余额和处理小数的好方法。请注意,我们必须将 getAccount
调用返回的 amount
转换为数字(因为返回的值是 bigint),并且我们必须获取代币铸币的详细信息以获取小数(然后我们将其用于将 amount
除以以得到余额)。
运行你的代码。在你的终端输入,
node balance
你应该会看到这两种方法返回相同的余额:
干得不错!
cURL 是一个命令行工具和库,用于通过 URL 传输数据。大多数基于 *nix 的系统开箱即用地支持 cURL。通过运行以下命令检查你是否安装了 cURL:
curl -h
如果你没有安装,请前往 curl.se 进行设置。
准备好后,你只需在终端中放入以下 HTTP 请求(确保替换你的端点和代币账户地址)。在你的终端中输入:
curl https://docs-demo.solana-mainnet.quiknode.pro/ \
-X POST \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0", "id":1, "method":"getTokenAccountBalance", "params": ["YOUR_TOKEN_ACCOUNT_ADDRESS"]}'
你应该会看到类似于以下内容的结果:
注意:如果你偏好格式化的 JSON 数据,可以使用像 jq 的包。
注意到在 result.value.uiAmount
字段中返回了相同的余额 🙌。请查看我们的 文档 以获取有关 getTokenAccountBalance
方法的更多信息。
如果你是 Rust 开发人员,你还可以使用 Solana Rust SDK。在你的项目文件夹中,使用以下命令启动新项目:
cargo new token-balance
导航到新创建的目录:
cd token-balance
在你的 Cargo.toml 文件中添加必要的依赖项:
[dependencies]
solana-sdk = "1.16.14"
solana-client = "1.6.14"
打开 src/main.rs,在第 1 行中导入必要的包:
use solana_sdk::pubkey::Pubkey;
use solana_client::rpc_client::RpcClient;
use std::str::FromStr;
在第 5-6 行中,定义你的代币账户地址:
const TOKEN_ADDRESS: &str = "YOUR_TOKEN_ADDRESS";
最后,创建你的 main
函数,通过将你所有者和铸币的公钥传入 get_token_account_balance
方法来获取你的地址:
fn main() {
let associated_token_address = Pubkey::from_str(TOKEN_ADDRESS).unwrap();
let connection = RpcClient::new("https://example.solana.quiknode.pro/000000/".to_string()); // 👈 替换为你的 QuickNode 端点
let account_data = connection.get_token_account_balance(&associated_token_address).unwrap();
println!("代币余额 (使用 Rust): {}", account_data.ui_amount_string);
}
编译并运行你的代码。在你的终端输入,
cargo build
cargo run
你应该会看到返回你的相同代币地址的结果:
干得不错!
做得很好!你现在拥有了五个有用的工具,用于获取 Solana SPL 代币账户的余额。如果你刚刚开始你的 Solana 之旅,以下是一些可能有用的资源:
我们希望听到更多关于你正在构建的内容。在 Discord 上给我们留言,或者在 Twitter 上关注我们,及时了解所有最新信息!
告诉我们 如果你有任何反馈或对新主题的请求。我们期待你的来信。
- 原文链接: quicknode.com/guides/sol...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!