You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提高Hardhat Anvil用户默认余额?解决gas耗尽问题

解决Anvil集成测试中的"Error: ran out of gas"问题

一、提高账户初始余额

启动Anvil时,直接用--balance参数全局设置所有默认账户的初始余额(单位为ETH)。比如要把每个账户余额设为100000 ETH,执行:

anvil --balance 100000

如果启动节点后需要单独给某个账户补余额,可调用Anvil专属的anvil_setBalance RPC方法,以ethers.js为例:

await provider.send("anvil_setBalance", [
  "目标账户地址",
  ethers.utils.parseEther("50000").toHexString()
]);

二、降低Gas价格

启动节点时全局设置

启动Anvil时通过--gas-price参数设置更低的Gas价格,测试环境甚至可以设为0:

# 设置为1 Gwei
anvil --gas-price 1000000000
# 直接设为0(测试场景无风险)
anvil --gas-price 0

单交易手动指定

发送交易时,手动指定Gas价格参数(支持传统gasPrice或EIP-1559的maxFeePerGas/maxPriorityFeePerGas):

// 传统Gas价格示例
await contract.connect(testUser).executeOperation({
  gasPrice: ethers.utils.parseUnits("1", "gwei")
});

// EIP-1559格式示例
await contract.connect(testUser).executeOperation({
  maxFeePerGas: ethers.utils.parseUnits("2", "gwei"),
  maxPriorityFeePerGas: ethers.utils.parseUnits("0.5", "gwei")
});

三、其他关键排查点

  • 检查单个交易的Gas限制:复杂合约操作可能需要更高的gasLimit,发送交易时手动指定:{ gasLimit: 2000000 }
  • 确认转账有效性:如果之前手动转账后仍出现问题,先验证转账交易是否成功上链,避免因转账失败导致余额未更新
  • 批量初始化余额:写一个初始化脚本,一次性给所有10个测试账户批量转账,确保每个账户都有足够余额用于测试

内容的提问来源于stack exchange,提问作者NewToCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:22:27