Doublespend

使用具有多個輸出的事務

  • February 18, 2015

由於輸出只能花費一次,我對包含多個收件人的交易感到困惑。例如,如果 Alice 在同一筆交易中將 5 BTC 轉移給 Bob,將 5 BTC 轉移給 David。以後 Bob 指的是 Alice 的交易,David 也可以指同一個交易。我知道輸出在 Alice 與 Bob 和 Eve 的交易中被編號。因此輸出編號和交易 id Tx id 唯一確定是否發生雙花。

我對麼?UTXO 是否與輸出和 Tx id 相關聯?

每筆交易都使用一組 [1..n]未使用的交易輸出來花費。這些我們稱之為交易的輸入

然後,交易將輸入的總值分配給 [0..n] 新的未使用交易輸出。每個 UTXO 都與創建交易相關聯,並在該集合中唯一編號。構成 UTXO 的最常見腳本是“pay-to-pubkeyhash”,其中 UTXO 只能與接收者的有效簽名結合使用。

輸出值必須小於或等於輸入值。礦工可以將這兩個總數的差額作為交易費用。

回到你的例子:

交易 A1:

Alice -> 5BTC -> Bob(交易 A1,輸出 0)

Alice -> 5BTC -> David(交易 A1,輸出 1)

(Alice 需要為該交易投入至少 10BTC。)

Bob 想要花掉他的錢:

Bob -> 花費(交易 A1,輸出 0,簽名) -> 新的接收者。

由於每個 UTXO 都是唯一可辨識的,因此它們不能都嘗試訪問相同的 UTXO。

UTXO 是否與輸出和 Tx id 相關聯?

是的,你完全正確,每個 UTXO 基本上只是一個元組(txid,output_index)。然後,當該輸出將被使用時,您可以通過將元組列為輸入來引用它。

本質上,這就是為什麼它們被稱為“未使用的交易輸出”(UTXO),而不是“未使用的交易”。

例如,看看我從區塊鏈中提取的這個隨機交易輸出:

txid: 564bb87efc20751dde182b678e848ceaa75ac54fd2eab33808842f40e953f7e6
output: 1
scriptPubKey: 76a9148ab215e3d638357551f5e6e7e3384b56bb355a6c88ac

(注意 1 是索引,這意味著它實際上是第二個輸出)

然後當交易被花費時,輸入引用這個先前未花費的交易輸出。

ID of spending TX: 57149f629790e61a5fbab9e27041858ada6348aa17323c15b9da9659b90717bb
input:
 "txid" : "564bb87efc20751dde182b678e848ceaa75ac54fd2eab33808842f40e953f7e6",
 "vout" : 1,
 "scriptSig": 48304502205b6d49f0e473e5b6134c9ba55dcfdd9e010a226fb29f89e9f4ff1a2b568a1d4c022100af290372ed889ffff948662d7a5b1f2d6eb29dbdcad260ab53f99aba6b6e46e50121020f4db25f5bd35cb2c541ecdbcdb0e7c0be890cb4e25895612f8a1cbb32216ff0

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