Я использую метамаску для подключения к сети rinkeby. Я вижу, что метамаска отлично вводит код web3, но я все равно получаю файл Error: Provider not set or invalid
. Вот js-скрипт, который я написал.
var Web3 = require('web3');
var web3 = new Web3();
if (typeof web3 !== 'undefined') {
console.log("Using web3 detected from external source like Metamask");
web3 = new Web3(web3.setProvider(web3.currentProvider));
} else {
console.log("Using localhost");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
var account = web3.eth.accounts[0];
console.log(account);
Вот ошибка, которую я получаю
Я использую веб-пакет, web3 0.20.4. Как мне это решить?
На самом деле вам не следует устанавливать провайдера в new Web3
экземпляре, если у вас уже есть файл web3.currentProvider
.
Заменять:
web3 = new Web3(web3.setProvider(web3.currentProvider));
с:
web3 = new Web3(web3.currentProvider);
Кроме того, не создавайте web3
экземпляр до проверки версии браузера.
Замените строку:
var web3 = new Web3();
с:
var web3 = window.web3;
Учиха Мадара
var web3 = new Web3();
используется во многих учебниках, и она сработала для них. Я новичок в js. Можете ли вы сказать мне, что происходит в этойvar web3 = window.web3;
строке?РейХейнс
var web3 = new Web3()
, вы фактически перезаписываете опцию проверки версии браузера. Вашаtypeof web3 !== 'undefined'
проверка будет правильно проверять версию браузера/метамаски только в том случае, если вы это сделалиtypeof window.web3 !== 'undefined'
. Также не имело особого смысла инициировать экземплярnew Web3
во второй строке, когдаif/else
это все равно делает ваш оператор.Вячеслав Герчиков