Blockchain
每個節點中的區塊鏈如何保持一致性?
我的理解是(如果有任何錯誤,請糾正我)
每個全節點都試圖生成一個新塊,其中包含不同數量的交易,包含的內容也不相同。
UTXO set
這會導致mempool
每個完整節點都不相同。如果上述說法成立,那麼是否可以理解為當區塊鏈被替換時(因為其他節點引入了新的區塊,或者我的區塊鏈分支已經過時了),那麼我維護的
UTXO set
和mempool
我維護的隨後被替換?如果不是這樣,那麼引入新區塊後,節點如何恢復挖礦呢?一個已知未使用的 UTXO在**引入新塊後可能會被使用。
大多數完整節點都在正常的 CPU 上執行,現在基本無法用於挖礦。挖礦過程由特定的礦池處理。因此,對於基本上看到相同區塊鏈的完整節點(如果同時開採兩個區塊,尖端可能存在不一致),它們具有相同的 UTXO 集。這是因為 UTXO 集是基於塊中包含的交易建構的。每當全節點接收到一個塊時,它們都會刪除交易中輸入消耗的 UTXO,並添加在輸出中創建的 UTXO。對於挖礦節點,情況類似。如果他們與其他礦工同時開採最後一個區塊,那麼第一個礦工將使用與其他礦工不同的 UTXO 集建構下一個區塊。然而,
對於 mempool,情況有所不同。比特幣交易會盡最大努力在網路上進行中繼。因此,某些節點可能會在某些交易最終包含在塊中之前看不到它們。所以,是的,記憶體池中存在不一致的地方。
引入新區塊後,節點如何恢復挖礦?
如上所述,如果同時開採兩個區塊,那麼一些礦工將使用與其他礦工不同的版本。公認的原則是建立在首先收到的塊上。然而,這並非總是如此。因此,當仍在計算標頭雜湊的挖礦節點注意到新區塊被開採時,他們意識到他們已經失去了針對特定區塊高度的“競賽”,並嘗試在最近收到的區塊上進行挖礦。