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

部署Hardhat节点到Heroku后调用web3.eth.getBalance()报错求助

问题解决步骤

核心问题分析

你遇到的R10 (Boot timeout)错误和JSON-RPC响应无效问题,根源是Hardhat Node启动时绑定了本地回环地址和固定端口,不符合Heroku的运行规则:

  • Heroku要求应用必须监听0.0.0.0(而非127.0.0.1),允许外部访问
  • 必须使用Heroku自动分配的$PORT环境变量,不能硬编码8545端口

步骤1:修改Hardhat启动命令

把启动脚本改成绑定0.0.0.0和Heroku的动态端口:

npx hardhat node --host 0.0.0.0 --port $PORT

步骤2:更新package.json的启动脚本

在项目的package.json里,将start字段替换成:

{
  "scripts": {
    "start": "npx hardhat node --host 0.0.0.0 --port $PORT"
  }
}

步骤3:修复Web3连接代码的混用问题

你的代码同时用了await和回调函数,Web3的getBalance支持Promise语法,建议简化成:

const Web3 = require("web3");
// 直接用Heroku应用域名,不需要加端口(Heroku会自动反向代理)
const web3 = new Web3("https://{myapp}.herokuapp.com");

async function getBalance(accountAddress) {
  console.log("Get Account balance called", accountAddress);
  try {
    const balanceInWei = await web3.eth.getBalance(accountAddress);
    const balanceInEth = web3.utils.fromWei(balanceInWei, "ether");
    console.log("Balance : ", balanceInEth, " ETH");
    return balanceInWei;
  } catch (err) {
    console.error("Error while retrieving account balance :", err);
    return 0;
  }
}

步骤4:验证部署状态

重新部署到Heroku后,查看日志确认:

  • 日志显示Started HTTP and WebSocket JSON-RPC server at http://0.0.0.0:XXXX/(XXXX是Heroku分配的端口)
  • 没有R10错误,应用状态为up

额外注意事项

  • Hardhat Node是测试节点,Heroku免费dyno休眠或重启后,所有链上数据会重置,这是正常特性
  • 如果需要持久化测试链数据,建议改用Ganache等支持数据持久化的节点工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:06:01