I have

<script src="https://cdnjs.cloudflare.com/ajax/libs/web3/1.2.9/web3.min.js"></script>

How to use this web3.js on browsers without MetaMask (for read-only Ethereum queries):

const web3 = new Web3(window.web3.currentProvider);

fails because window.web3 is undefined.

I think, I can initialize Web3 by specifying a provider manually. But how to decide what exactly to pass as the argument to new Web3 (for mainnet and for rinkeby)?

I need to use my own Infura account? Maybe I can pass the MetaMask's account (is it legal? what is the MetaMask provider URLs for mainnet and for rinkeby)?

2 Answers 2

  1. Notice that new API is available:
// 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);

More details:

  1. In the browser, it is better not to use own account, but only a public Infura API.
  2. Yes, you can pass the MetaMask's account.
  3. Listen to chainChanged event to handle chain change: https://docs.metamask.io/guide/ethereum-provider.html#using-the-provider

Also you can use infura

Check this page

And use this code:

web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/3c6/*your own Id from infura site after creating project*/753")); 

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.