如何建立全域性狀態,「狀態根」瞭解一下 | 三分鐘入門Neo3

買賣虛擬貨幣
今天的「三分鐘入門Neo3」將介紹Neo3正在嘗試的另一個最佳化:透過狀態根(State Root)雜湊來確定全域性狀態。全域性認可的狀態可以解決輕錢包的信任問題,確保節點之間的儲存資訊保持一致。同時,區塊和狀態持久化的分離能夠提升效能。

節點狀態

節點的狀態可以看作是在一定時間內所有儲存值的快照。例如,NEP-5合同的儲存狀態主要由使用者令牌餘額組成。節點的儲存狀態將依次是所有合約中儲存的所有資料的概要。

目前在Neo2上,網路上的節點沒有一致的全域性狀態。每當要處理區塊時,每個節點都會在本地計算其狀態。但即使網路上的所有節點都共享完全相同的且已透過共識節點驗證的塊資訊,由於區塊資料的解釋不同,一個節點的本地確定狀態也可能與另一節點不同。

如果在一個持久的狀態根上達成共識,可以快速識別出該問題可能是由VM版本或節點型別的差異引起的。關於狀態持久化的討論最初是由張錚文發起的,他指出,如果將塊持久化和狀態持久化分離,可以提高效能。

“如果我們將狀態持久化與塊持久化分開,共識節點可以快速處理事務,而無需等待狀態寫入和智慧合約執行。”

輕客戶端信任問題

關於此問題,初步討論集中在透過與區塊分離的形式提供狀態持久化,但是全域性狀態的缺乏導致了另一個問題——輕量級客戶端信任問題。由於它們依賴於第三方節點檢索的資訊,因此輕量級客戶端(例如移動錢包)目前面臨信任難題。

由於輕量客戶端沒有儲存可用於驗證使用者餘額狀態的完整區塊鏈,因此它們無法確保從API或RPC節點檢索到的資料是正確可靠的。而Merkle Patricia trie(MPT),一個經過密碼驗證的資料結構能夠改善這一問題。

- MPT -

MPT是Patricia trie與Merkle tree的結合。

- Patricia trie是二進位制基數trie的特殊版本,用於高效查詢,插入和刪除;
- Merkle樹是用於透過單個“根”雜湊對整個資料結構進行快速密碼驗證。

實施MPT後,網路節點可以繼續以確定性方式計算本地狀態,並隨著時間更新Merkle根。並能在共識過程中將該根雜湊與該區塊一起進行驗證,在該雜湊中可以將其保留並由其他節點引用,以驗證資料的完整性。

我們將在以後的推文中將更詳細地探討Merkle Patricia的嘗試以及Neo3正在實施的其他最佳化。

區塊頭中的狀態根

為了解決這些信任問題並提供全域性狀態,建議在區塊頭中新增狀態根。這將允許輕客戶端僅儲存區塊頭,並使用它們作為狀態證明來檢查RPC節點提供的資料真實性。以這種方式驗證解決了輕客戶端的信任問題,可以在不需要整條鏈副本的情況下確認資訊。

此外,包含在區塊頭中可確保網路上的每個節點都與全域性狀態一致。這樣可確保所有節點具有相同的合約儲存檢視,也消除了一致性問題。

在下一篇文章中,我們將繼續介紹開發者對此主題的更多討論,重點介紹Neo開發者設計的bug修復功能。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;