Cosmos上線主網了,但是“為什麼需要跨鏈”依然有待探尋
橙皮书
2019-03-14 11:00
本文约11218字,阅读全文需要约45分钟
從2014年到現在,轉眼4年過去了,Cosmos終於上了主網。

編者按:本文來自橙皮書編者按:本文來自

橙皮書

編者按:本文來自

橙皮書

編者按:本文來自

橙皮書

(ID:chengpishu),作者:orangefans,Odaily經授權轉載。

寫在前面:

Cosmos上線了。

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

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

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

一級標題

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

一級標題

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

一級標題

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

cosmos的起源:tendermint

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

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

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

cosmos的起源:tendermint

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

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

  • cosmos——準確的說,是cosmos裡的tendermint ——就這樣誕生了。

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

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

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

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

cosmos團隊認為可以這樣劃分:

網絡層:用來確保,在一個點對點的網絡裡,每個節點都能接收和傳輸一筆交易。

  • 共識層:用來確保每個節點選出同一筆交易,這個交易將被允許對節點的狀態進行修改。在比特幣裡面,所謂“狀態”就是一系列賬戶的餘額(雖然是utxo模型,但為了簡化理解,我們可以這樣認為),礦工們就一筆交易達成共識,如果有效,這筆交易就會修改所有賬戶的餘額。

  • 應用層:用來確保交易的處理。所謂“交易的處理”指的是:輸入一筆交易和一個狀態,這個應用就會返回一個新的狀態。在以太坊上,應用層其實就是所謂的evm 虛擬機。所有的交易進入虛擬機,虛擬機會根據調用這筆交易的智能合約的指示來修改狀態。


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

tendermint core

tendermint包含兩部分的東西:

正文

第二部分叫ABCI協議,Application Blockchain Interface。這部分是tendermint core 引擎和上面開發者自定義的應用層之間的接口。通過這個接口,應用層可以和底下的共識層和網絡層進行通信對話。 ABCI協議的特點,是讓一筆交易可以被不同編程語言和任何編程環境下的應用處理。正文

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

正文

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

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

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

正文

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

正文

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

圖片描述

流程圖

流程圖

圖片描述

正文

正文

正文

  • 正文

  • 正文


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

  • 正文

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

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

  • 在節點間共享區塊的信息,交換一筆筆交易;


Cosmos SDK

建立一個權威的、不可被篡改的交易記錄(也就是一條鏈)

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

維護UTXO數據庫

防止出現“花費不存在的交易”

跨鏈

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

跨鏈

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

跨鏈

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

跨鏈 https://github.com/cosmos/cosmos-sdk/tree/master/docs/spec/ibc

我們已經了解了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更詳細的定義可以查看這裡:

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

區塊鍊網絡

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

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

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

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

正文

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

正文

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

正文

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

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

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

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

小結

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

小結

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

可擴展性

正文

  • 可擴展性

  • 正文


可擴展性

正文

可擴展性

cosmos在可擴展性上的提升分為兩個方面:

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

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

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

橙皮書:如果用簡單的一段話來介紹cosmos是什麼,你認為cosmos不同點主要在哪裡?


jaetendermint核心開發人員Christopher Goes

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

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

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

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

:的確很難。但我覺得這裡面有一種類似於人類本能的東西存在,所謂人的“自舉”能力,傾向於通過自己的努力獲得成功。任何時候人們感覺主流的鏈不能滿足自己的需求,這背後就會有一些潛在的價值,一旦你有一個社區,有一條自我激勵(self-incentive)的鏈,這些價值就會長大。我覺得自始自終會存在兩種力量,這兩股力不停地互相push:一種是朝著中心化的、集群的方向,另一種是人們想要某種可替代性,或者第二選擇。


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

  • https://blog.cosmos.network/understanding-the-value-proposition-of-cosmos-ecaef63350d | Understanding the value proposition of Cosmos – Cosmos Blog

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

  • cosmos研究員sunny aggarwal

  • 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

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

  • 橙皮書:未來cosmos會遇到哪些挑戰?

  • https://cosmos.network/docs/sdk/core/intro.html


橙皮书
作者文库