使用Ethers.js向Ganache部署智能合约时JsonRpcProvider网络检测失败
解决Ethers.js部署至Ganache时的ECONNREFUSED连接错误
部署SimpleStorage智能合约到Ganache本地节点时出现以下连接错误:
正在部署合约,请稍候... JsonRpcProvider 无法检测网络,无法启动;1秒后重试(可能是URL错误或节点未启动)错误:连接 ECONNREFUSED 127.0.0.1:7545
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1532:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect',
address: '127.0.0.1', port: 7545 }
以下是分步解决方法:
1. 确认Ganache节点处于运行状态
- 打开Ganache客户端,启动一个本地区块链工作区
- 查看Ganache界面右上角的RPC服务器地址,确认是
http://127.0.0.1:7545;如果端口不同,同步修改deploy.js中的RPC地址
2. 检查7545端口是否被占用
使用命令排查端口占用情况:
# Windows系统 netstat -ano | findstr :7545 # macOS/Linux系统 lsof -i :7545
- 如果端口被其他程序占用,关闭占用程序,或者修改Ganache的端口设置,同时更新
deploy.js中的RPC地址
3. 验证deploy.js中的RPC地址正确性
- 确保
ethers.JsonRpcProvider的参数与Ganache显示的RPC地址完全一致,包括协议(http/https)、IP地址和端口号 - 避免出现IP拼写错误(如写成
127.0.0.0)或端口号写错的情况
4. 修复Ethers.js版本兼容性问题
当前package.json同时安装了Ethers v6.10.0和旧版的@ethersproject/providers v5.7.2,两者存在兼容性冲突:
- 卸载旧版依赖:
npm uninstall @ethersproject/providers
- 修改
deploy.js,删除以下冗余代码行:
const { JsonRpcProvider } = require("@ethersproject/providers");
Ethers v6已内置JsonRpcProvider,无需单独引入旧版模块
5. 提前验证钱包私钥有效性
检查Ganache界面中生成的账户私钥,确保deploy.js中使用的私钥属于Ganache节点内的账户,避免后续部署时出现签名失败问题
内容的提问来源于stack exchange,提问作者Azan Hyder
相关产品推荐
相关产品推荐

