Utxo

每個部分花費的 TxIn 的 UTXO 是如何確定的?

  • September 17, 2020

我目前對一筆交易的理解如下:

  1. 一筆交易(Tx)可以有多個輸入(之前的未花費交易 = UTXO),我們稱它們為TxIn
  2. 一個 Tx 可以有多個輸出(因此在它們自己被用作 TxIn 之前成為 UTXO),我們稱它們為TxOut
  3. TxOut 在事務中有一個特定的順序N:TxOut[0]、TxOut[1] 等。
  4. 每個 TxIn 引用數字 N 對應於上面第 3 點中提到的 TxOut 的索引,因此這使得特定 TxIn 和特定 TxOut 之間的連結
  5. 每個 TxOut 都指定了一個特定的比特幣數量(表示以後可以花費的 UTXO 數量)
  6. 每個 TxOut 引用一個或多個(在 MultiSig 的情況下)可以花費金額的比特幣地址(公鑰)
  7. 但是,這是我不明白的,TxIn 沒有指定使用的比特幣數量

如果 TxIn 沒有指定使用的金額,我們如何確定每個 TxIn 的已花費金額,以及未花費的 TxIn 部分的 UTXO?

例如,具有 2 個輸入和一個輸出的交易(假設沒有費用):

  • TxIn[0],其花費前的 UTXO 為 1 BTC
  • TxIn[1],其花費前的UTXO為1 BTC
  • TxOut[0],其值為 1.5 BTC

我們如何知道哪些 TxIn 以及其中花費了多少?

  • 是 0.75 的 TxIn[0] 和 0.75 的 TxIn[1] 嗎?
  • 是 0.5 的 TxIn[0] 和 1 的 TxIn[1] 嗎?

我錯過了什麼?因為鑑於上述情況,無法確定每個輸入的花費比例。

  1. 一筆交易(Tx)可以有多個輸入(之前的未花費交易 = UTXO),我們稱它們為TxIn

更準確的說法是“以前交易中未使用的輸出”。

  1. 一個 Tx 可以有多個輸出(因此在它們自己被用作 TxIn 之前成為 UTXO),我們稱它們為TxOut
  2. TxOut 在事務中有一個特定的順序N:TxOut[0]、TxOut[1] 等。
  3. 每個 TxIn 引用數字 N 對應於上面第 3 點中提到的 TxOut 的索引,因此這使得特定 TxIn 和特定 TxOut 之間的連結

正確,我們將交易 id 和輸出索引的複合txid:vout稱為 UTXO 的“outpoint”。正如您所描述的,每個輸入都只花費一個特定的 UTXO。

  1. 每個 TxOut 都指定了一個特定的比特幣數量(表示以後可以花費的 UTXO 數量)
  2. 每個 TxOut 引用一個或多個(在 MultiSig 的情況下)可以花費金額的比特幣地址(公鑰)

如果您認為每個輸出都被鎖定到一組需要滿足的支出條件,那麼這會更容易一些。在單一簽名中,支出條件是“支付給(見證人)公鑰雜湊”。該鎖通過與指定地址對應的私鑰的簽名來滿足。(地址又是從公鑰的散列中導出的,該公鑰與所述私鑰形成非對稱密鑰對。)在多重簽名中,支出條件是“支付到(見證)腳本散列”。資金被鎖定為特定腳本的完成。本例中的地址來自腳本的雜湊值。花費這樣的 UTXO 需要 1) 揭示雜湊到地址的腳本,2) 滿足腳本中指定的條件。在該腳本是多重簽名結構的情況下,它將指定一組公鑰,其中一些子集足以解鎖資金。但是,這些腳本也可以採用各種其他形式。我認為“每個 TxOut 引用一個或多個可以花費該金額的比特幣地址”既是一種過度概括(因為並非所有腳本都必須是多重簽名的)而且是不准確的(因為資金被鎖定到腳本,而不是多個地址)。

  1. 但是,這是我不明白的,TxIn 沒有指定使用的比特幣數量

如果 TxIn 沒有指定使用的金額,我們如何確定每個 TxIn 的已花費金額,以及未花費的 TxIn 部分的 UTXO?

沒有辦法部分花費 UTXO。花費 UTXO 是二元的,要麼未花費,要麼已花費。由於 UTXO 只能全部使用,因此付款的任何剩餘部分都會被收集到一個或多個輸出中,發送者自己在其中付款(參見例如,比特幣交易中的零錢如何工作?)。

例如,具有 2 個輸入和一個輸出的交易(假設沒有費用):

  • TxIn[0],其花費前的 UTXO 為 1 BTC
  • TxIn[1],其花費前的UTXO為1 BTC
  • TxOut[0],其值為 1.5 BTC

我們如何知道哪些 TxIn 以及其中花費了多少?

  • 是 0.75 的 TxIn[0] 和 0.75 的 TxIn[1] 嗎?
  • 是 0.5 的 TxIn[0] 和 1 的 TxIn[1] 嗎?

我錯過了什麼?因為鑑於上述情況,無法確定每個輸入的花費比例。

答案是TxIn[0]和都TxIn[1]被完全用完,並且交易是用兩個輸出創建的:TxOut[0]: 1.5 BTC to recipientTxOut[1]: 0.5 BTC to sender

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