Transactions
P2SH-P2WPKH 堆棧
我正在研究 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 <20-byte hash>
),會觸發特殊邏輯,根據腳本驗證見證堆棧OP_DUP OP_HASH160 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG
。有關詳細資訊,請參閱BIP 141中的範例。