Web3js

無法使用 web3 獲取元遮罩帳戶

  • February 22, 2022

我一直在關注有關創建可靠合約的教程。當我使用下面的腳本時,我無法獲取 metamask 錢包上的帳號列表。

 async componentWillMount(){
   await this.loadWeb3()
   await this.loadBlockChainData()
 }


//connect to metamask and reads it into the app using web3
 async loadWeb3() {
   if (window.etheruem) {
     window.web3 = new Web3(window.etheruem)
     await window.etheruem.enable()
   }
   else if (window.web3) {
     window.web3 = new Web3(window.web3.currentProvider)
   }
   else {
     window.alert('Non etheruem browser detected. You should consider trying to install metamask')
   }
 }




 async loadBlockChainData() {

   const web3 = window.web3
   //load account from metamask
   const accounts = await web3.eth.getAccounts()
   console.log(accounts)

 }

我應該得到一個帳號列表,但上面的程式碼列印“

$$ $$“ 反而。 我的研究表明,連接問題可能是由於隱私設置造成的。所以我試圖禁用我的隱私設置以允許傳入連接。但我認為禁用隱私設置的選項已在以後的元遮罩更新中刪除。

隱私設置

我還嘗試將我的網路更改為 Ganache 地址(而不是主要的 etheruem 網路),並成功地在 Metamask 上反映了 Ganache 上的測試賬戶餘額,但我仍然沒有在我的 Web 控制台上列印這些賬戶。它繼續列印“

$$ $$" 將網路更改為 ganache url

我還嘗試將我的本地伺服器地址添加到允許連接到我的元遮罩的站點列表中。(儘管本教程沒有建議)但這似乎也不起作用。

將我的伺服器添加到連接站點列表

我還發現了一個與我類似的最近的問題,但問題有所不同(我相信),因為我在本地伺服器上執行我的應用程序而不僅僅是一個頁面。

如果有人對如何解決此問題有任何建議,請告訴我。

謝謝

您的程式碼中有錯字。代替:

window.web3 = new Web3(window.etheruem)

和:

window.web3 = new Web3(window.ethereum)

此外,如果您的元遮罩和本地項目之間的連接設置正確,您應該能夠使用ethereum.selectedAddress.

試試這個,這 2 個.on事件處理程序有助於以後使用。

if(window.ethereum){

 window.ethereum.on("accountsChanged", accounts => {
   // handle what happens when acounts change
 });
 window.ethereum.on('chainChanged', () => {
   // handle what happens when chain changes, prefereably reload the page
 });

 await window.ethereum.request({ method: "eth_requestAccounts" })
 .then(accounts => 
   {
     // loop the accounts. 
   }
 )
}

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