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

智能合约/彩票合约:运行deploy_lottery.py执行enter_lottery时报资金不足错误

deploy_lottery.py enter_lottery 阶段余额不足报错解决方案
  • 报错根因:sender doesn't have enough funds to send tx 触发原因是enter_lottery交易需要同时支付抽奖入场费和链上gas费,而start_lottery仅需支付gas费即可执行,因此前序步骤正常、入场步骤报错。
  • 本地开发链账户余额修复方案:
    • 若使用Hardhat本地节点:在hardhat.config.js的networks.hardhat.accounts配置项中,找到对应带id标识的账户,调高balance字段值(单位为wei),建议设置为"10000000000000000000000"(对应10000测试ETH)即可覆盖常规测试场景的费用需求。
    • 若使用Ganache本地节点:打开Ganache控制台,找到目标id的账户,直接向该地址转账1000以上的测试ETH即可。
    • 若使用Brownie自带本地开发链:在脚本初始化带id的目标账户后,调用本地链默认高余额账户向其转账,示例代码:
      # accounts[0]为Brownie本地链默认生成的初始高余额账户
      accounts[0].transfer(your_target_account, "100 ether")
      
  • 前置校验步骤:调用enter_lottery前增加余额校验逻辑,避免重复踩坑,示例代码:
from brownie import Wei

# 打印当前调用账户余额
print(f"账户余额:{account.balance()} wei")
# 计算交易所需总费用:入场费 + 预估gas * gas单价
enter_fee = lottery.getEnterFee()
est_gas = lottery.enter_lottery.estimate_gas({"from": account})
gas_price = Wei("20 gwei")
total_required = enter_fee + est_gas * gas_price
print(f"交易总需费用:{total_required} wei")
assert account.balance() > total_required, "账户余额不足以支付交易费用"

本地开发链测试ETH无实际价值,可随意调高账户余额避免同类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:45:06