Contract-Development
web3.js 不返回所有帳戶
我正在嘗試使用 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 數組的唯一成員。