5 使用纯ethers.js和本地hardhat智能合约交互的问题。

之前使用ethers.js加上前端和metamask的配合能正常和合约交互。但这样太麻烦了,我想直接用纯ethers.js和合约交互,这样可能10几秒就能做完需要前端几分钟才能完成的操作。研究了很久后写了以下代码,但执行起来仍然报错。不管是注释了的写法还是没注释的写法都报错。所以请问怎么修改才能让其正常呢?最好是使用wallet2这个账号,而不是系统默认的账号来交互。

async function main() {
const { ethers } = require("ethers");
//hardhat默认的前两位账户
const wallet1 = await new ethers.Wallet(
"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
);
const wallet2 = await new ethers.Wallet(
"0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"
);
const provider = new ethers.providers.JsonRpcProvider();
const marketaddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
const Market = require("./artifacts/contracts/Market.sol/Market.json");
const signer = provider.getSigner();
let marketContract = new ethers.Contract(marketaddress, Market.abi, signer);
//   let transaction = await marketContract.connect(wallet2).setPriceRateAll(1);
let transaction = await marketContract.setPriceRateAll(1);
console.log(transaction);
}
main();

image.png

图中报错信息第一个是未注释那段的报错,第二个是没注释的报错。

请先 登录 后评论

最佳答案 2022-06-16 16:21

signer 不是从 provider 获取, 因为你的 provider 没有 metamask 注入的钱包信息。

signer 就是你的 wallet 对象。

请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 0 收藏,2942 浏览
  • happypl 提出于 2022-06-16 15:55