Transactions

P2SH-P2WPKH 堆棧

  • April 11, 2020

我正在研究 P2SH-P2WPKH,當我創建簽名交易時,我可以看到這個堆棧(使用btcdeb

script                                   |                                                             stack 
-----------------------------------------+-------------------------------------------------------------------
OP_DUP                                   | Public Key
OP_HASH160                               | Signature
3ecfc6b4....a49                          | 
OP_EQUALVERIFY                           | 
OP_CHECKSIG                              | 

問題是我在何時何地推送 OP_DUP 和 OP_CHECKSIG?我在 GitHub 的比特幣程式碼中沒有找到任何東西,也許是在signrawtransactionwithkey?

我了解堆棧包含

OP_DUP OP_HASH160 <PubKHash> OP_EQUALVERIFY OP_CHECKSIG

像 P2PKH,但我不明白為什麼在堆棧內。

1a83d46422201593cb8f42f44a22a29e86ad652f這是我的 UTXO,我在堆棧中找不到。

{
 "asm": "OP_HASH160 1a83d46422201593cb8f42f44a22a29e86ad652f OP_EQUAL",
 "hex": "a9141a83d46422201593cb8f42f44a22a29e86ad652f87",
 "reqSigs": 1,
 "type": "scripthash",
 "addresses": [
   "2MufRUxRcGnwbdL4PWKzKb7uSFzBT1wQL7u"
 ]
}

更新 我在 Github 中找不到程式碼,但可能要感謝見證程序(<0 <20-byte-key-hash>>),軟體被觸發並使用 P2PKH 創建堆棧。對於較舊的節點是ANYONE_CAN_SPEND,對於較新的節點檢查是否hash160 (pubkey) == pubkeyhash然後檢查簽名。

在這種情況下,當 UTXO 僅涉及 TXID 和 Amount 時,不涉及 P2SH 和 P2PKH 等驗證(scriptPubKey)。

問題是我在何時何地推送 OP_DUP 和 OP_CHECKSIG?

你沒有。創建輸出的交易或花費它的交易都沒有明確包含這些指令。

在驗證 P2WPKH 支出時(這意味著 scriptPubKey 或 P2SHredeemScript 是完全正確的OP_0 &lt;20-byte hash&gt;),會觸發特殊邏輯,根據腳本驗證見證堆棧OP_DUP OP_HASH160 &lt;20-byte-hash&gt; OP_EQUALVERIFY OP_CHECKSIG

有關詳細資訊,請參閱BIP 141中的範例。

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