Wie kann ich beim Senden an einen JSON-RPC-Server über fehlerhafte Transaktionen benachrichtigt werden?

Mit Ubuntu habe ich Wallet/Mist und MetaMask im Ropsten-Testnetz ausprobiert: Beide benachrichtigen mich über fehlerhafte Transaktionen, bevor ich mein Passwort eingebe. Ich habe versucht, dasselbe mit einem JSON-RPC-Server auf normale Weise zu tun. Der Server fährt fort, fehlerhafte Transaktionen ohne Vorankündigung zu senden.

Gibt es in Bezug auf schlechte Transaktionen eine Möglichkeit, den gleichen Effekt von Wallet/Mist/MetaMask mit einem JSON-RPC-Server zu erzielen?

Antworten (1)

Nein. Ein JSON-RPC-Endpunkt implementiert Funktionen gemäß einer Spezifikation.

Mist/Metamask implementieren die Transaktionsvalidierung innerhalb des Clients, bevor die Transaktion an den unterstützenden Knoten gesendet wird.

In Ihrem Beispiel senden Sie die Transaktion direkt an den Knoten und müssen daher im Voraus die entsprechende Validierung durchführen.

In Wirklichkeit können Sie beliebige Daten an eine Transaktion anhängen, sodass falsch signierte Transaktionsdaten zwar nicht das tun, was Sie erwarten, aber nicht unbedingt ungültig sind.

BEARBEITEN - Weitere Informationen

Wenn Sie erkennen möchten, ob eine Transaktion ausgelöst wird, müssen Sie sie in einer Umgebung ausführen, die den Zustand der Kette nachahmt, und sehen, was passiert.

Geth und Parity implementieren den [eth_estimateGas](https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_estimategas)Endpunkt, der beim Aufruf mit einem Funktionsaufruf, der auslöst, einen Fehler zurückgibt.

Angenommen, der Server kann Transaktionen vor dem Senden validieren, wie kann ich dies dann tun? Außerdem, wie kann ich Transaktionen selbst validieren? Zu Ihrer Information, in diesem Fall meine ich mit "schlechten Transaktionen" Funktionsaufrufe, die von Modifikatoren ausgelöst / zurückgesetzt werden.
Du kannst anrufen eth_estimateGas. Antwort bearbeitet.
Ich habe gerade eth_estimateGas ausprobiert und normale Ergebnisse erhalten (kein Fehler beim Auslösen von Funktionsaufrufen). Andererseits scheint eth_call zu funktionieren, vorausgesetzt, dass nicht auslösende Funktionsaufrufe einen Wert zurückgeben.
Ich habe gerade festgestellt, dass "normale Ergebnisse" nicht so normal sind: Das sind die Gaslimits, die ich für die Transaktionen erlaube.