每個部分花費的 TxIn 的 UTXO 是如何確定的?
我目前對一筆交易的理解如下:
- 一筆交易(Tx)可以有多個輸入(之前的未花費交易 = UTXO),我們稱它們為TxIn
- 一個 Tx 可以有多個輸出(因此在它們自己被用作 TxIn 之前成為 UTXO),我們稱它們為TxOut
- TxOut 在事務中有一個特定的順序N:TxOut[0]、TxOut[1] 等。
- 每個 TxIn 引用數字 N 對應於上面第 3 點中提到的 TxOut 的索引,因此這使得特定 TxIn 和特定 TxOut 之間的連結
- 每個 TxOut 都指定了一個特定的比特幣數量(表示以後可以花費的 UTXO 數量)
- 每個 TxOut 引用一個或多個(在 MultiSig 的情況下)可以花費金額的比特幣地址(公鑰)
- 但是,這是我不明白的,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] 嗎?
我錯過了什麼?因為鑑於上述情況,無法確定每個輸入的花費比例。
- 一筆交易(Tx)可以有多個輸入(之前的未花費交易 = UTXO),我們稱它們為TxIn
更準確的說法是“以前交易中未使用的輸出”。
- 一個 Tx 可以有多個輸出(因此在它們自己被用作 TxIn 之前成為 UTXO),我們稱它們為TxOut
- TxOut 在事務中有一個特定的順序N:TxOut[0]、TxOut[1] 等。
- 每個 TxIn 引用數字 N 對應於上面第 3 點中提到的 TxOut 的索引,因此這使得特定 TxIn 和特定 TxOut 之間的連結
正確,我們將交易 id 和輸出索引的複合
txid:vout
稱為 UTXO 的“outpoint”。正如您所描述的,每個輸入都只花費一個特定的 UTXO。
- 每個 TxOut 都指定了一個特定的比特幣數量(表示以後可以花費的 UTXO 數量)
- 每個 TxOut 引用一個或多個(在 MultiSig 的情況下)可以花費金額的比特幣地址(公鑰)
如果您認為每個輸出都被鎖定到一組需要滿足的支出條件,那麼這會更容易一些。在單一簽名中,支出條件是“支付給(見證人)公鑰雜湊”。該鎖通過與指定地址對應的私鑰的簽名來滿足。(地址又是從公鑰的散列中導出的,該公鑰與所述私鑰形成非對稱密鑰對。)在多重簽名中,支出條件是“支付到(見證)腳本散列”。資金被鎖定為特定腳本的完成。本例中的地址來自腳本的雜湊值。花費這樣的 UTXO 需要 1) 揭示雜湊到地址的腳本,2) 滿足腳本中指定的條件。在該腳本是多重簽名結構的情況下,它將指定一組公鑰,其中一些子集足以解鎖資金。但是,這些腳本也可以採用各種其他形式。我認為“每個 TxOut 引用一個或多個可以花費該金額的比特幣地址”既是一種過度概括(因為並非所有腳本都必須是多重簽名的)而且是不准確的(因為資金被鎖定到腳本,而不是多個地址)。
- 但是,這是我不明白的,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 recipient
和TxOut[1]: 0.5 BTC to sender
。