Doublespend
雙花檢測細節
我對雙花檢測的細節感到困惑。我的問題是,如果Alice首先將她的 10 BTC 發送給Bob,然後將相同的 10 BTC 發送到屬於她自己的地址。比特幣客戶端如何檢測第二筆交易無效?換句話說,客戶如何知道這些比特幣已經在第一筆交易中被花費了?客戶是否會追溯所有區塊以檢查這些比特幣之前是否已經使用過?
有兩個階段會影響雙花交易。
最初,當交易未經確認時,節點無法知道哪個交易是“第一筆”或“雙花”。通過本地策略,它可以選擇其中任何一個,通常是它看到的第一個。但它可能會根據例如費用金額選擇另一個(礦工可能更喜歡最高費用)。
一旦其中一項交易被確認(肯定是 6 次確認),另一筆交易將無效。比特幣節點維護一個未使用的交易輸出 (UTXO) 集。每當交易花費(早期交易的)輸出時,該輸出將從 UTXO 集中刪除,並將新交易的任何輸出添加到該集中。
雙花交易會嘗試花費不在 UTXO 集中的輸出,因此是無效的。
UTXO 集目前約為 1 GB,並保存在記憶體中,以使所有查找都非常快。有一些優化可以減小這個尺寸。儘管隨著比特幣採用率的提高,UTXO 集也將再次增長。