Turbo-Geth 客戶端 Beta 版計劃引入挖礦功能、共識引擎組件,以及簡化區塊下載。

原文標題:《引介 | Turbo-Geth 客戶端:Beta 版的目標》
撰文:ledgerwatch
翻譯:阿劍

我們沒有定死從 Alpha 階段轉向 Beata 階段的時間點。我們是反過來,確定了一些轉向 Beta 版的先決條件;實現了這些條件,就意味着 turbo-geth 已經準備好了。下面就是我們要實現的清單:

挖礦功能

讓 turbo-geth 支持高效挖礦的難點在於:在任意時間點,都只有一個狀態是 「公認最新」 的狀態。而挖礦,需要節點產生 「投機」 區塊以及 「投機」 狀態,以計算出新區塊的區塊頭中需要的狀態根哈希值。目前的想法是,「投機」 狀態是一塊放在內存裏的緩存,而且是可以 「複製」 的。「複製」 的意思是,創建該緩存的 lazy-shallow 副本,因此對該副本的改動不會影響節點所保存的公認最新狀態。

不過,事實也證明了,當前由哈希化狀態(HashedState)和中間哈希值(IntermediateHashes)組成的數據模式不適合於維護這樣的緩存。所以我們正在開展糾正數據模式的工作,希望實現可以複製的狀態緩存,然後實現挖礦功能。

簡化區塊頭和區塊體下載

當前的階段式同步中,區塊頭和區塊體下載分別安排在階段 1 和階段 3。這兩個階段不管看起來還是用起來,都跟其它階段非常不同,因爲它們是在繼承自 go-ethereum 客戶端的 區塊頭 / 區塊體 / 收據 / 狀態 下載實現的基礎上開發出來的。這些代碼的功能比 turbo-geth 的階段式同步所需的要更多,可以(也應該)替換成簡化後的版本。這個簡化的版本已經有一個可用的概念驗證了,現在可以測試和撰寫文檔了。

共識引擎組件

有一個概念叫做 「共識機制即插即用(pluggable consensus)」 ,意思是客戶端應該很容易能從工作量證明遷移到權威證明(PoS),也包括能從工作量證明的一個變種切換到另一個變種,從 PoA 的一個變種切換到另一個。實際上,曾經有人用接口來實現共識機制即插即用,但因爲還是運行在同一個進程中,通常還是與其它代碼緊密交織在一起。我們已經在設計一個讓共識引擎能運行在獨立進程中的接口。

有了這樣的接口,雖然還是能夠在同一個進程中運行,但這個接口能夠更直接讓共識引擎與交易執行適當分離。我們已經爲 EtHash PoW 和 Clique POA 實現了一個概念驗證,現在正準備集成、測試和撰寫文檔。

從 LMDB 遷移到 MDBX

turbo-geth 客戶端是從 BoltDB 數據庫後端起步的,現在正在添加對 BadgerDB 的支持,最後,我們會完全遷移到 LMDB。某些時候我們對 LMDB 的使用方式會產生一些穩定性問題,這是連 LMDB 的創造者都沒有想到的。因此,我們一直在考察 LMDB 的一個支撐性更優的變種,叫做 MDBX,希望能利用上其穩定性提升,使所有功能在未來結合得更加緊密。對 MDBX 的集成已經能夠完成了,現在需要測試和撰寫文檔。

來源鏈接:github.com