隨著以太坊生態的日漸繁榮,長久以來圍繞生態的一大問題就是:交易速度和費用。這也是以太坊挥之不去的問題,因此擴容也是最被廣泛討論的問題。這裡簡單介紹下歷史。
擴容之路#
Pos:區塊提議者和區塊驗證者分離,pos 工作流程是:
- 在分片提交交易
- 驗證者將交易添加到分片區塊中
- 信標鏈選擇驗證器以提出新的塊
- 其餘的驗證者組成隨機的委員會驗證分片上的提議
提出區塊和證明提議都需要在一個 slot 內完成,一般是 12s。每 32 個 slot 組成一個週期 epoch,每個 epoch 將打亂驗證者排序重新選舉委員會。
合併後,以太坊將為共識層實現提議者 - 構建者分離。Vitalik 認為,所有區塊鏈的終局是擁有中心化的區塊生產和去中心化的區塊驗證。由於分片後的以太坊區塊數據非常密集,出於對數據可用性的高要求,區塊生產的中心化是必要的。同時,必須有一種方法來維護一個去中心化的驗證者集,它可以驗證區塊並執行數據可用性抽樣。
什麼是分片?是水平分割數據庫以分散負載的過程#
分片是一種分區方式,可以在 P2P 網絡中分散計算任務和存儲工作負載,經過這種處理方式,每個節點不用負責處理整個網絡的交易負載,只需要維護與其分區(或分片)相關的信息就可以了。每個分片都有自己的驗證者網絡或者節點網絡。分片的安全性問題:
例如整個網絡有 10 條分片鏈,破壞整個網絡需要 51% 的算力,那麼破壞單個分片之需要 5.1% 的算力。
信標鏈,負責生成隨機數,將節點分配給分片,捕捉單個分片的快照,處理握手權益和其他各種功能,負責完成分片間的通信,協調網絡的同步。
分片的一個很大問題是跨分片。因為在分片中,每個節點群只處理該分片內的交易,交易在分片間會相對獨立,那麼 AB 兩用戶處於不同分片上,相互轉賬如何處理呢?
區塊存在被捨棄的情況,因此如果 A,B 被接受處理,在 #2 中選擇接受 W,X 交易,那麼整個交易就無法進行下去。儘管發生分叉的概率非常小。
過去的方式是數據可用性層分片,每個分片都有獨立的 proposers 和 committee。在驗證者集合中,每個驗證者輪流驗證分片的數據,他們將數據全部下載下來進行驗證。
缺點是:
- 需要嚴密的同步技術來保證驗證者之間能夠在一個 slot 內同步。
- 驗證者需要收集所有的 committee 的投票,這裡也會出現延遲。
- 而且驗證者完全下載數據對其壓力也很大。
第二種方法是放棄完全的數據驗證,而是採用數據可用性抽樣的方法。這裡又分為兩種隨機抽樣方式:
- 區塊隨機抽樣,對部分分片抽樣,如果驗證通過後,驗證者進行簽名。但是這裡的問題是,可能會出現遺漏交易的情況。
- 通過紅寫碼將數據重新解釋為多項式,再利用特定條件下多項式能夠恢復數據的特點,來確保數據的完整可用性。
多項式的性質:能夠從四個點去恢復數據
那麼只要保持 50% 以上的被編碼的數據是可用的,整個數據就是可用的。
當我們進行多次抽樣時,數據不可用的概率只有 2^-n
邏輯就是我們將數據進行紅寫碼變為多項式,再進行拓展,拓展能夠恢復數據。
這裡的問題就被轉移到了:在多項式拓展的過程中,是否被正確的拓展。
因為本身數據有問題,那麼拓展後,重新恢復數據也是錯誤的。那麼如何確保數據被正確的拓展呢?
- celestia 使用欺詐證明,這裡有一個同步問題
- ethereum 和 polygon avail 使用 kzg 承諾,這裡不需要誠實少數和同步問題。但 kzg 承諾不具備抗量子計算攻擊的能力,未來以太坊可能轉向 zkstarks 的技術,其抗量子算法攻擊。
在這個賽道裡面,最火熱的當屬采用零知識證明的 zksync 和 starkware 了。後續講詳細介紹他們。
什麼叫抗量子攻擊:就是該算法不依賴大量的數學安全假設。#
Kzg 承諾:證明多項式在特定位置的值與指定的數值一致。
KZG 承諾無非就是多項式承諾中的一種,能夠在不給定具體消息的情況下驗證消息。具體流程如下圖:
與 merkel 樹進行對比:#
整個流程就是:將數據通過紅寫碼化為多項式,將其拓展。使用 KZG 承諾確保我們的拓展是有效的,且原數據是有效的。然後利用拓展可以 reconstruct 數據,最後進行數據可用性抽樣。
Celestia 要求驗證者下載整個區塊,現在的 danksharding 則利用數據可用性抽樣技術。
由於區塊存在部分可用的情況,因此任何時候我們都需要重構區塊的時候保證同步。在區塊確實部分可用時,節點之間通信,將區塊拼湊出來。
KZG 承諾和數據欺詐證明的比較:#
可以看到 KZG 承諾能確保拓展和數據是正確的,而欺詐證明引入第三方進行觀察。最明顯的區別是,欺詐證明需要一個時間間隔來給觀察者進行反應,從而報告欺詐,這時候需要滿足節點直接的同步,以整個網絡能夠及時收到欺詐證明。KZG 則明顯的比欺詐證明更快,其使用數學方法來確保數據的正確,而不需要一個等待時間。
Celestia 自身的缺陷在於使用大區塊,要求驗證者下載全部數據,這個也是以太坊 danksahrding 的 proto 方案。那麼為了解決會出現的問題,celestia 未來也會選擇數據可用性抽樣的方法,那麼就需要用到 kzg 承諾。
無論是 kzg 還是欺詐證明都需要同步。因為存在概率發生區塊不可用的情況。