如何在安全帽环境中运行下一个dev命令



我正在使用Hardhat框架来测试我的智能合约。我还在使用React和NextJS开发一个前端应用程序。

我目前正在本地机器中分叉多边形测试网,并使用它来部署我的合同。然而,我希望我的前端与分叉测试网中的智能合约进行交互,而不是真正的实时测试网。

为了分叉测试网,我在hardhat.config.js:中有这个

networks: {
hardhat: {
forking: {
url: "https://polygon-mumbai.g.alchemy.com/v2/xxxxxxxxxxxxxxxxxxxxxxxxx",
blockNumber: 27270000
}
}
},

我在前端设置了web3,如下所示:

if (typeof window !== "undefined" && typeof window.ethereum !== "undefined") {
// We are in the browser and metamask is running.
window.ethereum.request({ method: "eth_requestAccounts" });
web3 = new Web3(window.ethereum);
} else {
// We are on the server *OR* the user is not running metamask
const provider = new Web3.providers.HttpProvider(
"https://polygon-mumbai.g.alchemy.com/v2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
);
web3 = new Web3(provider);
}

我可以在分叉网络中成功部署我的合同。

到目前为止,运行npm next dev允许我的前端与实时测试网上的智能合约进行交互,这不是我想要的。如何更改我的开发环境以与分叉网络进行交互?

当您启动本地安全帽节点npx hardhat node时,您将看到一条消息,如:Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

然后,只需将您的钱包或应用程序连接到http://127.0.0.1:8545.

使用安全帽分叉意味着

您可以启动一个分叉主网的Hardhat Network实例。这意味着它将模拟与主网具有相同的状态,但它将作为本地开发网络工作。

因此,根据您的配置,您需要启动本地安全帽节点(查看如何(:

$ npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

此本地URL(RPC URL(是您需要指向钱包的位置。

MetaMask

特别是对于安全帽,请确保将chainId: 1337添加到hardhat.config.js中(请参阅元任务链ID问题(:

module.exports = {
solidity: "0.8.17",
networks: {
hardhat: {
chainId: 1337,
forking: {
url: "https://polygon-mumbai.g.alchemy.com/v2/xxxxxxxxxxxxxxxxxxxxxxxxx",
blockNumber: 27270000,
},
},
},
};

然后在本地运行分叉节点后,您应该能够通过将本地网络添加到MetaMask钱包来进行连接。

请参阅如何添加自定义网络RPC:

  1. 单击顶部的"网络"下拉列表
  2. 选择添加网络
  3. 网络名称可以是您想要的任何名称(Hardhat(
  4. 为RPC URL输入http://127.0.0.1:8545
  5. 输入1337作为链ID
  6. 由于您在多边形上,请输入MATIC作为"货币符号">
  7. 点击保存并确保已切换到本地网络
注意:

要设置web3js对象并连接到本地节点(通过WebSocket(,您应该能够调用:

const web3 = new Web3(Web3.givenProvider || "ws://localhost:8545")

要在Next.js应用程序中检测MetaMask钱包,我建议使用@MetaMask/detect provider包。

为了与区块链交互,我建议在web3.js上使用ethers.js(请参阅以太坊StackExchange上的讨论(。它还有更好的工具,特别是hardhat

相关内容

  • 没有找到相关文章

最新更新