错误:无法检测网络(事件=“noNetwork”,代码=NETWORK_ERROR,版本=providers/5.6.8)

问题描述 投票:0回答:9

我想连接到ganache,但收到错误,我不知道如何解决。这是我的deploy.js代码,它是脚本node.js

    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'
     }

我做错了什么?

node.js blockchain ethers.js
9个回答
9
投票

您正在学习 Freecodecamp pattric collins 教程。您正在 WSL ubuntu 终端中工作并在本地安装了 Ganache,并且必须位于 WSL 服务器中。所以,Ganache 与不同的环境没有联系。 转到 Ganache 并单击“设置”,然后转到服务器并选择 WSL 作为服务器。 保存后重新启动 Ganache。 在您的连接代码中的代码中替换此

const provider = new ethers.providers.JsonRpcProvider(
    "HTTP://172.27.224.1:7545"
  );

或使用您显示的 JSON-RPC。它会对你有用。谢谢


3
投票

https://github.com/smartcontractkit/full-blockchain-solidity-course-js/blob/main/chronological-updates.md#using-the-wsl-endpoint

请按照上面的网络链接中适合您的 4 个步骤之一进行操作。

如果有帮助请告诉我。

谢谢 马努


1
投票

如果您使用的是 Windows 并使用

WSL-UBUNTU
,只需转到 Ganache 中的服务器设置并将服务器重置为:

vETHERNET - WSL

Example

enter image description here


1
投票

如果您正在遵循 Freecodecamp pattric collins 教程并且您正在 WSL ubuntu 中工作。

这对我有用👍 选项 1:如果您想在 WSL 本身上安装并运行 Ganache👇

  1. 在 WSL 上安装 Ganache

    yarn add ganache

  2. 运行甘纳许

    yarn run ganache

  3. 从终端屏幕底部复制 RPC URL (127.0.0.1:8545),显示 RPC Listening on 127.0.0.1:8545 并将其粘贴到 ethers.js JsonRpcProvider( ) 函数参数中。

  4. 还可以在向上滚动终端屏幕时复制任何私钥并将其粘贴到 ethers.js Wallet( ) 函数参数中。

  5. 现在让这个终端在后台运行,因为我们希望 Ganache 服务器运行。 因此,打开一个新终端并通过运行以下命令来运行deploy.js文件: 节点部署.js

选项 2:如果您想在 Windows 上运行 Ganache(如果您已经在 Windows 上安装了 Ganache)👇

  1. 转到 Ganache Windows GUI 右上角的设置(齿轮图标)。 移至“服务器”选项卡并将主机名更改为 WSL(我的也适用于 VirtualBox 和 WiFi) 端口号和网络 ID 可以保持不变。

  2. 单击用户界面右上角的“保存并重新启动”。

  3. 现在从 RPC SERVER 复制 RPC URL 并将其粘贴到 ethers.js JsonRpcProvider( ) 函数参数中。

  4. 还可以复制任何私钥并将其粘贴到 ethers.js Wallet( ) 函数参数中。

  5. 重要步骤(防火墙设置): 转到 Windows 上的高级安全 Windows Defender 防火墙。 单击入站规则并搜索 Ganache 右键单击 Ganache 并转到属性。 然后选中允许连接的复选框并单击“应用”。并关闭此防火墙窗口。

  6. 通过在 WSL 终端窗口中运行以下命令来运行 deploy.js 文件: 节点部署.js


1
投票

网络连接不良

当您失去网络连接时也会发生这种情况。当您无法成功向外部节点提供商(Alchemy、Infura 等)发送交易请求时,即使所有配置都正常,您也可能会看到此错误。


0
投票

对我来说,我在

ganache-cli
中安装了
wsl
,它能够连接到
ganache-cli
- 直接在
WSL2
上运行。

以防万一这有帮助。


0
投票

如果您在 WSL 中运行代码但 Ganache 在 Windows 中打开,则会发生这种情况。按照此处另一个答案中给出的 URL 进行操作。对我来说,更改 ganache UI 上的服务器有帮助


0
投票

对于遇到此错误的 MacOS 用户,只需启动并运行 Ganache,然后尝试使用 Node 再次运行即可。


0
投票

对于我来说,React Native 和 ethers.js 解决了这个问题:https://github.com/ethers-io/ethers.js/issues/1995#issuecomment-2100354985

补丁

node_modules/@ethersproject/web/lib/browser-geturl.js

// ...
-var bytes_1 = require("@ethersproject/bytes");
+var strings_1 = require("@ethersproject/strings");
// ...
                case 1:
                    response = _a.sent();
-                    return [4 /*yield*/, response.arrayBuffer()];
+                    return [4 /*yield*/, response.text()];
                case 2:
                    body = _a.sent();
                    headers = {};
                    if (response.headers.forEach) {
                        response.headers.forEach(function (value, key) {
                            headers[key.toLowerCase()] = value;
                        });
                    }
                    else {
                        ((response.headers).keys)().forEach(function (key) {
                            headers[key.toLowerCase()] = response.headers.get(key);
                        });
                    }
                    return [2 /*return*/, {
                            headers: headers,
                            statusCode: response.status,
                            statusMessage: response.statusText,
-                            body: (0, bytes_1.arrayify)(new Uint8Array(body)),
+                            body: strings_1.toUtf8Bytes(body),
                        }];

尝试使用

isomorphic-unfetch
node-fetch
进行填充,但没有成功

© www.soinside.com 2019 - 2024. All rights reserved.