Was ist die Sequenz von TxIn?

Ich versuche gerade, den Genesis-Block mit meinem Code zu generieren, und bin auf das TxIn-Sequenzfeld gestoßen, das auf der Wiki-Seite Protocol Specification nicht erklärt wird und auch nicht im Block-Explorer erscheint . Wie wird der Wert dieses Feldes berechnet und welchen Wert hatte er für den Genesis-Block?

Antworten (2)

Sequenznummern werden auf den HTML-Seiten von Bitcoin Block Explorer nicht angezeigt, da sie derzeit nicht vom Netzwerk verwendet werden. Nicht standardmäßige Sequenznummern würden auf rohen Block-/TX-Seiten angezeigt, aber ich bin mir nicht sicher, ob dies jemals passiert ist.

Sequenznummern sollen zum Ersetzen verwendet werden. Das Ersetzen ist derzeit deaktiviert, aber wie es funktionieren würde, ist:

  • Sie senden eine Transaktion mit einer LockTime in der Zukunft und einer Sequenznummer von 0. Die Transaktion wird dann vom Netzwerk nicht als "final" angesehen und kann nicht in einen Block aufgenommen werden, bis die angegebene LockTime erreicht ist.
  • Bevor LockTime abläuft, können Sie die Transaktion durch beliebig viele neue Versionen ersetzen. Neuere Versionen haben höhere Sequenznummern.
  • Wenn Sie die Transaktion dauerhaft sperren möchten, können Sie die Sequenznummer auf UINT_MAX setzen. Dann gilt die Transaktion als abgeschlossen, auch wenn die LockTime noch nicht erreicht ist.

Dies ist in mehreren Fällen nützlich. Beispielsweise können zwei Parteien damit eine „vorbereitete Transaktion“ aufsetzen. Sobald die vorbereitete Transaktion erstellt ist, können die Parteien sofort, sicher und ohne Gebühren Geld untereinander verschieben. Sie könnten also eine davon mit einem Umtausch einrichten und abheben und einzahlen, ohne auf Bestätigungen warten zu müssen.

Da derzeit keine Ersetzung verwendet wird, haben alle von Bitcoin erstellten Transaktionen LockTime = 0 und Sequence = UINT_MAX. Dies ist bei der Generierungstransaktion des Genesis-Blocks der Fall.

Wie bestimmt das Netzwerk, ob eine neue Version als Ersatztransaktion akzeptiert wird? Könnte ein Angreifer Transaktionen böswillig ersetzen?
Es sind nicht standardmäßige Sequenznummern aufgetreten. Einmal im Januar 2011 und 6 mal im Februar 2011. Die Sequenznummer war jeweils Null. Siehe Transaktion c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73 für ein Beispiel. blockexplorer.com/rawtx/…
Als Referenz UINT_MAX = 4294967295U
Ihre Antwort scheint davon auszugehen, dass eine Transaktion eine einzige Sequenznummer hat , aber gemäß der Protokollspezifikation hat eine Transaktion eine Sequenznummer für jede Eingabe . In diesem Fall bin ich mir nicht sicher, wie der Austausch funktionieren würde. Stellen Sie sich eine Transaktion mit zwei Eingaben vor: Eingabe Nr. 0 hat Seqno 1 und Eingabe Nr. 1 Seqno 2. Wie würde diese Transaktion mit einer Transaktion verglichen, bei der Eingabe Nr. 0 Seqno 2 und Eingabe Nr. 1 Seqno 1 hat?
UINT_MAX ist ein 32-Bit-Wert. In Hex ist es "FFFFFFFF".
Diese Antwort scheint veraltet zu sein. Siehe die Antwort von bitcoin.stackexchange.com/a/55113/47528

Beachten Sie, dass die akzeptierte Antwort veraltet ist.

Derzeit werden Sequenznummern hauptsächlich für die Signalisierung von RBF (Replace-by-Fee) verwendet, mit denen Sie eine Transaktion mit einer höheren Gebühr erneut senden können.

Siehe https://bitcoincore.org/en/faq/optin_rbf/ , https://github.com/bitcoin/bips/blob/master/bip-0125.mediawiki