以太坊2.0:如何實現擴充套件性?

買賣虛擬貨幣

隨著以太坊網路的使用不斷擴大,透過一個強大而有效的機制來實現以太坊網路的長期擴充套件和大規模採用變得越來越重要。

作者 | Colin Schwarz

編譯 | Jhonny

前言

隨著以太坊網路的使用不斷擴大,透過一個強大而有效的機制來實現以太坊網路的長期擴充套件和大規模採用變得越來越重要。

在上篇文章《Serenity 將帶來什麼?》中,我們討論了以太坊網路目前面臨的最大問題之一,即擴容性。以太坊網路支援數百個去中心化應用程式,每天處理數十萬比交易。隨著以太坊網路的使用不斷增加,越來越多的數字應用被建立,越來越多的交易被執行,伴隨而來的是交易的時間和成本的不斷上升。這使得乙太網絡的速度變慢,使用起來也不那麼方便了。

在最近的一次速度測試中,以太坊網路每秒僅能處理20筆交易 (各種來源的資料表明,在過去一年中,以太坊網路每秒處理約12-45筆交易)。相比之下,PayPal、Visa 等中心化網路每秒通常能完成193筆交易和1,667筆交易,Visa 的最大容量接近2.4萬筆 [1]。

隨著以太坊網路的使用不斷擴大,透過一個強大而有效的機制來實現以太坊網路的長期擴充套件和大規模採用變得越來越重要。以太坊社羣自2014年以來一直在研究如何擴充套件以太坊網路,且不管是以太坊還是其他區塊網路,都研究了幾種實現擴容的解決方案。當前,以太坊社羣選擇將 sharding (分片) 作為擴充套件該網路的最佳方式。

本文將首先探討一些已經研究過的用於擴充套件以太坊和其他區塊鏈的解決方案,其中有些方案可以與 sharding 相結合,之後我們將探討有關 sharding 的細節及其發展路線圖。

區塊鏈的不可能三角

在探討如何擴充套件以太坊之前,我們有必要了解一下“區塊鏈的不可能三角。”這個首先由以太坊創始人 Vitalik Buterin 提出的三角悖論指出,區塊鏈網路只能完全滿足以下三個特性中的兩個引數:去中心化性、安全性和擴容性。針對這種三難困境的一種理想解決方案就是在這三者之間做出妥協。目前,以太坊網路是去中心化且安全的,但缺乏可擴充套件性。擴充套件以太坊網路的嘗試必須確保不會使得網路的去中心化和安全性受到損害,這樣才能提供徹底、長期的解決辦法。

不盡人意的擴充套件方案

擴充套件區塊鏈的最早想法之一就是簡單地增加每個區塊的大小。以太坊區塊鏈上一個區塊的大小取決於該區塊的Gas上限,當前每個以太坊區塊的Gas上限是800萬Gas。人們的想法是,由於每個區塊的生成速度保持不變,因此提高Gas上限將會允許在同一時期執行更多的交易,從而提高網路的速度和吞吐量。

儘管這種想法在技術上是正確的,但是將區塊大小增加到某個最優點之後,往往會產生比它所解決的問題更多的問題,並且由於這種方式所帶來的負面影響,使得這種方式實際上並不會增加吞吐量。

首先,更大的區塊意味著更難以被處理,並且往往會導致更高的延遲,這對以太坊網路是不利的。這意味著當區塊大小增加到某個特定的程度之後,只有那些擁有先進和昂貴的硬體裝置的人 (礦工) 才能成功地進行挖礦 [2]。

其次,更大的區塊大小也意味著需要更多的儲存空間,這就會增加每個網路節點所需的容量。當前以太坊區塊鏈的大小約是227GB,因此將區塊大小加倍將使這個數字加倍,且網路的交易速度和吞吐量並不會因此而帶來顯著的提升 [3]。這將再次有利於那些能夠負擔得起更好的硬體和更大儲存空間的富人。

最後,更大的區塊將使節點更難以與網路同步。這就又讓那些擁有更多資源的人處於優勢地位,並且使得網路在遭到重大攻擊時更難以實現網路重組。

所有這些因素都意味著當區塊大小增加至超過某個最優點之後,網路會存在更大的中心化風險,因為這種方式將會使得網路權利集中在那些最富有的參與者手中,阻止那些只擁有普通硬體裝置的大多數使用者執行節點或進行 ETH 挖礦 [4]。因此這種方式並不是一種長期可持續擴充套件以太坊網路的可行方案。

第二種方式是透過使用很多不同的山寨幣網路來減輕主鏈的負載,從而試圖增加網路的擴充套件性。也即將交易轉移至那些更小的區塊鏈網路中進行 (這些網路都有其自身的網路容量),而不是將所有交易都傳送至單條主鏈之上。

這種方式有可能可以增加吞吐量,但代價是使網路的安全性受到損害。這是因為,具有較小市值和較低價值的山寨幣 (altcoins) 更容易被攻擊或控制。正如 Vitalik 所說的那樣:“透過這種方式使得吞吐量增加了 N 倍,但同時也使安全性降低 N 倍。”因此,這種方式只有在 N 值很小的時候才安全,即這種方式無法顯著地提高網路的擴充套件性並保證網路的安全性。[4]

第三種類似的方式稱為“混合挖礦” (merge mining),這種方式被 Namecoin 等專案採用。與使用很多不同的山寨幣的方式類似,混合挖礦就是試圖透過將主鏈的負載轉移至幾條不同的側鏈上,從而減輕主鏈的負載並增加吞吐量

但是與山寨幣的方式不同,所有采用混合挖礦的區塊鏈網路都有著相同的礦工和挖礦協議,(或者在 PoS 系統中,有著相同的驗證者)這種方式增加了潛在攻擊的成本,因此使得這種方式比使用很多山寨幣的方式更加安全。但是網路吞吐量增加 N 倍,意味著網路中的挖礦能力也需要增加 N 倍,這就會導致同樣的挖礦中心化風險,這點與增加區塊大小的方式一樣。

因此,上訴三種方式並不是解決區塊鏈不可能三角的理想解決方案,因此並沒有被以太坊2.0團隊所接受。

有前景的擴充套件方案

最近,以太坊社羣已經研究了幾種更有前景的擴充套件方案,這些方案可以在不嚴重損害網路安全性或去中心化的情況下提高擴充套件性,目前正由一些專案進行實現。

其中一種方案涉及到使用諸如 ZK-SNARKs 或 Mimblewimble 等先進的密碼學技術來加快節點的驗證速度。這種系統在鏈上建立能夠使各個節點更快更容易地對區塊進行驗證的區塊密碼學證明 (cryptographic proofs),這種方式使得節點只需驗證區塊的密碼學證明,而無需從創始區塊開始驗證整條鏈。同時,ZK-rollups 和 ZK-ZK-rollups 也被認為有望將以太坊的吞吐量提升30倍。[8]

儘管如上這些方案可能帶來交易速度的提升,但它們並不是完整的擴充套件方案,且 Vitalik 認為透過使用更簡單的加密經濟學就可以實現同樣的效果,而無需使用這些純粹的密碼學技術。

01. Plasma 鏈

Plasma 鏈是另一種有前景的擴充套件方案,它透過實現在區塊鏈之間 (比如以太坊主鏈和 Plasma 鏈之間) 進行資產的相互轉移來增加帶有智慧合約功能的區塊鏈的吞吐量。資產從區塊鏈主鏈傳送並儲存在 Plasma 鏈上。儲存在 Plasma 鏈上的資金可以透過一種稱為退出 (exit) 的方式安全地撤回至主鏈上。只要主鏈的共識機制是安全的,就可以保證能夠安全地撤回到主鏈上。

理解 Plasm 鏈的一個很好的例子就是,我們可以將 Plasma 鏈比作是在賭場購買籌碼:顧客可以帶著現金進入賭場,使用現金購買任意數量的籌碼,然後按照自己的意願使用這些籌碼 (前提是遵循賭場的規章制度),等顧客想要離開賭場的時候就可以將手頭上的籌碼退換成貨幣。

這與以太坊區塊鏈中的 Plasma 鏈的執行方式類似,只是這裡的“貨幣”是以太幣 (ETH),籌碼是 Plasma 鏈中的某種原生山寨幣 [5]。這樣一來,交易就從以太坊主鏈上被委託到了 Plasma 鏈上,從而使主要節點可以以一種更具成本效益和更合理的方式來分配計算能力

Plasma 鏈是相對安全的,因為 Plasma 鏈直接與以太坊主鏈相連線,且將以太坊作為真相來源。使用者還可以依賴以太坊主網的安全性和規則來贖回他們的 ETH 或 Plasma 代幣。同時,Plasma 鏈使用一種稱為 MapReduce 的工具,配合一個默克爾 trie 結構來實現快速簡單地欺詐驗證,以此來抵禦惡意者的欺詐行為。

以太坊開發者 Collin Cusce 解釋道:“那些在 Plasma 鏈上進行了資金抵押的使用者將會自我監控,且當他們能夠證明存在不當行為時,會將爭議以證明的形式提交給根鏈 (即以太坊主鏈)。”

Plasma 鏈甚至包含了“回滾”的功能,即如果 Plasma 鏈上的某個惡意者企圖進行欺詐,其花費請求被證明無效之後,“回滾”功能將被啟用。啟用之後,所有涉及的資金將被返回至欺詐之前的狀態。從計算角度來說,這種回滾的成本是很低的,只需要消耗以太坊主鏈的2位空間。[6]

透過這種方式,Plasma 鏈能夠使以太坊主鏈得以擴充套件並更好地執行。同時,Plasma 鏈透過將主鏈及其相關的工具和協議作為唯一的真相來源,從而使 Plasma 鏈保持一定程度的安全。

與上文討論的其他擴充套件想法相比,Plasma 鏈更具創新性和安全性,但與任何解決方案一樣,Plasma 也並非沒有問題和折衷之處

首先,透過使用 Plasma 鏈只能有限地擴充套件以太坊網路,而無法以指數方式擴充套件。儘管 Plasma 鏈與以太坊主鏈相連線,並將以太坊主鏈作為唯一的真相來源,但 Plasma 鏈並不像以太坊主鏈本身那樣那麼安全,因為 Plasma 鏈容易受到“拒絕訪問攻擊 (denial of access attacks)”。其中的問題是,有著更少節點數和更少使用者量的小型區塊鏈 (如 Plasma  鏈),要比擁有更多節點數和更多使用者量的以太坊主鏈更易受到攻擊。

如果某條 Plasma 鏈受到大規模攻擊,那該條 Plasma 鏈的所有使用者將需要將自己儲存在 Plasma 鏈上的資金撤回至以太坊主鏈上。但問題是,如果那些同時試圖撤回至主鏈的 Plasma 鏈使用者的數量超過了以太坊主鏈的短期計算資源承受的範圍,那任何此時無法退出的使用者都將遭遇拒絕訪問,這是一個嚴重的安全問題

以太坊 Sharding FAQ [4] 對此進行了解釋:“...這種情況下,區塊鏈中將沒有足夠的空間來及時處理所有的退出,因此這種系統將變得不安全。”

幸運的是,有一些方法可以緩解 Plasma 鏈的這種不安全性。比如,透過設定靈活的退出延遲 (withdrawal delay) 機制,當很多 Plasma 鏈使用者同時提出退出請求時,將自動延長退出時間。這種方式能夠保障使用者資金的安全,但依舊可能使強大的攻擊者鎖定使用者的資金很長一段時間。這種“長時間的拒絕服務”是一種安全故障,但這比“完全喪失訪問許可權”要溫和得多。

且如果受到攻擊的 Plasma 鏈是專門用於進行微額交易,而非進行高價值交易時,延長退出時間帶來的影響也會更小 [4]。事實上,將 Plasma 鏈用於進行微額交易才使其最有意義,因為以太坊主鏈的高交易費和更長的交易時間並不利於進行微額交易。同樣值得注意的是,Plasma 鏈的不安全性並不會影響以太坊主鏈的安全性。

雖然 Plasma 鏈仍然是一個相對較新的、未經測試的概念,但其潛在的優點似乎超過了其缺點。當“Cryptokitties (加密貓)” Dapp 在以太坊主網上線時,由此導致的交易量激增對網路的可用性產生了明顯的負面影響,包括交易價格和等待時間的增加。如果這款 Dapp 是搭建在某條 Plasma 鏈上的話,那以太坊主鏈就可以自由地進行一些更重要的和更有價值的交易了,其可用性也就不會受到如此大的影響了。

Vitalik 也認為,Plasma 在不可能三角方面的折衷性與上文之前提及的其他方案不同,Plasma 鏈是一種“不同方向的折衷”,並“可以說是一種更為溫和的折衷”,這使得 Plasma 鏈能夠“對 (以太坊) 現在進行很大的改進。” [4]

也許對於 Plasma 鏈來說,這種方案的最大特點就是 Plasma 與 Sharding 並非相互排斥的。以太坊2.0將會實現這兩種擴充套件方案,使用者可以選擇使用帶有分片的主鏈,還是使用某條 Plasma 鏈,或者兩者皆使用,這取決於使用者自己的個人需求和偏好。

02. 狀態通道

另一種以太坊鏈下擴充套件方案就是基於通道的策略來實現擴充套件,比如比特幣的閃電網路或者以太坊的雷電網路。狀態通道 (state channels) 具有許多與 Plasma 鏈相同的優點和權衡,但在技術層面上的操作卻截然不同

與 Plasma 鏈不同,雷電網路 (Raiden network) 並不是一條單獨的、間歇性與以太坊主鏈相連線的區塊鏈,而是一個透過使用以太坊智慧合約與以太坊主鏈相連線,且擁有與主鏈不同的使用者的網路

所有想要進行交易的雷電網路使用者都必須將一定數量的 ETH 儲存在某個與主鏈相連線的智慧合約中,該智慧合約會在雷電網路中開啟一個通道 (channel),該通道將直接與另一個使用者相連線,這筆儲存在該智慧合約中的 ETH 存款將作為存款人進行交易的抵押品 (collateral)。

儲存了一定量抵押品的使用者可以在雷電網路中進行儘可能多的 ETH 交易,只要交易的 ETH 總額等於或少於該使用者抵押在該智慧合約中的 ETH 總額。[7]

除了開啟該支付通道的交易雙方之外,其他任何人都無法訪問該智慧合約,且抵押的 ETH 將確保交易的任何一方都不會存在雙花問題,或者其他形式的欺詐。交易雙方都需要提供一個與他們的 ETH 抵押相關聯的數字簽名,該數字簽名使雙方都負有責任,從而一旦交易被確認之後,交易雙方就不能退出交易了。這確保了系統的公平性和一致性,以及安全性。[7]

如果某個使用者A想要透過狀態通道與另一個使用者B進行交易,那使用者A不一定需要與使用者B開啟一個通道而是可以使用雙方之間已經存在的中介通道,只要雙方之間存在“至少一條可用的路徑,該路徑透過一個通道網路來將雙方連線起來” [7]。透過這種方式,即便某個使用者在狀態通道網路中只開啟了一個或者兩個通道,那該使用者也可能可以與大量使用者進行交易。

當然,透過直接的通道進行交易是無需手續費的,只需要抵押一定的 ETH 存款;但如果交易需要透過多個支付通道才能完成,那交易者可能需要為使用這些中介通道而支付一小筆手續費。這筆手續費會受到競爭性費用市場的影響,費用市場旨在將手續費維持在較低的水平,並與被髮送的價值成正比 (即傳送的價值越高,可能支付的手續費就相對更高)。

狀態通道解決方案的一個最強大的特性是,由於狀態通道中的交易不像在主鏈上那樣需要整個網路達成共識,因此交易幾乎可以在瞬間完成。此外,狀態通道交易不會以任何方式阻塞主鏈,除非一次性建立並最終關閉所有的通道。[7]

與 Plasma 鏈一樣,狀態通道也是與 sharding 具有互補性的,且這兩種以太坊擴充套件方案都正在被開發中。但不幸的是,與 Plasma 鏈一樣,基於通道的解決方案也易於受到拒絕服務攻擊。然而,正如之前已經指出的那樣,這些攻擊是可以被減輕的。簡言之,雷電網路是一種將實現重大擴充套件性的通道解決方案,且在安全性或去中心化方面不會折衷到不可接受的程度。Sharding FAQ 解釋道:“可以說,透過 sharding (以及其他技術) 實現的鏈上擴充套件和透過狀態通道實現的鏈下擴充套件都是必要且互補的。” [4]

綜上所述,人們已經探索了很多 Layer 1 方案用於擴充套件以太坊和其他區塊鏈網路,同時不對網路的安全性和去中心化造成影響。一些方案已經失敗了,其他一些方案也取得了有限的成果。

在經過大量研究之後,以太坊社羣已經選擇將 sharding 作為實現網路的大規模擴充套件並解決區塊鏈的不可能三角悖論的最有前景的方案。Plasma 和狀態通道等 Layer 2 解決方案將能夠有與 sharding 一起使用,進一步擴充套件以太坊2.0網路

Sharding

上文中我們探討了一些旨在擴充套件以太坊和其他區塊鏈網路的 Layer 2 擴充套件方案,下文中我們將討論 sharding 這種被以太坊社羣選擇作為擴充套件以太坊網路的 Layer 1 解決方案。Sharding (分片) 被認為是實現以太坊網路大規模長期擴充套件的最佳方式。

Sharding 一詞來自資料庫術語,涉及到將一個大型的資料庫分割成很多更小的、更易於管理的部分,以便能夠更快、更有效地訪問和處理資料。

對資料庫進行分片將允許總資料量超過任何單個分片的容量。將區塊鏈網路分割成很多分片以增加網路的擴充套件性,這與前者遵循相同的原則和目標,但實現起來會更加複雜。與 Casper 和 eWASM 一樣,sharding 也是備受期待的以太坊2.0的主要特性之一

比特幣和其他區塊鏈網路也已經考慮並試驗了分片技術,以對交易處理或區塊鏈狀態進行分片,儘管其中大多數分片計劃從未執行過。以太坊2.0的分片設想也將解決這兩個主要瓶頸:對交易處理和區塊鏈狀態進行分片 [4]。根據 GitHub 上的官方 sharding FAQ:“我們希望能夠每秒處理10,000多筆交易,而不需要強制每個節點都成為超級計算機或儲存 TB 級大小的狀態資料。這需要一個全面的解決方案,其中狀態儲存、交易處理、甚至交易下載和重新廣播的工作負載都分攤在各個節點上。”[4]

這聽起來很棒,但 sharding 實際上是如何工作的呢?

分而治之

在當前的以太坊網路上,每個節點必須驗證每筆交易。這是確保網路活性的一個重要特性。即使80%的以太坊節點同時出故障,網路仍能正常執行。雖然讓許多節點執行相同的操作實際上並不會使以太坊網路變慢,但這種方式並不一定能夠使網路資源得到最佳化利用。

我們透過一個簡單例子來展示如何更有效地使用以太坊的大量節點:假設以太坊網路上有三個節點,節點A、節點B和節點C。當前,為了驗證某筆交易 (假設是資料T),每個節點必須分別驗證T的整個資料集,以便對其進行確認。驗證過程確保了網路的安全,但這會產生一個所有交易都必須經歷的瓶頸:網路必須等到每個節點驗證每筆交易,這樣每秒處理的交易總數只能與每個節點的總交易容量一樣。

但根據提議的 sharding (分片) 協議,T將被分解為T1、T2 和 T3。節點A、B 和 C 只需要處理這些較小的資料分片中的一個,就可以使整個資料集得以驗證。

即便是在這個簡單的示例中,透過將資料分解為三個集合也可以極大地提高吞吐量並減少交易時間。當以最佳的方式將 sharding 應用於以太坊網路中時,改進將是巨大的。在撰寫本文時,以太坊網路上有超過8200個節點。[10]

根據最新的以太坊2.0規範,以太坊2.0區塊鏈將被分成1024條分片鏈 [11]。由於每條分片鏈都將能夠處理與當前以太坊網路一樣多的交易量 (在實現 eWASM 之後會更多),sharding 將會使以太坊的吞吐量和網路速度提高 1,000 倍以上 [12]。此外,在增加了諸如 zk-rollups 和 Plasma 等 Layer 2 解決方案之後,還將進一步提高網路的吞吐量和交易速度

Sharding, Casper & 信標鏈

在我們講解 sharding 如何運作的細節之前,有必要了解一下 Casper:這是以太坊2.0將使用的一種 PoS (權益證明) 機制,旨在代替當前以太坊網路使用的 PoW (工作量證明) 機制

Casper 將透過信標鏈得以實現,信標鏈將是以太坊2.0網路的系統鏈,確保整個網路的共識和狀態的最終性 (finality),並將促進分片鏈之間的通訊 (即跨分片通訊)。

Casper 機制不會依賴於硬體挖礦來消耗能源和計算從而達成共識,而是將依賴於驗證者來達成共識,驗證者將需要質押 32 ETH 來成為以太坊2.0網路的驗證者。

起初,sharding 和 Casper 是由不同的團隊遵循不同的開發路線進行構建的,但從2018年春季開始,sharding 和 Casper 團隊已經開始緊密協作,從而使這兩個體制可以同時開發,並從彼此的進展中獲益。驗證者將透過 Casper 協議來對分片和信標鏈進行驗證並達成共識

由於以太坊的規模以及區塊鏈技術的內在複雜性,對以太坊進行分片並非易事。區塊鏈作家 Brian Curran 對其中的複雜性進行了解釋:“...透過將節點分割成更小的子集,這些子集需要能夠處理特定的交易集,同時更新網路狀態,同時確保狀態的有效性。”

這意味著進行了分片的以太坊網路如果想要與當前的網路一樣正常執行,則必須開發一個複雜的系統來確定信標鏈和分片之間的職責分配,並建立分片之間以及分片與信標鏈之間的通訊方式。該系統還必須包含一種機制,該機制將確保所有的網路資料和交易保持有效和可用,從而實現最終性 (finality)。

以太坊研究者和開發者一直在苦苦思索,什麼樣的系統才能最好地實現所有這些功能。

在進一步討論之前,有必要指出,以太坊2.0提議的分片系統實際上還沒有進入實際使用階段。開發以太坊2.0客戶端的團隊仍在進行階段0的工作,階段0主要專注於信標鏈的實現。

Sharding 的許多細節仍在研究和開發中,但透過最新的以太坊2.0規範以及以太坊研究相關的文章,我們可以嘗試設想提議的 sharding 模型。

共識 & 最終性

分片技術的引入以及從 PoW 到 PoS 系統的過渡,意味著在以太坊2.0網路中達成共識和最終性的方式將與當前的以太坊網路中有很大的不同。我們將從基本方面開始,然後詳細介紹系統需要實現的一些更復雜的功能。

在以太坊2.0系統中,使用者的賬戶都將特定於某個分片。與當前以太坊1.0鏈中的交易類似,每個分片中的交易將會相對簡單,但分片之間的交易 (即跨分片交易) 將會使給系統增加一層複雜性。對此我們將在後文中加以論述。

在以太坊2.0中,交易將會按照當前正在開發的一個最佳化過程被分組到各個“交易包(transaction packages)”中。這些交易包必須透過一個雙重驗證過程,以便新增到信標鏈主鏈上:

首先,驗證者會被定期和隨機地分配到各個分片鏈中。一旦被分配到某個分片鏈中,驗證者就會對各個交易包的有效性進行投票。

如果驗證者頭贊成票,則信標鏈上的一個獨立委員會必須透過一個分片管理者合約 (sharding manager contract) 來對該投票進行驗證 [備註:信標鏈主鏈上將存在一個稱為 sharding manager contract (分片管理者合約) 的智慧合約,這個智慧合約將負責管理主鏈如何接受所有分片中的資料和交易是否有效]。如果信標鏈委員會也投了贊成票,那該交易包就會被新增至主鏈中,成為公共賬本的一部分,與該分片中的交易包建立一個不可篡改的交聯 (crosslink)。[4]

在 sharding 的之後階段,分片和主鏈之間的這種連線將是這樣的:如果主鏈或其任何一條分片無效,則整個網路將被視為無效。就像在未實現 sharding 的區塊鏈中一樣,交易包的驗證將帶來網路狀態的改變,這種改變將反映在諸如儲存和賬戶餘額等方面。[12]

經過一段時間 (根據當前的規範,也即每生成64個區塊,約6.4分鐘) 之後,每個分片中的驗證者將被解除其職責,並重新返回到更大的驗證者池之中,且信標鏈將會對每個分片重新隨機分配驗證者。[4]

信標鏈管理者所有驗證者的登記表,透過 RANDAO 和 VDF 提供隨機性透過 Casper FFG 提供最終性,並記錄跟蹤信標鏈與分片之間的交聯 (crosslinks)。在以太坊2.0的階段2期間,信標鏈也將儲存狀態執行合約 [14]。

信標鏈透過採用 RANDAO 和 VDF (可驗證延遲函式) 來提供隨機性和不可預測性,防止潛在的攻擊者試圖預測他們的節點將被分配到哪個分片之中。其邏輯是,如果攻擊者在分配之前不知道將被分配給哪個分片中,那麼他們將無法提前配合發動攻擊。

以太坊2.0系統透過對驗證者進行隨機選擇和分配,並對交易包進行雙重驗證,以此來達成共識,保障網路安全不受攻擊,並確保網路的最終性 (finality)。

跨分片通訊

現在,我們對交易、分片和信標鏈之間的關係以及它們如何協同工作以便達成共識和最終性有了一定的理解。然而,為了使以太坊網路達到最大的效率,分片必須能夠在彼此之間進行交易,並相互引用資料。這將需要網路上的各個分片之間進行通訊。在去年布拉格舉行的 Devcon 2018 大會上,以太坊創始人 Vitalik Buterin 對此進行了解釋:

“想象一下, 以太坊被分割成數千個島嶼。每個島嶼都可以做自己的事情。每個島嶼都有自己的功能, 屬於該島的每個人 (即賬戶) 都可以互動, 他們可以自由地沉溺於其所有的功能中。如果他們想與其他島嶼接觸, 就必須使用某種協議。”

這是一個很好的比喻,它提出了以太坊開發人員必須解決的最重要的問題之一:在實現分片所帶來的巨大擴充套件性潛力的同時,如何實現多個不同的分片之間彼此通訊,從而交付一個與當前以太坊網路一樣的無縫整合系統?

正如 Vitalik 的島嶼類比所述,為了確保效率和安全性,各個分片之間的互動需要遵循一個特殊的協議。分片還需要知道何時適合進行彼此通訊,並且只在需要時才進行通訊[12]。以太坊社羣選擇的通訊協議稱為“收據正規化 (receipt paradigm)” [4],這些收據 (receipts) 將透過“分散式共享記憶體 (distributed shared memory)” 儲存在信標鏈中,這意味著這些收據將只能被其他分片檢視,而不能被分片修改。這個特性很重要,這允許各分片驗證彼此的活動並從中獲益,同時仍然維持每個分片的最終性。

早期的分片想法側重於如何在分片之間最好地分配資料和職責。不過,Vitalik 最近公佈了兩項關於階段2的新提議:Proposal 1 [17] 和 Proposal 2 [18]。

這兩項提議的精神是“……有一個相對最小的共識層框架,該框架仍然提供足夠的功能來開發複雜的框架,為我們提供作為第二層所需的所有智慧合約功能。”[14] 為此,Vitalik 建議將單條分片的一些任務和責任委託給信標鏈。

之前的設計想法是,分片的功能類似於自治的以太坊區塊鏈,具有自己的交易、ETH 和智慧合約。透過該新提議,智慧合約和 ETH 的基本級別的概念將只存在於信標鏈上,分片將繼續擁有自己的狀態和執行。這應該有助於降低每個分片的複雜性,同時維護網路的各種機能。

Vitalik 相信,新的以太坊系統將提供足夠的功能來實現一個“支援分片中的智慧合約、跨分片通訊和所有其他功能的執行環境,我們希望使用信標鏈合約來構建這些功能。”

這個新系統將透過向信標狀態新增三種新的交易型別和兩種新的資料結構來完成。交易型別包括 NewExecutionScript、NewValidator 和 Withdrawal,這些交易分別代表著一個可以儲存 ETH 的執行指令碼,一個新增新的驗證者的函式,以及一個從信標鏈中撤出驗證者的函式。

這些新元件將用於促進跨分片通訊,並交付這樣一個系統,在這個系統中,所有 ETH 的交易和所有智慧合約的執行都可以透過 Layer 2 abstraction 實現,而不需要將它們包含在分片中。透過使用信標鏈合約來引入這個抽象層將有助於將每個分片的複雜性降到最低,這將簡化和改進分片之間的通訊

除了其固有的複雜性之外,跨分片通訊的另一個問題是延遲性。如果我們想將一個代幣從 shard A 傳送到 shard B 中,shard A上將“銷燬”那枚代幣,並記錄傳送的地址和金額,以及目標分片。過一段時間後,每個分片將知道其他分片的狀態根,這允許分片驗證收據並確認該代幣已經被轉移了。此時,來自 shard A 的收據將由 shard B 回收,shard B 將驗證該收據的有效性,以便該枚代幣可以在 shard A 中進行銷燬,並在 shard B 中找回。

這個過程會導致交易在被髮送和實際被確認時間產生延遲,這會降低使用者體驗,並影響以太坊2.0應該提供的速度和擴充套件性 [15]。對此問題提出的解決方案稱為 Fast Cross-Shard Transfers Via Optimistic Receipt Roots,其中的離你那很簡單,即儲存有條件的狀態,並對提交的交易的有效性“保持樂觀”。

一旦交易被驗證,如果交易確實有效,則交易將被永久記錄,反之則將被逆轉。分片之間的通訊是以太坊2.0開發人員仍在研究的最複雜的問題之一。以太坊2.0想要保留當前1.0鏈的優點,同時大大提高其擴充套件性,就必須要成功地實現跨分片通訊

面臨的挑戰

除了跨分片通訊之外,sharding 仍然面臨一些挑戰。我們已經研究了單個分片被攻擊的可能性,以及這種攻擊可以透過對驗證者進行隨機選擇和重新打亂分配的方式來加以抵制。但是,雖然這種隨機性對於網路安全有利,但卻使得節點更難計算分片的根和網路狀態,因為節點無法提前訪問他們將被分配的分片

出於同樣的原因,實現輕客戶端獲取有關整個網路狀態的準確資訊是比較難的。另一個需要注意的是欺詐識別。如果某個節點聲稱某個狀態或交易組無效,那如何通知其他節點以便讓他們可以監測並拒絕該欺詐行為呢?

持續進展時可能會出現更多的挑戰,但令人興奮的是,前文討論的主要問題,大多數已經被研究團隊解決了。

以太坊2.0發展路線圖

以太坊2.0的開發正在進行中,其中考慮了五個重要的設計目標:安全性,去中心化,恢復力,永續性和簡潔性。以太坊2.0的階段0 (信標鏈) 大約會在2020年1月3號啟動。為了確保達成上述目標,階段0之後的各階段將逐步推出,間隔期大約為一年。

階段0將啟動的信標鏈將是以太坊2.0的系統鏈,其功能已在前文討論過。正是透過分片與信標鏈間的交聯 (crosslinks) 來時間分片之間以及分片與整個網路之間的通訊。

階段1將引入基本的分片,實質上將是測試執行一個完全分片的系統將如何運作,因此,它不會立即展示分片的全部擴充套件性潛力。此階段將解決分片鏈上的共識和確定性(finality),並將允許信標鏈監控分片鏈的執行。

階段2將出現完全分片和整合的以太坊2.0。分片將從“基本資料製造者”升級為“全功能鏈”。階段2也將引入全新的以太坊虛擬機器 eWASM。

應該注意的是,雖然這些階段在概念上是分開的,但由於它們是相互有關聯的,大部分仍將同時進行。此外,開發人員仍在努力改進以太坊1.0區塊鏈 (通常稱為 Eth 1.x),也將繼續推出以太坊2.0。

Eth 1.x的既定目標是透過最佳化客戶端來提高交易吞吐量,執行“狀態費用 (state fees)”以確保全節點的可持續運營,並穩定交易費用以及開發可以將 Eth 1.x 連線到 Eth 2.0 鏈的確定性小工具 (finality gadget)。

鑑於當前的階段推出時間預測,我們可以預測性的在2020年底看到資料分片,並在2021年看到完全分片的以太坊。有許多才華橫溢、充滿激情的開發者正在致力於將這一夢想變為現實。我個人也希望分片可以成功實現,並且它將幫助以太坊和其他區塊鏈實現大規模的擴充套件和採用。

免責聲明:

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

推荐阅读

;