Bitcoin-Core

BTC scriptSig 中的 hashtype 是否可以包含 0x01、0x02、0x03、0x80、0x81、0x82、0x83 以外的值?

  • June 7, 2020

根據<https://en.bitcoin.it/wiki/OP_CHECKSIG>或<https://developer.bitcoin.org/devguide/transactions.html#signature-hash-types>中的 hashtype 值,hashtype 可以是 0x01、0x02、0x03 , 0x80, 0x81, 0x82, 0x83。

但是,查看<https://github.com/bitcoin/bitcoin/blob/452bb90c718da18a79bfad50ff9b7d1c8f1b4aa3/src/test/data/sighash.json>中的比特幣測試數據,hashtype 可以是許多其他值,例如 1190874345 或 -886562767 或其他數字價值

提前感謝您!

是的,sighash 類型可以不是 0x01、0x02、0x03、0x80、0x81、0x82 和 0x83,但不能是 1190874345 或 -886562767 之類的值。由於正在測試的特定功能,您將在測試中看到這些,但這些 sighash 類型在實際事務中不起作用。

在實際交易中,sighash 類型是簽名項的最後一個字節。因為它是一個字節,所以只有 256 個可能的 sighash 類型值。但是,在創建 sighash(以及創建它的函式)時,需要一個有符號的 int,它是 4 個字節。因此,該函式的單元測試使用該函式的有效值,但這些值在事務中無效。

所以在實際交易中,你可以使用其他的 sighash 類型。他們的行為方式有點難以描述。令人困惑的是,有時 sighash 類型被視為位集,而其他時候則被視為 int。

如果設置了第八位(最高有效位),則將應用 SIGHASH_ANYONECANPAY 行為。如果僅取前 5 位等於 2,則適用 SIGHASH_NONE 行為。如果僅取前 5 位等於 3,則適用 SIGHASH_SINGLE 行為。所有不滿足這些要求的值(包括預設的 SIGHASH_ALL 0x01)都意味著使用 SIGHASH_ALL 規則。

引用自:https://bitcoin.stackexchange.com/questions/96353