Trüffel-Kontrakt: Methode kann nicht getestet werden, bevor Ether-Methode tatsächlich verbraucht wird

Ich verwende Truffle-Contract für die Verbindung zwischen Frontend und Smart Contract. Derzeit kann ich die Methode Smart Contract aufrufen und Ether erfolgreich verbrauchen.

const result = await instance.adoptCreeptomas(
aquaQuantity,
firaQuantity,
aetherQuantity,
gaiaQuantity,
referrer,
{ from: accountAddress, value: ether(sendingEther) }

);

Aber vorher möchte ich zuerst die Methode testen. Also gehe ich zu dieser Methode über:

 const data = await instance.adoptCreeptomas.call(
    aquaQuantity,
    firaQuantity,
    aetherQuantity,
    gaiaQuantity,
    referrer,
    { from: accountAddress, value: ether(sendingEther) }
  );

Aber wenn ich das aufrufe, treffe ich auf folgende Ausnahme:

errors.js:38 Nicht erfasster (versprochener) Fehler: Ungültige JSON-RPC-Antwort: {"id":6,"jsonrpc":"2.0","error":{"code":-32603}}

Ich verwende Ganache für die lokale Blockchain und Metamask für den Anbieter. Bitte helfen Sie mir herauszufinden, warum.

Danke

Antworten (1)

Bitte überprüfen Sie den Unterschied zwischen transactionund call.

Die Syntax .call()in Truffle-Contract ist explizit für das Tätigen eines Aufrufs , während die Syntax des direkten Aufrufs mit dem Methodennamen :

Wir haben die sendCoin-Funktion der Abstraktion direkt aufgerufen. Dies führt standardmäßig zu einer Transaktion (dh Schreiben von Daten) anstelle eines Anrufs.

Ich kann Ihrer Methodensignatur entnehmen, dass adoptCreeptomaseinige Änderungen am Netzwerk bestehen bleiben. Also einfach loswerden .callund schauen was passiert.

Ja. adoptCreeptomasspeichert einige Daten in der Blockchain (und verbraucht auch Ether). Deshalb denke ich, dass wir die Methode zuerst "testen" sollten. Ich habe darauf basierend: ethereum.stackexchange.com/questions/765/… (Empfehlung, zuerst anzurufen, dann sendTransaction)
Das heißt also, der Truffle-Contract unterstützt diesen Weg nicht?
@hqt Okay, ich glaube, ich habe deine Frage dann falsch verstanden. Habe beim ersten Mal nicht wirklich verstanden, was du mit "Testmethode zuerst" gemeint hast.
Wenn Sie mit Front-End arbeiten, bin ich mir nicht sicher, ob Sie solche Dinge wirklich testen müssen, da übliche Anbieter wie Metamask damit umgehen. Wie auch immer, ich schaue mir den Truffle-Contract-Code an und es sieht so aus, als würde er unterstützen, wenn web3.eth.contracter unterstützt wird.
Danke. Ich habe getestet. Ich verwende web3 eingebettet von MetaMask. Wie ich getestet habe, web3.eth.contractist vorhanden. Aber ich weiß nicht, wie man diese Methode anwendet. Danke.
Haben wir einen Hinweis darauf, dass Metamask dies für Entwickler tun wird? (Testen vor dem Senden der Transaktion). Danke.
Hmm .. Ich möchte diesen Kommentar zu Metamask widerrufen, es schätzt jedoch Gas. Ich denke, vielleicht hat der Fehler mit Ganache zu tun. Kannst du das mal mit testrpc ausprobieren?