Web3js
如何將 Web3 與 MetaMask 連接?
沒有教程可以幫助我,我幾乎看過 Youtube 上的所有主要教程,並閱讀了大量來自Google的結果……
我在我的 HTML 文件中導入了 web3.min.js(從 Truffle pet-shop 複製,因為 web3 不再附帶這個!)
然後在它下面的一個腳本標籤上,為了測試,我設法將它與 Metamask 連接起來,我瘦了,用
window.addEventListener('load', () => { if (typeof Web3 !== 'undefined') { web3js = new Web3(Web3.currentProvider); } else { console.log('No web3? You should consider trying MetaMask!'); web3js = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); } });
但仍然
Web3.eth
是未定義的,所以我無法連接到契約或撥打電話。誰能幫我完成從前端與契約互動的基本步驟?…
Metamask 界面已更改以啟用隱私和使用者同意,然後才允許訪問 Metamask 中包含的帳戶資訊。這是通過將“乙太坊”對象注入瀏覽器視窗來完成的。您現在必須等待 ethereum.enable() 函式在提示使用者後返回 true。更多詳細資訊:https ://medium.com/metamask/https-medium-com-metamask-break-change-injecting-web3-7722797916a8
window.addEventListener('load', () => { // Wait for loading completion to avoid race conditions with web3 injection timing. if (window.ethereum) { const web3 = new Web3(window.ethereum); try { // Request account access if needed await window.ethereum.enable(); // Acccounts now exposed return web3; } catch (error) { console.error(error); } } // Legacy dapp browsers... else if (window.web3) { // Use Mist/MetaMask's provider. const web3 = window.web3; console.log('Injected web3 detected.'); return web3; } // Fallback to localhost; use dev console port by default... else { const provider = new Web3.providers.HttpProvider('http://127.0.0.1:9545'); const web3 = new Web3(provider); console.log('No web3 instance injected, using Local web3.'); return web3; } });
您正在混合大寫Web3和小寫web3。
Web3.eth
不退出。嘗試以下操作:
window.addEventListener('load', () => { if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { console.log('No web3? You should consider trying MetaMask!'); web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')); } });
現在你可以寫類似
web3.eth