Wie man eine „Out of Gas“-Ausnahme in Oraclize Callback abfängt und einen Fehler auf dem DAPP-Frontend anzeigt

Ich habe einen Smart Contract, in dem ich Oraclize verwendet habe, um den aktuellen Zeitstempel zu erhalten. In einigen Fällen schlägt der Oraclize-Callback aufgrund einer Gasmangel-Ausnahme fehl. Wie kann man diesen Fehler abfangen und eine Fehlermeldung auf meinem DAPP-Frontend anzeigen?

Ich habe die folgenden Optionen ausprobiert:

  1. Überwachen Sie ein Ereignis, um abzufangen, ob Oraclize einen Wert zurückgibt oder nicht. In meinem Fall gibt es den aktuellen Zeitstempel zurück und geht zur Logik innerhalb der Callback-Funktion über. Also hier konnte ich die Ausnahme nicht abfangen.
  2. Überwachen Sie ein zweites Ereignis, das ausgelöst wird, wenn Berechnungen mit dem von Oraclize zurückgegebenen Zeitstempel abgeschlossen sind. Auch hier kann ich die Ausnahme nicht abfangen, da ihr das Gas ausgeht, bevor sie die Logik zum Auslösen des Erfolgsereignisses erreicht.

Nach meinem Verständnis tritt die Gasausnahme zwischen den beiden oben genannten Ereignissen auf, dh nach dem Senden des Werts und vor Abschluss der Verarbeitung verliert es das gesamte Gas.

Bitte helfen Sie mit, vorzuschlagen, wie dieser Fehler am besten behandelt wird, und kommunizieren Sie dies mit dem Benutzer am vorderen Ende.

Wenn die Transaktion fehlschlägt, wird keines der Ereignisse ausgelöst.
Was ist dann der ideale Weg, um einen Benutzer im Frontend darüber zu informieren?
Können Sie mir die oraclize-Transaktion zeigen, die in Etherscan fehlschlägt?
Entschuldigung, aber ich teste lokal mit Ganache. Below is error message : } [2018-08-17T11:55:47.960Z] INFO sending __callback tx... { "contract_myid": "0x58a88cebdf576344bff17f2caa61d373f7a3beb619f71538a6e58dbd017405d1", "contract_address": "0x98d9f9e8debd4a632682ba207670d2a5acd3c489" } [2018-08-17T11:55 :48.643Z] FEHLER Callback-TX-Fehler, Vertrag myid: 0x58a88cebdf576344bff17f2caa61d373f7a3beb619f71538a6e58dbd017405d1 { "message": "VM-Ausnahme während der Verarbeitung der Transaktion: kein Gas mehr",
Ich verstehe nicht, was schlägt fehl? die oraclize transaktion zu ihrem vertrag? Wenn ja, wie testen Sie dies lokal?.
Von der Oraclize-Callback-Funktion rufe ich eine andere Funktion auf, deren Aufgabe es ist, Daten in Mappings im Smart Contract zu speichern. Oraclize gibt den Zeitstempel perfekt zurück, aber während der Ausführung zusätzlicher Logik innerhalb der Callback-Funktion endet es damit, dass das gesamte Gas vor der Fertigstellung erschöpft wird.

Antworten (1)

Eine Lösung hierfür besteht darin, in Ihrer App als obligatorische Gasmenge das Minimum einzustellen, das erforderlich ist, um die Funktion auszuführen, ohne dass das Gas ausgeht.

Wenn der Anruf fehlschlägt, können Sie in jedem Block einfach nach Transaktionen mit Ihrem Vertrag suchen. Identifizieren Sie, welches von oraclize stammt, und prüfen Sie, ob es fehlgeschlagen ist oder nicht.

Hoffe das hilft

Ich habe vor dem Aufrufen der Funktion über die Berechnung der Gasmenge gelesen, konnte aber keinen Beispielcode finden, der dies tut. Können Sie einige Referenzen angeben, die ich verwenden kann?