无法通过 ethers.js 切换签名者以使用 Hardhat 进行合约交互

Sch*_*idt 3 ethereum ethers.js hardhat

Hardhat 指定要使用不同的帐户进行合约交互,您应该使用该connect()方法,并将其传递给签名者,如下所示:

const [owner, addr1] = await ethers.getSigners();
/* ... */
await greeter.connect(addr1).setGreeting("Hello!");
Run Code Online (Sandbox Code Playgroud)

greeter合约实例在哪里。

但是,当我按照他们指定的方式使用签名者时,出现以下错误:

错误:地址或 ENS 名称无效(参数 =“名称”,值 =“<SignerWithAddress 0x59F...34C>”,代码=INVALID_ARGUMENT,版本=contracts/5.6.0)

互联网上说要使用地址,例如本期建议使用类似addr1.address. 但是当我这样做时,会出现以下错误:

VoidSigner 无法签署交易(操作 =“signTransaction”,代码=UNSUPPORTED_OPERATION,版本=abstract-signer/5.6.0)

使用 ethers.js 和 Hardhat 进行合约调用时如何切换签名者/帐户?

den*_*var 7

您收到的错误是因为您没有传入完整的地址对象。具体来说,当我这样做时,我得到了你的确切错误:

这不起作用,但会重现您的错误:

[deployer, account1] = await ethers.getSigners();
address1 = account1.address;
/* ... */
await greeter.connect(address1).setGreeting("Hello!");
Run Code Online (Sandbox Code Playgroud)

然而,这有效:

[deployer, account1] = await ethers.getSigners();
/* ... */
await greeter.connect(account1).setGreeting("Hello!");
Run Code Online (Sandbox Code Playgroud)

请注意,在第二个示例中,我们没有在account1 上调用“.address”。