我想连接到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'
}
我做错了什么?
您正在学习 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。它会对你有用。谢谢
请按照上面的网络链接中适合您的 4 个步骤之一进行操作。
如果有帮助请告诉我。
谢谢 马努
如果您使用的是 Windows 并使用
WSL-UBUNTU
,只需转到 Ganache 中的服务器设置并将服务器重置为:
vETHERNET - WSL
如果您正在遵循 Freecodecamp pattric collins 教程并且您正在 WSL ubuntu 中工作。
这对我有用👍 选项 1:如果您想在 WSL 本身上安装并运行 Ganache👇
在 WSL 上安装 Ganache
yarn add ganache
运行甘纳许
yarn run ganache
从终端屏幕底部复制 RPC URL (127.0.0.1:8545),显示 RPC Listening on 127.0.0.1:8545 并将其粘贴到 ethers.js JsonRpcProvider( ) 函数参数中。
还可以在向上滚动终端屏幕时复制任何私钥并将其粘贴到 ethers.js Wallet( ) 函数参数中。
现在让这个终端在后台运行,因为我们希望 Ganache 服务器运行。 因此,打开一个新终端并通过运行以下命令来运行deploy.js文件: 节点部署.js
选项 2:如果您想在 Windows 上运行 Ganache(如果您已经在 Windows 上安装了 Ganache)👇
转到 Ganache Windows GUI 右上角的设置(齿轮图标)。 移至“服务器”选项卡并将主机名更改为 WSL(我的也适用于 VirtualBox 和 WiFi) 端口号和网络 ID 可以保持不变。
单击用户界面右上角的“保存并重新启动”。
现在从 RPC SERVER 复制 RPC URL 并将其粘贴到 ethers.js JsonRpcProvider( ) 函数参数中。
还可以复制任何私钥并将其粘贴到 ethers.js Wallet( ) 函数参数中。
重要步骤(防火墙设置): 转到 Windows 上的高级安全 Windows Defender 防火墙。 单击入站规则并搜索 Ganache 右键单击 Ganache 并转到属性。 然后选中允许连接的复选框并单击“应用”。并关闭此防火墙窗口。
通过在 WSL 终端窗口中运行以下命令来运行 deploy.js 文件: 节点部署.js
网络连接不良
当您失去网络连接时也会发生这种情况。当您无法成功向外部节点提供商(Alchemy、Infura 等)发送交易请求时,即使所有配置都正常,您也可能会看到此错误。
对我来说,我在
ganache-cli
中安装了 wsl
,它能够连接到 ganache-cli
- 直接在 WSL2
上运行。
以防万一这有帮助。
如果您在 WSL 中运行代码但 Ganache 在 Windows 中打开,则会发生这种情况。按照此处另一个答案中给出的 URL 进行操作。对我来说,更改 ganache UI 上的服务器有帮助
对于遇到此错误的 MacOS 用户,只需启动并运行 Ganache,然后尝试使用 Node 再次运行即可。
对于我来说,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
进行填充,但没有成功