為什麼分片是了不起的:揭開分片技術特性的神秘面紗

買賣虛擬貨幣

撰文:Vitalik Buterin

編輯:南風

特別感謝 Dankrad Feist 和 Aditya Asgaonkar 的校審。

分片 (Sharding) 是以太坊擴容的未來,它將是幫助以太坊生態系統支援每秒成千上萬筆交易的關鍵,並允許世界上大部分人以負擔得起的成本定期地使用該平臺。然而,分片也是以太坊生態系統和更廣泛的區塊鏈生態系統中更容易被誤解的概念之一。它指的是一組非常具體的具有特定屬性的想法,但它經常與那些具有非常不同且通常更弱的安全性屬性的技術混為一談。本文的目的是解釋分片提供了哪些特定的屬性,它與其他非分片技術的區別,以及分片系統為了實現這些屬性需要做出哪些權衡。

上圖:以太坊分片版本的一個描述。初始結構圖來自 Hsiao-wei Wang,由Quantstamp設計。

01

擴容的三難困境

描述分片的最佳方式,可以從形成和激發分片解決方案的問題開始:擴容的三難困境。

擴容的三難困境指出,區塊鏈嘗試擁有三個屬性,如果你堅持使用“簡單”的技術,你只能獲得這三個屬性中的兩個。這三個屬性分別是:

可擴充套件性:整個區塊鏈能夠處理的事務 (transactions,也譯作“交易”) 比單個普通節點 (比如一臺消費型膝上型電腦) 能夠驗證的事務要多。

去中心化:區塊鏈可以在不依賴於一小群大型中心化參與者的情況下執行。這通常理解為不應該對一組你無法透過一臺消費級電腦加入其中的節點有任何信任 (或者甚至不應該假設多數節點將保持誠實);

安全性:區塊鏈能夠抵抗大量試圖攻擊它的參與節點。

現在我們來看看三種“簡單的解決方案”,這些解決方案只獲得了上述三個屬性中的兩個:

傳統區塊鏈——包括比特幣、PoS/分片之前的以太坊、萊特幣和其他類似的區塊鏈。這些區塊鏈依賴於每個參與者執行一個完整的節點來驗證每個事務 (交易),因此這些區塊鏈具有去中心化和安全性,但沒有可擴充套件性。

高 TPS 的區塊鏈——包括 DPoS 家族,但也有許多其他的鏈。這些區塊鏈依賴於少量的節點 (通常是10-100個) 來維持節點之間的共識,使用者不得不信任這些節點中的大多數。這種鏈是可擴充套件的和安全的 (基於上面的定義),但不是去中心化的。

多鏈生態系統——這指的是“橫向擴充套件”的一般概念,即讓不同的應用執行在不同的鏈上,並使用跨鏈通訊協議使它們之間進行通訊。這種生態系統是去中心化和可擴充套件的,但不安全,因為攻擊者只需要控制了這些鏈中的其中一條鏈的多數共識節點 (通常是整個生態系統的 <1% 節點),就能攻破這條鏈,而且可能引發連鎖反應,對其他鏈上的應用造成很大的損害。

分片是一種讓你擁有所有這三大屬性的技術。一條使用分片技術的區塊鏈是:

可擴充套件的:它能夠處理比單個節點多得多的事務;

去中心化的:它能夠完全依靠消費型膝上型電腦來生存下去,而不依賴任何“超級節點”;

安全的:攻擊者無法用少量的資源攻擊系統的一小部分;而只能試圖控制和攻擊整條鏈。

本文的其餘部分將描述分片區塊鏈如何做到這一點。

02

透過隨機抽樣進行分片

最容易理解的分片版本是透過隨機抽樣 (random sampling) 進行分片。與我們正在以太坊 (2.0) 生態系統中構建的分片形式相比,透過隨機抽樣進行分片具有更弱的信任屬性,但它使用的技術更簡單。

其核心理念如下:假設有一條擁有很大數量 (比如 10000 名) 驗證者的 PoS 區塊鏈,並且該鏈有大量 (比如100個) 區塊需要驗證。沒有任何一臺計算機有能力在下一組區塊到來之前,將所有這些區塊進行驗證。

因此,我們所做的就是隨機地劃分驗證工作。我們隨機洗牌 (打亂) 驗證者列表,然後將經打亂的驗證者列表中的前 100 名驗證者分配去驗證第一個區塊,將列表中接下來的 100 名驗證者分配去驗證第二個區塊,以此類推。這樣的一組經隨機選中的驗證者 (被分配去驗證某個區塊或執行一些其它任務),我們稱之為一個委員會 (committee)。見下方示例圖:

當一名驗證者驗證某個區塊時,該驗證者會釋出一個簽名 (signature) 來證明自己驗證了該區塊。其它驗證者現在僅需驗證 10000 個簽名,而不是驗證 100 個完整的區塊 -- 這樣一來,工作量就小得多了,尤其是透過使用 BLS 簽名聚合 (注:也即將多個簽名聚合成一個簽名)[1]。每個區塊不是透過同一個 P2P 網路進行廣播,而是在不同的子網路中廣播,且節點只需加入與它們負責的區塊 (或因其它原因感興趣的區塊) 相對應的子網路。

想象一下,如果每個節點的計算能力增加 2 倍將會發生什麼。由於每個節點現在能夠安全地驗證多 2 倍的簽名,你 (指區塊鏈) 可以減少最低 Staking 質押金,從而支援多 2 倍的驗證者數量,這樣你就可以有 200 個委員會,而不是 100 個。因此,你在每個 slot 可以驗證 200 個區塊,而不是隻有 100 個。此外,每個單獨的區塊還可以大 2 倍。這樣以來,你 (在每個 slot) 就驗證了多 2 倍的的區塊,且每個區塊的大小還增加了 2 倍,也即是說,整個區塊鏈的容量增加了 4 倍。

我們可以引入一些數學術語來討論這是怎麼回事。藉助大O表示法,我們用“O(C)”表示單個節點的計算能力。傳統的區塊鏈可以處理大小為 O(C) 的區塊;而一條採用如上所述的分片技術的區塊鏈可以並行處理 O(C) 區塊 (請記住,每個節點間接驗證每個區塊的成本是 O(1),因為每個節點僅需驗證固定數量的簽名),且每個區塊有著 O(C) 的容量,因此整個分片區塊鏈的總容量將是O(C2)。這就是為何我們將這種型別的分片稱之為二次分片 (quadratic sharding),且這種效果是我們認為從長遠來看,分片是擴充套件區塊鏈的最佳方式的關鍵原因。

常見問題:分成100個委員會和分成100條獨立的鏈有什麼不同?

有兩個關鍵區別:

隨機抽樣防止了攻擊者將他們的能力集中在某一個分片上。在一個有著 100 條鏈的多鏈生態系統中,攻擊者只需要控制 stake (質押金) 總量的 約0.5% 就可以造成破壞:他可以集中對單條鏈發起 51% 攻擊;相比之下,在一個分片區塊鏈系統中,攻擊者必須控制近 30-40% 的 stake 總量才可能做出同樣的事情 (換句話說,整條鏈有著共享的安全性)。當然,攻擊者可以等待好運氣,即透過隨機的方式讓他獲得單個分片的 51% 的控制權,即使該攻擊者所控制的 stake 數量不到整條鏈的 stake 總量的 50%。如果攻擊者的質押量少於整條鏈質押總量的 30%,那上述這種情況幾乎不可能發生。

緊密耦合:即便某個分片出現了一個非法區塊 (bad block),整條區塊鏈可以透過重組來拋棄該區塊。在實施分片的區塊鏈中,存在一個社會契約(在本文件後面的章節中,我們將描述一些從技術上強制執行該契約的方法),也即,即便某個分片中存在一個非法區塊,那整條區塊鏈也是不會接受的,應該在發現該非法區塊時立即將之驅逐出去。從區塊鏈內的應用程式的角度來說,這確保了完美的安全性:合約 A 可以信賴合約 B,因為如果合約 B 由於鏈上發生攻擊而出現不當行為,那麼整個歷史記錄將被逆轉恢復,包括由於合約 B 中的故障導致合約 A 中發生的不當交易。

這兩個差異確保分片為應用程式建立了這樣一個環境,該環境保留著一個單鏈環境所擁有的關鍵安全屬性,而這是多鏈生態系統根本無法做到的。

03

使用更好的安全模型改進分片

比特幣圈中一個常見的說法,也是我完全同意的一個說法是,像比特幣 (或以太坊) 這樣的區塊鏈並不完全依賴於「誠實大多數的假設」。如果對這樣的區塊鏈發起 51% 的攻擊,那麼攻擊者可以做出一些令人討厭的事情,比如逆轉或審查交易,但他們不能新增無效的交易。而且,即使它們確實逆轉或審查交易,執行常規節點的使用者也可以很容易地檢測到這種行為,因此,如果社羣希望透過一個削弱攻擊者算力的分叉來協調解決該攻擊,他們可以很快做到這一點。

缺乏這種額外的安全性正是那些更加中心化的高 TPS 區塊鏈的一個關鍵弱點。這樣的區塊鏈沒有,也不可能會有普通使用者執行節點的文化,因此其主要節點和生態參與者可以更容易地聚集起來,強制執行一項社羣非常厭惡的協議更改。更糟糕的是,使用者的節點將預設接受這種更改。一段時間後,使用者會注意到這種更改,但到那時,這種強制的更改已經是一個既成事實:使用者將承擔拒絕這項更改帶來的協調負擔[2],他們將不得不做出痛苦的決定,逆轉每個人都認為已經被敲定的一天或更多的活動。

理想情況是,我們希望有一種分片形式,避免 51% 的信任假設,並保留傳統區塊鏈透過全網驗證獲得的強大安全保障。這正是我們在過去幾年裡所做的研究。

1. 可擴充套件的計算驗證

我們可以把防 51% 攻擊的、具有可擴充套件性的驗證分為兩種情況:

驗證計算:檢查某些計算是被否正確地完成,這假設你擁有計算的所有輸入 (inputs);

驗證資料的可用性:檢查計算本身的輸入是否以某種形式被儲存,當你真的需要,你可以下載這些輸入;應該在無需實際下載整個輸入的情況下執行此檢查 (因為資料可能太大,無法下載每個區塊)。

驗證區塊鏈中的某個區塊,涉及對「計算」和「資料可用性」同時進行檢查:你需要確信,1) 該區塊中包含的交易是有效的,且該區塊新的狀態根雜湊是執行這些交易的正確結果;但你也需要確信,2) 有足夠多來自該區塊的資料已經被髮布,這樣下載該資料的使用者就可以對該狀態進行計算,並繼續處理這條鏈。這第二部分是一個非常微妙但卻很重要的概念,我們稱之為「資料可用性問題」[3],稍後再詳細介紹。

首先,以可擴充套件的方式驗證計算是相對容易實現;有兩類技術:欺詐證明 (fraud proofs) 和 ZK-SNARKs(簡潔的非互動式零知識證明)。

欺詐證明是一種具有可擴充套件性的計算驗證方法

這兩種技術可以簡單地描述如下:

欺詐證明 (fraud proofs) 是這樣一個系統,即如果要接受某個計算結果,你需要一個質押了一筆存款 (deposit) 的人簽署一條這樣的訊息:“我證明,如果你對輸入 X 執行計算 C,你會得到輸出 Y”。在預設情況下,你會信任這些訊息,但是你也會留給其他質押了存款的人一個發起挑戰的機會 (即提交一條簽名訊息,表示“我不同意,輸出應該是Z”)。只有當存在挑戰時,所有節點才會執行計算。雙方中的任何一方錯了,將失去自己的存款,且所有依賴於該計算結果的計算都將被重新計算。

ZK-SNARKs 是一種加密證明,它直接證明了“對輸入 X 執行計算 C,將得到輸出 Y”的說法。這個證明在密碼學上是“合理的”:如果 C(X) 不等於 Y,在計算上無法對此進行有效證明。該證明也可以快速得以驗證,即便執行 C 計算本身需要大量的時間。關於 ZK-SNARKs 的更多數學細節,請參閱這篇文章:https://vitalik.ca/general/2021/01/26/snarks.html

基於欺詐證明的計算是可擴充套件的,因為“在正常情況下”,你可以透過驗證單個簽名來代替執行復雜的計算。也有例外的情況,即由於有人發起了挑戰,你必須在鏈上驗證計算,但這種例外情況非常罕見,因為觸發這種情況的成本非常昂貴 (最初的證明者或者發起挑戰者,其中一方將損失一大筆存款)。

ZK-SNAKRs 在概念上更簡單 -- 它們只是用更便宜的證明驗證代替了計算 -- 但其工作原理背後的數學運算要複雜得多。

當前,有一類半擴充套件 (semi-scalable) 的 Layer 2 系統,它僅僅以可擴充套件的方式 (即使用欺詐證明或者 ZK-SNARKs) 驗證計算,同時仍然要求每個節點對所有資料進行驗證。透過使用一套壓縮技巧可以非常有效地實現這一點。這就是 rollups[4]。

2. 可擴充套件的資料可用性驗證要更加困難

欺詐證明不能用於驗證資料的可用性。計算的欺詐證明依賴於這樣一個事實,即計算的輸入在最初的證明被提交的那一刻就釋出在鏈上,因此如果有人發起挑戰,那麼挑戰的執行與最初證明的執行是完全發生在同一個“環境”中的。但在檢查資料可用性時,你不能這麼做,因為問題恰恰在於,有太多的資料需要檢查,不能全部發布到鏈上。因此,針對資料可用性的欺詐證明方案遇到了一個關鍵問題:某人可以聲稱“資料 X 是可用的”而不公佈該資料,等待被挑戰,然後才會在鏈上公佈資料 X,從而使發起挑戰者被網路上的其它人視為不正確。

這在「漁夫的困境」[5] 中到了進一步的闡述:

「漁夫的困境」的核心概念是存在兩個“世界”:一個世界中,V1 是個邪惡的資料釋出者,V2 是個誠實的挑戰者;另一個世界中,V1 是個誠實的資料釋出者,V2 是個邪惡的挑戰者。對於當時沒有試圖下載這一特定資料的人來說,是無法對此進行區分的。當然,在一個可擴充套件的去中心化區塊鏈中,每個單獨的節點可以只下載一小部分資料,因此,除了存在分歧這一事實之外,只有一小部分節點可以看到發生了什麼。

由於不可能區分誰對誰錯,因此不可能有一個有效的資料可用性欺詐證明方案。

常見問題:如果某些資料不可用怎麼辦?透過 ZK-SNARK,你就可以確定一切都是有效的,這還不夠嗎?

不幸的是,僅僅只有有效性是不足以確保正確執行區塊鏈的。這是因為,如果區塊鏈是有效的,但是所有的資料都是不可用的,那麼使用者就沒有辦法更新他們所需的資料來生成用於驗證未來區塊的有效性的證明。如果一個攻擊者生成了一個有效但不可用的區塊,然後該攻擊者又消失了,那麼他就可以有效地暫停這條鏈。某個人可能會劫持某個特定使用者的賬戶資料,直到該使用者支付贖金,所以這個問題並不純粹是區塊鏈活性問題。

有一些強有力的資訊-理論觀點認為這個問題十分重大,沒有什麼明智的方式來規避。詳情請參閱這篇文章:

https://eprint.iacr.org/2009/612.pdf

那麼,如何在不下載的情況下檢查 1MB 資料是否可用呢?這聽起來不可能!

其中的關鍵是一種稱為資料可用性抽樣 (data availability sampling) 的技術[6]。資料可用性抽樣的工作方式如下:

使用一種叫做糾刪碼 (erasure coding) 的工具,將一段包含 N 個資料塊的資料擴充套件成一段包含 2N 個資料塊的資料,這樣,其中任意 N 個資料塊都可以恢復整個資料。

為了檢查資料的可用性,無需下載整個資料,使用者只是簡單地在該區塊中隨機選擇一個固定數量的位置 (比如 30 個位置),且只有當使用者在所有他們選擇的位置成功地找到這些資料塊時,才會接受該區塊。

糾刪碼將“檢查100%可用性”(即檢查每一段資料都是可用的) 這一問題轉變成了“檢查50%的可用性”(即至少有一半的資料是可用的)。隨機抽樣解決了 50% 的可用性問題。如果不到 50% 的資料是可用的,那麼至少有一次檢查幾乎肯定會失敗;如果至少 50% 的資料是可用的,同時某些節點可能無法識別出某個區塊是可用的,那麼只需要一個誠實節點執行糾刪碼重構過程,就能將該區塊剩餘的 50% 資料恢復。因此,不需要下載 1 MB 來檢查 1MB 區塊的可用性,你只需要下載幾 KB。這使得對每個區塊進行資料可用性檢查是可行的。可以透過這篇文章來了解這種檢查如何在 P2P 子網路中有效地實現:

https://hackmd.io/@vbuterin/sharding_proposal#Blob-publication-process

可以使用 ZK-SNARK 來驗證對一段資料進行的糾刪碼是否正確地被執行,然後可以使用 Merkle 分支來驗證單個資料塊。或者,你可以使用多項式承諾 (例如 Kate (又名KZG) 承諾 [7]),本質上是在一個簡單的元件中進行糾刪碼、證明單個元素和正確性驗證——這就是以太坊分片所使用的。

概述:我們又是如何確保一切都是正確的?

假設有 100 個區塊,你想要在不依賴委員會的情況下有效地驗證所有區塊的正確性。我們需要做以下工作:

每個客戶端對每個區塊進行資料可用性取樣,以驗證每個區塊中的資料的可用性,同時客戶端對每個區塊只下載幾 KB,即使整個區塊的大小有 1MB 或更大。只有當某個區塊的所有資料可用性挑戰都被正確地相應時,客戶端才會接受該區塊。

既然我們已經驗證了資料的可用性,那麼驗證正確性就變得更容易了。有兩種方法:

我們可以使用欺詐證明:一些質押了存款的參與者可以對每個區塊的正確性進行簽名。而其它節點,被稱為挑戰者 (或者漁夫),會隨機檢查並嘗試完整地處理區塊。由於我們已經檢查了資料的可用性,所以總是可以下載資料並完整地處理任何特定的區塊。如果他們 (挑戰者) 發現一個無效的區塊,他們會釋出一個每個人都會驗證的挑戰。如果這個區塊被證明是無效的,那麼這個區塊以及依賴於它的所有後續區塊都需要重新計算。

我們也可以使用 ZK-SNARKs。每個區塊都將附帶一個 ZK-SNARK 來證明其正確性。

在上述任何一種情況下,每個客戶端只需要對每個區塊做少量的驗證工作,無論區塊有多大。在使用欺詐證明的情況下,偶爾需要在鏈上完整地驗證區塊,但這應該是非常罕見的,因為觸發哪怕一個挑戰的成本都是非常昂貴的。

就是這樣!就以太坊分片而言,近期計劃是將分片區塊僅用於資料;也就是說,分片純粹是一個“資料可用性引擎”,而 Layer 2 Rollups 將使用這個安全的資料空間,同時使用欺詐證明或 ZK-SNARKs,來實現高吞吐量的安全交易處理能力。但是,完全可以建立這樣一個內建系統來新增“本地”高吞吐量執行。

04

分片系統的關鍵屬性是什麼?有哪些權衡?

分片的關鍵目標是儘可能複製傳統 (非分片) 區塊鏈最重要的安全屬性,但不需要每個節點親自驗證每筆交易。

在傳統的區塊鏈中:

無效區塊無法透過,因為驗證節點會發現它們無效並忽略它們。

不可用的區塊無法透過,因為驗證節點無法下載它們並忽略它們。

在一個具有高階安全特徵的分片區塊鏈中:

無效區塊無法透過,因為:

欺詐證明會迅速抓住無效區塊,並通知整個網路該區塊的無效性,並嚴懲該區塊的創造者;或者

ZK-SNARK 證明正確性,並且你不能為一個無效區塊建立一個有效的 ZK-SNARK 證明。

不可用的區塊無法透過,因為:

如果一個區塊的資料只有不到 50% 可用,那麼對於每個客戶端來說,至少會有一個資料可用性抽樣檢查會失敗,從而導致客戶端拒絕該區塊。

如果一個區塊至少有 50% 的資料可用,那麼實際上整個區塊都是可用的,因為只需要一個誠實的節點就可以重構該區塊的其餘部分。

沒有實施分片的傳統高 TPS 區塊鏈 (比如 DPoS 鏈) 無法提供這些保證;多鏈生態系統也沒有辦法避免攻擊者選擇其中一條鏈作為攻擊目標並輕易控制該條鏈的問題 (這些鏈可能會共享安全性,但如果這方面做不好,整個多鏈生態系統將實際上變成一條傳統的高 TPS 的鏈,並具有後者的所有缺點;如果在共享安全性方面做好了,這個多鏈生態就只是成了上述分片技術的一個更復雜的實現而已)。

側鏈 (sidechains) 高度依賴於具體實現,但它們通常容易受到傳統高 TPS 區塊鏈的弱點的影響 (如果它們共享礦工/驗證者),或受到多鏈生態系統的弱點的影響 (如果它們不共享礦工/驗證者)。採用分片的區塊鏈(注:譯者在下文中簡稱為“分片區塊鏈”或“分片系統”)能夠避免這些問題。

然而,分片系統的盔甲上也有一些裂縫。尤其是:

僅依賴於委員會的分片區塊鏈容易受到自適應敵手 (adaptive adversaries) 的攻擊,而且問責制也較弱。也就是說,如果對手有能力實時入侵 (或關閉) 他們選擇的任意節點,那麼他們只需要攻擊少量節點就可以破壞單個委員會。此外,如果敵人 (無論是一名自適應的敵手還是一名控制有 50% 總質押金的攻擊者) 打破了某個委員會,只有他們的少數一些節點 (即攻擊者在該委員會中控制的少數節點) 會被公開地被證實參與了此次攻擊,因此只有少數的質押金會被懲罰。這也是為什麼資料可用性抽樣與欺詐證明或 ZK-SNARKs 結合起來是隨機抽樣技術的重要補充的另一個關鍵原因。

只有當有足夠數量的客戶端線上,它們共同發出足夠的資料可用性取樣請求時,資料可用性抽樣才安全。在實踐中,這意味著必須有幾百個客戶端線上 (並且這個數字隨著系統容量與單個節點容量的比率的增加而增加)。這是一個 few-of-N[8] 信任模型——通常是相當可信的,但肯定沒有非分片區塊鏈中節點對資料可用性無需信任那麼健壯。

如果分片區塊鏈依賴於欺詐證明,那麼它依賴於及時性假設;如果網路太慢,節點可能會在用於證明某個區塊不正當的欺詐證明出現之前接受某個區塊是被敲定了。幸運的是,如果你嚴格遵循一旦發現無效區塊就逆轉所有無效區塊的規則,那麼這個閾值是一個使用者設定的引數:每個使用者選擇他們可以等待最終敲定的時間,如果他們不願等待太長時間,那麼就會遭受損失,但更加謹慎的使用者是安全的。即便如此,這還是削弱了使用者體驗。

需要傳送的原始資料數量要大得多,這增加了在極端網路條件下發生傳輸失敗的風險。與大量資料相比,少量資料更容易傳送 (如果強大的政府試圖審查這條鏈,也更容易安全地隱藏資料)。區塊瀏覽器需要儲存更多的資料,如果它們想要支援整條鏈的話。

分片區塊鏈依賴於分片 P2P 網路,每個單獨的 P2P“子網路”(即分片鏈) 更容易受到攻擊,因為它有更少的節點。用於資料可用性抽樣的子網路模型[9]可以緩解這種情況,因為子網路之間存在一些冗餘,但仍然存在風險。

以上這些都是合理的擔憂,儘管在我們看來,允許更多的應用執行在區塊鏈上,而不是透過中心化的 Layer 2 服務執行,是更為令人擔憂的問題。話雖如此,這些擔憂,尤其是後兩個問題,實際上是限制分片區塊鏈吞吐量超過某個點的真正因素。二次分片的二次性是有限制的。

順便說一句,如果分片區塊鏈的吞吐量變得太高,那麼它的安全風險會越來越大,這也是為什麼擴充套件到超二次分片的努力在很大程度上被放棄的關鍵原因;似乎保持二次分片的二次性才是最好的方法。

為何不以中心化的方式進行區塊生產,同時對驗證進行分片?

人們經常提出的一種分片替代方案是,搭建一條結構類似於中心化的高 TPS 鏈的區塊鏈,但這條鏈上面使用資料可用性抽樣和分片,以實現對有效性和可用性的驗證。

這改進了目前存在的中心化高 TPS 區塊鏈,但仍然比分片系統弱得多。這有幾個原因:

在一個高 TPS 的區塊鏈中,區塊生產者更難以監測到審查。發現審查要求:(i) 能夠看到每一筆交易,並驗證沒有這樣的交易存在:該交易明顯值得被打包,但莫名其妙地未被打包進區塊;或者 (ii) 在區塊生產者中建立一個 1-of-N 信任模型,並驗證沒有區塊沒能進入鏈中。在一條中心化的高 TPS 鏈中,(i) 是不可能的,(ii) 更難以實現,因為較少的節點總數甚至會使 1-of-N 信任模型更容易崩潰,而且,如果區塊鏈的出塊時間對於 DAS 來說太快了 (就像大多數中心化的高 TPS 鏈一樣),就很難證明某個節點生產的區塊不是因為釋出速度太慢而被拒絕。

如果大多數區塊生產者和生態系統成員試圖強行透過一項不受社羣歡迎的協議變更,雖然使用者的客戶端肯定會檢測到該變更,但對於社羣來說,反抗和透過分叉來拒絕該變更是非常困難的,因為他們需要啟動一組新的非常昂貴的高吞吐量節點來維護一條保持舊規則的鏈。

中心化的基礎設施更容易受到外部行為者的審查。生產區塊的節點有著高吞吐量,這使得它們非常容易被發現,並更容易被關閉。在政治和邏輯上,審查專門的高效能運算也比審查個人使用者的膝上型電腦更容易。

將高效能運算轉移到中心化雲服務的壓力更大,增加了整條鏈將在 1-3 家公司的雲服務內執行的風險,因此會增加由於許多區塊生產者同時出現故障而導致整條鏈崩潰的風險。而有著在使用者自己的硬體上執行驗證者的文化的分片區塊鏈不容易受到這種影響。

適當進行分片的系統作為基礎層更好。給定一個實施分片的基礎層,你總是可以透過構建一個 Rollup 來在其上建立一箇中心化的生產系統。但是,如果你有一個依賴於中心化的區塊生產的基礎層,那你就無法在上面構建一個更加去中心化的 Layer 2。

原文連結:

https://vitalik.ca/general/2021/04/07/sharding.html

正文中涉及的連結:

[1]:https://ethresear.ch/t/pragmatic-signature-aggregation-with-bls/2105

[2]:https://vitalik.ca/general/2020/08/17/philosophy.html

[3]:https://github.com/ethereum/research/wiki/A-note-on->[4]:https://vitalik.ca/general/2021/01/05/rollup.html

[5]:https://github.com/ethereum/research/wiki/A-note-on->[6]:https://hackmd.io/@vbuterin/sharding_proposal#ELI5->[7]:https://dankradfeist.de/ethereum/2020/06/16/kate-polynomial-commitments.html

[8]:https://vitalik.ca/general/2020/08/20/trust.html

[9]:https://hackmd.io/@vbuterin/sharding_proposal#Blob-publication-process

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读