P2SH-P2WPKH 的“scriptSig”
我不確定我是否理解我輸入的欄位。我有一個 P2SH 地址(測試網)。這是我的交易的輸入:
"vin": [ { "txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679", "vout": 1, "scriptSig": { "asm": "0014778daf651b21684b572644b47d551fce0ff71c74", "hex": "160014778daf651b21684b572644b47d551fce0ff71c74" }, "txinwitness": [ "3044022034a07f088dd88396cd378912a4ed6a156701b075f0facbbae810677048c390e602205df07e13bf4d56feece791a1b5e4d94bec9c93aae14bb87a1b4c6c54ae9bf2f701", "032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b" ], "sequence": 4294967295 } ],
我明白:在“asm”中,我有 RedeemScript。在 txinwitness 我有我的簽名和公鑰。正確的?
現在,從使用的 utxo 中:
"txid": "a61389ff9af670770182198a984a4c1785625c60795bd57645ecc78765b23679", "vout": 1, "address": "2N7MaihNErbNH8XTkuZWtJYPzMQAWMPVKHd", "label": "", "redeemScript": "0014778daf651b21684b572644b47d551fce0ff71c74", "scriptPubKey": "a9149ac58ff47e27214b158b38da04bc8cbf72def14387", "amount": 0.01944571, "confirmations": 116, "spendable": true, "solvable": true, "desc": "sh(wpkh([7de694b7/0'/0'/7']032c27921f2d15e7eca768c0e8a8b1aeb863328c74d6c194d41dde2888d4b0e75b))#6z7uwusp", "safe": true
我推斷我使用了 P2SH-P2WPKH 輸出。所以在 ScriptPubkey 中我找到了解鎖條件(我地址的公鑰的 HASH160)。在兌換腳本中,我找到了壓縮公鑰的 HASH160
032c27921f2d15...
作為附加條件,與 P2PKH 相比,解鎖 UTXO P2SH-P2WPKH 需要額外公鑰的 HASH 是否正確?
我明白:在“asm”中,我有 RedeemScript。在 txinwitness 我有我的簽名和公鑰。正確的?
正確的。在 P2SH-P2WPKH 中,見證包含簽名和公鑰,腳本簽名包含贖回腳本。
作為附加條件,與 P2PKH 相比,解鎖 UTXO P2SH-P2WPKH 需要額外公鑰的 HASH 是否正確?
這是你有點錯誤的地方。
P2SH-P2WPKH的地址是P2WPKH序列化兌換腳本的hash160,必須
OP_0 <hash160_of_public_key>
符合BIP0141。所以看起來你需要一個額外的公鑰,但實際上你只是使用了兩次相同的公鑰。一個進入到 script_signature 的贖回腳本中,另一個用於與簽名一起裸露的見證欄位。換句話說,沒有額外的公鑰。它是包裝在 BIP0141 定義的智能合約(兌換腳本)中的同一個公鑰,序列化,然後散列。現在,這個散列與用於公鑰(hash160)的散列相同,因此這些智能合約散列的輸出具有與這些公鑰散列相同的長度,這就是為什麼它們在現實中可能與公鑰混淆它們是智能合約。這樣做是為了使 P2SH 向後兼容。