Metamask

配置的 Web3Provider 只列出了一個帳戶

  • September 24, 2021

我正在嘗試將 ethers.js 與 metamask 一起配置。

這是我配置提供程序的方式:

 initProvider() {
   const ethereum = window['ethereum'];
   ethereum.enable();
   this.provider = new ethers.providers.Web3Provider(ethereum);//Metamask is used but only one account is listed...
 }

我有多個帳戶執行 Ganache。但是,當我嘗試像這樣檢索/列出帳戶時:this.provider.listAccounts(),我只得到數組中的一個元素……

請注意,當我為我的提供商使用以下配置時,我可以看到所有帳戶:

const provider = new ethers.providers.JsonRpcProvider(url);//Metamask is left out but I can list all accounts.

但是,我需要元遮罩完整的帳戶列表。我怎麼了?我需要兩個單獨的提供商嗎?

編輯:請注意,元遮罩本身正確列出了所有 Ganache 帳戶。

TL:博士

是的,你需要兩個


那是因為Web3Provider沒有“連接”的 ganache 帳戶。Metamask 帳戶是唯一的簽名者。JsonRpcProvider另一方面,將所有 ganache 帳戶連接為簽名者。如果您想使用 Metamask 使用 ganache 帳戶執行交易,您需要將他們各自的私鑰導入 metamask。但是,據我所知,您無法將所有可用的元遮罩錢包連接為單個Web3Provider對象的簽名者。這是因為Web3Provider工作方式是包裝一個web3.js提供者——即window.ethereum.

您可以閱讀ethers.js 文件以供參考。

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