Signature
SIGHASH 標誌是如何編碼到簽名中的?
OP_CHECKSIG 從它評估的每個簽名中提取一個非堆棧參數,允許簽名者決定要簽署交易的哪些部分。由於簽名保護交易的這些部分不被修改,這讓簽名者有選擇地選擇讓其他人修改他們的交易。
但是如何從簽名中提取 SIGHASH 標誌?
SIGHASH 類型被序列化為單個字節,然後簡單地附加到 DER 編碼的簽名中。
典型的 P2PKH scriptSig 範例:
304402206e3729f021476102a06ea453cea0a26cb9c096cca641efc4229c1111ed3a96fd022037dce1456a93f53d3e868c789b1b750a48a4c1110cd5b7049779b5f4f3c8b62001 03ff1104b46b2141df1948dd0df2223720a3a471ec57404cace47063843a699a0f
上面的第二個元素是公鑰,按照SEC 1 的 Elliptic-Curve-Point-to-Octet-String Conversion序列化。第一個元素是 DER 編碼簽名,附加 0x01 以指定它是 SIGHASH_ALL(您已經找到其值)。如果您有興趣,要進一步分解簽名字元串:
30 <- a sequence 44 <- of length 0x44 02 <- an integer 20 <- of length 0x20 6e3729f021476102a06ea453cea0a26cb9c096cca641efc4229c1111ed3a96fd <- r 02 <- an integer 20 <- of length 0x20 37dce1456a93f53d3e868c789b1b750a48a4c1110cd5b7049779b5f4f3c8b620 <- s 01 <- SIGHASH type (not part of the DER encoding)
SIGHASH 類型也在簽名之前臨時附加到交易中,以便簽名排除其修改,有關更多詳細資訊,請參閱此答案。