Script
為什麼 OP_DUP 而不是在 P2PKH 中提供兩次 PubKey?
我們知道 P2PKH 腳本如下所示:
scriptPubKey: OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG scriptSig: <Signature> <PubKey>
由於完整的節點都維護著 UTXO 集,是否會節省空間來省略
OP_DUP
並讓使用者兩次提供他們的公鑰,就像這樣?這會產生任何類型的安全問題嗎?scriptPubKey: OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG scriptSig: <Signature> <PubKey> <PubKey>
不幸的是,這並不安全。想像一下帶有 scriptPubkey 的輸出
OP_HASH160 <hash(P1)> OP_EQUALVERIFY OP_CHECKSIG
。現在任何人都可以通過生成自己的密鑰P2
並使用 scriptSig來花費這樣的輸出<sig with P2> <P2> <P1>
。