Contract-Development

web3.js 不返回所有帳戶

  • November 6, 2017

我正在嘗試使用 Truffle、Metamask 和 ASP.NET 組合一個簡單的應用程序。

我在 Metamask 中創建了一堆測試賬戶,然後我開始 testrpc 明確指定其中幾個賬戶及其初始餘額,如下所示:

testrpc --account="0xa3........18, 1000000000000000000000" --account="0x80.......08, 1000000000000000000000"

在 testrpc 日誌中,我可以看到這些已正確啟動:

Available Accounts
==================
(0) 0x27.....d5
(1) 0x1b.....24

然後我部署我的契約,登錄到 Metamask,然後啟動我的 Web 應用程序。

在我的 js 中,我可以看到它正在從元遮罩中檢索 web3 實例:

           if (typeof web3 !== 'undefined') { // This evaluates to true
               App.web3Provider = web3.currentProvider;
               web3 = new Web3(web3.currentProvider);
               console.log("Already have a web3 instance");
           } else {

我嘗試獲取這樣的帳戶列表:

           App.contracts.JmTest.deployed().then(function(instance) {

               web3.eth.getAccounts(function (error, accounts) {
                   if (error) {
                       console.log(error);
                   }

                   console.dir(accounts);

但是它只顯示了我啟動 testrpc 的兩個帳戶之一……

Array(1)
0: "0x27.....d5"

原來這是 Metamask 中目前選擇的賬戶。如果我在不指定任何帳戶的情況下啟動 testrpc 並重新啟動 Chrome,則會發生同樣的事情 - 我再次只獲得 Metamask 中目前選擇的帳戶。

我錯過了什麼?

好的,所以看起來這是RTFM的情況……

當使用者在 MetaMask 中選擇一個帳戶時,該帳戶會默默地變成 web3.eth.accounts

$$ 0 $$在您的 JS 上下文中,web3.eth.accounts 數組的唯一成員

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