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

Hardhat连接localhost报HH108、ECONNREFUSED错误问题问询

Hardhat localhost网络连接被拒绝(HH108、ECONNREFUSED 127.0.0.1:8545)修复方案

问题根因

操作时混淆了Hardhat两个完全独立的网络环境,二者数据、运行逻辑完全不互通:

  • 执行npx hardhat run xxx --network hardhat时调用的是Hardhat内置的临时内存测试网络:这个网络仅在单条命令执行周期内存在,命令运行结束就会直接销毁,所有部署的合约、链上数据全部清空,且默认不会对外监听8545端口。
  • 执行带--network localhost参数的命令时,Hardhat会默认通过HTTP请求连接127.0.0.1:8545端口的本地持久化节点,未提前启动这个节点就会触发端口连接拒绝的报错。

修复步骤

按顺序操作即可解决:

  1. 启动本地Hardhat节点
    新开一个独立的终端窗口,进入twitter项目根目录,执行命令:
    npx hardhat node
    
    命令执行后会保持运行状态,默认监听8545端口,同时会输出10个预置了10000测试ETH的测试账户地址和私钥,操作全程不要关闭这个终端。
  2. 重新部署合约到本地节点
    再新开第二个终端窗口,进入同一个项目目录,执行部署命令,这次指定网络为localhost:
    npx hardhat run scripts/deploy.js --network localhost
    
    部署成功后终端会输出新的合约地址,复制留存即可。
  3. 连接控制台调用合约
    在第二个终端(或新开的第三个终端,只要不关闭运行node的第一个终端即可)执行控制台启动命令:
    npx hardhat console --network localhost
    
    进入控制台后,用第二步拿到的新合约地址执行实例化代码即可正常运行:
    const contract = await ethers.getContractAt("Decentratwitter","第二步复制的新部署地址")
    

常见踩坑排查

如果按上面步骤操作还是报错,逐一检查以下配置:

  • 检查hardhat.config.js中localhost网络的配置,默认配置如下,确认端口和chainId和启动节点时的输出一致(本地节点默认chainId为31337,默认端口8545):
    module.exports = {
      networks: {
        localhost: {
          url: "http://127.0.0.1:8545",
          chainId: 31337
        }
      }
    }
    
  • 如果启动节点时提示8545端口被占用,要么杀掉占用8545端口的其他进程,要么启动节点时指定其他端口,比如npx hardhat node --port 8546,同时把配置文件里localhost的url端口改成对应端口即可。
  • 不要在临时内存网络(--network hardhat)部署合约后,尝试在localhost网络读取合约数据,两个环境完全隔离,数据不会同步。

内容的提问来源于stack exchange,提问作者Avinash kumar Mahato

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:06:21