如何在Hedera区块链网络免费执行智能合约只读调用?
Hedera智能合约免费只读调用解决方案
你当前的问题核心是用错了API类型:ContractExecuteTransaction是用来提交修改链上状态的交易,哪怕你的函数是只读的,只要走交易流程就会消耗HBAR——因为交易需要被节点打包确认。要实现免费的只读调用,必须用查询类的ContractCallQuery。
正确的代码实现如下:
// 创建只读查询实例 const query = new ContractCallQuery() .setContractId(newContractId) .setFunction("get_message") .setQueryPayment(0); // 显式设置0费用,确保无HBAR消耗 // 执行查询并解析结果 const response = await query.execute(client); // 根据合约函数返回类型解析,这里返回字符串用getString(0) const message = response.getString(0); console.log("获取到的消息:", message);
关键说明:
ContractCallQuery属于Hedera的查询操作,仅读取链上数据,不会修改状态,因此不需要消耗HBAR- 显式调用
setQueryPayment(0)可以强制SDK不发起费用支付请求,避免不必要的扣费(部分SDK版本默认已处理,但显式设置更稳妥) - 解析返回值时要和合约函数的返回类型匹配,比如返回整数用
getInt64(0),返回布尔值用getBool(0)等
内容的提问来源于stack exchange,提问作者Acehilm
相关产品推荐
相关产品推荐

