Bereitstellung eines Vertrags mit Remix IDE für Rinkeby Testnet.
Adresse und Code des Etherscan-Vertrags finden Sie hier .
Vertrag SimpleCounter { int-Zähler; Konstruktor() öffentlich { Zähler = 0; } Funktion getCounter() öffentliche Ansicht gibt zurück (int){ Rückgabezähler; } Funktionsinkrement() öffentlich { Zähler += 1; } Funktion Dekrement() öffentlich { Zähler -= 1; } }
JavaScript-Client-Code:
var-Vertrag; $(Dokument).ready(Funktion(){ initContract(); getCounterValue(); }) Funktion initContract(){ web3 = neues Web3 (web3.aktueller Anbieter); var address = "0xc6482382047fb50e8e7b4658425c9756b28f995c"; var abi = [ ... ]; console.log('Vertrag erstellen...'); Vertrag = new web3.eth.Contract(abi, address); console.log (Vertrag) } //initContract() Funktion getCounterValue(){ console.log('getCounter()...'); Vertrag.Methoden.getCounter().call().then((Ergebnis) => { console.log (Ergebnis); }).catch(Funktion(err){ console.log('err...\n'+err); }); }
Fehler:
Vertrag erstellen...
(index):86 o {_requestManager: e, GivenProvider: MetamaskInpageProvider, Anbieter: {…}, _provider: MetamaskInpageProvider, …}
(index):94 getCounter()...
(Index): 99 Fehler ...
Fehler: Zurückgegebene Werte sind ungültig, ist das Benzin ausgegangen?
HINWEIS:
Dies funktioniert gut in Remix IDE (Chrom). Ich kann inkrementieren/dekrementieren/getCounter... mit Compiler-Version:0.4.25+commit.59dbf8f1.Emscripten.clang .
Warum schlägt es fehl, wenn mit ' dist/web3.min.js ' von Web3.js (Branch 1.0) darauf zugegriffen wird?
Ich habe den ähnlichen Fehler behoben, indem ich .json
Dateien aus dem Ordner build/contracts gelöscht und dann truffle migrate
im Terminal ausgeführt habe.
Der Fehler trat jedoch in Visual Studio Code auf, nicht in der Remix-IDE. Es erschien nach dem Laufen truffle migrate --reset
.
Ich möchte diesen Kommentar ergänzen, nachdem Sie .json
Dateien aus dem Ordner „Build/Contracts“ gelöscht haben, blieb das Problem bestehen, bis ich Dateien aus dem Papierkorb gelöscht habe🗑 😅 Stellen Sie also sicher, dass der Papierkorb leer ist
Ich bekam Hilfe von Veniamin .
Ich hatte den Fehler „Fehler: ABI konnte nicht dekodiert werden: 0x.“ bei Anruf Anfrage mit falscher Vertragsadresse bekommen
Ich habe einen Fehler gemacht ... Ich habe "Kontoadresse" anstelle von "Vertragsadresse" verwendet!
Der Code funktioniert, sobald die richtige 'Vertragsadresse' verwendet wurde.
Hatte das gleiche Problem und es stellte sich heraus, dass ich im Metamask Mainnet statt in Rinkeby war, wo mein Vertrag bereitgestellt wurde.
Dein Code scheint korrekt zu sein. Ich denke, Ihr Problem ist auf einen Web3js-Fehler zurückzuführen. Sehen Sie sich das in Github gemeldete Problem an:
https://github.com/ethereum/web3.js/issues/1916
Ich empfehle Ihnen, stattdessen web3.js 1.0.0-beta.35 zu verwenden.
Error: Couldn't decode from ABI: 0x
.Diesen Fehler hatte ich auch. Es wurde behoben, nachdem ich meine web3-Version auf 2.0.0-alpha geändert hatte, was vorher 1.0.0-beta.55 war.
Hoffentlich wird dies das Problem für Sie beheben.
In meinem Fall (ich verwende den Azure-Blockchain-Dienst) habe ich meine Vertragsdatei geändert, aber den Build vergessen und ihn erneut für meinen Azure-Blockchain-Dienst bereitgestellt. Stattdessen springe ich truffle exec
direkt zum Befehl. Nachdem ich diese beiden fehlenden Schritte erneut ausgeführt habe, funktioniert alles einwandfrei.
Das ist mir in meiner React-App passiert.
Ich habe für einen Vertrag mit dem Ropsten-Netzwerk bereitgestellt, aber Metamask hat das Rinkeby-Konto verwendet. Stellen Sie also sicher, welches Netzwerk Sie bereitgestellt haben, Metamask sollte ein Konto aus diesem Netzwerk verwenden.
Ein anderes Mal hatte ich das in next.js. Diese Route ist eine dynamische Route, dh der Vertrag wird von ${contractAddress} abgerufen:
Router.push(`/campaigns/${recipient}/requests`);
Anstelle der {recipient}
Adresse musste ich die Adresse des Vertrages zum Abrufen eingeben
In meinem Fall habe ich eine "View"-Methode eines Vertrags aufgerufen, der in einem lokalen Hardhat bereitgestellt wird.
und mein nodejs-Code sieht so aus: contract.methods().getterName().call()
und bekam diesen Fehler.
Ich habe Stunden damit verbracht und kein Glück. Schließlich habe ich zu Rinkeby Test Network gewechselt, den Vertrag bereitgestellt und die Methode "view" mit fast demselben Code aufgerufen, alles geht gut.
also die lösung ist:
Wenn Sie HardHat verwenden und auf dieses seltsame Problem stoßen, wechseln Sie zu Rinkeby!
RafiAlhamd
.json
würde das nicht beheben. Möglicherweise möchten Sie zusammen mit dem Fehler „genaues Problem“ hinzufügen, um „Ihr Szenario“ und die zugehörige Lösung zur Verdeutlichung zu unterscheiden.RafiAlhamd