Ich verwende Metamask, um eine Verbindung zum Rinkeby-Netzwerk herzustellen. Ich kann sehen, dass Metamask Web3-Code einfügt, aber ich bekomme immer noch die Error: Provider not set or invalid
. Hier ist das js-Skript, das ich geschrieben habe.
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);
Hier ist der Fehler, den ich bekomme
Ich verwende Webpack, web3 0.20.4. Wie löse ich das?
Sie sollten eigentlich keinen Anbieter innerhalb einer new Web3
Instanz festlegen, wenn Sie bereits über die web3.currentProvider
.
Ersetzen:
web3 = new Web3(web3.setProvider(web3.currentProvider));
mit:
web3 = new Web3(web3.currentProvider);
Erstellen Sie die Instanz auch nicht, web3
bevor Sie die Browserversion überprüft haben.
Ersetzen Sie die Zeile:
var web3 = new Web3();
mit:
var web3 = window.web3;
Uchiha Madara
var web3 = new Web3();
wird in vielen Tutorials verwendet und hat für sie funktioniert. Ich bin ziemlich neu in Sachen js. Können Sie mir sagen, was in dieservar web3 = window.web3;
Zeile passiert?ReyHaynes
var web3 = new Web3()
, überschreiben Sie im Grunde die Option, nach der Browserversion zu suchen. Ihretypeof web3 !== 'undefined'
Überprüfung würde die Browser-/Metamaskenversion nur dann ordnungsgemäß überprüfen, wenn Sie dies tun würdentypeof window.web3 !== 'undefined'
. Es machte auch nicht viel Sinn, einenew Web3
Instanz in der zweiten Zeile zu initiieren, wenn Ihreif/else
Anweisung dies sowieso tut.Wjachaslaw Gerchicov