Utxo

P2SH-P2WPKH 的“scriptSig”

  • May 5, 2020

我不確定我是否理解我輸入的欄位。我有一個 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)。在兌換腳本中,我找到了壓縮公鑰的 HASH160032c27921f2d15...

作為附加條件,與 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 向後兼容。

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