決戰分片之巔?從各方各面比較波卡和以太坊2.0的設計
灑脫喜/張詠晴編譯
2020-05-27 14:50

(圖片來自:tuchong.com)

5月26日晚,備受關注的公鏈項目波卡(Polkadot)發布了第一個侯選鏈CC1,而它很可能成為將來的Polkadot主網,而根據描述,波卡已從之前的跨鏈定位切換到了分片協議,因此將與以太坊2.0正面交戰。

那波卡的分片設計,和以太坊2.0的分片設計有什麼不同呢?本文將從模型、架構、共識、Staking、分片、消息傳遞、治理和升級這8個方面全面進行一個對比。(注:兩者目前都處於規劃階段)

模型篇

以太坊2.0中的分片,都具有相同的狀態轉換函數(STF),這個狀態轉換函數(STF)為智慧合約的執行提供了一個介面。合約存在於單個分片上(並且可以在分片之間發送異步消息),因此可通過並行執行分片來進行擴展。

同樣,在波卡(Polkadot)中,每個分片都承載了核心邏輯,分片並行執行,並且波卡(Polkadot)可發送跨分片異步消息。然而,協議中的每個分片都有一個唯一的狀態轉換函數(STF)。應用程式可存在於單個分片中,也可以通過組合邏輯跨分片存在。另外,波卡(Polkadot)使用了WebAssembly(Wasm)作為「元協議」,只要波卡(Polkadot)上的驗證者能夠在Wasm環境中執行,分片的狀態轉換函數(STF)就可以是抽象的。 

架構篇 

以太坊2.0

以太坊2.0的主鏈被稱為信標鏈(Beacon Chain)。信標鏈上的主要負載是證明(attestation),它們是對分片數據可用性和信標鏈有效性的投票。以太坊2.0中的每一個分片都是具有以太坊Wasm(eWasm)介面的區塊鏈。

以太坊2.0只需一條信標鏈就可以啟動階段0(Phase 0),而在階段1(Phase 1),以太坊將有64條簡單的分片鏈來測試信標鏈的最終確定性。每個分片向信標鏈提交「交聯」(crosslink),其包含了確定分片數據的訊息。之後,在階段2(Phase 2),分片將實現eWasm介面,最終使系統可用。

此外,該網路還將有一些「側鏈」,它們將與非以太坊2.0終局性鏈進行交互。

波卡(Polkadot)

和以太坊2.0一樣,波卡(Polkadot)也有一個主鏈,它的名字叫中繼鏈(Relay Chain),然後它還有一些分片叫平行鏈(parachain)。平行鏈並不侷限於像eWasm這樣的單個介面,相反,它們可以定義自己的邏輯和介面,只要將其狀態轉換函數(STF)提供給中繼鏈驗證程序即可執行。

按照計劃,波卡準備每個區塊最多驗證100個分片。除了計劃在每個區塊中執行的並行鏈之外,波卡還具有動態調度的平行線程(parathread)。這使得鏈之間可共享分片插槽(slot),就像多家小型航空公司在機場共享一個登機口一樣。

此外,為了和其他鏈進行交互(例如比特幣),波卡還會擁有提供雙向兼容性的橋平行鏈。 

共識篇

以太坊2.0和波卡都使用了混合共識模型,其中區塊生產和終局性都有各自的協議。對於終局性協議,以太坊2.0所採用的Casper FFG和波卡的GRANDPA都是基於GHOST的,它們都可以在一輪中完成一批區塊。對於區塊生產,兩個協議都使用基於插槽(slot)的協議,這些協議將驗證者隨機分配給一個插槽(slot),並為未完成的區塊提供分叉選擇規則,其中以太坊2.0使用的是RandDAO/LMD,而波卡則是用的BABE。

在共識坊啊嗎,以太坊2.0和波卡之間有兩個主要區別:

  1. 以太坊2.0根據稱為「epoch」的時間段來完成一批區塊。目前的計劃是每個「epoch」有64個區塊,並在一輪中完成所有的區塊。預計的區塊時間約為12秒,這意味著預期的終局性時間為6分鐘(最多12分鐘)而波卡的終局性協議GRANDPA,基於可用性和有效性檢查來完成區塊的分批處理,這些檢查是隨著提議鏈的增長而發生的。也就是說,波卡的終局性時間隨需要執行的檢查次數而變化(無效性報告導致協議需要額外檢查),預計的時間大概在12-60秒之間。
  2. 以太坊2.0需要每個分片有大量的驗證者,來提供強大的有效性保證。而波卡的分片,需要的驗證者更少,並且也能提供強大的有效性保證。波卡透過使驗證者將擦除編碼分發給系統中的所有驗證者,來實現此目的,這樣任何人(不僅僅是分片的驗證者)都可以重建並行鏈的區塊並測試其有效性。 

Staking篇

以太坊2.0將是一個權益證明(PoS)網路,每個驗證者需要質押32 ETH來參與區塊驗證過程。驗證者將運行一個主要的「信標鏈」節點和多個驗證者客戶端(每個需要32 ETH)。這些驗證者會被分配給「委員會」,它們是隨機選擇出來的組,用於驗證網路中的分片。以太坊2.0依賴於設置一個大的驗證程序,來提供可用性和有效性保證:它們需要每個分片至少111個驗證者來運行網路,每個分片至少需要256個驗證者,才能在一個epoch時期內最終確定所有分片。這就要求有64個分片,即16,384個驗證者(每個分片提供256個驗證者) 

而波卡能夠用更少的驗證者,同樣提供強大的終局性和可用性保證,它使用的提名權益證明(NPoS)機制從較小的集合中選擇驗證者,讓較小的持有者指定驗證者來運行基礎設施,同時仍要求獲得系統的回報,而無需運行自己的節點。波卡計劃在第一年擁有1000個驗證者,並且網路中每個平行鏈大約需要10個驗證者。 

分片篇

以太坊2.0中的每個分片都有相同的狀態轉換函數(STF),在階段1(預期2021年實現),分片將是提供指向信標鏈的交聯的簡單數據容器,而在階段2(預計2023年),分片們將實現eWasm執行環境。EWasm是Wasm虛擬機的一個受限子集,其介面提供了一組可用於合約的方法。對於eWasm,將會有一套類似Truffle和Ganache的開發工具集。

而波卡中的每個分片,都有一個基於Wasm的抽象狀態轉換函數(STF)。只要邏輯編譯為Wasm,並且每個分片為波卡驗證者提供「執行區塊」函數,則每個分片都可以公開自定義介面。波卡有一個Substrate開發框架,它可以對模塊進行配置、組合和擴展,以開發鏈的狀態轉換函數(STF)。

消息傳遞篇

以太坊2.0 中的分片,將透過它們的交聯和狀態訪問彼此的狀態。在以太坊2.0模型中,會有64個分片,每個分片在信標鏈中為每個區塊發布一個交聯,這意味著分片可包含根據另一個分片上的某筆交易的輕客戶端證明執行邏輯。截至目前,以太坊2.0研發團隊尚未發布分片間消息的傳遞規範。

而波卡則對平行鏈使用跨鏈消息傳遞(XCMP)協議,來相互發送任意消息。平行鏈打開彼此之間的連結,並可以透過它們已建立的通道發送消息。如果兩條平行鏈有任何共同的全節點,它們可以透過全節點gossip消息。否則,驗證程序將處理消息傳遞。消息不通過中繼鏈,只有post和channel操作(打開、關閉等)的證明會進入中繼鏈。透過將數據保留在系統邊緣,這可以增強系統的可擴展性。

此外,波卡有一個名為SPREE的附加協議,它為跨鏈消息提供共享邏輯。通過SPREE協議發送的消息為接收鏈提供了關於來源和解釋的其他保證。

治理篇

以太坊目前使用的是鏈外治理方式,例如Github討論,所有的核心開發者討論,以及Ethereum Magicians來制定有關該協議的決策。

而波卡則是採用的鏈上治理方式(使用了一種稱為multicameral的系統),它有幾種途徑可以通過提案,比如鏈上理事會、技術委員會或公眾。所有的提案最終都會透過一次公投來決定,在公投活動中,多數代幣的參與就可以控制結果。對於可能的低投票率情況,波卡使用了自適應仲裁偏差來設置通過閾值。

升級篇

以太坊2.0的升級將遵循正常的硬分叉過程,其需要驗證者升級其節點來實現協議更改。

而使用Wasm元協議的波卡,可以在不使用硬分叉的情況下執行鏈升級。像STF、交易隊列或off-chain的任何內容都可以在不需要分叉鏈的情況下進行升級。 

總結

以太坊2.0和波卡都使用了分片模型,其中分片鏈(以太坊2.0中的「分片」和波卡中的「平行鏈/平行線程」)由主鏈通過連接主鏈區塊中的分片狀態進行保護。這兩個協議在幾個主要方面有所不同。首先,以太坊2.0中的所有分片都有相同的狀態轉換函數(STF),而波卡則讓分片有一個抽象的狀態轉換函數(STF)。其次,以太坊的治理過程是脫離區塊鏈的,其需要協調硬分叉來制定治理決策,而在波卡,它的決策是在鏈上進行的。第三,驗證者選擇機制是不同的,相比以太坊2.0,波卡每個分片的驗證者數量要求要更少一些。

本文為巴比特資訊授權刊登,原文標題為「決戰分片之顛 ?全面對比波卡和以太坊2.0的設計