Script

為什麼不能將 P2PKH 的 scriptPubKey 縮短為只有 OP_CHECKSIG?

  • April 30, 2021

對於 P2PKH,scriptPubKey 是OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG. 為什麼它不能只檢查簽名?為什麼不能將其縮短為一個操作碼—— OP_CHECKSIG

為什麼開鎖的時候除了簽名還需要出示公鑰?

為什麼不能將 [解鎖腳本] 縮短為一個操作碼——OP_CHECKSIG?

OP_CHECKSIG函式從堆棧中提取兩個參數——一個公鑰和一個簽名。然後它驗證指定的公鑰是否用於生成提供的簽名,並且該簽名與它所在的交易相匹配。

因此,如果您使用縮短為 only 的鎖定腳本進行輸出OP_CHECKSIG,那麼我可以使用此解鎖腳本來使用該輸出…

<sig> <my_public_key>

這會將我使用我的私鑰生成的支出交易的簽名,然後將我的公鑰推送到堆棧上。接下來解鎖腳本將執行並OP_CHECKSIG彈出這些腳本並驗證我生成的簽名和我的私鑰是否匹配。請注意,我在任何時候都不需要知道您的任何密鑰來花費您的輸出。這不是你想要的。您只希望知道您的私鑰的人能夠花費您的輸出。

因此,您可以與比特幣一起使用的需要您的私鑰解鎖的最小鎖定腳本是……

<your_public_key> OP_CHECKSIG

要使用此輸出,您將需要以下解鎖腳本…

<sig>.

由於您知道您的私鑰,因此您可以生成一個簽名,該簽名將針對您放置鎖定腳本的公鑰進行驗證。事實上,這是一個標準(但很少使用)的鎖定/解鎖腳本

所以如果我們可以使用這些更簡單的鎖定和解鎖腳本,為什麼標準腳本會有那麼多額外的東西呢?

比特幣公鑰至少有 257 位長,你必須將那個長數字提供給任何打算向你發送比特幣的人。相反,標準腳本包含您的公鑰的 160 位散列,這要短得多。

為什麼開鎖的時候除了簽名還需要出示公鑰?

標準腳本中的額外內容可以完成工作,因此只有較短的雜湊需要在鎖定腳本中。但是OP_CHECKSIG仍然需要知道完整的公鑰才能檢查簽名是否匹配。因此,公鑰改為顯示在(現在更長的)解鎖腳本中,您無需將其提供給人們。其餘程式碼對完整的公鑰進行雜湊處理,以檢查是否真的是您製作了鎖定腳本,然後將完整的公鑰提供給OP_CHECKSIG.

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