Glossar / Transaktionen und Gebühren
PSBT
Auch bekannt als Partially Signed Bitcoin Transaction, BIP174.
- Was ist ein PSBT?
- Ein PSBT ist eine Transaktionsdatei, die noch nicht fertig ist: Er enthält die Eingaben, die Ausgaben und alles, was ein Signierer zur Prüfung braucht, und er wandert zwischen Geräten statt über das Netzwerk.
Spezifiziert im BIP-174.
Bitcoin zu signieren bedeutete früher, die privaten Schlüssel an das Programm auszuhändigen, das die Transaktion erstellt hat. BIP174 trennte beides 2018, und Bitcoin Core unterstützte das Format ab Version 0.17.0, sodass das Gerät, das die Schlüssel hält, ein anderes sein kann als das mit der Internetverbindung. Jede Hardware-Wallet und jeder Multisig-Koordinator spricht es heute.
Wie es funktioniert
Ein PSBT ist ein Container aus Schlüssel-Wert-Zuordnungen: eine globale Zuordnung, die die zusammengestellte Transaktion beschreibt, dann je eine Zuordnung für jeden Input und eine für jeden Output.
Die Datei beginnt mit fünf magischen Bytes, 70 73 62 74 ff, die "psbt" plus ein Trennzeichen ergeben. Base64 ist der übliche Weg, einen PSBT zu transportieren, daher beginnt ein in ein Textfeld eingefügter PSBT immer mit den Zeichen cHNidP8. Eine Zeichenfolge, die anders beginnt, ist kein PSBT, egal was die Person behauptet, die sie sendet.
Jede Input-Zuordnung enthält die Informationen, die ein Offline-Signierer nicht selbst nachschlagen kann:
- den Output, der ausgegeben wird, damit das Gerät den genauen Betrag und das Locking-Skript kennt, das es autorisiert
- das Redeem-Skript oder Witness-Skript, wenn die Coin hinter einer Richtlinie statt hinter einem einzelnen Schlüssel liegt
- einen Ableitungspfad und den Fingerabdruck des Hauptschlüssels für jeden Schlüssel, der signieren muss, damit ein Gerät mit der richtigen Seed-Phrase den richtigen Unterschlüssel findet
- die bisher gesammelten Teilunterschriften, eine pro Signierer
Auch die Output-Zuordnungen enthalten Ableitungsinformationen, und genau das erlaubt es einem Signierer, zu bestätigen, dass der Wechselgeld-Output wirklich zu der Wallet gehört, die er schützt.
BIP174 teilt die Arbeit in Rollen statt in Programme. Ein Creator erzeugt das Grundgerüst, ein Updater füllt die Input-Details ein, Signierer fügen Teilunterschriften hinzu, ein Combiner führt Dateien zusammen, die unabhängig signiert wurden, ein Finalizer wandelt Teilunterschriften in ein gültiges Skript oder Witness um, und ein Extractor erzeugt die rohe Transaktion, die gesendet werden kann. Eine Software spielt oft mehrere Rollen gleichzeitig, doch gerade diese Trennung ist der Grund, warum Dateien verschiedener Anbieter überhaupt zusammenarbeiten.
Das Format wurde geschaffen, um Unkenntnis zu tolerieren. Jedes Feld trägt ein Typ-Byte, und ein Signierer, der ein Feld nicht versteht, muss es unverändert weiterreichen statt es zu verwerfen; so kann eine 2018 geschriebene Wallet eine Datei noch an eine für Taproot geschriebene weitergeben. BIP371 fügte die Taproot-Felder hinzu; BIP370 definiert eine Version 2, in der Inputs und Outputs auch nach der Erstellung noch hinzugefügt werden dürfen, die Eigenschaft, die gemeinsame Transaktionen brauchen.
Warum das wichtig ist, wenn Sie Bitcoin kaufen
Sobald Sie Bitcoin von einer Börse in Ihre eigene Hardware-Wallet verschieben, nutzen Sie das PSBT-Format, ob ein Bildschirm das nun anzeigt oder nicht.
Es hält die Schlüssel von Ihrem Computer fern. Ihr Laptop erstellt die Ausgabe und produziert einen PSBT, die Trezor oder die Ledger liest ihn, zeigt Ihnen, was darin steht, signiert und gibt ihn zurück. Nichts Geheimes passiert das Kabel. Das ist der Unterschied zwischen einem kompromittierten Laptop, den man überlebt, und einer kompromittierten Seed-Phrase, die man nicht überlebt.
Es schützt gegen den Austausch der Wechselgeld-Adresse. Schadsoftware, die Ihren Computer steuert, kann einen ehrlichen Zahlungsbildschirm anzeigen und dabei das Wechselgeld still an eine Adresse leiten, die ihr gehört, und das Wechselgeld ist meist der größere Betrag. Weil die Datei für jeden Output einen Ableitungspfad nennt, kann das signierende Gerät prüfen, ob das Wechselgeld von seiner eigenen Seed-Phrase abstammt, und Sie warnen, wenn nicht. Lesen Sie den Bildschirm des Geräts, nie den Browser-Tab.
Es macht Multisig für Menschen ohne Ingenieurskenntnisse nutzbar. Eine 2-von-3-Aufteilung auf zwei Hardware-Wallets und eine Sicherung in einem anderen Gebäude funktioniert nur, wenn eine unsignierte Transaktion per SD-Karte, QR-Code oder E-Mail reisen kann, ohne etwas preiszugeben. Ein PSBT enthält keine privaten Schlüssel, daher kostet es Sie nichts, einen unterwegs zu verlieren.
Es ist das Stück, das Ihre Erben brauchen werden. Ein Umschlag mit Seed-Wörtern ist kein Wiederherstellungsplan für irgendetwas Komplizierteres als eine Wallet mit einem einzigen Schlüssel. Legen Sie zu den Seed-Phrasen den Output-Deskriptor der Wallet und eine Notiz, die Software nennt, die PSBTs liest, und der Plan überlebt Sie. Unser Sicherheitsratgeber behandelt den Rest dieser Einrichtung.
Eine 2-von-3-Auszahlung signieren, Schritt für Schritt
Angenommen, Sie kaufen 0,4 BTC an einer Börse und ziehen sie in einen Tresor ab, über den drei Schlüssel verfügen, von denen zwei beliebige ausgeben können.
Monate später möchten Sie einen Teil davon bewegen. Eine Watch-Only-Wallet auf Ihrem Laptop, geladen mit dem Deskriptor des Tresors und ganz ohne Schlüssel, erstellt die Transaktion: ein Input, ein Zahlungs-Output und ein Wechselgeld-Output. Ein nativer SegWit-Input 2 von 3 belegt etwa 105 virtuelle Bytes und zwei Outputs etwa 62 weitere, sodass das Ganze mit Overhead bei etwa 177 virtuellen Bytes landet, und bei 8 sat/vB beträgt die Gebühr rund 1.400 Satoshis.
Der Laptop schreibt einen PSBT. Sie stecken die erste Hardware-Wallet an, die die Datei liest, den Empfänger, den Betrag und die Gebühr anzeigt und eine Unterschrift in die Input-Zuordnung schreibt. Dann tragen Sie die Datei auf einer microSD-Karte zum zweiten Gerät, das nie ein Netzwerk berührt hat, und dieses fügt die zweite Unterschrift hinzu.
Zurück auf dem Laptop führt der Combiner die beiden Dateien zusammen, der Finalizer setzt die Unterschriften in der Reihenfolge, die das Skript erwartet, zu einem Witness zusammen, und der Extractor erzeugt eine rohe Transaktion. Erst dann erreicht etwas das Netzwerk. Bis zu diesem Moment hat kein Schlüssel ein Gerät verlassen, und nichts von dem, was Sie getan haben, war für irgendjemanden sichtbar.
PSBT vs. serialisierte Transaktion
Eine serialisierte Transaktion ist fertig; ein PSBT ist ein Arbeitsbereich. Senden Sie einen PSBT, und jeder Node lehnt ihn ab, denn das Peer-to-Peer-Protokoll transportiert dieses Format nicht. Der Unterschied gilt auch in die andere Richtung: Ein PSBT enthält Kontext, den eine fertige Transaktion wegwirft, etwa den Wert jedes ausgegebenen Inputs und den Schlüssel, von dem jede Adresse abgeleitet wurde, und genau das sind die Informationen, die eine Hardware-Wallet braucht und ein Block nicht.
PSBT vs. Output-Deskriptor
Ein Output-Deskriptor beschreibt eine Wallet; ein PSBT beschreibt eine Ausgabe. Der Deskriptor ist eine einzige Zeile, die den Skripttyp, die Schlüssel und die Ableitungspfade nennt, und er ändert sich von einem Jahr zum nächsten nicht. PSBTs sind Einwegprodukte, einer pro Transaktion. Bei einer Wallet mit einem einzigen Schlüssel stellt die Seed-Phrase allein alles wieder her, bei Multisig brauchen Sie jedoch beides: den Deskriptor, um herauszufinden, welche Adressen Ihnen gehören, und PSBTs, um etwas daraus zu bewegen.