Ich baue eine Dapp mit MetaMask. Ich erhalte jedoch eine Fehlermeldung, wenn ich versuche, eine Methode für meinen Vertrag aufzurufen.
Hier ist der vereinfachte Code:
var web3 = new Web3(web3.currentProvider);
var contract = new web3.eth.Contract(contractData.abi);
contract.options.address = address;
contract.methods.getName().call().then(name => console.log(name))
Dies wirft den folgenden Fehler:
Unhandled rejection Error: Provider not set or invalid
Beim Durchsuchen des Debuggers scheint der RequestManager keinen Anbieter festgelegt zu haben. Ich kann jedoch nicht herausfinden, wie dieser Anbieter eingestellt werden soll?
Haben Sie MetaMask auf das von Ihnen verwendete Testnetzwerk eingestellt? Wählen Sie bei testrpc in Metamask aus, dass Sie sich mit LocalHost 8545 verbinden möchten, und wenn Sie Ganache verwenden, können Sie einen benutzerdefinierten RPC erstellen, um sich mit LocalHost 7545 zu verbinden . Dies sollte Ihre Konten einziehen und Ihnen eine ordnungsgemäße Verbindung zu einem Anbieter ermöglichen.
contract.setProvider(web3.currentProvider);
jeden Vertrag, den ich erstelle, anrufe. Das Problem scheint entweder ein Fehler oder eine verwirrende API mit web3 zu sein.Anscheinend haben Sie die from
Adresse nicht festgelegt. Sehen Sie sich die Vertragseigenschaften an . Mit MetaMask bekommt man die aktuell ausgewählte Adresse mitvar account = web3.eth.accounts[0];
Wenn Sie so etwas hinzufügen, contract.options.from = account;
sollte es funktionieren.
Roman Frolow
var currentProvider = new Web3.providers.HttpProvider('http://localhost:7545');
und zu ändernvar web3 = new Web3(currentProvider);
Roman Frolow
'http://localhost:7545'
Stellen Sie sicher, dass Sie bei Bedarf den Port ändern.Benutzer19510
t_io
David Michal
contract.setProvider(web3.currentProvider);
jeden Vertrag aufgerufen habe, den ich erstellt habeChovy