Das Fehlerproblem der Drittanbieter-API

Ich wollte ein Problem hervorheben, unter dem wir alle leiden, wenn wir APIs von Drittanbietern verwenden. Angenommen, Sie möchten eine Ethereum-Transaktion durchführen. Normalerweise gibt die API eine txid zurück, wenn die Anfrage erfolgreich ist. Aber in meinem Beispiel hat die Anfrage einen unbekannten Fehler. Von der API wird keine txid zurückgegeben.

Wenn ein API-Aufruf aus irgendeinem Grund fehlschlägt, ist die Standardannahme, dass die Transaktion nicht erfolgreich war. Nach meiner Erfahrung mit fast jeder API ist diese Annahme völlig falsch. Die Transaktion könnte dennoch erfolgreich sein, obwohl die API einen Fehler zurückgibt. Ich habe das mehrfach mit Bitcoin und Exchange-APIs gesehen.

Wenn wir also einen Fehler beim Erstellen einer Transaktion erhalten, möchten wir herausfinden, ob die Transaktion erfolgreich war oder nicht. Andernfalls senden Sie die Transaktion möglicherweise mehrmals. Das Problem hier ist, dass wir keine txid haben, um eine einfache Transaktionssuche durchzuführen.

Idealerweise möchte ich bei jeder Transaktion meine eigene Referenz-ID angeben. Auf diese Weise muss ich mich nicht auf die txid verlassen, die mir von der API gegeben wird. Leider ist dies kein Parameter in der aktuellen json-rpc-API.

Ich habe dieses Problem in Bitcoin gelöst, indem ich das Feld "Kommentar" für meine eigene Referenz-ID verwendet habe. Ich iteriere dann durch den letzten X-Betrag der Transaktion und versuche, eine Übereinstimmung mit dem Transaktionskommentar und der Referenz-ID zu finden.

Irgendwelche Vorschläge, wie man dieses Problem mit Ethereum lösen kann?

Wenn ich das richtig verstehe, könnten Sie Ihre Referenz-ID in das Datenfeld einer Transaktion ethereum.stackexchange.com/q/2466/42 eingeben und nach Ihrer ID suchen, wenn Sie die letzten X Transaktionen durchlaufen?
Wie Sie sehen, bin ich ein absoluter Ethereum-Noob. Ich wusste nicht, dass das Datenfeld eine Nachricht enthalten kann. In der Dokumentation wurde mir gesagt, dass sie für den Vertragscode gedacht ist. Danke für den schnellen Awnser
Sie haben auch Recht: Wenn todas Feld leer ist, geben Sie den Vertragscode in das dataFeld ein. Außerdem habe ich eine Antwort gepostet, anstatt Ihre Frage als doppelt zu markieren, da es möglicherweise andere Lösungen für das allgemeine Problem gibt.

Antworten (1)

Idealerweise möchte ich bei jeder Transaktion meine eigene Referenz-ID angeben.

Über das Feld können Daten an jede Transaktion angehängt werden data.

Hier ist ein Beispiel in web3.js:

eth.sendTransaction({data:web3.toHex('123456'), from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1‌​00,'finney')})

Die Daten sollten in Hex sein. Es wird ein String übergeben, toHexdamit die ID als BigNumber behandelt wird (da Javascript keine nativen großen Zahlen hat).

Wenn Sie die Hex-Daten lesen, konvertieren Sie sie mit zurück in eine String-ID new BigNumber(hexData).toString().

Je mehr Daten an eine Transaktion angehängt sind, desto mehr Benzin kostet sie, also bedenken Sie dies bei den IDs, die Sie verwenden.