Transactions

如果 InputScript 只有 Sig,礦工如何確認交易

  • October 20, 2017

請幫助我了解 bitcoind 客戶端如何使用僅由 Sig 組成的輸入腳本驗證 TX。

例如,TX6D5DF6C0D66CFFC25CC1ABA3655952D7B081ED4E9EA3B70FCD964FDBBA01E91E有一個來自D9A9C88110775B196CDAF6FC8113B33547C8E33E68519F60D9C9FF306E096473交易的輸入(8 個輸出)和 Input Script 4730440220797681C6711BB3D97AE373FC5CFF47F06EEC928DD46B8A9892D92C30953C9DF3022079C36E9A4C32D4E36B9E3ACCED0D40D70D8F90890C0E9F8F4F9AC083AFFD21B301

這個腳本只有 Sig (r,s) 並且沒有任何公鑰或地址的表示。

據我了解,SigUnsignedTX doubleSHA256 hash,Random NumberPrivate 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? 它分解瞭如何為非隔離見證輸入生成雜湊。

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