Solidity
提供者未設置或無效。如何在沒有錢包的情況下與智能合約互動?
我正在使用 Solidity 開發 Web3 應用程序,智能合約執行良好,在將其部署到 Web 伺服器後,該應用程序在我的 PC 上執行完美,但我在沒有 Metamask 錢包的瀏覽器上遇到了問題。
錯誤:
Error: Provider not set or invalid at Object.InvalidProvider (errors.js:39:16) at f.send (index.js:145:32) at s (index.js:624:42) at a.n [as getId] (index.js:656:13) at Web3Client.js:197:39 at f (regeneratorRuntime.js:86:17) at Generator._invoke (regeneratorRuntime.js:66:24) at Generator.next (regeneratorRuntime.js:117:21) at Ne (asyncToGenerator.js:3:20) at a (asyncToGenerator.js:25:9)
反應程式碼:
export const init = async () => { let provider = window.ethereum; if (typeof provider !== 'undefined') { } const web3 = new Web3(provider); const networkId = await web3.eth.net.getId(); erc20Contract = new web3.eth.Contract( erc20Abi, addr ); isInitialized = true; };
在沒有錢包的情況下與智能合約互動的最佳和最小方式是什麼?
Metamask 使用 infura 與乙太坊區塊鏈進行通信。如果你添加一個新網路,你必須給它一個 RPC 提供者。因此,基本上,您可以直接使用 RPC 提供程序而不是元遮罩:
export const init = async () => { const web3 = new Web3("https://somerpcprovider.com/"); const networkId = await web3.eth.net.getId(); erc20Contract = new web3.eth.Contract( erc20Abi, addr ); isInitialized = true; };