Archway升级后使用arch3.js发送交易遇gas不足错误求助
解决Archway V4.0.0补丁+CLI V2更新后的交易Gas超限问题
问题现象
更新Archway CLI到V2并安装V4.0.0补丁后,合约读取功能正常,但发送交易时触发Gas超限错误,报错详情:
Error: Error when broadcasting tx DBBC8D3AD1923DE02D019A105879FBEFDFC76C07CB55084CDCBF0A3665C8ADAE at height 1688875. Code: 11; Raw log: out of gas in location: WriteFlat; gasWanted: 182764, gasUsed: 184087: out of gas
该问题在使用Keplr插件的前端代码、调用DirectSecp256k1HdWallet的后端JS代码中均会出现。
解决方案
手动提高交易Gas上限
V4.0.0补丁可能调整了合约写入操作的Gas计算逻辑,默认预估量不足以覆盖实际消耗。构建交易时,手动将gasWanted设为实际消耗值的1.1~1.2倍(比如本次案例可设为200000),预留足够余量。- 前端Keplr代码示例:
const tx = await keplr.signAndSend(txMsg, { gas: "200000", // 手动指定Gas上限 feeAmount: [{ denom: "uarch", amount: "20000" }] // 对应调整手续费 }); - 后端DirectSecp256k1HdWallet代码示例:
const txBuilder = await client.sign( walletAddress, msgs, { gasLimit: 200000, // 手动设置Gas上限 amount: [{ denom: "uarch", amount: "20000" }] }, "" );
- 前端Keplr代码示例:
调整CLI的Gas预估配置
检查Archway CLI的Gas预估参数,执行命令查看当前配置:archway config get gas-adjustment若返回值小于1.1,调整为1.1或更高:
archway config set gas-adjustment 1.1该配置会让CLI自动在预估Gas基础上增加10%余量,避免超限。
优化合约写入逻辑
补丁更新可能暴露了合约中之前未触发的冗余写入操作。检查合约WriteFlat相关代码,移除不必要的存储写入,降低Gas消耗。
内容的提问来源于stack exchange,提问作者appferreira
相关产品推荐
相关产品推荐

