提供商未设置或无效。如何在没有钱包的情况下与智能合约进行交互?

Provider not set or invalid. How to interact with smart contract without wallet?

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

在没有电子钱包的情况下与智能合约交互的最好和最少的方式是什么?

您可以在 https://infura.io 上创建帐户,然后您将获得 api 密钥以与区块链通信。从 infura 复制 url,结果你应该得到提供者的回应。 const web3 = new Web3('https://mainnet.infura.io/v3/YOUR-API-KEY ');

MetaMask 带有一个 built-in Infura JSON-RPC API.

的 HTTPProvider

You can register to any of the free JSON-RPC API provider services and get a personal JSON-RPC endpoint with an API key. Alternatively you can run your own Ethereum node.

您还可以对 MetaMask 进行逆向工程并从其 JavaScript 文件中获取其 API 密钥。