ethers.js连接Ganache部署合约报NETWORK_ERROR错误求助
问题背景
在本地使用Node.js + ethers.js 编写部署脚本,连接Ganache本地测试网部署SimpleStorage智能合约时,脚本输出部署等待提示后抛出NETWORK_ERROR错误,提示无法检测到网络。
原部署脚本代码
const ethers = require("ethers") // const solc = require("solc") const fs = require("fs-extra") async function main(){ // const provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:7545"); // const wallet = new ethers.Wallet( // "1ef159aa4f7ee5116a0f22652da709ccd8d35827b12a03eb24f22dd023591987", // provider // ) let provider = new ethers.providers.JsonRpcProvider("http://0.0.0.0:7545") let wallet = new ethers.Wallet("34db8b76c03356b47da8e1dcf427a35f9c013ce95a671ce23fe96d86fe2ba44b", provider) const abi = fs.readFileSync("./SimpleStorage_sol_SimpleStorage.abi", "utf8"); const binary = fs.readFileSync( "./SimpleStorage_sol_SimpleStorage.bin", "utf8" ) const contractFactory = new ethers.ContractFactory(abi, binary, wallet); console.log("Deploying, please wait.."); const contract = await contractFactory.deploy(); // Stop here! wait for contract to be deploy console.log(contract) } main() .then(() => process.exit(0)) .catch((error)=>{ console.error(error); process.exit(1); })
报错信息
Deploying, please wait.. Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.6.8) at Logger.makeError (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/logger/lib/index.js:233:21) at Logger.throwError (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/logger/lib/index.js:242:20) at JsonRpcProvider.<anonymous> (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:561:54) at step (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) at Object.throw (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) at rejected (/home/stars/forder/blockchain/leson5/ethers-simple-storage/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) at processTicksAndRejections (node:internal/process/task_queues:96:5) { reason: 'could not detect network', code: 'NETWORK_ERROR', event: 'noNetwork' }
故障原因
核心问题是RPC服务地址配置错误:0.0.0.0是服务端用于绑定所有网卡的监听地址,不能作为客户端访问本地服务的目标地址,客户端访问本机运行的服务必须使用127.0.0.1(本地回环地址)或者localhost。
其他可能触发同类错误的配置问题:
- Ganache客户端未正常启动,或RPC服务实际监听端口不是配置的7545,部分版本Ganache默认RPC端口为8545,可在Ganache设置页的
RPC SERVER栏核对实际端口 - 若在WSL2环境运行Node脚本、Ganache运行在Windows宿主机,直接使用127.0.0.1无法访问宿主机服务,需要替换为WSL2可访问的宿主机虚拟网卡IP,同时在Ganache设置中将监听地址改为
0.0.0.0放开所有网卡访问 - 本地系统防火墙拦截了7545端口的本地访问请求
修复步骤
- 修改Provider初始化配置,将地址中的
0.0.0.0替换为127.0.0.1,修正后的核心代码如下:
let provider = new ethers.providers.JsonRpcProvider("http://127.0.0.1:7545") // 确认私钥为当前运行的Ganache实例中分配的测试账户私钥 let wallet = new ethers.Wallet("你的Ganache测试账户私钥", provider)
- 确认Ganache已正常启动,且RPC端口配置与脚本中一致
- 重新执行部署命令
node deploy.js即可正常发起部署交易
优化建议:发起部署交易后,增加
await contract.deployed()逻辑等待交易确认上链,再输出合约实例信息,避免拿到未完成确认的合约对象。
内容的提问来源于stack exchange,提问作者Paweł Stach
相关产品推荐
相关产品推荐

