Segregated-Witness

在為 bip143 生成見證時,如何選擇使用什麼 outpoint?

  • June 15, 2021

在用於創建見證簽名的 bip 143 中,它描述了需要序列化/簽名的內容。文件似乎缺少的一件事是如何確定要使用哪個 outpoint。那麼在這些交易中,每個範例中都有多個 txin,而且它們似乎總是只選擇其中一個?

例如來自 bip 143 中的 Native P2WPKH

以下是未簽名的交易:
0100000002fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f0000000000eeffffffef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a0100000000ffffffff02202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac11000000
   
n版本:01000000
   **txin: 02 fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f 00000000 00 eeffffff
ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a 01000000 00 ffffffff**
輸出:02 202cb20600000000 1976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac
9093510d00000000 1976a9143bde42dbee7e4dbe6a21b2d50ce2f0167faa815988ac
nLockTime: 11000000
 
第一個輸入來自一個普通的 P2PK:
scriptPubKey:2103c9f4836b9a4f77fc0d81f7bcb01b7f1b35916864b9476c241ce9fc198bd25432ac 值:6.25
私鑰:bbc27228ddcb9209d7fd6f36b02f7dfa6252af40bb2f1cbc7a557da8027ff866
   
第二個輸入來自 P2WPKH 見證程序:
scriptPubKey:00141d0f172a0ecb48aee1be1f2687d2963ae33f71a1,值:6
私鑰:619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9
公鑰:025476c2e83188368da1ff3e292e7acafcdb3566bb0ad253f62fc70f07aeee6357
   
使用 nHashType 1 (SIGHASH_ALL) 對其進行簽名:
 
hashPrevouts:
dSHA256(fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d50000ec)
= 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
 
雜湊序列:
dSHA256(eeffffffffffffff)
= 52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
 
雜湊輸出:
dSHA256(202cb206000000001976a9148280b37df378db99f66f85c95a783a76ac7a6d5988ac9093510d000000001976a9143bde42dbee7e4dbe6a21b2d50ce2f0167fa88ac)
= 863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
 
雜湊原象:0100000096b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd3752b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3bef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a010000001976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac0046c32300000000ffffffff863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e51100000001000000
 
n版本:01000000
hashPrevouts: 96b827c8483d4e9b96712b6713a7b68d6e8003a781feba36c31143470b4efd37
雜湊序列:52b0a642eea2fb7ae638c36f6252b6750293dbe574a806984b8e4d8548339a3b
   **出點:ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000**
腳本程式碼:1976a9141d0f172a0ecb48aee1be1f2687d2963ae33f71a188ac
金額:0046c32300000000
nSequence: ffffffff
雜湊輸出:863ef3e1a92afbfdb97f31ad0fc7683ee943e9abcf2501590ff8f6551f47e5e5
nLockTime: 11000000
nHashType: 01000000

您可以看到簽名中使用了 2 個 txin,並且僅使用了一個 outpoint,這對於所有範例來說都是如此。它沒有在 bip143 中的任何地方說明您如何選擇。任何意見是極大的讚賞。

當您創建簽名時,您正在為交易中的特定輸入簽名。該特定輸入具有相應的輸出點,因此您在 sighash 中使用它的輸出點。

在給出的範例中,給出了所有輸入的 sighashes。因此,對於每個輸入,它都會使用該輸入的輸出點生成一個 sighash。

在此範例中,如果您要為輸入 1 簽名,則使用 outpoint fff7f7881a8099afa6940d42d1e7f6362bec38171ea3edf433541db4e4ad969f00000000。如果您要為輸入 2 簽名,則使用 outpoint ef51e1b804cc89d182d279655c3aa89e815b1b309fe287d9b2b55d57b90ec68a01000000

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