如何防止比特幣雙花?
如果我創建一個交易,我的節點會檢查我的 UTXO,如果我有足夠的 BTC 來做這個交易,它將被探勘。
所以假設我想花 12 BTC 給 Anna。
系統會檢查我是否有足夠的 BTC 並且我有。但是在我的交易被探勘之前,UTXO 列表不會更新。
那麼如果我用 15 BTC 與 anna 進行另一筆交易會發生什麼。
系統會再次檢查 UTXO 並接受新交易嗎?
或者是否有第二個 UTXO 列表,其中包含已花費但未開采的交易?
當您的節點創建交易並將其中繼到完整節點時,他們將檢查以確保交易有效(其中一個條件沒有雙重支出)。全節點在文件夾中維護了一組UTXO列表,
chainstate
並積極記憶體在記憶體中。如果交易有效,全節點將移除交易中消耗的 UTXO,並將該交易的輸出添加到 UTXO 集中。然後該節點將該事務添加到記憶體池並將該事務中繼到與其連接的其他完整節點。大多數完整節點/探勘節點以首次看到的方式執行。也就是說,如果他們看到另一個交易花費與第一個交易相同的 UTXO,他們會將其視為無效而丟棄,並且不會進一步轉發它(除非它是RBF)。因此,如果您發送兩個使用相同 UTXO 的交易,那麼與另一半相比,一半的節點可能會在記憶體池中使用不同的交易。當探勘包含兩個交易之一的塊時,此問題將得到解決。礦工只會包含它在其開采的區塊中看到的第一筆交易。當全節點收到挖出的塊時,已經看到其他交易的節點將回滾對 UTXO 集的更改並收斂於該塊中挖出的交易。
如果你想包含另一個交易,你現在必須探勘兩個塊:一個在剛剛收到的高度(通過刪除探勘的交易並包括另一個),另一個塊增加該高度,以便節點接受該版本鏈(因為節點接受最長的 PoW 鏈)。這就是為什麼 PoW 在解決去中心化 P2P 系統中的衝突非常重要的原因,該系統沒有中央權威來決定哪個交易是有效的。