ETH 1.X:無狀態以太坊新思路“REGENESIS”
一級標題
一級標題
一級標題Eth 1.x:無狀態以太坊新思路“reGenesis”這週我們將對
技術樹(tech tree)
一級標題
一級標題
二進制樹目前以太坊使用十六叉目前以太坊使用十六叉
Patricia默克爾樹
來編碼狀態,但如果轉變為二進制式會帶來顯著的效率提升,尤其是在見證大小這個方面。對以太坊狀態進行完全重新編碼需要製定新範式,以及清晰的過渡策略。最後,還需要決定是否將智能合約代碼分塊,並且將該過程合併到二進制樹過渡中還是作為獨立更新。二進制樹範式上一篇有關狀態增長的文章
中有提到)。ethresearch.
中有提到)。
有關正式二進制樹規範和分塊規則的討論可以參見
過渡到二進制樹重要的不僅僅是二進制樹範式這個目的地,旅途本身也非常有價值!在理想的過渡過程中,不會對網絡的交易處理產生幹擾,也就是說客戶端將需要在處理每十五秒出現的新區塊的同時構建新的二進制樹。目前看起來最有希望的過渡策略被稱為
“覆蓋”法
,該方法部分基於geth的新快照同步協議。總的來說,新的狀態改變會以二進制範式被添加到現有的十六叉樹中,也就是說在過渡過程中會存在二進制和十六進制混合體。不受影響的狀態會被轉換為後台處理。一旦完成轉換,這兩層會被合併到一個二進制樹中。
請務必注意,客戶端多樣性在二進制轉換過程中也起到了非常重要的作用。每個客戶端將需要實現自己的過渡版本,或是依靠其他客戶端進行轉換,然後在另一端等待新的樹。
這需要我們“三思而後行”,所有客戶端需要協同工作來進行測試並協調轉換。出於安全性的考量,在過渡過程中網絡有可能需要短暫停止服務(例如挖出一些空塊),但是目前就任何具體計劃達成共識還為時尚早。
代碼分塊
正文
reGenesis
正文,以及,以及,以及@realLedgerwatch提交的完整提案
@realLedgerwatch提交的完整提案
,概括來說reGenesis基本可以說是“區塊鏈的大掃除”。完整的狀態將從概念上分為“活躍”和“非活躍”狀態。整體“活躍”狀態會按一定週期被停用,然後新的交易會再次幾乎從零開始建立新的活躍狀態(因此被稱作“reGenesis”)。
如果交易需要之前的狀態,將會提供一個見證,這非常類似於無狀態以太坊所需的證明:證明狀態更改與某個非活躍狀態相一致的默克爾證明。如果一筆交易需要狀態的“非活躍”部分,它將自動將其轉變為為“活躍”狀態(無論交易是否成功),這該部分將會留至下一次reGenesis發生。
這樣做的一個好處在於,在使用狀態時創建一些經濟限制,而實際上不會刪除任何狀態。其次,如果交易發送方盲目地反複試圖交易,則無法生成見證。
關於reGenesis的意義,它使得以太坊朝著終極的無狀態目標跨進了一大步,並且避開了要實現無狀態面臨的最大挑戰,即EVM執行時如何計算見證的gas。同時它還使得某個版本的交易見證能夠在網絡中傳播,讓更輕量級的客戶端和dapp開發者能夠有更多機會熟悉無狀態範式和見證生成。
reGenesis之後“真正的”無狀態性就只是程度上的問題了:無狀態以太坊其實只是每個區塊之後的reGenesis。
狀態網絡從一開始,網絡協議的優化只是技術樹中的一個“支線任務”,但隨著reGenesis進入無狀態以太坊的版圖,為分享以太坊鏈數據(包括狀態) 探索替代的網絡原語也成為了主線任務。以太坊當前的網絡協議是一個整體,但事實上有多種類型的數據能夠通過不同的“子網絡”來進行共享,而這些“子網絡”能夠滿足不同的需求。,之前在無狀態會議中討論到這個話題時,我們稱其為“三個網絡”
基於DHT的網絡能夠更高效地服務於不常改變的數據類型。隨著reGenesis的引入,“非活躍”狀態能夠被納入這類不常變化的數據,從理論上來說也就能夠適用於比特流式的swarm網絡,而不是當前由全節點進行逐條廣播。自上一次reGenesis之後,在網絡中傳播不變狀態的網絡就是靜態狀態網絡(static state network),可以
基於devp2p庫(以太坊網絡協議) 中新的Discovery v5.1規範Merry-go-Round sync進行延展。SNAP protocol結語
結語
結語結語,也能在Eth1x/2 R&D Discord中對所有這些話題進行討論,如果想加入可以在ethresear.ch上要取邀請。如果有任何反饋和建議,請在推特聯繫@gichiba或@JHancock。
聲明:ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ethereum.cn,若需長期轉載,請聯繫ethereumcn@gmail.com進行授權。


