Web3js
在沒有 MetaMask 的情況下使用 web3.js
我有
<script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.2.9/web3.min.js"></script>
如何在沒有 MetaMask 的瀏覽器上使用這個 web3.js(用於只讀乙太坊查詢):
const web3 = new Web3(window.web3.currentProvider);
失敗,因為
window.web3
未定義。我想,我可以
Web3
通過手動指定提供者來進行初始化。但是如何決定將什麼作為參數傳遞給new Web3
(對於 mainnet 和 rinkeby)?我需要使用自己的 Infura 帳戶嗎?也許我可以通過 MetaMask 的帳戶(合法嗎?主網和 rinkeby 的 MetaMask 提供程序 URL 是什麼)?
- 請注意,新的 API 可用:
// Legacy dapp browsers... if (window.web3 !== undefined) { const provider = new Web3.providers.HttpProvider(window.web3.currentProvider); const web3 = new Web3(provider); } // Modern dapp browsers... if (window.ethereum !== undefined) { const provider = new Web3.providers.HttpProvider(window.ethereum); const web3 = new Web3(provider); }
更多細節:
- https://medium.com/metamask/no-longer-injecting-web3-js-4a899ad6e59e
- https://medium.com/metamask/breaking-changes-to-the-metamask-inpage-provider-b4dde069dd0a
- https://docs.metamask.io/guide/getting-started.html
- 在瀏覽器中,最好不要使用自己的帳戶,而只使用公共的 Infura API。
- 是的,您可以通過 MetaMask 的帳戶。
- 監聽
chainChanged
事件以處理鏈更改:https ://docs.metamask.io/guide/ethereum-provider.html#using-the-provider
你也可以使用infura
檢查此頁面
並使用此程式碼:
web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/3c6/*your own Id from infura site after creating project*/753"));