Consensus

在確定更長的鏈後,狀態如何“撤消/恢復”?

  • December 8, 2020

假設有 block_a 和 block_b,高度均為 1677。並且一個節點接受 block_a,但隨後收到 block_b + block_c(在 block_b 之上開採),block_a 中的狀態更改究竟是如何撤消和恢復的?

這個想法是你不會恢復,而是建立在以前的狀態上。

假設您有塊 n 的狀態 S n。每個狀態僅具有該塊中的更改和對其父級的引用,例如 S 101指向 S 100。主鏈將是 S 101 -> S 100 -> S 99 -> …

步驟101檢查地址餘額: 在S 101中查找地址,如果地址存在則返回餘額並停止。如果不存在遞歸搜尋 S 100, S 99,…

現在假設您有塊 101’,它將替換前一個塊。它將生成指向 S 100的 S 1 ​​01’。在塊 102 之後,主鏈將是 S 102 -> S 101’ -> S 100。

如果新塊不再引用像 S 101這樣的孤立狀態,則可以丟棄它們。

引用自:https://ethereum.stackexchange.com/questions/61804