Blockchain

每個節點中的區塊鏈如何保持一致性?

  • May 17, 2019

我的理解是(如果有任何錯誤,請糾正我)

每個全節點都試圖生成一個新塊,其中包含不同數量​​的交易,包含的內容也不相同。UTXO set這會導致mempool每個完整節點都不相同。


如果上述說法成立,那麼是否可以理解為當區塊鏈被替換時(因為其他節點引入了新的區塊,或者我的區塊鏈分支已經過時了),那麼我維護的UTXO setmempool 我維護的隨後被替換?

如果不是這樣,那麼引入新區塊後,節點如何恢復挖礦呢?一個已知未使用的 UTXO在**引入新塊後可能會被使用。

大多數完整節點都在正常的 CPU 上執行,現在基本無法用於挖礦。挖礦過程由特定的礦池處理。因此,對於基本上看到相同區塊鏈的完整節點(如果同時開採兩個區塊,尖端可能存在不一致),它們具有相同的 UTXO 集。這是因為 UTXO 集是基於塊中包含的交易建構的。每當全節點接收到一個塊時,它們都會刪除交易中輸入消耗的 UTXO,並添加在輸出中創建的 UTXO。對於挖礦節點,情況類似。如果他們與其他礦工同時開採最後一個區塊,那麼第一個礦工將使用與其他礦工不同的 UTXO 集建構下一個區塊。然而,

對於 mempool,情況有所不同。比特幣交易會盡最大努力在網路上進行中繼。因此,某些節點可能會在某些交易最終包含在塊中之前看不到它們。所以,是的,記憶體池中存在不一致的地方。

引入新區塊後,節點如何恢復挖礦?

如上所述,如果同時開採兩個區塊,那麼一些礦工將使用與其他礦工不同的版本。公認的原則是建立在首先收到的塊上。然而,這並非總是如此。因此,當仍在計算標頭雜湊的挖礦節點注意到新區塊被開採時,他們意識到他們已經失去了針對特定區塊高度的“競賽”,並嘗試在最近收到的區塊上進行挖礦。

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