Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

MSG_TX

Was ist MSG_TX?
MSG_TX kennzeichnet einen Eintrag im Inventar als Transaktion, Typcode 1, und so wird Ihre unbestätigte Zahlung den Peers angekündigt, bevor einer von ihnen ihren Inhalt gesehen hat.

Eine einzige Zahl unterscheidet im Ankündigungsprotokoll von Bitcoin eine Zahlung von einem Block, und diese Zahl ist die 1. Sie geht mit dem 32 Byte langen Bezeichner der Transaktion einher, insgesamt 36 Byte, und sie verpflichtet den Absender zu nichts: Die Bytes bewegen sich erst, wenn ein Peer mit getdata antwortet. Seit Bitcoin Core 0.21.0 kündigen die meisten Peers mit einem ganz anderen Code an.

So funktioniert es

MSG_TX benennt eine Transaktion über ihre txid, den Bezeichner, der ohne Witness-Daten berechnet wird.

Ein Node, der Ihre Zahlung in seinen Mempool aufgenommen hat, teilt seinen Peers mit, dass der Hash existiert. Jeder Peer, dem er fehlt, fragt nach, und erst dann wird der Inhalt in einer tx-Nachricht gesendet. Ein Peer, der etwas anfragt, das der Node nicht mehr hat, erhält notfound, was regelmäßig vorkommt: Mempools werfen unter Druck Einträge heraus, und ein Node schuldet niemandem eine Kopie einer Transaktion, die er bereits verworfen hat.

Die Auslieferung erfolgt bewusst widerwillig. Bitcoin Core gibt eine Transaktion nicht an einen Peer heraus, dem er sie nie angekündigt hat, bis diese Transaktion ein paar Minuten im Mempool liegt. Ohne diese Verzögerung könnte sich ein Fremder verbinden und per getdata testen, ob Ihr Node bestimmte Zahlungen kennt, was jeden Node in eine Abfrageschnittstelle für seinen eigenen Mempool verwandeln und es deutlich erleichtern würde, herauszufinden, wo eine Zahlung zuerst aufgetaucht ist.

Der Typ 1 trägt auch die alte Serialisierungsregel mit sich. Eine Transaktion, die als Antwort darauf ausgeliefert wird, wird ohne Witness-Daten geschrieben, das Format, das vor 2017 existierte und das bei einer SegWit-Transaktion die Signaturen weglässt. SegWit-fähige Peers fordern daher die Witness-Variante an, und seit BIP339 mit Bitcoin Core 0.21.0 im Januar 2021 ausgeliefert wurde, kündigen sie normalerweise mit Typ 5 an, womit sie Transaktionen über den Witness-Hash benennen, sodass ein veränderter Witness nicht mehr wie eine unbekannte Transaktion aussieht.

Wo Sie es sehen

MSG_TX ist die Maschinerie hinter dem Satz „Die Transaktion wurde gesendet“, und hinter den Fällen, in denen sich herausstellt, dass sie es nicht wurde.

Eine Wallet, die mit einem einzigen Node verbunden ist, übergibt eine signierte Transaktion, dieser Node kündigt den Hash an, und weiter geschieht nichts, bis irgendein Peer sie anfordert. Fordert nie einer an, liegt die Zahlung auf einer einzigen Maschine und kein Miner wird sie sehen. Bitcoin Core verfolgt die Transaktionen der eigenen Wallet, die noch kein Peer angefordert hat, und kündigt sie erneut an, bis einer es tut. Ein Node ohne ausgehende Verbindungen, in einem Heimnetz hinter einer Firewall, kann eine Zahlung daher als gesendet melden, während überhaupt nichts das Haus verlassen hat.

Auch das Bündeln von Auszahlungen bei Börsen taucht hier auf. Die Börse kündigt einen Hash an, eine einzige Anfrage liefert eine Transaktion, die Dutzende Kunden auf einmal bezahlt, und deshalb enthält die txid Ihrer Auszahlung Ausgaben, die Fremden gehören.

MSG_TX vs. die P2P-Nachricht tx

MSG_TX benennt eine Transaktion, und die Nachricht tx enthält eine. Wer sie verwechselt, macht Protokolldaten unlesbar, denn inv- und getdata-Zeilen sind nichts als Typcodes und Hashes, während die eigentlichen Bytes nur in tx-Zeilen erscheinen. Der Unterschied zählt am meisten, wenn Sie die Verbreitung untersuchen. Zu sehen, wie Ihr Hash in einer inv hinausgeht, beweist, dass Ihr Node es jemandem mitgeteilt hat. Zu sehen, wie eine tx-Nachricht darauf folgt, beweist, dass jemand sie tatsächlich haben wollte.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Wie erkenne ich, dass meine Transaktion tatsächlich das Netzwerk erreicht hat?

Die Ankündigung des Hashs allein reicht nicht. Sehen Sie ihn eine Minute nach dem Senden in zwei unabhängigen Block-Explorern nach, denn wenn er auf einem Node erscheint, den Sie nicht steuern, beweist das, dass ein Peer ihn angefordert und angenommen hat.

Warum kündigen moderne Nodes Transaktionen stattdessen mit Typ 5 an?

Weil die Weiterleitung nach BIP339 Transaktionen über den Witness-Hash statt über die txid identifiziert. Damit sind auch die Witness-Bytes erfasst, sodass ein Peer eine Transaktion, deren Witness unterwegs verändert wurde, nicht mehr für etwas hält, das er nie gesehen hat.

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen