如果 InputScript 只有 Sig,礦工如何確認交易
請幫助我了解 bitcoind 客戶端如何使用僅由 Sig 組成的輸入腳本驗證 TX。
例如,TX
6D5DF6C0D66CFFC25CC1ABA3655952D7B081ED4E9EA3B70FCD964FDBBA01E91E
有一個來自D9A9C88110775B196CDAF6FC8113B33547C8E33E68519F60D9C9FF306E096473
交易的輸入(8 個輸出)和 Input Script4730440220797681C6711BB3D97AE373FC5CFF47F06EEC928DD46B8A9892D92C30953C9DF3022079C36E9A4C32D4E36B9E3ACCED0D40D70D8F90890C0E9F8F4F9AC083AFFD21B301
。這個腳本只有 Sig (r,s) 並且沒有任何公鑰或地址的表示。
據我了解,
Sig
用UnsignedTX doubleSHA256 hash
,Random Number
和Private Key
.
Sig
通過使用UnsignedTX doubleSHA256 hash
和 a進行檢查Public Key
,但這裡沒有任何內容。還有一個問題是關於“儲存在哪裡
UnsignedTX doubleSHA256 hash
?”。因為它不是交易雜湊,因為 TX 雜湊是針對已簽名交易的。
交易驗證需要交易花費的先前交易輸出。為每個輸入檢索先前事務輸出的輸出腳本。輸入腳本首先通過腳本解釋器執行。然後將其結果堆棧用作先前事務輸出的輸出腳本通過腳本解釋器的初始狀態。
對於您選擇的特定交易,之前的交易輸出腳本的形式為
<pubkey> OP_CHECKSIG
並且輸入的形式為
<sig>
這意味著簽名首先被壓入堆棧。然後將公鑰推入堆棧,然後
OP_CHECKSIG
對兩個堆棧項執行。公鑰駐留在輸出腳本中。對於其他輸出類型,公鑰在輸入腳本中作為支出的一部分提供。作為消息簽名的雜湊是由支出交易本身產生的。它包含支出交易和先前交易輸出腳本中提供的數據,因此可以即時生成。您可以查看這個問題並回答How to tell I need to make hash to sign for a old given tx? 它分解瞭如何為非隔離見證輸入生成雜湊。