如何在Archway获取智能合约余额?需将BankQuery转为String/u128
在Archway链中将BankQuery余额结果转为String/u128类型
首先要明确:BankQuery::Balance只是查询的构造结构体,你需要先执行这个查询拿到实际的响应结果,再提取余额数值。在Archway基于的CosmWasm框架中,执行该查询后会返回BalanceResponse类型,从中可以提取出需要的String或u128类型余额。
步骤示例
- 构造并执行查询
use cosmwasm_std::{BankQuery, QueryRequest, BalanceResponse}; // 构造余额查询 let balance_query = QueryRequest::Bank(BankQuery::Balance { denom: "uarch".to_string(), // 替换为目标资产的最小单位 address: "你的合约或账户地址".to_string(), }); // 在合约的query函数中执行查询,获取响应 let balance_response: BalanceResponse = deps.querier.query(&balance_query)?;
- 提取String类型余额
BalanceResponse中的amount是Coin结构体,其amount字段本身就是String类型:
let balance_string: String = balance_response.amount.amount;
- 转换为u128类型余额
通过parse方法将String转为u128,注意处理可能的解析错误:
let balance_u128: u128 = balance_response.amount.amount.parse()?;
注意事项
- 确保使用的denom是资产的最小单位(比如Archway主网的
uarch,1 ARCH等于1,000,000 uarch) parse方法可能返回错误,但CosmWasm返回的余额数值都是合法的数字字符串,一般不会出现解析失败的情况
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

