異構雙王:淺談Cosmos和Polkadot的不同

我們經常把Cosmos和Polkadot放在一起。對於普通用戶來說,二者似乎沒有什麼明顯的區別,看起來似乎都是平行(zones)+中繼(hub)的架構模式。

我們經常把Cosmos和Polkadot放在一起。對於普通用戶來說,二者似乎沒有什麼明顯的區別,看起來似乎都是平行(zones)+中繼(hub)的架構模式。但是,如果我們返回來認真想一下二者的角色分工,這其中的不同點就有點多了。所以我們今天來看下Cosmos和Polkadot到底有哪些區別。

分片結構

Cosmos和Polkadot都是基於未來存在多個需要互相操作的鏈這樣一個論點而誕生的為不同狀態機提供相互通信的協議。但是二者的分片範式卻不一樣。

Cosmos: Hub – Zones的非共享狀態分片模型

之前我們講過,Cosmos的結構是由多個Hub(例如Cosmos Hub)鏈接長在其上的多個Zones, 並且Hub之間也可以進行鏈接的一種Hub-Zones模型。其最大特色在於各個Zones和Hubs需要有各自的驗證者,需要各自維護各自的安全,在需要通信的時候使用IBC(理解成Cosmos裡跨鏈信息傳遞特有的消息格式)發送數據包進行交互。這就是說,各個Zones之間的狀態是非共享的。一個Zones的更新重組不需要整個Hub和其他Zones跟著重組。當然,一個顯著的缺點就是這代表Zones之間的通信和交易需要各自信任對方。因為這種結構下,Hub本身維持的是一個全局的代幣狀態,只是在zone賬本和hub裡對應的分區賬本不一致時讓和該Zone進行跨鏈的其他Zone斷開鏈接。由於Zone不共享狀態,重新組織一個Zone不會重新組織其他Zone,這意味著每條消息都受收件人對發送者安全性的信任的信任約束。

Polkadot: Parachains – Relay Chain的共享狀態分片模型

Polkadot的分片就是平行鏈。而眾所周知的波卡角色分工中,我們知道各個平行鏈的狀態轉換是由收集者(collators)收集對應平行鏈的區塊(包含一個狀態證明),然後提交到中繼鏈去進行最終性的確認。這意味著所有平行鏈都共享狀態,也代表著平行鏈之間需要互相通信的時候可以直接通信(通過XCM格式)而不用再通過中繼鏈,同時共享中繼鏈帶來的安全性。不過,這同時也意味著一旦一條平行鏈要進行重組更新,那麼整個波卡都需要重組。

質押

兩者雖然都是基於PoS,但是質押模型卻並不相同。

Cosmos: Bonded Proof of Stake

委託人必須為他們想要委託的節點綁定一定數量的資金,本質上是DPoS的變種(DPoS只是選舉誰來維護網絡安全,並且委託人也不承擔風險。BPoS會和節點一起承擔風險,接受獎勵,同時也是治理權的委託)。

更關鍵的一點是,由於Cosmos採用的是BPoS, 所以其共識投票和獎勵都是基於“Stake”數量的。換句話說,每次共識通過代表整個質押資產裡有超過2/3的資產投票通過,獎勵也一樣是根據你的Stake數量來分。同時,因為還有治理權的問題,很多節點會選擇0佣金,吸引別人委託給他,獲得更多的治理權。

Polkadot: NPoS

關於波卡NPoS裡的N我們提過(順序Phragmén 算法)。但是和BPoS不同的是,波卡里的共識投票和獎勵是根據“驗證者數量”的。也就是說,每個驗證者都有相同的權重,而不是單純根據stake數量來決定。這意味著每次共識確認和出塊通過都是獲得了2/3的驗證者通過,而不是2/3的stake數量通過。而驗證者的獎勵主要是由驗證最終性和出塊活動來決定。加上每個節點的stake數量和他的獎勵本身沒直接關係,這會激勵委託人將資產委託給本身stake數量不多的節點,獲得更高的收益,這也給了資金不足的節點一種新的競爭方式,讓他們有機會和大資金節點進行競爭。同時,這種博弈本身又會增加節點的去中心化程度。

共識:

Cosmos: Tendermint

Cosmos團隊之前本身就是搞Tendermint共識引擎的,深耕於在區塊鏈上實現BFT。而拜占庭容錯能容許一定節點作惡下,系統依然不崩潰而正常運行。本質上來說這是一種提供了即時確定性的循環協議。出塊和最終性確定都在一條算法路徑上,一次能生產一個確定性的塊(PBFT)。複雜度上來說具有二次復雜度。

Polkadot: BABE+GRANDPA

波卡本身的共識協議分了兩個子協議。

BABE負責出塊

  • Blind Assignment for Blockchain Extension,是在驗證者節點之間運行並確定新區塊作者的區塊生產機制,根據質押並使用Polkadot隨機週期(用的VRF)將區塊生產槽分配給驗證者。

  • Polkadot 中的驗證者將參與每個插槽中的抽籤,這將決定這些驗證者是否是該插槽的區塊生產者候選人。每輪長度為6 秒。由於這種隨機性機制,多個驗證者可以成為同一個插槽的候選者。某些時候,插槽可能是空的,導致出塊時間不一致。

  • 當多個驗證人是給定插槽中的候選區塊生產者時,所有人都會產生一個區塊並將其廣播到網絡。這就和我們之前知道的出塊過程一樣,誰先得到大部分驗證者確認,誰贏。但是因為考慮到網絡延遲和拓補,多條鏈會在短時間內共存,繼續擴張,直到最終確定性協議啟動確認。

GRANDPA負責最終性確認

  • 需要注意的是因為波卡的出塊是同步的,本質上來說最終性確認投票投的不是塊,是鏈(假設同時出塊分叉成了ABC,那麼最終性確定的就是ABC裡哪個鍊是合法鏈,這和Tendermint的區別很大)。 BABE可以同時出塊拓展最終鏈,然後GRANDPA負責分批處理他們出的塊,確認最終性。

波卡的這種混合共識有個顯著的好處,就是結合了PoW“概率確定性”的情況下,又能快速保證最終性的確認。同時,使用多鏈競爭的策略允許其他驗證者執行廣泛的可用性和有效性檢查,以確保沒有無效的狀態轉換進入最終鏈。但是同樣的,其複雜度也是二次復雜度。

消息傳遞

這首先需要明確的一點,波卡的XCM(全稱跨鏈共識消息傳遞格式)只是一種類似於JSON一樣的數據格式,本身不是一種跨鏈機制,其機制是XCMP。其所謂的跨鏈說的是平行鏈之間的跨鏈(共享狀態的鏈),並不是說跨到以太坊和比特幣上。我們平時說他跨鏈以太坊和比特幣,本質上是有人做了個平行鏈來鏈接以太坊和比特幣。只有平行鏈之間或者說波卡生態內,消息傳遞才是用的XCMP。而IBC本身是個消息傳遞機制,當然,也有自己的格式。雖然同樣是限制Tendermint架構才能直接使用IBC,但是因為本身就是個開放生態(APPChain),並沒有限制必須要在Cosmos裡才能用。

Cosmos: IBC

Cosmos IBC實現了使用hub進行代幣跨鏈,但是,由於鏈不共享狀態,接收鏈必須信任消息來源鏈的安全性。這裡我們需要明確幾個點:

  • 首先,IBC只負責數據傳輸,驗證和保障數據可靠性,但是它不是個“原子交換協議”(因為鏈之間的狀態沒有共享)

  • 其次,IBC也不是token轉移協議,這部分工作是基於IBC的應用協議幹的事情。同時,IBC也不是一個分片協議。它本身沒有被分片的跨鏈狀態機,而是有一系列不同鏈上的不同狀態機共享接口

那麼,其互通原理是什麼。

IBC經常被人說是類似於互聯網的TCP//IP協議,其特殊性在於只定義了數據是如何跨鏈被發送和接受的。並沒有明確具體的數據以及這些數據的結構。這使得IBC 成了一種非常適合需要在應用層實現大量標準化的互操作性解決方案。

對於Cosmos生態內部的區塊鏈,其過程如下:

鏈A 鎖定通證a 並且將這一鎖定證明(憑證)傳遞給鏈B。這一動作一旦完成並獲得驗證,鏈B 就會鑄造自己鏈上的替代通證a’ (可以理解為一種等值票券),替代通證a’ 之後可以被鏈B 銷毀,鏈B 完成銷毀後,鏈A 會解鎖原來被鎖定的通證a。因此,我們可以跨鏈轉移通證的價值來實現跨鏈資產轉移,但我們並不能轉移通證本身。

需要注意的是,因為存在多條鏈互相操作的情況,如果直接這樣建立通信通道複雜度和冗餘度會很高,所以hub在此處就起到了一個信息聚合的作用,負責傳遞信息。

而對於非Tendermint架構的鏈/非最終性確認的鏈,IBC用的也是類似於橋接的方式,有一個Peg-zone專門來負責最終性驗證。最終性通過後完成跨鏈。

這是因為類似於以太坊和比特幣本身是PoW機制。該機制上面講過,本質上是概率最終性,有可能被回滾。所以,為了保證最終性的確認,需要有一個peg-zone作為異構鏈最終性確認的小工具。詳情其實可以看到之前寫過關於Cosmos詳細的機制說明:

COSMOS:

本質來說,IBC實現跨鏈資產轉移還是一種映射。兩個要交互的鏈互相運行一個輕節點在對方鏈,用來確定對方消息的真實性,然後通過兩次握手一樣的過程,完成資產和消息的轉移。

Polkadot: XCMP

因為波卡本身的結構範式就是“狀態共享”。所以原則上來說,各個鏈進行跨鏈通信只用規定好規範就行。這就誕生了XCM。它包括了以下幾個重點:

  • 平行鏈打開彼此的連接,並可以通過其已建立的渠道發送消息(開放通信接口即可通信)。

  • Collators(出塊人)本身即是平行鏈的全節點,又是中繼鏈的全節點,所以在跨鏈消息傳遞中很重要。

  • 跨鏈消息不通過中繼鏈,只有發布和通道操作(打開、關閉等)的證明才會進入中繼鏈。

而XCM的通信過程本身還是很容易理解的,舉個例子說明會更加清楚:

假設我的老闆在歐洲(E)要給在國內(C)的我轉錢10萬塊,這個轉賬成功在XCM的環境下需要經歷如下的步驟:

1. 老闆需要先把10萬塊轉到我在歐洲(E)的賬戶。

2. 歐洲(E)的Collators就會標註一條信息:老闆給我歐洲(E)的賬戶轉了10萬塊。然後Collators會將這個信息還有對應的時間和目的地一起放置到歐洲(E)的輸出隊列裡(Gossip broadcast)。

3. 歐洲(E)輸出隊列需要先經過歐洲(E)驗證者的確定。

4. 因為國內(C)的收集者會定期掃描目的地是國內(C)的其他鏈輸出隊列。所以他會看到這條信息,再加入到國內(C)的輸入隊列,然後將該信息加入到下一個塊兒中,方便後續處理。當然歐洲(E)的和國內(C)的驗證者都會驗證消息傳遞是否真的發生。

5. 在國內(C)的收集者處理過程中,消息會執行國內(C)上的相關操作(智能合約),完成資產的轉移。

6. 然後包含該信息的國內(C)塊會被國內(C)驗證者進行驗證,無誤後確認最終性。完成資產的最終性轉移。

需要注意的是,因為涉及通道操作,本次消息傳遞實際上是要經過中繼鏈來傳遞的。

可以看到,Polkadot和Cosmos跨鏈通信的不同本質是因為狀態共享與否的不同。對於波卡來說,跨鏈通信是不需要信任約束,因為狀態是共享的,數據是可查的。而對Cosmos來說,跨鏈通信還會收到信任約束, 因為驗證者不是共享的,狀態也不是共享的。

治理

Cosmos: 常規分叉執行治理

所有持幣人都可以投票。但是執行是通過分叉來執行的,和其他傳統區塊鏈一樣。但是委託人放棄投票的話,投票權相當於轉交給了被委託節點。

Polkadot:多部門治理系統

大多數持幣人都可以參與公投,但是有多種提案方式。比較特色的就是Polkadot 有幾個鏈上的、無需許可的機構。第一個是理事會(Council),它由一組以Phragmén 方式選舉產生的帳戶組成。理事會代表少數利益,因此,理事會一致通過的提案在公投中的通過門檻較低。還有一個技術委員會(Technical Committee)用於提出技術建議(例如緊急升級以修復錯誤)。

升級

Cosmos: 正常分叉升級

必須通過正常的分叉機制來製定升級和提案。

Polkadot:無需分叉升級

使用WebAssembly(Wasm ,WebAssembly,簡稱為Wasm,是一種用於基於堆棧的虛擬機的二進制指令格式。Wasm 被設計為用於編譯C/C++/Rust 等高級語言的可移植目標,支持在Web 上部署客戶端和服務器應用程序。而且和平台無關)作為元協議,Polkadot 可以在沒有硬分叉的情況下制定鏈升級和成功的提案(通過在鏈上部署Wasm,並讓節點在特定的塊高度自動執行新的邏輯)。

開發

Cosmos 和Polkadot 的設計使得每條鏈都有自己的STF(狀態轉換函數),並且都為Wasm 和以太坊虛擬機(EVM) 中的智能合約提供支持。 Polkadot 提供了一個提前的Wasm 編譯器以及一個解釋器(Wasmi)來執行,而Cosmos 只在解釋器中執行智能合約。

Cosmos 鏈可以使用Go 編寫基於Tendermint的Cosmos SDK 開發。

Polkadot平行鏈用的是Rust編寫的Substrate框架。這裡多說一句,開發者不需要指定一個集中的RPC 節點,只需定義區塊鏈的鏈規範,以便他們的應用程序與鏈同步。這可以通過Substrate 連接實現,開發人員將不再需要依賴單個RPC 節點。

其他

尤其關於代幣經濟的設計。這一點其實值得單獨寫寫。老生常談,ATOM價值捕獲能力的弱勢, DOT平行鏈代幣因為沒有了“安全確保”這一價值,那麼主要的價值支撐就變成了業務本身,專精業務,不要多想。詳細問題後面有空再說。

總結

通過比較,我們可以看到Cosmos和波卡的不同之處有太多太多。這其實牽扯到了他們兩個設計哲學的不同。 Cosmos的設計哲學從頭到尾都像希臘城邦一樣,推崇自治,自由和信任。但是本身的風險就如同上面寫到的一樣,本質上存在信任約束的問題,以及我們常常提到的“烏合之眾”問題(不過烏合之眾在我個人看來就是個有待商榷的說法,包括“公地悲劇”也一樣,後面有機會給大家講講)。而波卡的設計則非常像一個“國家”,強調一心同體。你只要做好你平行鏈應該做的事情,安全什麼的讓我國家機器來保證。

國家的效率是很高,集中力量辦大事。但是別忘了希臘城邦的製度本身也是催生西方文明的基礎。但是從目前的世界來看,城邦制度還是被淘汰了。不知道放到區塊鏈的時間會怎麼樣,我們拭目以待。

參考鏈接:

https://wiki.polkadot.network/docs/learn-comparisons-cosmos

https://forum.cosmos.network/t/ibc-tcp-ip/4219

展開全文打開碳鏈價值APP 查看更多精彩資訊

Total
0
Shares
Related Posts