Ethers.js

如何使用 ethers.js / hardhat / waffles 獲得 20 多個簽名者

  • March 10, 2022

我正在使用帶有 waffle 外掛的 Hardhat 來測試我的智能合約。

要獲得簽名者(ether.js),我正在使用:

await ethers.getSigners();

這將返回一個包含 20 個簽名者的數組。如果我再次打電話,我會得到相同的 20 個簽名者,但我如何獲得一個新的?

使用ethers.Wallet.createRandom()來自 François Guyot 的這就是我設法為我的測試獲得許多簽名者的方法。

ctx 是您的合約實例, addr1 是您通過呼叫 await ethers.getSigners() 獲得的簽名者之一;

           for( let i=0; i < nb; i++){
               // Get a new wallet
               wallet = ethers.Wallet.createRandom();
               // add the provider from Hardhat
               wallet =  wallet.connect(ethers.provider);
               // send ETH to the new wallet so it can perform a tx
               await addr1.sendTransaction({to: wallet.address, value: ethers.utils.parseEther("1")});
               
               await ctx.connect(wallet).CallYouContract())
           }

您可以通過執行以下操作生成一堆隨機簽名者:

import { ethers } from 'ethers'

export const randomSigners = (amount: number): Signer[] => {
 const signers: Signer[] = []
 for (let i = 0; i < amount; i++) {
   signers.push(ethers.Wallet.createRandom())
 }
 return signers
}

引用自:https://ethereum.stackexchange.com/questions/123519