Transactions

scriptSig 和 scriptPubKey 之間有什麼關係?

  • August 25, 2020

場景:A 向 B 發送 1 BTC。

scriptSig出現在輸入腳本中。

scriptSig = <sig> <pubKey>
  1. 這裡,公鑰是發送者 A 的公鑰(這是對應於他的比特幣地址的公鑰,其中有一些未使用的交易)。

scriptSig 的 sig 部分是什麼?

腳本公鑰

scriptPubKey = OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

pubKeyHash = 接收者公鑰的雜湊值(在我們的例子中是 B)。

  1. 發送方(A)只有接收方(B)的比特幣地址,那麼他如何從他的比特幣地址中獲取 pubKeyHash?

現在,這是我到目前為止的理解:

  1. 輸入腳本攜帶有關發送者“先前交易”的資訊,並使用索引指向“先前交易”的適當“輸出”部分。前一筆交易的輸出是發件人 (A) 的總可用餘額,可以聲稱將比特幣發送給收件人 (B)。
  2. 此輸入腳本還用於驗證發送者 (A) 是否是先前交易的參考輸出中持有的比特幣的實際所有者。
  3. 輸出腳本告訴我們,發送者想要轉移多少比特幣給接收者,它還提到了接收者的比特幣地址。

問題:

  1. scriptSig 中的公鑰與 scriptPubKey 中的公鑰不同?
  2. 如果收件人不共享相同的公鑰,如何驗證發件人的簽名資訊?
  3. 我嘗試理解 wiki 上給出的範例,該範例顯示了腳本如何以基於堆棧的方式執行,但無法理解。

我還有一些問題,但我想我會用不同的問題問他們,而不是把它完全放在這裡。

謝謝。

首先,兩個匹配腳本用於兩個不同的交易,一個將資金轉移到一個地址(交易A),另一個花掉這些資金(交易B)。由scriptPubKey創建 Transaction A的使用者創建。它基本上將聲明條件添加到正在創建的輸出中。如果使用者可以證明他擁有輸出,則使用者只能聲稱並因此花費與輸出相關的比特幣。

這就是交易B和交易scriptSig發揮作用的地方。假設使用者想在某處發送一些資金。他創建了一筆新交易,並向其中添加輸出,直到他有足夠的金額來支付所需的金額。現在他必須證明他擁有這些輸出,他通過提供聲明它們所需的輸出來做到這一點,即匹配地址的公鑰和匹配私鑰的簽名。

交易A的發送者還不知道公鑰,但知道公鑰的散列,因為他知道他想發送到的地址。地址只不過是公鑰的散列。因此,發送方現在知道了將資金發送給接收方所需的一切。

當接收方想要再次花費資金時,他將輸入提供給scriptPubKey. 正如您所看到的,scriptPubKey包括獲取推送到堆棧上的公鑰、複製它、對其進行散列並將其與輸出目的地的公鑰的散列進行比較。如果它們匹配,我們仍然在堆棧上同時擁有簽名和公鑰,用於OP_CHECKSIG查看輸入是否附加了有效簽名。

本次交易為例。它通過提供公鑰和匹配的簽名來聲明一個輸出。然後它創建兩個新輸出並指定下一個使用者聲明它們的條件。

我也有同樣的問題,並且花了很長時間試圖理解它並最終破解了它。

“發件人(A)只有收件人(B)的比特幣地址,那麼他如何從他的比特幣地址中獲取 pubKeyHash?”

關鍵是發件人 (A) 不需要從“他的”比特幣地址獲取 pubKeyHash,因為它不相關。(我也想知道同樣的事情!)

想想scriptPubKey首先發生。A 用 B 的比特幣地址代替<pubKeyHash>. 這就是 A 完成的工作。A 所說的是“1 BTC 現在屬於 B,但是……只有 B 可以證明他是 B 提供給我的比特幣地址的真正所有者”。現在從圖片中取出A。

B 出現在他的錢包裡,他看到這 1 BTC 金額出現了。所以從技術上講,B“擁有”它。但是為了讓 B 消費,也就是發送給其他人,B 需要證明他給 A 的比特幣地址確實是他的。這就是scriptSig的用武之地。所以這<sig> <pubKey>是 B 的責任,B 無論如何都知道所有這些資訊。

在閱讀了很多關於這方面的文章之後,開發者的文件解釋了它是最好的。<https://bitcoin.org/en/developer-guide#transactions>你只需要慢慢讀幾遍。

開發文件還回答了您的其他問題**“scriptSig 的 sig 部分是什麼?”**

… Bob 簽署的數據包括前一個交易的 txid 和輸出索引、前一個輸出的 pubkey 腳本、Bob 創建的讓下一個接收者花費此交易的輸出的 pubkey 腳本,以及要花費給下一個接收者的 satoshis 數量.

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