Glossar / Transaktionen und Gebühren
SIGHASH_NONE
- Was ist SIGHASH_NONE?
- SIGHASH_NONE ist das Flag, das die Eingänge einer Transaktion signiert, dabei aber keinen ihrer Ausgänge festschreibt, wodurch das Ziel des Geldes für jeden offen bleibt, der sie bearbeitet.
Behandeln Sie es wie einen Blankoscheck. Ein SIGHASH_NONE-Eingang autorisiert die Ausgabe und sagt nichts darüber, wer bezahlt wird, sodass ein Miner oder jeder weiterleitende Node alle Ausgänge neu schreiben kann, bevor die Transaktion bestätigt wird. Sein Wert ist 2, keine Wallet für Endkunden bietet es an, und wenn Sie jemals eines in Ihrer eigenen Transaktion sehen, ist etwas schiefgegangen.
Wie es funktioniert
Um diesen Hash zu bilden, wird die Liste der Ausgänge vor dem Hashing vollständig verworfen.
Was übrig bleibt, ist dennoch erheblich: die Version der Transaktion, der Outpoint des Eingangs, der signiert wird, die eigene Sequenznummer dieses Eingangs, das Skript, das er ausgibt, und die Locktime. Die Sequenznummern aller anderen Eingänge werden auf null gesetzt, eine zweite Freiheit, denn sie erlaubt es Mitunterzeichnern, ihre eigenen relativen Timelocks anzupassen, nachdem diese Signatur bereits existiert.
Was nicht übrig bleibt, ist der eigentliche Punkt. Da kein Ausgang festgeschrieben wird, besagt die Signatur nur, dass diese Coin in einer Transaktion dieser Version zu diesem Zeitpunkt oder danach ausgegeben werden dürfen. Wer die halb fertige Transaktion hält, entscheidet, wohin der Wert fließt, und dazu gehört jeder, der sie im Netzwerk sieht, denn eine unbestätigte Transaktion ist öffentlich, sobald sie verbreitet wird.
Fügt man den Modifikator ANYONECANPAY hinzu, wird das Byte zu 0x82, der schwächsten Signatur, die Bitcoin erzeugen kann: sie deckt einen Eingang ab und sonst absolut nichts.
Das Flag existiert seit der ersten Version im Januar 2009 und wurde nie entfernt, denn eine Entfernung würde Coins stranden lassen, die gesperrt wurden, bevor jemand über die Folgen nachdachte. BIP143 und BIP341 haben es für SegWit und Taproot beide originalgetreu neu umgesetzt, statt es stillschweigend fallen zu lassen.
Wo es auftritt
SIGHASH_NONE taucht fast nirgends auf, was genau dem entspricht, was Sie erwarten sollten.
Der theoretische Einsatz ist ein Protokoll, bei dem eine Partei Mittel beisteuert und eine Gegenpartei das Ziel wählt, wobei diese Gegenpartei durch etwas außerhalb der Signatur gebunden ist. Keine weit verbreitete Bitcoin-Anwendung funktioniert so. Konstruktionen, die flexible Eingänge brauchen, greifen stattdessen zu ANYONECANPAY, und Konstruktionen, die flexible Ausgänge brauchen, nutzen vorab signierte Alternativen, bei denen die möglichen Ziele im Voraus feststehen.
Eine SIGHASH_NONE-Signatur in freier Wildbahn ist also ein Fehler oder ein laufender Diebstahl. Mempools werden fortlaufend von Bots überwacht, die nach ausgebbaren Kuriositäten suchen, und eine Transaktion, die eine trägt, bleibt dort nicht lange unbemerkt. Wer Signiercode schreibt, sollte das Flag als eine Ganzzahl behandeln, die er nie übergibt, und wer ein Verwahrungssystem prüft, sollte bestätigen, dass das Flag eine Konstante ist und kein Parameter, den der Aufrufer liefert.
Für jemanden, der Bitcoin kauft und hält, ist die Schlussfolgerung kurz: Sie werden damit nicht in Berührung kommen, Ihre Wallet wird es nicht anbieten, und Software, die Sie bittet, damit zu signieren, ist Software, von der Sie sich abwenden sollten.
SIGHASH_NONE vs. SIGHASH_SINGLE
SIGHASH_NONE schreibt null Ausgänge fest; SIGHASH_SINGLE schreibt genau einen fest, den Ausgang am selben Index wie der Eingang, der signiert wird. Dieser eine festgeschriebene Ausgang verändert den Charakter der Signatur vollständig. Mit SIGHASH_SINGLE kann ein Unterzeichner seine eigene Auszahlung garantieren und den Rest der Transaktion offen lassen, was ein brauchbarer Baustein für Swaps und Marktplätze ist. SIGHASH_NONE garantiert dem Unterzeichner gar nichts, weshalb das eine echte Anwendungen hat und das andere vor allem in Incident-Berichten auftaucht.