我正在设置使用ether.js和智能契约部署在本地主机网络上使用硬帽子反应。React应用程序连接到元掩码,使用
const provider = new ethers.providers.Web3Provider(window.ethereum);合同写在下面
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "hardhat/console.sol";
contract Greeter {
string private greeting;
constructor(string memory _greeting) {
console.log("Deploying a Greeter with greeting:", _greeting);
greeting = _greeting;
}
function greet() public view returns (string memory) {
return greeting;
}
function setGreeting(string memory _greeting) public {
console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
greeting = _greeting;
}
}我使用npx部署了这个契约,运行script.js.In,使用
const erc20=new ethers.Contract(address,obj.abi,signer);在useEffect中,我试图调用erc20.greet(),这在控制台中产生了错误。** (承诺)错误:调用还原异常(method="greet()“、errorArgs=null、errorName=null、errorSignature=null、reason=null、code=CALL_EXCEPTION,version=abi/5.5.0) **
发布于 2022-02-27 15:40:59
你需要确保以下几点:
当您在安装了Metamask扩展的浏览器中运行您的React应用程序时,请确保您的Metamask连接到您的安全帽本地主机网络(默认情况下,它是localhost:8545). )。如果Metamask正在连接到另一个网络,您将得到该错误。
(注意:由于Metamask扩展默认隐藏测试网络,因此需要让它显示测试网络,以便您可以看到所列出的安全帽本地主机网络。)
启动“草帽”本地网络时,“安全帽”将返回如下帐户的列表:
警告:这些账户及其私钥都是公开的。任何通过Mainnet或任何其他直播网络发送给他们的资金都将被丢失。帐号0:0xf39fd6e51aad88f6f4ce6ab88279cfffb92266 (10000 ETH)私钥: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80帐号1:0x709970c51812dc3a010c7d01b50e0d17dc79c8 (10000 ETH)私钥: 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d .
当您在本地主机网络上使用hardhat部署智能契约时,hardhat将返回如下内容:
合同名称已部署到:合同地址
请确保在这里使用该contract-address作为address参数的值:
const erc20=new ethers.Contract(地址,obj.abi,签名者);
contract-address和帐户看起来非常相似,但它们代表着两种不同的东西。如果您使用一个帐户而不是contract-address,,您将得到错误.
https://stackoverflow.com/questions/70563980
复制相似问题