以太坊擴容問題與分片(sharding)解決方案區塊鏈
以太坊擴容問題與分片(sharding)解決方案
區塊鏈擴容所面臨的問題有很多:
1. 交易數量陡增。例如一些獨角獸和以太貓。
2. 現在產生區塊的過程,擴容性受到限制。區塊中的gas limit,使得區塊的計算能夠受到限制。但是提高gas limit或者過多地減少區塊時間,都會導致過高的等待時間,并且降低網絡抵抗攻擊的能力。
3. 缺乏并行性(parallelizability)。首先,現有的以太坊虛擬機是線性處理交易。其次,每個全節點都要處理每個轉賬,然后把整個狀態樹都存儲,從而確保安全性和去中心化。
為了解決擴容問題,分片技術通過進行鏈上狀態分區,可以獲得更高的吞吐量。
技術方法
首先,我們需要了解區分主鏈和分片鏈上的一些專業術語:
你可以很容易地看出,轉賬應該都整合在一組“校對”里面;就和一個區塊類似,這組校對也指向它鏈上的主校對,這就是我們要談論的分片鏈。成為“校對器”意味著有資格來在權益證明的分片鏈上提出新的校對。
基礎二次分片
分片鏈的共識取決于主鏈
和側鏈技術類似,只有很少部分的驗證需要記錄在主鏈上,這也是我們想要擴容區塊鏈的基本方案:(i)分片鏈有他們自己的轉賬方式,分片的驗證者只需要驗證他們在觀察的分片;(ii)分片鏈仍然追蹤主鏈,來通過權益證明機制來獲得更高層次的共識。
驗證者管理合約(VMC)
為了加入主鏈上的分片鏈,就需要在主鏈上增加特殊的合約,被稱為驗證者管理合約(VMC)。VMC是這個分片機制的核心; VMC的目標可以看作如下:
1. 權益證明系統。如果驗證者做出欺詐,他們的抵押就會被沒收。
2. 偽隨機抽樣。通過將最近的區塊哈希值作為起源,來選擇合適的校驗者。基本上來說,驗證者會將他們的權益抵押放入VMC,然后他們的驗證代碼地址就會在VMC內部的通用驗證者池列表中記錄。一個分片鏈的驗證者會從驗證者池列表中被抽樣,然后成為特定時間段(正如下面解釋的那樣),特定分片的校驗者。這個想法是為了讓驗證者不能預測他們何時會成為校驗者,以及他們會成為哪些分片的驗證者。
3. 校驗頭部驗證。VMC包含addHeader(bytes collationHeader) 函數,用來驗證校驗頭部,同時也為有效的校驗頭部哈希寫下記錄。這個函數會立刻提供鏈上驗證。
4. 跨分片通信。通過使用UTXO模型,用戶可以將以太幣通過轉賬調用存入特定的分片,并且在主鏈上創建回執(帶有回執ID)。分片鏈的用戶可以通過給定的回執ID創建消耗回執的轉賬,從而發出這個回執。
5. 鏈上治理。通過讓VMC作為國會。它能讓驗證者在鏈上進行投票。
如何在分片中提出校驗?
VMC會維護100個分片(SHARD_COUNT = 100)。每個分片都會同步處理轉賬,而且分片i的客戶端只需要驗證分片i上的轉賬。“時間段”是通過區塊時間窗口來定義的,例如PERIOD_LENGTH = 5 表示這個時間段有5個區塊產生。這會在每個時間段進行說明,對于每個分片,只能少于或等于1個有效校正。
一旦驗證者選出來成為校驗者,并且提出新的校驗,那么這個校驗者就必須要驗證近期的校驗,同時發出轉賬,調用addHeader 函數。需要注意地是,如果校驗者在第10階段被選出來進行新的校驗,這意味著addHeader 轉賬就必須要包含在階段10,也就是說,區塊數10 * PERIOD_LENGTH to block number (10 1) * PERIOD_LENGTH?—?1.
校驗的頭部哈希必須要記錄在VMC上,從而證明它的頭部是有效的。而且,分片的其他驗證者必須要時刻地觀察VMC,從而獲得最新的狀態。然后驗證是否這些轉賬是有效的。
分片鏈的分叉原則
在基本的分片技術中,分叉選擇準則取決于最長的主鏈。給定分片的有效頭部并不是簡單地“最長有效分片鏈”的頭部校驗,而是“所有最長有效主鏈中的最長有效分片鏈”。
下圖的例子中,主鏈有兩次硬分叉,而且第二個鏈在下圖中是最長的有效主鏈。因為 block B3是頭部區塊,很容易就可以看到審查C3是頭部審核。
然后block B3′就會到下圖中的流程。假設現在block B3 的得分是比 block B3′的分數高,所以上面的鏈仍然是最長的主鏈:
最后,block 4 就會到下圖的流程。需要注意地是,在這個分片中,collation C3就比collation C2的分數更高,但是下面的鏈是最長的有效主鏈,所以collation C2 就是現在的頭部審核:
在擴容性和安全性之間找到平衡
區塊鏈系統只能至多有以下3個特性中的2個:去中心化,擴容性和安全性。
分片其中一個重要的機制,就是如何在鏈上產生隨機性。
-被選為審核者的概率應該只是相對的,并且和驗證者的資金存入成正比。
-如果驗證者可以預測或者選擇他們要參加的分片,那么最不誠信的驗證者就可以和其他人串通,并且開始惡意攻擊。
如果抽樣過程不能有很高的隨機性,那么攻擊者就能開始在分片中開始1%的攻擊:如果有100個分片,攻擊者就可以專注于攻擊某個特定的分片,他們只需要1%的哈希力(PoW)/抵押(PoS)就可以控制整個分片。
區塊鏈分片的顯性最終確定性
顯性最終確定性vs 隱性最終確定性
首先,我必須要澄清分片機制應該能夠應用在工作量證明和權益證明的鏈上;盡管如此,例如Casper的顯性終結性會讓分片變的更強。
在通用的工作量證明鏈上,終結性是有概率的和隱性的;換句話說,盡管區塊已經有了上千次確認,還是有可能去重寫這個鏈。相反地,使用權益證明的Casper FFG數字經濟機制就會有顯性的終結性,也就是說我們可以檢查在這個協議中,是否已經是最后的結果。
對于協議內的顯性終結性,其中也有一個經濟風險。在2/3 1 and 1/3 1的時候,它會創造最理想的尺寸。相應地,任何不在2/3 1 處進行審查的節點,就會變為0。
取決于主鏈的最終確定性
在普通的分片技術中,分片鏈和主鏈掛鉤。對于分片驗證者而言,我們希望分片技術,區塊鏈性能可以是單個鏈的100倍,因此這些100個分片的所有驗證者都需要觀察VMC的狀態,從而獲得正確有效的頭部審查。對于驗證者來說,清楚地知道他們是審查者,這點很重要;對于普通用戶,如果我們應用第2部分的跨分片轉賬,普通的用戶也需要取回在VMC上的存款信息(回執ID)。顯性的結果會幫助降低主鏈和眾多分片鏈之間的不確定性。
顯性最終確定性可以幫助無狀態客戶端
無狀態客戶端是指不存儲整個狀態樹的客戶端,他們只存儲狀態樹根部的狀態。歸檔客戶端存儲全部的狀態樹,并且提供審查所需要的Merkle樹分支。通過這些Merkle樹分支,無狀態客戶端能夠打造部分狀態樹,而且驗證審查。
一旦驗證者被選出,整個過程就會開始同步,并且開始洗牌(也就是說,改變驗證者觀察的分片,并且同步分片鏈)。通過無狀態客戶端機制,洗牌的花費幾乎降為零,因為他們只需要驗證最近的審查(也就是說,那些分數高的審查)來同步分片。
由于同步過程會快很多,無狀態客戶端模型會可以在每個審查之間進行混洗。它不僅會減少存儲負擔和開銷,而且也會讓這個系統更加安全,因為頻繁采樣能夠獲得適應性攻擊的抵抗能力。
雖然同步的費用變得非常低,但是在某個時間段,無狀態的驗證者仍然需要驗證盡可能多的審查(collation),來確定他們會獲得最高分數的有效審查(collation)。
Casper FFG 將會提供顯式最終確定性閾值after about 2.5 “epoch times”,也就是說,125 個區塊時間 。如果在再混洗期間,驗證人能夠驗證超過 125 / PERIOD_LENGTH = 25 collation,分片系統能夠從顯式最終確定性中受益,確信從現在起的前 25 個 collation 可以最終確定。當然了,如果在同步時有更多 collation 得到驗證,就會更加安全。
結論
希望此文可以給大家一個關于目前以太坊分片設計的初步介紹,以及顯性的最終確定性是如何能夠讓分片機制獲得好處。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。