Transactions
交易順序可以不嚴格按照時間順序嗎?
假設我有 1 個比特幣,我先給 Alice 0.2 個比特幣,然後立即給 Bob 0.2 個比特幣,兩個交易都是合法的
- 礦工打包區塊時可以顛倒時間順序嗎?
- 如果(1)為真,作為支付系統,回溯時無法得到正確的時間線,這是設計缺陷嗎?
交易在包含在有效區塊中之前沒有順序。這就是區塊鏈的全部功能:充當交易的分佈式時間戳伺服器。
礦工打包區塊時可以顛倒時間順序嗎?
礦工可以根據自己的意願在一個區塊中訂購交易(當然,假設該區塊在其他情況下仍然有效)。說“未確認交易的時間順序是什麼?” 沒有任何意義。有簡單的未確認交易,然後有確認(並因此排序)的交易,它們是區塊鏈記錄的一部分。
在某些情況下,事務的順序很重要,例如,如果您創建兩個事務,而第二個事務花費了由第一個事務創建的輸出。在這種情況下,第二筆交易只有在第一筆交易被包含在它之前時才有效,因為否則第二筆交易將花費不存在的輸出。
如果(1)為真,作為支付系統,回溯時無法得到正確的時間線,這是設計缺陷嗎?
如上所述,交易的顯式排序由它們包含在區塊鏈記錄中來定義。在許多情況下,建構一個嘗試訂購未確認交易的系統並不是很有用。
比特幣使用 UTXO 模型——所有比特幣都以未使用的交易輸出 (UTXO) 的形式存在。因此,根據您擁有的 UTXO 數量以及您對它們的處理方式,有許多不同的場景:
- 你有一個 1 BTC 的* UTXO。您創建一個單筆交易,向 Alice 支付 0.2 BTC,向 Bob 支付 0.2 BTC,向您自己支付 0.6 BTC。交易是原子的,因此礦工不能以任何方式將支付給 Alice 的款項與支付給 Bob 的款項分開。
- 你有一個 1 BTC 的* UTXO。你創建了一筆交易,向 Alice 支付 0.2 BTC,向自己支付 0.8 BTC,然後另一筆交易花費 0.8 BTC,向 Bob 支付 0.2 BTC,向自己支付 0.6 BTC。因為後者的交易依賴於前者,所以在前者被確認之前是無法被確認(挖礦)的。它們可以在同一個區塊內開採,但它們必須在該區塊內具有正確的順序。
- 你有兩個 UTXO,每個 0.5 BTC。您創建兩個交易,分別向 Alice 和 Bob 支付 0.2 BTC 和 0.3 BTC 給自己。以特定順序將它們廣播到網路並不能保證它們將按該順序得到確認。
- 或者您將在一筆交易中一起花費的多個較小的 UTXO。