本文へスキップ
ecdsa.com

SIGHASH フラグ

Bitcoin の署名の末尾に付加され、署名がトランザクションのどの部分を対象とするかを選ぶバイトです。ALL(0x01)、NONE(0x02)、SINGLE(0x03)があり、必要に応じて ANYONECANPAY(0x80)と組み合わせます。このほか、Taproot のデフォルトである 0x00 があります。
別表記sighashSIGHASH_ALLSIGHASH_ANYONECANPAYsighash type

SIGHASH_ALL はすべての入力と出力を署名の対象とし、ウォレットはほぼ常にこれを使います。NONE は出力を未確定のままにし、SINGLE は同じインデックスの出力だけを対象とします。ANYONECANPAY を使うと、他者が入力を追加できます(クラウドファンディング型)。Taproot の SIGHASH_DEFAULT(0x00)は ALL と同じように動作し、フラグのバイトを省略できます。BIP-143(SegWit v0)と BIP-341(Taproot)はダイジェストの構築方法を定めており、入力の金額も含まれるため、ハードウェアウォレットが手数料を検証できます。

PSBT に普通でないフラグが含まれていたら危険信号です。だまされて SIGHASH_NONE や SINGLE で署名した署名者は、他者に資金の送り先を変えられてしまいます。署名者は、プロトコルが必要とする場合を除き、デフォルト以外のフラグを拒否すべきです。

規格と参考文献

すべての用語