Consensus
乙太坊網路如何保持一致
由於乙太坊中的節點是去中心化和分佈式的,系統如何確保區塊鏈狀態的一致性。
我知道驗證者一旦找到 POW 的答案,就會鑄造一個塊並廣播它。然後其他節點驗證並接受。
但是在分佈式網路中,是什麼導致在網路的不同邊緣發生多個類似的廣播,從而不同的節點接收不同的東西呢?
我也可以想像廣播需要一段時間才能在網路上傳播,在那段時間之間,是什麼阻止了一個沒有收到更新狀態的節點來處理另一個可能使其處於不一致狀態的操作?
正如您所描述的,一直存在輕微的共識失敗,它們改變了“鏈的末端”。發生了較小的區塊鏈重組:一些區塊消失了,新的區塊出現在相同的交易中。
這是由乙太坊客戶選擇最重的鏈(而不是比特幣中最長的鏈)來處理的。如果您的節點違反此規則,它最終將作為垃圾郵件發送者從 P2P 網路中被踢出。
簡短的回答是他們沒有同步狀態。他們正在同步交易。
乙太坊虛擬機被建模為狀態機。狀態機具有一個確定的狀態和一個或多個狀態轉換過程。也就是說,給定一個初始狀態和發生的事情,新狀態被創建*,因為它是對發生的事情的唯一正確解釋*。
由於簽名交易始終是確定性協議交易,例如探勘區塊或轉移資金,或發送到本身俱有確定性的合約的數據,因此每個交易結果都是確定性的。
挖礦的結果是一個區塊。一個塊是一組有序的交易。因此,區塊鍊是所有已發生交易的有序集合。鑑於此,每個節點都有可能為自己正確計算狀態。
該過程類似於可用於重建數據庫狀態的事務日誌。總之,他們不會嘗試同步狀態。他們只是就交易達成共識。
節點可以並且確實落後,新節點需要迎頭趕上。甚至在鏈條的頂端也有一些流失。最終,節點在相同的塊高度上達到一致的狀態,因為這是唯一的方法。
希望能幫助到你。