Zum Inhalt springen
buybitcoinsmart

Glossar / Transaktionen und Gebühren

Serialisierte Transaktion

Auch bekannt als Rohe Transaktion.

Was ist eine serialisierte Transaktion?
Eine serialisierte Transaktion ist die exakte Bytefolge, die eine Wallet an das Netzwerk übergibt, die Hexadezimalform, die jeder Node parst, deren Hash er berechnet und die er weitergibt, ohne ein einziges Byte zu verändern.

Spezifiziert im BIP-144.

Alles Benutzerfreundliche an einer Transaktion, die Adressen, die Beträge in Ihrer Landeswährung, die Bezeichnungen, ist Beiwerk, das Ihre Wallet hinzufügt. Was tatsächlich übertragen wird, ist ein kompakter Binär-Blob, bei einer einfachen Zahlung typischerweise 200 bis 250 Bytes, und er ist vollständig in sich geschlossen. Kopieren Sie diese Hexadezimalfolge von einem Offline-Computer auf einen beliebigen Online-Computer, und die Zahlung kann von dort aus gesendet werden.

Wie es funktioniert

Die Serialisierung ist eine feste Reihenfolge ohne Feldnamen, daher verlassen sich Parser ganz auf die Position und auf Längenpräfixe.

Der Blob beginnt mit der Version aus vier Bytes. Transaktionen mit Segregated Witness fügen dann zwei Kennbytes ein, 0x00 und 0x01, die ältere Parser als Transaktion mit null Eingaben lesen und daher ablehnen würden, ein bewusster Kunstgriff, der das neue Format mit dem alten koexistieren ließ. Als Nächstes kommt die Anzahl der Eingaben als compactSize-Ganzzahl, dann jede Eingabe: 36 Bytes, die die ausgegebene Coin benennen, ein Entsperrskript mit Längenpräfix und eine Sequenznummer aus vier Bytes. Es folgt die Anzahl der Ausgaben, dann jede Ausgabe als Betrag aus acht Bytes in Satoshis plus ein Sperrskript mit Längenpräfix. Witness-Daten stehen, wenn vorhanden, nahe am Ende, und die letzten vier Bytes sind immer die Locktime.

Zahlen werden im Little-Endian-Format gespeichert, das kleinste Byte zuerst, weshalb ein Betrag von 100.000 Satoshis in der Hexadezimalfolge als a0 86 01 00 00 00 00 00 erscheint. Hashes werden in der internen Byte-Reihenfolge gespeichert, also umgekehrt zu der, die ein Explorer anzeigt, sodass Transaktions-IDs innerhalb eines rohen Blobs rückwärts erscheinen.

Aus dieser einen Struktur gehen zwei Hashes hervor. Die Transaktions-ID ist ein doppelter SHA-256 über die Serialisierung ohne Marker, Kennbyte und Witness, was Signaturen davor bewahrt, nachträglich verändert zu werden. Die Witness-Transaktions-ID, definiert in BIP141, hasht das Ganze einschließlich des Witness, und Nodes nutzen sie für die Buchführung bei der Weitergabe. Eine native SegWit-Zahlung mit einer Eingabe und zwei Ausgaben serialisiert zu etwa 222 rohen Bytes und zählt als rund 141 virtuelle Bytes, weil der Witness-Teil mit einem Abschlag versehen ist.

Wo Sie sie sehen

Die rohe Form taucht in dem Moment auf, in dem Sie eine einzelne App verlassen, was für die meisten Menschen das Offline-Signieren oder das Retten einer Zahlung bedeutet.

Hardware-Wallets und netzgetrennte Einrichtungen exportieren eine fertige Transaktion als Hexadezimalfolge oder als QR-Code mit denselben Bytes, und Sie fügen sie in das Sendeformular auf einem Block-Explorer ein, um sie zu senden. Die Kommandozeile von Bitcoin Core nutzt sie in beide Richtungen: createrawtransaction und signrawtransactionwithwallet erzeugen die Hexadezimalfolge, decoderawtransaction wandelt sie zurück in lesbares JSON, und sendrawtransaction gibt sie ins Netzwerk. Support-Anfragen verlangen oft die rohe Hexadezimalfolge statt der Transaktions-ID, weil die Hexadezimalfolge beweist, was die Transaktion enthält, statt sie nur zu benennen.

Ein Hinweis zur Sicherheit. Eine signierte rohe Transaktion ist Inhaberinformation: Wer die Hexadezimalfolge hat, kann sie senden, und nichts daran ist vertraulich. Fügen Sie eine solche Folge nicht in ein öffentliches Forum ein, während Sie um Hilfe bitten, es sei denn, Ihnen ist recht, dass die Zahlung ausgeführt wird.

Serialisierte Transaktion vs. Transaktions-ID

Die serialisierte Transaktion ist das Dokument; die Transaktions-ID ist ihr Dateiname. Die eine ist eine Hexadezimalfolge von einigen hundert Bytes, die auf dem Bildschirm bis zu fünfhundert Zeichen lang sein kann, die andere hat immer genau 64 Hexadezimalzeichen.

Menschen verwechseln sie, weil beide wie lange Hexadezimalfolgen aussehen. Der Test ist die Länge und das, was die Zeichenfolge kann. Eine Zeichenfolge mit 64 Zeichen lässt sich in einem Explorer nachschlagen und sonst nichts. Eine längere Zeichenfolge lässt sich in Felder dekodieren, und ist sie vollständig signiert, kann sie jeder senden, der sie hat, auch ein Fremder, dem Sie sie geschickt haben.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Kann jeder eine signierte rohe Transaktion senden, die ich mit ihm teile?

Ja. Eine vollständig signierte serialisierte Transaktion ist vollständig und braucht keine Erlaubnis zur Einreichung, behandeln Sie die Hexadezimalfolge also wie einen unterschriebenen Scheck. Wenn Sie sie in einem öffentlichen Thread teilen, überlassen Sie die Zahlung demjenigen, der sie zuerst kopiert.

Warum erscheint die Transaktions-ID innerhalb der rohen Hexadezimalfolge rückwärts?

Weil Hashes in der internen Byte-Reihenfolge gespeichert werden, die umgekehrt zur Reihenfolge ist, die Explorer anzeigen. Beide beschreiben dieselben 32 Bytes, und jeder Decoder dreht sie für Sie um, wenn er die ID ausgibt.

Verwandte Begriffe

Mehr zum Thema Transaktionen und Gebühren

Diese Seite auf Englisch lesen