Wenn du eine Transaktion signierst, signierst du nicht die Rohbytes. Du signierst einen Hash ausgewählter Teile, den Signature Hash. Ein ein-Byte-Sighash-Flag am Ende der Signatur sagt, welche Teile.
Die Flags
- SIGHASH_ALL (Standard): committed sich auf alle Inputs und Outputs.
- SIGHASH_NONE: committed sich nur auf Inputs; jeder kann die Outputs ändern.
- SIGHASH_SINGLE: committed sich auf den Output mit demselben Index wie dieser Input.
- ANYONECANPAY lässt sich mit jedem kombinieren, sodass die Signatur nur auf ihren eigenen Input committed.
Upgrades
BIP143 (SegWit v0) ließ Signer auf den ausgegebenen Betrag committen – das behob quadratisches Hashing und hilft Hardware-Wallets. BIP341 (Taproot) ging weiter, committed sich auf alle ausgegebenen Beträge und Scripts und fügte SIGHASH_DEFAULT hinzu, das sich wie ALL verhält, aber ein Byte spart.