原文標題:《Cosmos 上線主網了,但是「爲什麼需要跨鏈」依然有待探尋》

寫在前面

Cosmos 上線了。

回想了一下,上次和創始人 Jae 交流還是去年 10 月份。記得那時在採訪的末尾,筆者曾問,Cosmos 前面還有什麼困難嗎?Jae 想了想,掰着手指頭數還需要做哪些組件,數完發現,這些好像基本都快做完了,於是他擡頭笑了一下,說:it is been a long way。

是啊。從 2014 年到現在,轉眼 4 年過去了,Cosmos 終於上了主網。

我很喜歡 Jae 聊天時候的真誠。10 月份寫完那篇採訪文章後,我印象最深的是,Jae 從心底相信這個世界始終會存在兩種力量,一種是朝着中心化的、集羣的方向(比如出現一條大一統的公鏈),另一種是人們想要某種可替代性,或者第二選擇(比如自己可以很輕易的發一條鏈)。這兩股力將會不停地互相 push,而 Jae 選擇了不那麼明瞭的那一邊。

這個世界需要不同的人試驗各種不同的理念。Jae 希望讓每個應用、每個組織、甚至是每個人,都能擁有一條鏈。我們甚至可以不要 Cosmos 的主網,只是採用他們的工具,自己做一個 hub,然後找周圍一些朋友來做 zone,這樣一個小羣體就可以擁有一個小的區塊鏈組網,這個組網甚至不需要跟外界任何的公鏈掛鉤,它完全在內部運行——我覺得這樣的概念很有趣,像是讓一小羣人打造一個只和自己有關的局域網,一個屬於自己的小島。同時,這個小島如果需要的話,也能和外界互聯互通。

但問題是,我不確定這樣的理念是否能得到人們真實需求的支撐。也許礦工和驗證節點這些資源可以通過共享的方式,一定程度上解決資源浪費的問題,但自己運營一條鏈的成本和難度依然是不低的。也許我們以後大概率不會擁有太多的 layer 1,還是會出現一個大一統的公鏈,它的性能和架構足夠安全穩固,人們在穩固的東西上面再繼續搭建新的應用,但現在這樣一個公鏈還沒有出現,也許還要很久,而我們目前其實只有兩個真正非常 solid 的價值池:比特幣和以太坊。

拋開這兩個價值池,把其他那些並不穩固的網絡連接起來,真的有意義嗎?人們需要這麼做嗎?哪怕是比特幣和以太坊,我也想象不出它們互相連接的場景是什麼,爲什麼需要連接。如果只是涉及到代幣價值的交換,這個問題不是已經部分被交易所解決了嗎?如果是針對去中心化交易所的代幣交換,是不是應該有更簡潔、針對性更強的解決方案,或者換到其他層上解決?

我喜歡 Cosmos 的嘗試,但跨鏈本身的技術難度,往往取代了一些其他問題的討論,以至於我們看到的討論,似乎都以「默認 layer1 跨鏈的必要性」爲前提了。但關於跨鏈的場景問題,我確實始終沒想明白。我希望能聽到一些其他的看法,解決這些困惑。如果你有更好的理解,歡迎評論一起交流。

對於那些並不瞭解 Cosmos 的朋友,作爲弄懂 Cosmos 原理的介紹,筆者去年 10 月份寫的這篇文章依然值得一讀。我們一直希望生產那些擁有更長生命週期的內容,所以下面這篇文章,決定再發一遍。

對話 Cosmos:未來是所有人都用一條公鏈,還是每個人都有自己的鏈?

Cosmos 是一個很有意思的項目。如果要總結它的思想的話,這個 2014 年成立的項目,初衷是讓每個人都可以輕鬆地擁有一條屬於自己的鏈。

在大部分人忙着打造公鏈、一統江湖的時候,Cosmos 的創始人 jae 有一些自己獨特的想法。他相信在大一統的公鏈之外,人們仍然需要有可替代的選擇,總有一部分人希望擁有一條屬於自己的鏈。甚至從其他角度來說,許多去中心化的應用本身也應該是一條獨立的鏈——比如,加密貓應該是一條鏈,fomo3d 也應該是一條鏈,而不是公鏈上的應用。

爲此,Cosmos 團隊創造了許多工具,讓開發者可以像開發 dapp 那樣輕鬆開發自己的鏈。最終,當許多「小而美」、「定製化」、「專業化」、「針對性特別強」的鏈,像無數江河流海湧現出來時,Cosmos 會通過跨鏈協議和更大的網絡生態系統,爲這些不同的鏈提供互相連接的能力。cosmos 的目標是讓這些江河流海匯聚成區塊鏈的大海洋。

這篇文章希望用通俗易懂的語言介紹 Cosmos 到底是幹什麼的,它有趣的地方在哪,介紹完這些基礎信息後,文章末尾還有一部分筆者和 Cosmos 創始人 jae 及其核心技術團隊對話的內容,從中也許你能更深刻地理解 Cosmos 的理念。

Cosmos 的起源:Tendermint

在技術發展早期,人們對如何開發一個去中心化的公共賬本並不會有太多的認識和思考。比特幣和以太坊就像一臺整體焊死的電腦,上面所有的元件都集成在一起,其中的邏輯錯綜複雜,沒有任何分層的技術棧可言。你很難對它進行改動,裏面的零件也沒法拔出來做升級。當人們對公鏈有各種各樣完全不同的想法之後,很多人開始想開發自己的鏈。這個時候你會發現,即使比特幣和以太坊開源了,你也很難進行代碼的複用。除了把比特幣代碼拷過來,改個參數,換個名稱,弄出一個山寨幣之外,做不了太多事情。

在這樣的背景下,有人就想,我能不能做一個工具,讓大家使用這個工具能更好更快的開發自己的鏈呢?就好像組裝電腦一樣,鍵盤、鼠標、顯示器、內存條,這些東西都是現成的、可獨立拆卸的,一個不懂計算機原理的人也能像拼積木一樣,製造各種各樣不同性能的電腦。

Cosmos——準確的說,是 Cosmos 裏的 Tendermint ——就這樣誕生了。

Tendermint 是 Cosmos 裏面最重要的組成部分之一,它也是整個 Cosmos 生態的基礎。要理解 Cosmos,需要先弄懂 Tendermint。

簡單的說,Tendermint 是一個通用的區塊鏈開發框架。你可以藉助這個框架,快速定製開發自己的鏈。

不妨設想一下,如果讓你來設計這樣一套開發工具,你會怎麼設計?很顯然,第一步需要先把所有鏈都要用到的功能抽象出來。就像你要幫助別人製造一臺電腦,需要先搞清電腦都有 cpu、內存、以及顯示器這些東西一樣。

一條鏈的必要組成部分都包括哪些呢?

Cosmos 團隊認爲可以這樣劃分:

  1. 網絡層:用來確保,在一個點對點的網絡裏,每個節點都能接收和傳輸一筆交易。
  2. 共識層:用來確保每個節點選出同一筆交易,這個交易將被允許對節點的狀態進行修改。在比特幣裏面,所謂「狀態」就是一系列賬戶的餘額(雖然是 utxo 模型,但爲了簡化理解,我們可以這樣認爲),礦工們就一筆交易達成共識,如果有效,這筆交易就會修改所有賬戶的餘額。
  3. 應用層:用來確保交易的處理。所謂「交易的處理」指的是:輸入一筆交易和一個狀態,這個應用就會返回一個新的狀態。在以太坊上,應用層其實就是所謂的 evm 虛擬機。所有的交易進入虛擬機,虛擬機會根據調用這筆交易的智能合約的指示來修改狀態。

大一統還是可替代性?Cosmos 堅定不移地選了第二條路

Cosmos 團隊認爲,這個三層結構基本就可以概括一條鏈的所有東西了。同時,大部人想開發自己的鏈,其實都不太關心網絡層和共識層,他們自己想定義的是應用層的東西,因爲這層負責業務邏輯。

所以,Tendermint 的目標就變成了:

打造一個通用的網絡層和共識層,讓大家可以輕鬆在上面搭建自己的應用層,節省很多不必要的開發時間。

Tendermint 包含兩部分的東西:

  • 第一部分叫 Tendermint Core。這部分把共識層和網絡層封裝在了一起,變成一個通用引擎,這個引擎用來確保:交易按照一致性和安全性的原則被複制到各個節點的機器上——也就是說,相同的交易以相同的順序被記錄在鏈上;
  • 第二部分叫 ABCI 協議,Application Blockchain Interface。這部分是 Tendermint Core 引擎和上面開發者自定義的應用層之間的接口。通過這個接口,應用層可以和底下的共識層和網絡層進行通信對話。ABCI 協議的特點,是讓一筆交易可以被不同編程語言和任何編程環境下的應用處理。

接下來,我們詳細看看這兩部分的東西:

Tendermint Core

Tendermint Core 包括網絡層和共識層:網絡層方面使用的是 gossip 協議,這塊不重要,我們重點來看看共識層。

共識方面,Tendermint 使用的是拜占庭共識算法+pos。

拜占庭算法是一類解決共識的算法,它要求網絡裏的驗證節點一輪一輪地進行廣播和投票,最終達成整個網絡的一致性,以此來抵消節點離線、網絡通信延遲、惡意節點搗亂等問題。拜占庭算法需要至少 2/3 的節點是誠實節點,在 Tendermint 裏面,這個 2/3 的節點不是指的節點的數量,而是指的節點所擁有的權益,也就是「錢」的數量——因爲是 pos 機制,這個和我們 [之前介紹過的 algorand 是一樣的。

此外大家都知道,拜占庭共識算法比如 PBFT,是要求驗證節點必須是事先預設的一組固定的節點,但在 Tendermint 裏,驗證節點可以動態變化,只不過這個動態沒法像比特幣 POW 那麼靈活,你想加入就可以加入,想退出就可以退出。每次 Tendermint 增加或者退出一組驗證節點,都需要經過至少 2/3 的節點的投票才能決定。

最後,如果驗證節點太多的話,形成共識的時間是會變慢的。所以,Tendermint 在創世的時候把節點數設定爲 100 個。在這 100 個驗證節點之外,其他的用戶則可以使用輕節點來訪問網絡。根據他們的計劃,這 100 個節點數會按每年 13% 的速度增加,10 年後穩定爲 300 個節點。那麼,100 個節點對去中心化到底有沒有什麼影響?這個問題屬於見仁見智了。Cosmos 認爲是沒問題的,他們的白皮書裏有這樣一組數據:

64 個節點,橫跨 5 個大洲,7 個數據中心,使用商用的雲計算實例,可以提供超高的處理性能,每秒鐘處理上千筆交易,延遲在 1-2 秒之間。而且這種性能是在嚴苛的敵手假設裏也能夠成立的,哪怕系統裏有惡意節點故意投票作弊,也能保證一定的容錯性。

大一統還是可替代性?Cosmos 堅定不移地選了第二條路

可以看到,Tendermint 的好處體現在性能、安全這些方面。除此之外,Tendermint 的另一個優點在於它不會分叉,因爲 pos 拜占庭共識算法都是出塊後就立即達成最終確定性的。

ABCI 協議

有了 Tendermint Core 這個大殺器,你就可以在上面搭建各種各樣的鏈了,不管是公鏈、聯盟鏈還是私有鏈。

之所以能做到這一點,是因爲 Tendermint Core 是不知道上面應用層具體是什麼樣的,它不關心應用層的實現。Tendermint 把許多無關的細節都忽略了,只抽象出關鍵的東西,做成通用的接口。這個接口就叫 abci 協議,用來連接應用層和 Tendermint Core 之間的通信。

大一統還是可替代性?Cosmos 堅定不移地選了第二條路

abci 協議是一個 socket 協議,不管你使用哪一種編程語言、運行在什麼樣的編程環境下,只要你符合這個協議的標準,應用層和 Tendermint Core 就能通信。Cosmos 官方已經實現了一個 abci 協議的版本,名叫 Tendermint Socket Protocol (TSP, or Teaspoon),當然你也可以實現自己的版本。

abci 協議包括幾種不同的消息類型。Tendermint Core 會創建 3 個 ABCI 連接到應用層:一個用於內存池中廣播交易的驗證;一個用於共識引擎運行,用於新的區塊的提議;最後一個用來查詢應用層的狀態。

以太坊的 Solidity ,以及 Java, C++, Python,Go 這些語言都可以用來寫出確定性的區塊鏈交易處理邏輯。需要注意的是,區塊的處理必須是即時確定的,不能是像比特幣 pow 那種概率性確定,否則 Tendermint Core 達不成共識。pos 和 poa (proof of authority)共識算法都是即時確定的。

流程圖

整個 Tendermint 的工作流程(在技術上)可以簡化成下面一張圖來表示

大一統還是可替代性?Cosmos 堅定不移地選了第二條路
高清版點這裏查看:https://github.com/mobfoundry/hackatom/blob/master/tminfo.pdf

我們用一個更具象的例子來看看 abci 協議和應用層的關係,可能會更直觀一點。

比如說,我們想要以 Tendermint 爲基礎實現一個「假的比特幣」:比特幣就是一個記錄虛擬貨幣交易記錄的區塊鏈,網絡中每個節點維護一個經過所有人完全審計的 UTXO 數據庫。

我們需要利用 abci 做一個符合類似定義的系統。那麼 Tendermint Core 主要負責這些事情:

  • 在節點間共享區塊的信息,交換一筆筆交易;
  • 建立一個權威的、不可被篡改的交易記錄(也就是一條鏈)

我們需要編寫的應用層的東西則需要負責:

  • 維護 UTXO 數據庫
  • 驗證交易的密碼學簽名
  • 防止出現「花費不存在的交易」
  • 允許客戶查詢 UTXO 數據庫

Cosmos SDK

好了,我們大概瞭解了 Tendermint 到底是個什麼東西。

可以看到,編寫一個 abci 還是挺麻煩的。爲了進一步方便用戶進行區塊鏈開發,Cosmos 還提供了一個工具叫 Cosmos SDK,這個工具把區塊鏈中的一些通用模塊標準化,這些通用模塊覆蓋了大部分應用層需要具備的功能,比如:staking (抵押機制)、slashing (懲罰機制)、IBC (跨鏈功能),賬戶 accounts、治理、獎勵 & 手續費等。

大一統還是可替代性?Cosmos 堅定不移地選了第二條路

有了 Cosmos SDK,用戶只需要在 SDK 的基礎上實現其他插件模塊,處理一些鏈特有的業務。

Cosmos 團隊自己也利用這套 sdk 實現了一個例子叫 Cosmos Hub,這個例子我們後面會涉及到。

跨鏈

我們已經瞭解了 Cosmos 最核心的技術 Tendermint,也知道了 Cosmos sdk 是幹什麼。接下來我們看看 Cosmos 跨鏈這塊的技術。這也是 Cosmos 未來最重要的想象空間。

當我們沒有很多條鏈的時候,跨鏈這個問題其實是不存在的。但隨着現在公鏈越來越多,跨鏈就成了需要解決的問題。兩條鏈需要彼此進行對話,比特幣和以太坊彼此要進行交易、傳送價值、交換各自的代幣,這個東西怎麼解決呢?

有這麼一個思路:

假設 A 鏈想要給 B 鏈發送 10 個 x token,首先,這 10 個 x token 就會被鎖在 A 鏈上,不能動。然後,這 10 個 x token 被鎖定的密碼學證據從 A 鏈傳輸給 B 鏈,B 鏈跟蹤 A 鏈上的驗證節點,如果這個密碼學證據被至少 2/3 的驗證節點簽名過,那麼這筆跨鏈交易就是有效的,B 鏈上就會產生相應的 10 個
x token。注意,B 鏈上的 10 個 x token 其實並不是真的 x token,因爲 x token 只存在於 A 鏈上,B 鏈上的 x token 只是 A 鏈上的 x token 的代理而已,這個代理 token 需要配合一個證明了這些幣在 A 鏈上確實已經被鎖定了的密碼學證據。當這些 token 從 B 鏈上返回到 A 鏈,也是採用類似的機制。

這套機制抽象出來,就是 Cosmos 在使用的跨鏈通信協議——IBC 協議,Inter-Blockchain
Communication。IBC 就像一座橋,讓不同的鏈可以互相連通。關於 IBC 更詳細的定義可以查看這裏:
https://github.com/cosmos/cosmos-sdk/tree/master/docs/spec/ibc

不過遺憾的是,目前 IBC 協議只支持簡單的價值傳遞,就是跨鏈發送 token,還不支持邏輯、代碼或者其他數據的傳輸。

區塊鏈網絡

有了 IBC 這個跨鏈通信協議,我們如何構造一個互聯互通的區塊鏈網絡?

一種最直接的做法是,讓網絡中的每一條公鏈都和其他不同的公鏈之間建立 IBC 通信協議。這種做法簡單有效,但它有一個大問題:不具備擴展性。假設網絡中有 100 條不同的鏈,他們兩兩互聯就需要建立 4590 個鏈接。一旦鏈的數量增加,建立鏈接的數量也會迅速增加。

那可不可以不要彼此互聯,直接把所有鏈全部串聯起來呢?

這樣如果有 100 條鏈,他們總共只需要建立 99 條鏈接。但採用這種方式會面臨另一個問題:信任成本增高,一筆跨鏈交易出現雙花的風險也將大大增加。爲什麼呢?如果 A 鏈發給 B 鏈的 token 是在 A 鏈上產生的,那麼 B 鏈只需要信任 A 鏈的驗證節點,但如果這個 token 是在 C 鏈上產生的,從 C 傳到 A 再傳到 B,那麼 B 鏈就需要同時信任 A 和 C 的驗證節點,最終這種跨鏈交易的驗證會非常麻煩。

爲了避免上面這兩種類型的問題,Cosmos 採用另一種辦法跨鏈。他們採用一種模塊化的架構來建立整個區塊鏈網絡的連接,這個架構包括兩個組成部分:一個叫 hub,一個叫 zone。

zone 和 hub 都是基於 Tendermint 的區塊鏈:hub 是跨鏈連接的中心,所有跨鏈的交易都通過 hub 統一處理;zone 則是不同的子鏈。zone 通過 ibc 協議和 hub 連接在一起,不同的鏈彼此要進行跨鏈交易,只需要通過 hub 來代理就能完成。

大一統還是可替代性?Cosmos 堅定不移地選了第二條路

Cosmos 團隊實現了第一個官方版的 hub,名叫 Cosmos hub,也就是我們上文提到的利用 Cosmos SDK 打造出來的產品。Cosmos hub 有自己的一套原生代幣叫 atom,zone 上的驗證者需要在 hub 上質押一部分的 atom 代幣,以此來規範自己的行爲。一旦 zone 驗證節點作惡,hub 就會沒收 zone 的代幣,這叫做 slashing 機制。你可以把 hub 簡單理解成整個網絡的中央代幣管理機構,而 zone 則相當於網絡裏的節點。

這種跨鏈的架構,很容易讓人馬上想到另一個問題:所有跨鏈的通信都通過 hub 這個中心代理完成,這樣會不會違背區塊鏈去中心化的初衷?

值得一提的是,雖然跨鏈的確是大量依賴於 Cosmos hub 的,但每個人都可以運行自己的 hub,並不一定需要通過官方的 Cosmos hub。因此一定程度上也能保證跨鏈的去中心化。有點類似於:你可以自己運行一個 hub,然後和幾個要好的朋友自己組成一個局域網,同時局域網和局域網之間又可以通過不同的 hub 連接起來。哪怕連接外網的 hub 癱瘓了,局域網內部的通信也不受影響。

非 Tendermint 的鏈可以互相連接嗎?

到目前爲止,我們有了 Tendermint,有了 Cosmos sdk,可以只關心應用層的業務邏輯,不去管底層的網絡與共識層,快速地開發自己的鏈。除此之外,我們還有 Cosmos hub 和 zone,可以讓這些基於 Tendermint 打造的許多條不同的鏈互相連接在一起,擁有互操作性。

那麼,不基於 Tendermint 的鏈,也可以互聯嗎?

這裏分兩種情況:如果是擁有即時確定性的鏈(比如採用 POS 和 POA 共識),只要適配 IBC 就可以接入 Cosmos 的網絡生態;如果是採用 POW 共識的概率確定性的鏈,那麼情況就要複雜一點。

Cosmos 針對後者的跨鏈需求,在 zone 的基礎上推出了新的組件——Peg-Zone。Peg-Zone 其實就是一個代理鏈,用來追蹤原始鏈的狀態。

Peg-Zone 本身是基於 Tendermint 的鏈,所以它擁有即時確定性,同時適配了 ibc。Peg-Zone 負責跟蹤原始鏈,在代理鏈上保證區塊的確定性。因此 Peg-Zone 需要事先設定一個規則,用這個規則來確認區塊的確定性,比如這個規則可以是:

在當前區塊增加了 100 個新的區塊後,那麼這個當前區塊就是穩定的,可以被視爲確定性得到保證,不會分叉。

我們可以看一個現階段以太坊(還在使用 POW 共識)的例子:

假設要爲以太坊做一個 Peg-Zone,那麼需要先在以太坊上部署一個智能合約。以太坊的用戶要轉 100 個 token 給 Cosmos 的話,就是把 token 轉進這個智能合約裏面。然後智能合約會把這 100 個 token 鎖起來,在當前區塊又增加了 100 個新區塊之後,Peg-Zone 上的代理鏈上就開始釋放 100 個代理 token。

Peg-Zone 上的代理鏈也可以向以太坊的原始鏈發送 token,採用的機制類似。這時候 Peg-Zone 上的 token,在以太坊上就會以一個 ERC20 的代幣形式出現。

不過,Peg-Zone 這種代理鏈的模式也有自己的問題:需要爲每一條接入的鏈做特殊的定製。爲以太坊建一個 Peg-Zone 的代理鏈還是比較容易的,因爲以太坊是基於賬戶類型的,同時它有智能合約。如果要爲比特幣做一個 Peg-Zone 的代理鏈,那就很複雜了——雖然是可行的,但是需要做很多額外的工作。

小結

到這裏我們基本捋清了 Cosmos 整個項目是做什麼的了。

總結來說,Cosmos 希望通過 Cosmos sdk 和 Tendermint 等工具,讓開發者以一種模塊化、標準化、可插拔的方式(這種方式其實也是現代軟件開發積累下來的大量成熟的開發技術經驗),快速降低一條鏈的開發成本。讓每個人都可以輕鬆擁有自己的鏈之後,Cosmos 再通過 IBC 跨鏈協議和 cosmos hub 與 zone 所組成的生態系統,爲這些不同的鏈提供互相連接的能力,最終組成一個大網絡。

Cosmos 認爲,這套理念除了降低區塊鏈的開發成本,讓不同的鏈擁有互操作性之外,還有一個很重要的優點:可擴展性。

可擴展性

Cosmos 在可擴展性上的提升分爲兩個方面:

  • 垂直擴展:垂直方向上的性能提升,一方面體現在捨棄 pow 的共識算法,採用 pos+拜占庭共識算法,另一方面體現在「把應用區塊鏈化」——在一個區塊鏈的虛擬機上開發 dapp,這種 dapp 運行的效率,要比直接在一個內置了這種應用所需的交易類型、數據結構、狀態轉變函數的區塊鏈上運行,效率來得慢。
  • 水平擴展:除了共識算法和區塊鏈本身的垂直擴展,可擴展性還可以依附於 Cosmos 未來想要提供的多鏈系統。這個未來的構想是這樣:網絡中有一羣公共的驗證節點,負責保證一筆交易的安全,然後多條並行鏈分別執行這筆交易的一小部分,從而達到更快的交易處理速度。

Cosmos 認爲,現在大多數開發者傾向於在以太坊上開發智能合約,而不願意開發自己的鏈,主要是因爲開發一條鏈的難度太高了。但隨着 Tendermint 的普及,開發一條鏈的成本會變的像開發一個智能合約一樣簡單。

訪談對話

Cosmos 關於區塊鏈和生態的理解非常有意思。可能會有不少人和筆者一樣,對 Cosmos 堅信「每個人都應該擁有一條鏈」這個理念感到好奇。在此前上海萬向區塊鏈峯會上,筆者恰好有機會和 Cosmos 創始人 jae kwon 及核心技術開發團隊進行訪談,我們着重圍繞這一理念進行了探討,以下是對話節選:

筆者:如果用簡單的一段話來介紹 Cosmos 是什麼,你認爲 Cosmos 不同點主要在哪裏?

Tendermint 核心開發人員 Christopher Goes:隨着區塊鏈的發展,我們看到很多公鏈出現。這些區塊鏈如果想要彼此對話,交換彼此的 token、價值、資產甚至是代碼的話,他們需要有相關的協議進行通信。Cosmos 提出了 ibc 跨鏈協議,用來解決不同鏈之間對話的問題。另一方面,像以太坊這樣的公鏈讓開發者可以開發自己的應用,比如虛擬貓、去中心化交易所等等,這一點非常酷,但是這些應用必須跑在一個通用的虛擬機上,這樣其實會對應用的擴容造成限制。Cosmos 解決了這一問題,採用的辦法是:讓很多應用成爲自己的鏈。應用跑在一條專門爲自己量身定製的鏈上,從而增加擴容的能力,同時藉助 ibc 協議,這些應用化的鏈又能擁有跨鏈的互操作性。

筆者:未來我們會擁有很多條鏈嗎?我感覺類比互聯網的話,我們可能會有不同的網站應用,但在這些網站應用下面,我們可能只會有一個 tcp/ip 協議?

創始人 jae:如果要從這個角度類比的話,ibc 協議可能會變成 tcp/ip 協議。從長遠來看我同意你的觀點,我們可能的確不會擁有很多條鏈。互聯網最早出現也是有很多不同的網站應用,後面出現了大一統,搜索最終出現 google、博客服務只剩下 wordpress、社交網絡大家都用 facebook。可能會有類似的循環出現。但是短期來看,比如最近 10 年,因爲共識算法、編程語言、社區這些方面,每個項目都會有所不同。什麼纔是最好的共識算法、最好的開發語言、實現區塊鏈最好的方法,這些都很難有定論。所以我們可能初期還是需要很多不同的鏈,到了後面很成熟的時期纔會出現一條大公鏈,上面承接不同的應用。儘管如此,我還是相信,即使有這些大公鏈的存在,每個人還是會想要擁有自己的鏈。

筆者:我很好奇爲什麼你會相信人們會有自己的鏈?因爲你要自己維護一條鏈的話,其實是非常困難的?

jae:的確很難。但我覺得這裏面有一種類似於人類本能的東西存在,所謂人的「自舉」能力,傾向於通過自己的努力獲得成功。

任何時候人們感覺主流的鏈不能滿足自己的需求,這背後就會有一些潛在的價值,一旦你有一個社區,有一條自我激勵(self-incentive)的鏈,這些價值就會長大。我覺得自始自終會存在兩種力量,這兩股力不停地互相 push:一種是朝着中心化的、集羣的方向,另一種是人們想要某種可替代性,或者第二選擇。

Cosmos CSO Jim:如果你把 facebook 拆開的話,這裏面就已經需要很多條鏈了。一個區塊鏈版的 facebook,它可能需要一條廣告鏈、一條關係鏈、一條 xx 鏈等等。這些鏈每個只負責做一件事情,上面有特定的應用程序,而 Facebook 則需要對這些鏈統一做優化和適配,控制它們分別運行得多快,控制它們怎麼升級。這就是 Cosmos 一個很具象的應用案例。

Jae:用另一個例子來回答爲什麼人們會需要很多條鏈的話,可以去看看金融領域。如果你去看一些金融系統的話,裏面有很多的案例,銀行出於監管的要求,他們需要掌握很多敏感的數據,對相應的工具也需要有控制權。因此除了通用的公鏈之外,這些領域都需要擁有很多能夠自己掌控的鏈。

Cosmos 研究員 Sunny Aggarwal:我們之前遇到過一個團隊,他們非常信仰一個叫 Local Currency 的理念。這個理念認爲,每個社區都應該擁有一套自己的本地貨幣,用這套貨幣就可以很完美的滿足本地居民的需求,構建本地的金融系統,協調整個社區的組織工作,達到本地社區的「自治」。在這種場景裏,可能每個本地社區就都需要一條屬於自己的鏈了。

筆者:未來 Cosmos 會遇到哪些挑戰?

jae:我們對整個生態系統的安全必須想得非常的深。在模塊化的設計裏怎麼保證一個系統的安全是一個挑戰。所以我們設計了一套多樣化的獨立的存儲,還有一個邏輯控制的組件叫做 keeper,因爲它負責把邏輯藏在數據後面。這些隔離對系統的安全性都是有好處的,因爲這樣你去架構一個應用的時候,你可以很清楚這個應用都是由哪些部分組成的,他們彼此之間如何連接,如果出了問題也可以很容易定位。未來我們可能需要對很多不同的模塊做更多語言的適配,會遇到的挑戰可能會是,如何把這些模塊再優化得更好,比如支持直接在實時的網絡上進行不同模塊的熱插撥,等等。

參考來源:

  • https://blog.cosmos.network/understanding-the-value-proposition-of-cosmos-ecaef63350d | Understanding the value proposition of Cosmos – Cosmos Blog
  • https://zhuanlan.zhihu.com/p/31131214 | Cosmos 互聯鏈通信技術規範【上】
  • https://zhuanlan.zhihu.com/p/43898294 | Cosmos 項目以及 SDK 介紹
  • https://tendermint.com/docs/introduction/introduction.html#abci-overview | What is Tendermint? | Tendermint Core
  • https://blockgeeks.com/guides/what-is-cosmos-blockchain/ | What is Cosmos Blockchain ? Most Comprehensive Guide
  • https://www.itcodemonkey.com/article/4688.html | 深度剖析區塊鏈跨鏈技術 Cosmos(上篇 ) – IT 程序猿
  • https://www.itcodemonkey.com/article/8420.html | 深度剖析區塊鏈跨鏈技術 Cosmos(下篇 ) – IT 程序猿
  • https://cosmos.network/docs/sdk/core/intro.html