對話Cosmos:未來是所有人都用一條公鏈,還是每個人都有自己的鏈?
橙皮书
2018-10-13 06:05
本文约10137字,阅读全文需要约41分钟
任何時候人們感覺主流的鏈不能滿足自己的需求,這背後就會有一些潛在的價值,一旦你有一個社區,有一條自我激勵(self-incentive)的鏈,這些價值就會長大。

本文來自:橙皮書(ID:chengpishu),作者:orangefans,經授權轉發。


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

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

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

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


cosmos的起源:tendermint

本文來自:

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

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

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

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

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

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

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

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

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

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


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

橙皮書(ID:chengpishu)

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

cosmos的起源:tendermint

tendermint包含兩部分的東西:

  • tendermint包含兩部分的東西:


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

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

tendermint core

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

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

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

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

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

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

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

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

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

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

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

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

tendermint包含兩部分的東西:

流程圖

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

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

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

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

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

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


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

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

  • 維護UTXO數據庫

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

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


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

Cosmos SDK

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

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

有了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鏈,也是採用類似的機制。

維護UTXO數據庫

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

區塊鍊網絡

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

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

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

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

我們已經了解了cosmos最核心的技術tendermint,也知道了cosmos sdk是乾什麼。接下來我們看看cosmos跨鏈這塊的技術。這也是cosmos未來最重要的想像空間。

zone和hub都是基於tendermint的區塊鏈:hub是跨鏈連接的中心,所有跨鏈的交易都通過hub統一處理;zone則是不同的子鏈。 zone通過ibc協議和hub連接在一起,不同的鏈彼此要進行跨鏈交易,只需要通過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其實就是一個代理鏈,用來追踪原始鏈的狀態。

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

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

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

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

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

小結

二級標題

二級標題

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

可擴展性

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

  • 垂直擴展:垂直方向上的性能提升,一方面體現在捨棄pow的共識算法,採用pos+拜占庭共識算法,另一方面體現在“把應用區塊鏈化”——在一個區塊鏈的虛擬機上開發dapp,這種dapp運行的效率,要比直接在一個內置了這種應用所需的交易類型、數據結構、狀態轉變函數的區塊鏈上運行,效率來得慢。


  • 水平擴展:除了共識算法和區塊鏈本身的垂直擴展,可擴展性還可以依附於cosmos 未來想要提供的多鏈系統。這個未來的構想是這樣:網絡中有一群公共的驗證節點,負責保證一筆交易的安全,然後多條並行鏈分別執行這筆交易的一小部分,從而達到更快的交易處理速度。

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

訪談對話

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

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

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

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

水平擴展:除了共識算法和區塊鏈本身的垂直擴展,可擴展性還可以依附於cosmos 未來想要提供的多鏈系統。這個未來的構想是這樣:網絡中有一群公共的驗證節點,負責保證一筆交易的安全,然後多條並行鏈分別執行這筆交易的一小部分,從而達到更快的交易處理速度。

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

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

二級標題

訪談對話

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

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

二級標題


參考來源:

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

可擴展性

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

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

垂直擴展:垂直方向上的性能提升,一方面體現在捨棄pow的共識算法,採用pos+拜占庭共識算法,另一方面體現在“把應用區塊鏈化”——在一個區塊鏈的虛擬機上開發dapp,這種dapp運行的效率,要比直接在一個內置了這種應用所需的交易類型、數據結構、狀態轉變函數的區塊鏈上運行,效率來得慢。

水平擴展:除了共識算法和區塊鏈本身的垂直擴展,可擴展性還可以依附於cosmos 未來想要提供的多鏈系統。這個未來的構想是這樣:網絡中有一群公共的驗證節點,負責保證一筆交易的安全,然後多條並行鏈分別執行這筆交易的一小部分,從而達到更快的交易處理速度。

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

橙皮书
作者文库