而不同的分割槽可以透過共享的樞紐來互相通訊與互操作。Cosmos 網路上的第一個分割槽就是 Cosmos 樞紐(the Cosmos Hub)。因為所有跨分割槽的代幣轉移都需要透過Cosmos 樞紐進行,所以代幣可以安全、迅速地在分割槽之間轉移。分割槽之間無需具有直接的匯兌流動性,而只需透過 Cosmos 樞紐來追蹤記錄每個分割槽持有的代幣總量,並確保所有分割槽的代幣總量不變。在此,Cosmos 樞紐起到了一種類似中央銀行結算功能的作用。
cosmos這個專案是為了實現跨鏈而生的,在眾多的跨鏈專案中,cosmos有它自己獨特的特點,它把共識和P2P協議抽象出來,形成了一個單獨的Tendermint的層或者叫模組。它採用Tendermint-BFT DPoS的共識引擎來解決跨鏈的共識問題。 眾多的區塊鏈專案,可以透過跨區塊鏈溝通協議(IBC)來實現不同空間(cosmos用空間這個概念來表述不同的區塊鏈)的資訊傳遞。
N多的應用可以透過ABCI這個回撥介面協議來實現與Tendermint的互動。在他們的官網上實現了一個Ethermint,其實就是以太坊去除了PoW的共識再加上Tendermint實現的一個基於PoS的高效的新以太坊鏈。
值得一提的是Cosmos-SDK,它是Cosmos團隊的核心產品,其仍然是採用了ABCI應用的架構(基於Go語言來實現)。如果使用這個SDK來開發一條自己的鏈,就不必過於糾結於鏈的底層的帳戶體系,共識等技術細節,只需要關心自己的區塊鏈的應用部分,而且在這個SDK中,還開放了一些開發的API,可以透過這些API來實現一些具體的基礎實現,打造個性的區塊鏈。
這也意味著,Cosmos-sdk是一個區塊鏈開發的框架體系,透過Cosmos Hub接插任意的區塊鏈,從理論上講,萬鏈併發不是幻想。cosmos的最終想法是透過cosmos SDK來實現一套完整的生態,但是正如波卡鏈和plasma一樣,cosmos的進度確實是讓人感到有些慢。很多的技術和概念可能會在未來不斷變化。所以最終結果如何,還得走著瞧。
二、cosmos的整體結構
1、網路和共識(Tendermint)
就如上圖直觀的表示一樣,cosmos透過Tendermint實現了一個通用層,利用這個通用層,可以實現不同的應用的接插隔離。
2、cosmos中心(Hub)
所謂中心,就是cosmos Hub,Cosmos網路中第一個公共區塊鏈,透過Tendermint拜占庭共識演算法執行。Cosmos中心透過ABCI來連線其他區塊鏈(空間)。中心可以控制各個空間裡代幣。保證代幣可以安全快速地從一個空間傳遞到另一個空間,即進行資產的跨鏈交易。
Cosmos中心負責管理各個獨立區塊鏈(即“空間”,或者“碎片”)。中心上的空間會源源不斷地提交最新區塊,這一點可以讓中心跟上每個空間狀態的變化。
Cosmos中心的驗證人與委託人可以對提案進行投票,從而自動改變預先設定好的系統引數(比如區塊容量限制),協調更新,並對人們看得懂的章程進行修訂投票,從而管理Cosmos中心。這個章程允許權益相關者聚集到一起,來解決盜竊及漏洞等相關問題(比如The DAO事件),並快速得出明確的解決方案。
3、空間(Zones)
空間,也就是各個獨立的區塊鏈,連線到cosmos中心後,它們就成為了cosmos的一個空間。每個空間也會和中心的狀態保持一致。資訊可以從一個空間傳送到另外一個空間,透過默克爾證明(Merkle-proof)來表明資訊已經被傳送或接收。這種機制叫做“區塊鏈間通訊”,簡稱為“IBC”機制。
4、跨鏈通訊協議(IBC)
IBC是中心與空間之前通訊的方法。假設現在有三個區塊鏈,分別是“空間1”、“空間2”以及“中心”,如果想要“空間1”生成一個訊息包,透過“中心”傳送給“空間2”。為了讓訊息包從一個區塊鏈轉移到另一個區塊鏈,需要在接收方區塊鏈上釋出一個證明,來明確傳送方已經發起了一個訊息包到指定地點。接收方要驗證的這個證明,必須和傳送方區塊頭保持一致。這種機制就類似與側鏈採用的機制,它需要兩個相互作用的鏈,透過雙向傳送存在證明資料元(交易),來“知曉”另一方的情況。
IBC協議可以自然定義為兩種交易的使用:一種是IBCBlockCommitTx 交易,這種交易可以讓區塊鏈向任何觀察員證明其最新區塊雜湊值;另一種是IBCPacketTx 交易,這種交易則可以證明某個訊息包確實由傳送者的應用程式,透過默克爾證明機制(Merkle-proof)傳送到了最新區塊的雜湊值上。
透過將IBC機制分裂成兩個單獨的交易,即IBCBlockCommitTx交易與IBCPacketTx交易,可以讓接收鏈的本地費用市場機制,來決定承認哪個訊息包,與此同時還能確保傳送方的完全自由,讓其自行決定能夠傳出的訊息包數量。
三、專案分佈
cosmos可以分成cosmos(cosmos-SDK)和Tendermint兩部分,它們在github上也是分成兩個專案的。
1、cosmos-SDK部分
看一下檔案:
baseapp: 基本ABCI應用程式定義模板,以便Cosmos-SDK應用程式可以與底層的Tendermint節點通訊。
client:客戶端 CLI和REST伺服器工具,用於與SDK應用程式互動
examples: 如何構建獨立的應用程式的示例。
server: 執行Tendermint上SDK應用程式的完整節點伺服器。
store: SDK的資料庫-MyKLE多儲存支援多種型別的Melkey金鑰值儲存。
types: SDK應用程式中常見的型別。
x: 對核心的擴充套件,其中定義了所有訊息和處理程式。有點神秘的味道。
2、Tendermint部分
程式碼目錄:
blockchain:Tendermint鏈結構的規則驗證和相關資料結構。
state:狀態管理跟蹤,包括簽名摘要以及最生要的默克爾證明等。
consensus:共識部分,主要是基於拜占庭BFT的DPOS演算法。
mempool: 驗證完成的交易的儲存池。
networks:本地和遠端網路服務。
node:區塊節點及相關資料結構。類似於以太坊,抽象了一層。
lite:輕節點,用來驗證頭。
p2p:網路層,用於鏈的發現和治理。
proxy:代理層,用於交易等代理連線驗證共識等。
evidence:儲存存證相關。
rpc:遠端通訊介面。
types:基本的資料型別定義。
四、總結
Tendermint和波卡鏈的substrate類似,都是抽象出來用來處理跨鏈的一個模組。只不過一個傾向於中心接入,一個傾向於中繼處理,異曲同工,達到的目的沒有什麼區別。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news