區(qū)塊鏈互操作性項目Cosmos和Polkadot的區(qū)別介紹
Cosmos 和 Polkadot 都是關(guān)注區(qū)塊鏈互操作性的項目,關(guān)于二者之間的差別已經(jīng)有過很多討論。如果你還不熟悉這兩個項目,Linda Xie 發(fā)過一串推特介紹過這兩個項目,可以作為很好的入門材料。
雖然已經(jīng)有很多帖子分析過這兩個項目的區(qū)別了,但是我認(rèn)為其中大部分都存在一定的偏向性或者不夠詳細(xì)。通過這篇帖子,我會從架構(gòu)權(quán)衡到哲學(xué)等方面更深入地探討這兩個項目。
為什么要構(gòu)建一條新的區(qū)塊鏈?
為什么一些項目要選擇從頭開始構(gòu)建一條專門承載應(yīng)用程序的區(qū)塊鏈,而不是以智能合約的形式在現(xiàn)有的區(qū)塊鏈上編寫應(yīng)用程序呢?主要有以下兩點原因。
首先,現(xiàn)有的智能合約平臺不一定能滿足應(yīng)用程序所需的靈活性和可定制性。舉例來說,如果你想搭建的應(yīng)用程序需要自定義的哈希函數(shù),那么把它編寫到以太坊上會消耗很多 gas ,因為這個函數(shù)每調(diào)用一次都需要在以太坊虛擬機(jī)內(nèi)執(zhí)行一次。一種解決方案是提議將這個函數(shù)作為預(yù)編譯合約添加至以太坊協(xié)議內(nèi)。但是,除非這個函數(shù)也廣泛應(yīng)用于其它應(yīng)用程序,否則這項提議大概率是不會通過的。從頭開始編寫一條新的區(qū)塊鏈,你就可以自由靈活地設(shè)計區(qū)塊鏈的核心邏輯,以此滿足你的應(yīng)用程序的需求。
其次是自治問題。在智能合約平臺上構(gòu)建的應(yīng)用程序必須接受平臺的治理并遵守其規(guī)則,從區(qū)塊時間和 gas 定價之類影響用戶體驗的規(guī)則,到回滾之類改變狀態(tài)的決策等等。
但相應(yīng)的,具有自治能力的鏈?zhǔn)チ伺c其它應(yīng)用程序進(jìn)行無縫通信的能力,因為應(yīng)用程序都是搭建在使用不同狀態(tài)機(jī)的區(qū)塊鏈上。Cosmos 和 Polkadot 都致力于解決這個問題——Cosmos 采用的是 Hub-and-Zone(中心-分區(qū)) 模型,Polkadot 則采用的是Relay Chain/Parachain(中繼鏈/平行鏈)模型。
讀者需要對這兩個項目有一定的了解,本文側(cè)重于梳理二者的不同點。
1.局部安全 vs 全局安全
Cosmos 和 Polkadot 采用的安全模型差別極大。簡單來說,Polkadot 的工作流程如下:
平行鏈?zhǔn)?Polkadot 網(wǎng)絡(luò)中的區(qū)塊鏈。這些鏈有自己的狀態(tài)機(jī)、自己的規(guī)則和自己的區(qū)塊生產(chǎn)者,即核驗人(collators)。每條平行鏈本質(zhì)上都是一個獨立的狀態(tài)機(jī),而且可以使用任何類型的特殊功能、共識算法、交易手續(xù)費結(jié)構(gòu)等等。在 Polkadot 網(wǎng)絡(luò)中,所有平行鏈都有同一條母鏈,叫做中繼鏈,里面包含了由所有平行鏈組成的 “全局狀態(tài)”。中繼鏈擁有自己的共識算法,叫做 GRANDPA 共識(祖父共識),可以迅速將平行鏈上的區(qū)塊確定下來。通過這個模型,Polkadot 的平行鏈實現(xiàn)了 “安全性共享”——如果中繼鏈上有 1000 名驗證者,具有極高的安全性,凡是連接到這條中繼鏈的平行鏈都會受益。這樣一來,平行鏈即能擁有自己的狀態(tài)機(jī)并自定義規(guī)則,又能與成百上千條平行鏈一起共享母鏈的安全性。
這種模型的罩門在于由中繼鏈上的驗證者來驗證平行鏈上的狀態(tài)改變。例如,驗證者可能會出于某種原因一直拒絕某條鏈上的核驗人提議的區(qū)塊,而且這條中繼鏈上的區(qū)塊永遠(yuǎn)無法被添加進(jìn)全局狀態(tài)。為了盡量避免這種情況,Polkadot 對驗證者進(jìn)行混洗,讓他們隨機(jī)驗證平行鏈,降低同一位驗證者始終驗證同一條平行鏈的概率。Polkadot 還另設(shè)有一類被稱為 Fishermen (漁夫)的驗證者,他們會不斷查驗驗證者是否存在惡意行為。
Cosmos 采用了完全不同的網(wǎng)絡(luò)架構(gòu)。
在 Cosmos 網(wǎng)絡(luò)中,每條鏈都是獨立運行的,并設(shè)有自己的安全機(jī)制,而非像 Polkadot 那樣采用 局部/全局 的安全性模型。每條鏈都有自己的共識機(jī)制,而且由單獨的驗證者來負(fù)責(zé)保護(hù)這條鏈的安全性。Cosmos 網(wǎng)絡(luò)使用中心-分區(qū)模型來實現(xiàn)互操作性,每個分區(qū)(獨立的鏈)都可以通過中心(同樣是一條獨立的鏈)向其它分區(qū) “發(fā)送代幣”。這個協(xié)議被稱為 IBC (跨鏈通信),是鏈與鏈之間通過發(fā)送消息實現(xiàn)代幣轉(zhuǎn)賬的協(xié)議。IBC 協(xié)議尚在開發(fā)之中,最開始先支持代幣轉(zhuǎn)賬,最終會支持各類消息的跨鏈傳遞。
相比于 Polkadot 的架構(gòu)而言,Cosmos 的架構(gòu)最大的不同之處在于,每個分區(qū)的狀態(tài)僅由各自的驗證者保護(hù)。一個分區(qū)想要獲得很強(qiáng)的安全性,就需要建立自己的驗證者集,這對于小型應(yīng)用程序來說會比較困難。不過,對于那些想要獲得更多控制權(quán)的應(yīng)用程序來說,這是個很大的亮點。例如,幣安最開始就是用自己的節(jié)點來充當(dāng)幣安鏈的驗證者,來促進(jìn)去中心化交易所的持續(xù)運行。這樣一來,幣安在測試幣安鏈并增加新功能的時候就有了充分的控制權(quán)。我覺得幣安不太可能放棄決定哪些交易可以上鏈的權(quán)力,但若要在以太坊或 Polkadot 平臺上開發(fā),就不能不放棄這樣的權(quán)力。正因如此,我認(rèn)為 Telegram、Facebook 和 Kakao 這類公司會選擇構(gòu)建自己的區(qū)塊鏈并掌握其控制權(quán),未來也不太可能與別的鏈通信。
2. 治理和參與
Polkadot 和 Cosmos 之間的第二個主要差別在于治理和參與。在 Polkadot 網(wǎng)絡(luò)中,只有一條中繼鏈和一些與這條中繼鏈共享驗證者的平行鏈。根據(jù)目前的估算,平行鏈的數(shù)量上限為 100 條,不過未來有可能減少或增加。Polkadot 網(wǎng)絡(luò)通過拍賣機(jī)制來競拍平行鏈的使用權(quán)——出價最高的人需要在 PoS 系統(tǒng)中鎖定一定數(shù)量的 DOT (Polkadot 上的原生貨幣),才可以在一定時間段內(nèi)擁有所拍得平行鏈的使用權(quán)。這意味著要想使用 Polkadot 上的平行鏈,需要購買并鎖定大量 DOT ,直到不想再使用這條平行鏈為止。
Cosmos 網(wǎng)絡(luò)沒有設(shè)置固定的參與規(guī)則——任何人都可以創(chuàng)建中心或分區(qū)。中心就是具有自治能力的區(qū)塊鏈,專門用來連接其它區(qū)塊鏈。這里有兩個例子,一個是 Cosmos Hub,最近已由 Tendermint 團(tuán)隊上線;另一個是 Iris Hub,旨在連接主要運行于中國或其它亞洲國家的區(qū)塊鏈 。這種中心-分區(qū)模型提高了跨鏈通信的效率,因為分區(qū)鏈只需要連接到中心,無需連接到其他每條鏈上。
由于參與規(guī)則不同,這兩個網(wǎng)絡(luò)在治理流程上也存在差異。在 Polkadot 網(wǎng)絡(luò)中,治理決策取決于投票者所質(zhì)押的 DOT 數(shù)量。關(guān)于鏈上投票會有一套正式機(jī)制,不過尚未最終確定下來,點擊此處可了解最新進(jìn)展。除了采取以質(zhì)押量決定投票權(quán)重的機(jī)制之外,Polkadot 還組建了一個委員會來代表不活躍的權(quán)益持有者。委員會最開始由 6 人組成,每兩周增加 1 人,直到滿 24 人為止。每位委員會成員均通過贊成投票的方式選出。治理流程的具體細(xì)節(jié)尚未敲定,也就是說有很多方法可以改變中繼鏈的參數(shù),如出塊時間、區(qū)塊獎勵等,以及平行鏈的參與規(guī)則。例如,Polkadot 的治理流程可以改變平行鏈?zhǔn)褂脵?quán)的競拍機(jī)制或所需的 DOT 數(shù)量。有一種常見的誤解是 DOT 持有者可以通過投票隨意棄用某條平行鏈。實際上,DOT 持有者只能改變參與流程。也就是說一旦競拍下了某條平行鏈,在整個租期之內(nèi)都享有這條鏈的使用權(quán)。
另一方面,Cosmos 網(wǎng)絡(luò)不存在單一的 “治理”流程。每個中心和分區(qū)都有自己的治理流程,因此沒有一套應(yīng)用于整個系統(tǒng)內(nèi)所有鏈的核心規(guī)則。我們所說的“Cosmos 治理”指的都是 Cosmos Hub 的治理,即由 Tendermint 團(tuán)隊上線的那條鏈。Cosmos Hub 的規(guī)則是,任何人都可以發(fā)送一個文本提議,由 ATOM 持有者進(jìn)行投票表決,ATOM 的質(zhì)押量決定了投票權(quán)重。想知道提議長什么樣子,這里有個例子。如果你想深入了解治理流程的話,可以閱讀一下 Chorus One 發(fā)布的這篇帖子,是了解 Cosmos Hub 治理機(jī)制的入門材料。
3.跨鏈通信
Polkadot 和 Cosmos 之間的另一個差別是跨鏈通信協(xié)議及其設(shè)計目標(biāo)。Polkadot 旨在實現(xiàn)平行鏈之間任意的消息傳遞。也就是說,平行鏈 A 可以調(diào)用平行鏈 B 中的智能合約,實現(xiàn)與平行鏈 B 之間的代幣轉(zhuǎn)賬或是其他類型的通信。Cosmos 則聚焦于跨鏈資產(chǎn)轉(zhuǎn)移,其協(xié)議較為簡單。目前,這兩種通信協(xié)議仍待完善細(xì)則,而且尚未構(gòu)建完成??梢圆榭?IBC(跨鏈通信)和 ICMP (平行鏈之間的跨鏈通信)這兩種協(xié)議的細(xì)則。
跨鏈通信所面臨的最大挑戰(zhàn)不是如何將一條鏈上的數(shù)據(jù)在另一條鏈上表示出來,而是如何處理鏈分叉和鏈重組這樣的情況。這是 Cosmos 和 Polkadot 在構(gòu)架設(shè)計上最大的差異。
為了確保跨鏈通信的安全性,Polkadot 采用了兩種不同的機(jī)制。首先是安全性共享機(jī)制,降低了信息交換的難度。 共享安全性的另一個好處是所有平行鏈都位于同一個安全層級,因此每條鏈可以彼此信任。為便于理解,我們以以太坊(安全性較高)和 Verge(安全性較低)的交互操作為例。若想在 Verge 鏈上表示以太坊,我們可以鎖定一些以太坊,然后在 Verge 鏈上生成 ETH-XVG 代幣。然而,由于 Verge 鏈的安全性較低,攻擊者可能會向 Verge 鏈發(fā)動 51% 攻擊,并向以太坊區(qū)塊鏈發(fā)送雙花交易,就可以取回比實際擁有數(shù)量更多的以太幣。因此,在互相發(fā)送消息的時候,安全性較高的鏈很難信任安全性較低的鏈。如果是在安全層級各不相同的鏈之間互傳消息,情況就會變得更加復(fù)雜。
從理論上來說,共享安全性是一種保障跨鏈通信的良好方式。前提是,這種協(xié)議要確保能夠經(jīng)常對驗證者進(jìn)行混洗,再隨機(jī)分配到各條平行鏈上。這就會造成經(jīng)典的 “數(shù)據(jù)可用性問題”,即每次驗證者被分配到新的平行鏈上,就需要下載新鏈的狀態(tài)。這是目前區(qū)塊鏈領(lǐng)域最大的難題之一,Polkadot 能否解決尚未可知。
其次,Polkadot 引入了 Fisherman(漁夫)的概念,也就是 Polkadot 網(wǎng)絡(luò)上的 “賞金獵人”,專門監(jiān)視平行鏈上的惡意行為。從某種意義上來說,這是抵御惡意行為的“第二道防線”。如果某條平行鏈的驗證者將一個無效塊上鏈,F(xiàn)isherman 發(fā)現(xiàn)后可以向中繼鏈提交證明,將包括所有平行鏈在內(nèi)的整個 Polkadot 網(wǎng)絡(luò)的狀態(tài)進(jìn)行回滾。在跨鏈通信期間,最令我們擔(dān)心的莫過于一條鏈在重組,另一條鏈卻運行如常。Polkadot 就避免了這個問題,一旦發(fā)現(xiàn)無效塊上鏈,整個網(wǎng)絡(luò)都會回滾。
Cosmos 采用了完全不同的跨鏈通信方式。因為每條鏈上都有自己的驗證者,所以很有可能會出現(xiàn)分區(qū)中的驗證者串謀的情況。也就是說,如果有兩個分區(qū)需要通信,A 分區(qū)需要必須信任 Cosmos Hub(通信樞紐)以及 B 分區(qū)中的驗證者。從理論上來說,A 分區(qū)的人在決定向 B 分區(qū)發(fā)送信息之前,需要調(diào)查一下 B 分區(qū)的驗證者。不過我覺得實際情況沒那么糟糕。 Polychain Labs 或 Zaki Manian 的 iqlusion 等知名驗證者節(jié)點可能會驗證多條鏈,逐漸建立起良好的聲譽(yù)。也就是說,當(dāng) A 分區(qū)的人看到 B 分區(qū)是由 Polychain Labs 和 iqlusion 驗證的,可能會因此決定信任 B 分區(qū)。
然而,即使一條鏈得到了人們的信任,也有可能被懷有惡意的攻擊者控制,出現(xiàn)各種問題。有一段對話中提到了一個很好的例子:
假設(shè)上圖中的小紅點代表一種名為 ETM 的代幣,即 Ethermint 分區(qū)的原生代幣。A、B、C 三個分區(qū)的用戶想要使用 ETM 來運行各自分區(qū)內(nèi)的一些應(yīng)用程序,而且他們都信任 Ethermint 分區(qū),因此通過跨鏈通信在各自的分區(qū)內(nèi)接受了一些 ETM ?,F(xiàn)在假設(shè) Ethermint 分區(qū)的驗證者串謀發(fā)動雙花攻擊,任意轉(zhuǎn)移 ETM 代幣。這也會對剩余網(wǎng)絡(luò)造成影響,因為 ETM 代幣也存在于其他分區(qū)中。不過受波及的只有 Ethermint 或其他分區(qū)中的 ETM 代幣持有者。Ethermint 分區(qū)中的惡意驗證者只能毀掉自己的分區(qū),破壞不了其他分區(qū)。這就是 Cosmos 架構(gòu)的目標(biāo)——確保惡意行為無法影響整個網(wǎng)絡(luò)。
Polkadot 則不同。如果中繼鏈(全局狀態(tài))上發(fā)生了無效狀態(tài)更新,又沒被 Fisherman 發(fā)現(xiàn)的話,Polkadot 網(wǎng)絡(luò)中的每條平行鏈都會受到影響。平行鏈不能被看作是完全不同的東西,畢竟它們都共享同一個全局狀態(tài)。
4.共識算法
Polkadot 中繼鏈采用的是 GRANDPA 共識算法。這個算法能讓中繼鏈迅速確定來自所有平行鏈的區(qū)塊,并且容納大量驗證者(1000 名以上)。簡單來說,這是因為并非所有驗證者都需要對每一個區(qū)塊進(jìn)行投票——他們可以只需為自己認(rèn)為有效的某個區(qū)塊投票,相當(dāng)于這個區(qū)塊之前的所有區(qū)塊也都得到了認(rèn)可。通過這種方式,GRANDPA 算法可以找出一組得票數(shù)最多的區(qū)塊,并將這組區(qū)塊確定了下來。該算法仍處于開發(fā)之中,尚不知實際會如何執(zhí)行。
平行鏈可以采用不同的共識算法達(dá)成局部共識。Polkadot 提供一個軟件開發(fā)工具包(Substrate),其中包括 GRANDPA、Rhododendron 和 Aurand 三種開箱即用的共識算法。今后可能會有更多算法被加入 Substrate ,皆可應(yīng)用于 Polkadot 網(wǎng)絡(luò)。
在 Cosmos 網(wǎng)絡(luò)中,每條鏈可以選用的共識算法有很多,只要是符合 ABCI 規(guī)范的共識算法即可。 ABCI 規(guī)范旨在實現(xiàn)跨鏈通信的標(biāo)準(zhǔn)化。目前只有 Tendermint 算法符合這個規(guī)范,還有另一些團(tuán)隊也在努力開發(fā)符合該規(guī)范的其他共識算法。從更抽象的層面上來看,Tendermint 算法的原理是讓每位驗證者都能互相通信,共同決定一個區(qū)塊能否上鏈,這樣就能實現(xiàn)單一區(qū)塊層面上的確定性。該算法的速度很快,而且通過了 200 名驗證者的壓力測試,在 Game of Stakes(權(quán)益爭奪賽)中的出塊時間為 6 秒。Cosmos 團(tuán)隊也提供了一個軟件開發(fā)工具包,里面包含了開箱即用的 Tendermint 算法。這篇文章很好地介紹了共識算法,以及 Tendermint 算法的功能。
Tendermint 算法最大的缺點是驗證者之間的通信成本高很高。也就是說,雖然驗證者人數(shù)在 200 左右的時候,算法的運行速度很快,一旦人數(shù)漲到了 2000 ,速度就會慢得多。另一方面需要權(quán)衡的是異步環(huán)境中的安全性。也就是說,在出現(xiàn)網(wǎng)絡(luò)分區(qū)之時,不會出現(xiàn)兩個不同的交易歷史最終合并成一個(而另一個交易歷史被拋棄)的情況,而是整個網(wǎng)絡(luò)都將停止運行。這點非常重要,一旦一筆交易得到了“最終確認(rèn)”,即使是在最差的網(wǎng)絡(luò)環(huán)境下也不會被撤銷。
我的個人觀點是,基于共識算法來比較這兩個項目沒什么長遠(yuǎn)意義。這兩個項目的構(gòu)架未來都將接受不同的共識算法。如今的絕大多數(shù)應(yīng)用不管使用的是 Tendermint 算法還是 Polkadot 的某個共識算法都可以良好運行。
5.Substrate vs Cosmos SDK
Polkadot 和 Cosmos 都提供軟件開發(fā)工具包,分別叫作 Substrate 和 Cosmos SDK 。二者的目的都是為了便于開發(fā)者搭建自己的區(qū)塊鏈,其中包括各種開箱即用的模塊,例如治理模塊(投票系統(tǒng))、質(zhì)押模塊和認(rèn)證模塊等。這兩個工具包最主要的區(qū)別在于,Cosmos SDK 僅支持 Go 語言,而 Substrate 支持任何可編譯為 WASM (Web Assembly) 的語言,給予了開發(fā)者更多靈活性。
這兩個工具包都是構(gòu)建區(qū)塊鏈的全新框架,未來幾年還將新增更多功能。關(guān)于這兩個工具包的深度剖析以及使用這兩個工具包開發(fā)應(yīng)用程序的詳細(xì)體驗需要另外寫一篇文章了。如果你感興趣的話,請在推特上給我 @juliankoh 留言。
結(jié)論
雖然這篇文章篇幅很長,寫的也很詳細(xì),但是依然有所疏漏。Cosmos 和 Polkadot 之間的不同點很難把握,可能還有很多細(xì)節(jié)我沒有捕捉到。要全方位了解這兩個項目絕非易事,畢竟項目文件隨時都可能改動。這兩個項目尚在起步階段,未來一年將得到極大的發(fā)展——我在上文中提到的幾個點可能很快就不成立了??偠灾?,我認(rèn)為 Polkadot 相比 Cosmos 主要有以下幾個優(yōu)勢:
1. 應(yīng)用程序開發(fā)者不需要自己維護(hù)安全性
2. 共享安全性模型下的跨鏈通信更容易解決數(shù)據(jù)可用性問題
3. Substrate(在 WASM、更多共識算法和開箱即用模塊方面)表現(xiàn)出很大的野心
4. 相比跨平行鏈的合約調(diào)用更側(cè)重于不限類型的信息傳遞(這一用例目前尚不明確)
5. 1.0 版本的開發(fā)者似乎多一些
反過來,Cosmos 相比 Polkadot 主要有以下幾個優(yōu)勢:
1. Cosmos 已經(jīng)上線了,Polkadot 還沒上線
2. Polkadot 的平行鏈參與流程限制性更強(qiáng),而且成本更高
3. 更能滿足特定項目(如幣安)對自定義的需求
4. 平行鏈上驗證者的惡意行為會波及整個網(wǎng)絡(luò)。在 Cosmos 網(wǎng)絡(luò)中,惡意行為只能破壞個別分區(qū)和資產(chǎn)
5. 已經(jīng)有很多項目在使用 Cosmos SDK 了
6. 重點關(guān)注如何降低資產(chǎn)轉(zhuǎn)移的難度。目前已經(jīng)有經(jīng)過驗證的用例。