3
votes

Erreur non interceptée: adresse non valide web3.currentProvider MetaMask

J'ai déployé mon contrat ERC721 sur Rinkeby TestNet. Le contrat a été déployé avec succès. Je ne parviens pas à appeler des transactions avec MetaMask. J'ai passé toute la journée à chercher à résoudre ce problème. J'ai trouvé des réponses indiquant que le problème avec les fichiers hébergés localement ou que web3.js ne fonctionne pas avec MetaMask.

<script>
            if (typeof web3 != 'undefined') { 
                web3 = new Web3(web3.currentProvider) // what Metamask injected 
                console.log("existing web3: provider " + typeof web3);
            } else {
                // Instantiate and set Ganache as your provider
                web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io/v3/api-key"));
                console.log("new provider " + web3);
                web3.eth.defaultAccount = web3.eth.accounts[0]
            }
            // The interface definition for your smart contract (the ABI) 
            var StarNotary = web3.eth.contract(
                [contract-abi]
            )

            const starNotary = StarNotary.at('0x7cfAD6E80D992599d989166aABf536b21215544C')

            function claimStar() { 
                web3.eth.getAccounts(function(error, accounts) { 
                    if (error) { 
                        hotsnackbar(false, error);
                        return
                    }

Erreur non interceptée: adresse non valide à u (web3.min.js: 1) à inputTransactionFormatter (web3.min.js: 1) sur web3.min.js: 1 à Array.map () à i.formatInput (web3.min.js: 1) à i.toPayload (web3.min.js: 1) à _.e [comme sendTransaction] (web3.min.js: 1) à c.sendTransaction (web3.min.js: 1) à index.html: 589 sur web3.min.js: 1


4 commentaires

Êtes-vous sûr qu'il s'agit de https://rinkeby.infura.io/v3/api-key ?


C'est un lien infura


Essayez ce lien: https://rinkeby.infura.io/


Oui, j'ai fait la même chose. Je viens de supprimer la clé API pour la publication ici.


3 Réponses :


2
votes

Voici une démo complète qui comprend les étapes d'introduction comme l'autorisation du contrat MetaMask et plus encore.

https://fulldecent.github.io/spend-ERC20-create-ERC721/

Voici le code particulier qui vous intéressera: p >

https: //github.com/fulldecent/spend-ERC20-create-ERC721/blob/master/docs/index.html#L102-L114

  try {
    await ethereum.enable();
    $('#need-enable').hide();
  } catch (error) {
    console.log("ERROR: Enable account access and reload.");
    return;
  }

https://github.com/ fulldecent / depense-ERC20-create-ERC721 / blob / master / docs / index.html # L121-L127

  if (window.ethereum) {
    window.web3 = new Web3(ethereum);
    $('#need-metamask').hide();
  } else {
    console.log('Non-Ethereum browser detected. Install MetaMask.');
    return;
  }
  window.web3.version.getNetwork((err, netId) => {
    if (netId == "3") {
      $('#need-ropsten').hide();
    }
  });


1 commentaires

Ce qui précède concerne les pages spécifiques à MetaMask. Je n'ai pas encore de réponse plus portable qui soit également sur Opera et d'autres navigateurs avec Web3 intégré. Il y a un problème et une prime en espèces pour cela ici github.com/su-squares/tenthousandsu.com/issues/3



2
votes

J'ai moi aussi eu le même problème en travaillant sur un DApp avec Rinkeby testnet avec Metamask.

Quand j'ai eu mon fichier web3.js comme ci-dessous

import Web3 from 'web3';

let web3;

if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
  // We are in the browser and metamask is running.
//Note: change to window.web3.currentProvider.enable()
  web3 = new Web3(window.web3.currentProvider.enable());
} else {
  // We are on the server *OR* the user is not running metamask
  const provider = new Web3.providers.HttpProvider(
    'Infura API'
  );
  web3 = new Web3(provider);
  //window.web3.currentProvider.enable();


}

export default web3;

et quand je cours npm start ou npm run dev (dépend de votre script de démarrage)

Le navigateur émettait une erreur disant "erreur non interceptée: aucune adresse 'de' spécifiée "

Lorsque j'ai ouvert la console du navigateur et effectué web.currentProvider , la même erreur s'est produite. Donc, une chose est claire: Metamask n'entre pas en contact avec le navigateur.

Ce que j'ai fait, c'est

J'ai gardé le navigateur activé avec Metamask connecté. Et changé le web3.js en alors que le serveur s'exécutait sur l'invite de commande et sauvegardait le fichier.

import Web3 from 'web3';

let web3;

if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
  // We are in the browser and metamask is running.
  web3 = new Web3(window.web3.currentProvider);
} else {
  // We are on the server *OR* the user is not running metamask
  const provider = new Web3.providers.HttpProvider(
    'Infura API key'
  );
  web3 = new Web3(provider);
  //window.web3.currentProvider.enable();


}

export default web3;

Dès que vous enregistrez le fichier Le Metamask vous envoie une invite indiquant qu'il souhaite se connecter à partir de votre compte.

Cliquez sur Oui.

et supprimez le .enable () du code ci-dessus et enregistrez votre code.

Cela peut être une solution temporaire, mais oui, cela fonctionne!


0 commentaires

1
votes

Fichier web3.js

import Web3 from 'web3';

let provider;
// if on server or browser
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
    // we are in browser and metamask present
    provider = window.web3.currentProvider;
}
else {
    // we are on server OR metamask not present
    provider = new Web3.providers.HttpProvider(
        'https://rinkeby.infura.io/v3/API_KEY'
    );
}

const web3 = new Web3(provider);

export default web3;

Ne mettez pas de nouveau Web3 () dans le bloc if lui-même. Après avoir hébergé (localement ou sur le serveur), ouvrez Paramètres de méta-masque -> Connexions et ajoutez votre site pour donner accès au méta-masque. A parfaitement fonctionné pour moi après avoir passé des jours derrière des erreurs de méta-masque et Web3!


0 commentaires