Uncaught Ошибка: неверный адрес web3.currentProvider MetaMask - PullRequest
0 голосов
/ 15 января 2019

Я развернул свой контракт ERC721 в Rinkeby TestNet.Контракт успешно развернут.Я не могу вызвать транзакции с MetaMask.Потратил целый день в поисках решения этой проблемы.Нашел ответы на некоторые вопросы о том, что проблема связана с файлами localhosted или web3.js не работает с 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
                    }

Uncaught Ошибка: неверный адрес в u (web3.min.js: 1)в inputTransactionFormatter (web3.min.js: 1) в web3.min.js: 1 в Array.map () в i.formatInput (web3.min.js: 1) в i.toPayload (web3.min.js: 1) в _.e [как sendTransaction] (web3.min.js: 1) в c.sendTransaction (web3.min.js: 1) в index.html: 589 в web3.min.js: 1

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

У меня тоже возникла такая же проблема при работе над DApp с Rinkeby testnet с Metamask.

Когда у меня был web3.js файл, как показано ниже

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;

и когда я бегу npm start или npm run dev (зависит от вашего стартового скрипта)

Браузер выдавал сообщение об ошибке «uncaught error: No 'from' address указано»

Когда я открыл консоль браузера и сделал web.currentProvider, он выдал ту же ошибку. Итак, стало ясно, что Метамаска не устанавливает связь с браузером.

Что я сделал, это

Я держал браузер включенным в Metamask. И изменил web3.js на время работы сервера в командной строке и сохранил файл.

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;

как только вы сохраните файл Метамаска выдает сообщение, что хочет установить соединение с вашей учетной записью.

Нажмите да.

и удалите .enable () из приведенного выше кода и сохраните свой код.

Это может быть временное решение, но да, оно работает!

0 голосов
/ 21 января 2019

Вот полная демонстрация, которая включает вводные этапы, такие как авторизация контракта MetaMask и многое другое.

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

Вот конкретный код, который, я думаю, вас заинтересует:

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

  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();
    }
  });

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

  try {
    await ethereum.enable();
    $('#need-enable').hide();
  } catch (error) {
    console.log("ERROR: Enable account access and reload.");
    return;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...