'以太坊2.0:要開始實現擴展性“問題”'

區塊鏈 數字貨幣 硬件 技術 Paypal 迅解區塊鏈 2019-07-29
"
"
以太坊2.0:要開始實現擴展性“問題”

前言

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

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

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

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

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

區塊鏈的不可能三角

"
以太坊2.0:要開始實現擴展性“問題”

前言

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

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

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

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

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

區塊鏈的不可能三角

以太坊2.0:要開始實現擴展性“問題”

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

不盡人意的擴展方案

"
以太坊2.0:要開始實現擴展性“問題”

前言

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

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

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

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

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

區塊鏈的不可能三角

以太坊2.0:要開始實現擴展性“問題”

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

不盡人意的擴展方案

以太坊2.0:要開始實現擴展性“問題”

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

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

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

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

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

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

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

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

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

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

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

有前景的擴展方案

"
以太坊2.0:要開始實現擴展性“問題”

前言

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

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

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

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

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

區塊鏈的不可能三角

以太坊2.0:要開始實現擴展性“問題”

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

不盡人意的擴展方案

以太坊2.0:要開始實現擴展性“問題”

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

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

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

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

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

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

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

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

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

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

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

有前景的擴展方案

以太坊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

"
以太坊2.0:要開始實現擴展性“問題”

前言

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

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

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

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

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

區塊鏈的不可能三角

以太坊2.0:要開始實現擴展性“問題”

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

不盡人意的擴展方案

以太坊2.0:要開始實現擴展性“問題”

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

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

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

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

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

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

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

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

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

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

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

有前景的擴展方案

以太坊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

以太坊2.0:要開始實現擴展性“問題”

上文中我們探討了一些旨在擴展以太坊和其他區塊鏈網絡的 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年看到完全分片的以太坊。有許多才華橫溢、充滿激情的開發者正在致力於將這一夢想變為現實。我個人也希望分片可以成功實現,並且它將幫助以太坊和其他區塊鏈實現大規模的擴展和採用。

"

相關推薦

推薦中...