存儲優化
隨著 Kaia 區塊鏈的增長,存儲區塊鏈數據所需的存儲空間也在增長。 Kaia 採用兩種主要技術來管理這種不斷增長的存儲需求:
狀態批量修剪(狀態遷移)
狀態遷移是一種批量剪枝功能,可在不中斷運行節點的情況下應用於現有節點。
動機
區塊狀態或 StateDB 將鏈上賬戶和合約存儲在一個 trie 數據結構中。 trie 數據結構可存儲過時和最新狀態,以便使用梅克爾散列進行驗證。 隨著事務執行狀態更改,狀態三元組會無限增長。 截至發稿時(2024 年 8 月),Kaia 主網存檔節點大小超過 20TB,甚至完整節點也超過 10TB。
概念
狀態遷移會刪除處理新區塊時不需要的舊區塊狀態。 它將狀態 trie 從 "舊 "複製到 "新"。 並非所有三元組節點都會被複制。 從選擇性區塊的狀態根可到達的區塊被複制。 複製完成後,舊目錄將被刪除,因此只剩下所選區塊的狀態。
閱讀這些博客文章,瞭解更多技術細節: 狀態遷移:節省節點存儲, Kaia 狀態遷移:減少區塊鏈數據的有效方法
有關如何執行批量修剪,請參閱《狀態遷移指南》(../../misc/operation/node-pruning.md#how-to-perform-batch-pruning)。
國家現場修剪
狀態即時剪枝是解決狀態數據庫規模不斷擴大問題的一種新方案。 與批量剪枝(狀態遷移)不同,即時剪枝會在節點進程阻塞時自動一點一點地刪除舊狀態。
動機
區塊狀態或 StateDB 將鏈上賬戶和合約存儲在一個 trie 數據結構中。 trie 數據結構可存儲過時和最新狀態,以便使用梅克爾散列進行驗證。 隨著事務執行狀態更改,狀態三元組會無限增長。 截至發稿時(2024 年 8 月),Kaia 主網存檔節點大小超過 20TB,甚至完整節點也超過 10TB。
在此之前,"狀態遷移 "通過有選擇性地複製最近的狀態並刪除其餘狀態來刪除舊狀態,從而緩解了這一問題。 這樣可以將整個節點的大小減小到 5TB 以下。
然而,國家移民也有其自身的缺點。 它的缺點是需要花幾天時間遍歷整個州的 Trie,開銷很大。 此外,狀態遷移必須手動觸發。 為了克服這些限制,引入了即時修剪技術。
概念
三元組修剪很難,因為三元組節點是否過時並不確定。 在原始狀態三元組結構中,一個三元組節點可以是多個嘗 試的一部分,每個嘗試構成一個不同的區塊。 即使三元組節點(如賬戶餘額)更新為另一個值,也不能刪除該三元組節點,因為其他父節點可能仍然需要它。 這個問題被稱為哈希重複問題。
即時剪枝會有意重複具有相同內容的三元組節點。 在 "即時剪枝 "模式下,一個三元組節點不會被哈希值引用,而是被 ExtHash 引用。 ExtHash 是內容的 32 字節哈希值加上 7 字節序列索引。 序列索引是單調遞增的,因此每個三角形節點都是唯一的。
哈希:32 字節 Keccak256ExtHash:32 字節 Keccak256 + 7 字節序列索引
這樣,只要三元組節點的內容發生變化,就可以認為該三元組節點已經過時。 Merkle 哈希值的計算方法與此相同,只是忽略了序列索引,使其在共識方面與非即時剪枝節點兼容。
閱讀這篇博客文章,瞭解更多技術細節:利用 StateDB 即時剪枝高效管理區塊鏈數據容量。
有關如何啟用即時修剪,請參閱 Live Pruning Guide.