Kann eine Ripple-Transaktionssequenz Lücken aufweisen?

Ich frage mich, ob eine Ripple-Transaktion mit einer Sequenznummer, die über einige Nummern der vorherigen Sequenznummer hinausgeht, als gültige Transaktion im Ripple-Netzwerk akzeptiert wird?

Wenn ich zum Beispiel einen Payment Tx mit Sequence 123 habe und dann eine weitere Transaktion mit Sequence 200 erstellen möchte, wird sie durchgehen?

Ich verstehe auch, dass die Transaktionssequenznummern nicht absteigend sein können, daher konnte ich keine Tx mit einer Sequenz von 100 senden. Ist das richtig?

Antworten (1)

Damit eine Transaktion verarbeitet werden kann, muss sie die allernächste verfügbare Sequenznummer verwenden (wie von account_info zurückgegeben ).

Wenn eine ansonsten gültige signierte Transaktion eine zu kleine Sequenznummer hat (die mit einer zuvor verwendeten Sequenznummer übereinstimmt), ist die Transaktion garantiert nie gültig und erzeugt einen Fehler und sollte von Servern, die sie empfangen, verworfen werden.

Wenn eine ansonsten gültige signierte Transaktion eine (derzeit) zu hohe Sequenznummer verwendet, dann ist die Transaktion derzeit nicht gültig und erzeugt einen Fehler, aber die Transaktion kann gültig werden (und ein Server kann die Transaktion zu diesem Zeitpunkt beibehalten und automatisch versuchen, sie anzuwenden ). Außerdem könnte jeder, der die signierte Transaktion gesehen hat, sie wiederholen, sobald die "fehlenden" Sequenznummern auf dem Konto verwendet werden. Solche Transaktionen werden als In-Flight bezeichnet und ihr Ergebnis ist unbestimmt, bis entweder das Konto eine Transaktion mit dieser Sequenznummer in einem vollständig validierten Ledger (möglicherweise eine No-OP-Transaktion , nur um die Sequenznummer zu verbrauchen/vorzurücken) oder eine vollständige Transaktion hat validiertes Ledger mit einer Ledger-Sequenz, die mindestens so hoch ist wie die LastLedgerSequencein der signierten Transaktion angegeben ist zu sehen.

Von https://ripple.com/wiki/Transactions#Use_as_a_NOP :

Wenn mehrere Transaktionen noch abgeschlossen werden müssen (bekanntermaßen in Bearbeitung) und ein lokaler Fehler auftritt, sodass folgende Transaktionen in Bearbeitung sind, schlagen die folgenden Transaktionen vorübergehend fehl, bis die vom lokalen Fehler verwendete Sequenznummer verbraucht ist. Eine Transaktion ist in Bearbeitung, wenn sie nicht in ein vollständig validiertes Hauptbuch aufgenommen wurde, aber auch nicht garantiert ist, dass dies nicht der Fall ist.

Die In-Flight-Transaktionen können später von jedem, der sie hat, wiedergegeben werden. Für die Vorhersagbarkeit und Zuverlässigkeit ist es wichtig, die Sequenznummer der fehlerhaften Transaktion zu konsumieren und die In-Flight-Transaktionen zu wiederholen, bis sie abgeschlossen sind.

Und von https://ripple.com/wiki/Transactions#Basic_Transaction_Format :

LastLedgerSequence (optional)

Höchste gültige Ledger-Nummer, in der eine Transaktion erscheinen kann. Wenn dies angegeben ist und die Transaktion nicht enthalten ist, wenn das Ledger die angegebene Ledger-Sequenznummer erreicht, wird die Transaktion als fehlgeschlagen betrachtet und ist nicht mehr gültig.

Also konkret,

Wenn ich zum Beispiel einen Payment Tx mit Sequence 123 habe und dann eine weitere Transaktion mit Sequence 200 erstellen möchte, wird sie durchgehen?

Erst wenn Transaktionen mit den Sequenzen 124 bis 199 durchlaufen werden. Bis dahin melden Server bei solchen Transaktionen den Fehler „fehlende Sequenznummer“. Bis eine Transaktion mit Sequenz 200 auf Ihr Konto angewendet wird, können Sie nicht wissen, dass irgendetwas Ihre "alte" signierte Zahlungstransaktion nicht erneut einreicht, sobald sie Ihre Transaktion mit Sequenz 199 sehen (d.h. obwohl Sie einen Fehler erhalten, könnte die Transaktion sein später angewendet).

Ich verstehe auch, dass die Transaktionssequenznummern nicht absteigend sein können, daher konnte ich keine Tx mit einer Sequenz von 100 einreichen.

Eine solche Transaktion wird immer einen „Past Sequence Number“-Fehler erhalten und niemals gültig sein.