Solidity

提供者未設置或無效。如何在沒有錢包的情況下與智能合約互動?

  • June 3, 2022

我正在使用 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;
};

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