干貨 | 以太坊分片:overview and finality區(qū)塊鏈
為了理解以太坊分片機制提案的技術(shù)規(guī)范,這是一篇你不可錯過的文章
在 Ethereum Casper 101 中,Jon Choi 對 Casper 做了一個很棒很清晰的綜述,并解釋了為什么顯式最終確定性(explicit finality)對于可擴展性(scalability)大有裨益。本文旨在給出一個以太坊分片的設(shè)計概覽,并闡釋顯式最終確定性如何有助于區(qū)塊鏈分片。
為了完全理解以太坊分片機制提案的技術(shù)規(guī)范,我強烈推薦深入研究 Vitalik 寫的sharding doc .
區(qū)塊鏈可擴展性問題
不斷增長的交易。
目前的塊生成過程導(dǎo)致可擴展性受限。區(qū)塊的 gas limit 束縛了區(qū)塊的計算容量。無論是提高區(qū)塊的 gas 上限,還是大大降低區(qū)塊時間,都會導(dǎo)致高陳腐率(high stale rate),并削弱網(wǎng)絡(luò)對抗攻擊的能力。
并行不足。首先,現(xiàn)有的 EVM 按先后順序依次處理交易。其次,出于安全和去中心化的考慮,每個全節(jié)點會執(zhí)行每一筆交易,并存儲整個(或修剪后)的狀態(tài)樹。
進階閱讀:并行執(zhí)行交易 EIP 648?—?Easy parallelizability
術(shù)語
首先,讓我們來看一下在主鏈(你可以理解為現(xiàn)在的 Mainnet chain)和分片鏈(shard chain)上不同層次的對象區(qū)別:
-表格 1. 術(shù)語-
可以簡單地這么認為,交易都會被裝入 “collation”。與區(qū)塊類似,一個 collation 也會指向它在鏈(指的是分片鏈)上的 parent collation。 成為一個 “collator”,就意味著你有資格在 POS 分片鏈上提名一個新的 collation。
-圖片 1. Collation基本數(shù)據(jù)結(jié)構(gòu)一瞥-
基本的二次分片
與側(cè)鏈類似,collation 只有一小部分的證明必須記錄在主鏈上 -- 這也是我們?nèi)绾螖U展區(qū)塊鏈的基本想法:
分片鏈上的交易處于自己獨立的空間中,分片驗證人(shard validator)只需要驗證他們所關(guān)注的分片。
分片鏈也通過 POS 機制依附于主鏈,以獲得 更高層次的共識(higher level of consensus)。
為了將分片鏈加入到主鏈中,在主鏈上需要有一個叫做驗證人管理員合約(VMC)的特殊合約。VMC 是這個分片機制的核心。VMC 的目的可以概括如下:
權(quán)益證明系統(tǒng)。如果驗證者表現(xiàn)不端,其權(quán)益將會被剝削。
偽隨機采樣。通過將當前塊哈希作為種子,采樣出合格的 collator?;旧?,驗證者將它們的保證金(stake)存入 VMC,然后他們的驗證代碼地址(validation code address)將會被記錄在一個 VMC 內(nèi)部的 全局驗證人列表(a global validators pool list)。系統(tǒng)將會從驗證人列表中采樣出一個分片鏈的驗證人,并將其指定為指定“時期(period,下面會解釋什么是 period)”內(nèi),指定分片的驗證人。這種方式使得驗證者無法提前預(yù)測他們何時會成為驗證者,也無法預(yù)測會成為哪個分片的驗證人。
Collation header 驗證。VMC 有一個 addHeader(bytes collationHeader) 函數(shù),該函數(shù)用=來驗證 collation header,并記錄有效的 collation header hash。這個函數(shù)提供了即時的 鏈上 驗證。
跨分片通信(cross-shard communication)。利用 UTXO 模型,并通過在主鏈上進行交易和創(chuàng)建一個 receipt(帶有 receipt ID),用戶可以將以太存入一個指定分片。分片鏈上的用戶可以給定 receipt ID 創(chuàng)建一個消費 receipt(receipt-consuming)的交易,來花費該 receipt。
鏈上治理(on-chain governance)。將 VMC 作為議會,使得驗證人可以在鏈上進行投票。
在階段 1,VMC 將會維護 100 個分片( SHARD_COUNT = 100 )。每個分片并行執(zhí)行,分片 i 的客戶端只需要驗證分片 i 上的交易。
“時期(period)”被定義為一個區(qū)塊時間的準備窗口(a bounding a window of block times),比如 PERIOD_LENGTH = 5 意味著每個周期有 5 個塊。這表明在每個周期內(nèi),對于每個分片只有不超過 1 個有效的 collation。
-圖片 2(a). 二次分片。分片狀態(tài)的證明將被記錄在主鏈VMC上。-
一旦驗證人被采樣為合格的 collator 來提案一個新的 collation,collator 必須對最近的 collation 進行驗證,并發(fā)送一筆交易來調(diào)用 addHeader 函數(shù)。注意,如果 collator 周期 10 被采樣到提交一個新的 collation,這意味著 addHeader 交易 必須被包含在周期 10 里面,也就是說,交易必須在區(qū)塊號 10 * PERIOD_LENGTH 到區(qū)塊號 (10 1) * PERIOD_LENGTH - 1 之間.
-圖片 2(b).
對于一個片來說,一個period只有一個collation;一個區(qū)塊可以包含不同片的多個 addHeader 交易-
collation header hash 必須被記錄在 VMC 上,以證明它的 header 全局有效。此外,分片的所有其他驗證人必須時刻檢測 VMC 以獲得最新狀態(tài),然后驗證交易是否也有效。
在基本分片中,分叉選擇規(guī)則依賴于最長主鏈。給定一個分片,它的有效 head collation 不是簡單的“最長有效分片鏈(longest valid shard chain)”的 head collation,而是“在最長有效主鏈里面的最長有效分片鏈(the longest valid shard chain within the longest valid main chain)”。
Figure 3(a) 中有個例子,主鏈上有兩個分叉,在下圖中第二條鏈是最長有效主鏈。因為 block B3 是 head block,很容易看出 collation C3 是 head collation。
-圖片 3(a)-
然后 Figure 3(b) 中 block B3' 到了。假設(shè) block B3 的得分(score)高于 block B3',那么上面的鏈仍然是最長主鏈:
-圖片 3(b)-
最后 Figure 3(c) 到了 block 4。注意到,對于這個分片,雖然 collation C3 的得分比 collation C2 更高,但是下方的鏈是最長有效主鏈,所有現(xiàn)在 collation C2 是 head collation:
-圖片 3(c)-
更多內(nèi)容:另一個設(shè)計 -- Vlad Zamfir 的 sharded fork choice rule
-一個精巧的設(shè)計,保證區(qū)塊鏈可以在它們被最終化(finalized)之前原子化-
可擴展性與安全性之權(quán)衡
對于 去中心化,可擴展性 和 安全性 這三個屬性,區(qū)塊鏈系統(tǒng)最多只能三選其二。
— Blockchain Trilemma in Sharding FAQ
出于對系統(tǒng)安全的保證導(dǎo)致了可擴展性受限 3。當為了提高 TPS(每秒交易數(shù))將交易分配到各分片的同時,我們隨之也減少了每筆交易的計算資源。
分片的其中一個重要機制就是,如何在鏈上生成隨機數(shù)。
collator 被選中的幾率,應(yīng)該僅與驗證者的保證金相關(guān),且成比例。
如果驗證人能夠預(yù)測,或是任意選擇他們想要參與的分片,那么不誠實的驗證人既可以相互共謀,展開一個適應(yīng)性攻擊(adaptive attack)。
如果采樣不能以較高的隨機性進行選擇,那么攻擊者很可能在分片中展開 1% 攻擊:如果有 100 個分片,攻擊者可以專注于攻擊某一個分片,他們只需要 1% 的hash rate(POW)/deposit(POS) 就可以控制分片.
-圖片 4. 傳統(tǒng)的多數(shù)攻擊(51%攻擊)-
-圖片 5. 分片上的1%攻擊-
分片的區(qū)塊鏈顯式最終確定性
首先,我必須聲明,分片機制應(yīng)該同時能夠應(yīng)用于 POW 與 POS 的鏈。即使如此,顯式最終確定性這個小物件也跟 Casper 一樣,可以使得分片更加健壯。
在一般的 POW 鏈中,最終確定性是概率性,隱式的。簡單來說,即使區(qū)塊獲得了數(shù)以千次的確認,仍有可能對鏈進行重寫。相反,將 Casper the Friendly Finality Gadget (“FFG”) 加密經(jīng)濟機制應(yīng)用于 POS ,顯式地在協(xié)議內(nèi)(in-protocol)強制保證對我們來說,是否是最終確定 (we-can-check-if-its-finalized-for-us)。
[來自 Vlad] 協(xié)議內(nèi)顯式最終確定性閾值有個經(jīng)濟風(fēng)險:它在 2/3 1 和 1/3 1 之間創(chuàng)造了一個理想的 卡特爾大?。╟artel size)。相應(yīng)地,任何不在 2/3 1 同盟節(jié)點(coalition),其最終確定性的邊際貢獻就將為 0。
在基本分片中,分片鏈錨定與主鏈之上。
對于分片驗證人,我們希望分片,區(qū)塊鏈容量在階段 1 擴容 100 倍,因此這 100 個分片的所有驗證人,都將需要監(jiān)測 VMC 狀態(tài)來獲得正確有效的 head collation。對于驗證人來說,重要的一點是,要盡快確信他們是否是 collator。對于普通用戶而言,如果我們在階段 2 應(yīng)用跨分片交易,普通用戶也將需要在 VMC 上檢索他們的保證金信息(receipt ID)。
顯式最終確定性,將會有助于緩解主鏈與大量分片鏈之間同步的不確定性。
無狀態(tài)客戶端的基本原則是,它不存儲整個狀態(tài)樹,相反,無狀態(tài)客戶端只存儲狀態(tài)樹根。歸檔客戶端(archival clients)存儲整個狀態(tài)樹,并提供給定 collation 所需 的 Merkle 分支。有了這些 Merkle 分支,無狀態(tài)客戶端就能夠構(gòu)建部分的狀態(tài)樹,并驗證 collation 。
一旦完成驗證人采樣并再混洗(reshuffle),就會立刻觸發(fā)同步。有了無狀態(tài)客戶端機制,再混洗(也就是改變驗證者檢測的分片,并同步分片鏈)的成本低至(接近)0,因為它們只需要驗證最新的 collation(也就是有著最高得分的 collation)來同步分片。
-圖片 6. 無狀態(tài)客戶端模型Figure 6. Stateless client model-
因為同步過程可能非常快,無狀態(tài)客戶端模型就可能在每個 collation 之間再混洗成。這不僅會減輕存儲壓力和開銷,也會使系統(tǒng)更安全,因為頻繁采樣能夠獲得適應(yīng)性攻擊的抵抗能力。
Casper FFG 將會提供顯式最終確定性閾值after about 2.5 “epoch times”,也就是說,125 個區(qū)塊時間 。如果在再混洗期間,驗證人能夠驗證超過 125 / PERIOD_LENGTH = 25 collation,分片系統(tǒng)能夠從顯式最終確定性中受益,確信從現(xiàn)在起的前 25 個 collation 可以最終確定。
當然了,如果在同步時有更多 collation 得到驗證,就會更加安全。
結(jié)束語
希望我已經(jīng)對當前以太坊的分片設(shè)計概念作出了簡單介紹,以及顯式最終確定性如何有益于分片機制。如果想要深入了解協(xié)議設(shè)計,請訪問 ETHResear.ch 和 sharding doc。
如有任何錯誤,或是表述不清,歡迎指正!
特別感謝 Vitalik Buterin 的杰出工作,Jon Choi 督促我寫下這篇文章,Dr.Chang-Wu Chen 修繕,Brian Chen 給予反饋 以及 Vlad Zamfir 的分享。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。