【深度知識】COSMOS架構及核心模塊分析

1. 摘要

Cosmos項目有個宏偉的目標顽分,就是在DPOS+BFT的共識引擎的基礎上司志,能夠實現區(qū)塊鏈開發(fā)簡便佃乘,互通互聯凳谦。本文介紹以下內容:
(1)Cosmos架構
(2)Cosmos Hub
(3)Cosmos SDK
(4)IBC協議
(5)PegZone

2.Cosmos架構

Cosmos是Tendermint團隊推出的一個支持跨鏈交互的異構網絡份蝴,它最終的目標是創(chuàng)建一個區(qū)塊鏈互聯網犁功,允許大量自主且易開發(fā)的區(qū)塊鏈互相擴展和交互』榉颍基于Tendermint開發(fā)浸卦,采用的Tendermint共識算法,是一個類似實用拜占庭容錯共識引擎案糙,具有高性能限嫌、一致性、具備拜占庭容錯等特點时捌。Tendermint共識算法參考《【深度知識】Tendermint共識算法原理和框架流程》怒医。
Cosmos網絡由許多獨立的并行區(qū)塊鏈組成,網絡中第一個區(qū)塊鏈是Cosmos Hub奢讨,其他的并行鏈稱為Zone稚叹,通過跨鏈協議(IBC)與Hub進行跨鏈操作。

Cosmos官方網站:https://cosmos.network拿诸。

圖所示是Cosmos 網絡的詳細架構圖扒袖,Cosmos為方便平行鏈開發(fā)提供了基本服務CosmosSDK包括:共識、網絡以及IBC協議等亩码,這樣基于Cosmos SDK開發(fā)的子鏈之間都能夠方便地互相交互季率。此外對于非Cosmos SDK 開發(fā)的區(qū)塊鏈需要使用Peg Zone進行橋接,如圖中的Ethereum描沟。

3.Cosmos Hub

Cosmos上的第一個Hub叫做Cosmos Hub飒泻。Cosmos Hub是一種多資產權益證明加密貨幣網絡,它通過簡單的管理機制來實現網絡的改動與更新吏廉。此外蠢络,Cosmos Hub還可以通過連接其他Zone來實現擴展。 Cosmos網絡的Hub及各個Zone可以通過區(qū)塊鏈間通信(IBC)協議進行溝通迟蜜,這種協議就是針對區(qū)塊鏈的虛擬用戶數據報協議(UDP)或者傳輸控制協議(TCP)刹孔。代幣可以安全快速地從一個Zone傳遞到另一個Zone,兩者之間無需體現匯兌流動性。Zome內部所有代幣的轉移都會通過Cosmos Hub髓霞,它會記錄每個Zone所持有的代幣總量卦睹。這個中心會將每個Zone與其他故障Zone隔離開。因為每個人都將新Zone連接到Cosmos Hub方库,所以個Zone今后也可以兼容新的區(qū)塊鏈技術结序。

4. Cosmos SDK

從Github上可以看出Cosmos主要的代碼是cosmos-sdk,它包含Cosmos Hub的程序代碼纵潦,同時也是一個區(qū)塊鏈開發(fā)框架徐鹤,為其他區(qū)塊鏈開發(fā)者提供一些通用的功能模塊,比如:共識邀层,P2P網絡返敬,IBC,賬戶寥院,治理劲赠,認證等。

不難看出cosmos-sdk其實就是一個ABCI應用秸谢。主要有:

  • baseapp:定義了一個基本ABCI應用的模版凛澎,與Tendermint通信。開發(fā)者也可以根據自己的需求重寫估蹄。
  • 應用程序:包括gaia塑煎、basecoin、democoin臭蚁。其中gaia就是hub主程序最铁,basecoin以及democoin是提供的兩個示例應用。
  • plugins:cosmos-sdk的基本單元刊棕,每個plugin都是baseapp的功能擴展,包含各自的消息和交易處理邏輯待逞。目前SDK已經集成了一些重要的plugin:
    -staking:POS相關的實現甥角,包括:綁定,解綁识樱,通貨膨脹嗤无,費用等操作。
    -ibc:跨鏈協議IBC的實現怜庸,也是Cosmos支持跨鏈的主要插件当犯。
    -governance:治理相關的實現,如提議割疾、投票等嚎卫。
    -auth:定義了一個標準的多資產賬戶結構(BaseAccount),開發(fā)者可以直接嵌入自己的賬戶體系中宏榕。
    -bank:定義資產的轉移拓诸。

4.1)源代碼結構

整個SDK源代碼目錄如下圖所示:

image

4.2)基本數據結構

a)Actor & Context

Actor以及Context定義在context.go代碼中侵佃。

image

Actor定義了某個鏈上某個App的一個賬戶(地址)。

image

Context定義一些基本信息的函數集合:權限查詢奠支,Nonce/ChainID/BlockHeight查詢等等馋辈。

b)Tx

Tx定義在txinner_wrapper.go文件中。Tx會貫穿整個SDK的處理倍谜,是整個SDK最重要的數據結構迈螟。

image

Tx是個數據結構,其中的TxInner是接口:Wrap以及ValidateBasic尔崔。也就是說一個Tx必須要實現TxInner接口答毫。

c)Handler

Handler接口定義在handler.go文件中。

image

Handler定義module執(zhí)行的接口:CheckTx(查看Tx)您旁,DeliverTx(區(qū)塊中交易處理)烙常,InitState以及InitValidator(初始化狀態(tài)和Validator),Name是執(zhí)行模塊的名稱鹤盒。有關module的具體解釋蚕脏,請看Stack和Module的介紹。

4.3)Stack

Stack的相關代碼在stack目錄中侦锯。Stack有關的數據類型如下圖:

image

Stack有兩部分組成:builder(middleware)以及Dispatcher驼鞭。Dispatcher和middleware的區(qū)別是:middleware提供Next函數,可以訪問下一個“middleware”尺碰,Dispatcher是一組Dispatchable構成挣棕。

Stack上的所有Middleware被wrap成一個sdk.Handler。

image

4.4)Client客戶端

Client的邏輯在client的目錄中亲桥。介紹一下Client端將sdk.Tx封裝的邏輯(實現在client/txs/wrapper.go)洛心。

image

Wrapps.Wrap函數將當前傳入的sdk.Tx進行wrap,形成類似洋蔥樣的封裝题篷。

image

4.5)Server服務器端

與客戶端相對應的是服務器端词身,服務器端主要是接收sdk.Tx,檢查后調用Tendermint的RPC提交或者查詢信息番枚。邏輯實現在client/rest目錄下法严。以txs.go為例,解釋一下服務器的實現原理:

image

服務器端利用mux.Router機制葫笼,注冊響應函數(如上圖中的PostTx)深啤。

4.6)ABCI App程序

ABCI App程序的邏輯實現在app以及server目錄。App程序的邏輯相對簡單路星,主要是實現ABCI的接口溯街,調用Stack,具體的操作由Stack的一個個的middleware處理。

一個交易的大致處理流程如下圖:

image

4.7)example示例

Cosmos SDK提供了示例代碼苫幢,在examples目錄下访诱。感興趣的小伙伴,可以查看basecoin的實現韩肝。

4.8)module實現

在Cosmos SDK中實現了一些通用module触菜,在modules目錄下:fee,coin哀峻,ibc, nonce, auth等等涡相。fee module的邏輯相對簡單,可以看出一個模塊大致需要實現的邏輯:

image

實現一個module剩蟀,要實現三個接口:commands/wrap.go(client端的封裝)催蝗,handler.go(Stack中的middleware的接口,也就是sdk.handler接口)育特,以及tx.go(此模塊的交易定義以及TxInner的實現)丙号。

image

因此基于cosmos-sdk框架,利用其插件功能缰冤,可以非橙В快速的開發(fā)出屬于自己應用的區(qū)塊鏈,同時也可以很方便的加入Cosmos生態(tài)網絡棉浸,支持不同鏈之間的互操作怀薛,在插件的設計上和EOS也有異曲同工之妙。

那么如何使用這些插件功能呢迷郑?可以參考cosmos-sdk提供的示例應用枝恋,以basecoin為例,只需要幾步:

  1. 創(chuàng)建自己的ABCI應用嗡害,可以嵌入baseapp焚碌,也可以重載baseapp。
  2. 定義自己的賬戶體系霸妹,可以嵌入BaseAccount十电。
  3. 選擇所需要的插件,注冊到消息路由抑堡。

5. IBC協議

Cosmos的區(qū)塊鏈間通信協議(IBC)將不同區(qū)塊鏈連接起來摆出,達到價值轉移的目的朗徊。

IBC協議是針對Cosmos網絡設計的首妖,依賴其及時最終性的特點,用于Hub與Zone之間消息傳遞爷恳。IBC協議中設計了兩個消息:

  • IBCBlockCommitTx:發(fā)送方所在區(qū)塊鏈的最新的區(qū)塊信息有缆。
  • IBCPacketTx:跨鏈交易本身的信息,及其在發(fā)送方鏈中被打包的區(qū)塊信息。

但有了消息的傳遞棚壁,接收鏈如何校驗信任消息呢杯矩?

在IBC協議設計里,兩個鏈建立連接之前需要進行彼此注冊袖外,有兩個作用:

1史隆、保存對方鏈驗證者集合以及Merkle證明的算法,這樣接收鏈才能確保消息的正確性和來源的可靠性曼验。

2泌射、為對方鏈創(chuàng)建兩個可靠隊列,一個隊列存放所以對方鏈的消息(outgoing)鬓照,一個隊列存放來自對方鏈的消息(incoming)熔酷。

我們以chain1中用戶User A轉100mycoin 給test-hub用戶User B為例看看IBC整個的工作流程如下(基于目前IBC實現代碼):

整個工作流程可以分為三個階段:

  1. User A向chain1提交跨鏈交易,chain1執(zhí)行該交易豺裆,并將交易存入outgoing隊列拒秘。
  2. relayer從chain1中對應test-hub的outgoing消息隊列取出跨鏈交易,提交到test-hub臭猜。
  3. test-hub執(zhí)行交易躺酒,放入incoming消息隊列。

大家可以看到获讳,整個流程比較簡單阴颖,而且涉及的消息只有IBCPacket。目前Cosmos跨鏈實現并沒有全部完成丐膝,只是完成了一個簡單的交易處理流程量愧。

6. PegZone

基于cosmos-sdk開發(fā)的區(qū)塊鏈能夠輕松滿足實時最終性,然而現存的Bitcoin和Ethereum這類使用POW共識的區(qū)塊鏈并不具備此特點帅矗,只能屬于概率最終性偎肃,無法防止區(qū)塊鏈的回滾。對于這類鏈浑此,團隊采用PegZone方案來解決累颂。

PegZone本身其實是一條代理鏈,實時跟蹤原始鏈的狀態(tài)凛俱,通過設定一個安全閥值紊馏,等待原始鏈區(qū)塊增長數達到安全閥值時就認為原始鏈的狀態(tài)達到了偽實時最終性(回滾概率小)蒲犬,這點和輕客戶端錢包驗證是相同的原理朱监,例如比特幣安全閥值通常設置為6,以太坊安全閥值可以設置為20或者100原叮。而PegZone本身具備實時最終性赫编,就可以通過IBC與Hub相連巡蘸,從而實現跨鏈。

接下來還是用例子來說明下擂送,以Ethereum為例來看蒲拉,有興趣的朋友可參考Github上的cosmos/Peggy項目求类。示意圖如下:

上圖我們可以看出PegZone可以分為5個部分:

  1. Smart Contract:資產托管的角色拜秧,保管以太坊中的代幣和Cosmos中的代幣萍恕。主要提供了lock、unlock蟀拷、mint身腻、burn四個方法。
  2. Witness:是一個以太坊全節(jié)點匹厘,監(jiān)聽以太坊合約的event嘀趟,并等待100個區(qū)塊產生后,封裝WitnessTx提交到PegZone中來證明在以太坊內狀態(tài)更改愈诚。
  3. PegZone:PegZone是基于Tendermint的區(qū)塊鏈她按,負責維護用戶的賬戶信息,允許用戶之間資產的轉移炕柔,并提供交易查詢酌泰。
  4. Signer:使用secp256k1對交易進行簽名,以便簽名能夠高效的被智能合約驗證匕累,對應于智能合約的校驗者公鑰集合陵刹。
  5. **Relayer: **中繼器負責交易轉發(fā)。將所有Signer簽名后的SignTx轉發(fā)到smart contract中欢嘿。

7. 參考

(1)深度解析Tendermint衰琐,快速融入Cosmos生態(tài)
https://zhuanlan.zhihu.com/p/38252058
(2)跨越當前鏈的邊界,Cosmos技術深扒
https://zhuanlan.zhihu.com/p/42693285
(3)軟硬核:徹底讀懂 Cosmos 如何一鍵發(fā)鏈與萬鏈互聯
https://www.8btc.com/article/373565
(4)查看支持COSMOS跨鏈的項目
https://cosmos.network/ecosystem
(5)Cosmos項目以及SDK介紹
https://zhuanlan.zhihu.com/p/43898294
(6)Cosmos互聯鏈通信技術規(guī)范(上)
https://juejin.im/post/5a98f6496fb9a028da7bf9d4
(7)Cosmos網絡開發(fā)進展
https://cosmos.network/roadmap

Cosmos

其他

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末炼蹦,一起剝皮案震驚了整個濱河市羡宙,隨后出現的幾起案子,更是在濱河造成了極大的恐慌掐隐,老刑警劉巖狗热,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異虑省,居然都是意外死亡匿刮,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門探颈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熟丸,“玉大人,你說我怎么就攤上這事膝擂÷瞧。” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵架馋,是天一觀的道長狞山。 經常有香客問我,道長叉寂,這世上最難降的妖魔是什么萍启? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屏鳍,結果婚禮上勘纯,老公的妹妹穿的比我還像新娘。我一直安慰自己钓瞭,他們只是感情好驳遵,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著山涡,像睡著了一般堤结。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸭丛,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天竞穷,我揣著相機與錄音,去河邊找鬼鳞溉。 笑死瘾带,一個胖子當著我的面吹牛,可吹牛的內容都是我干的熟菲。 我是一名探鬼主播看政,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抄罕!你這毒婦竟也來了帽衙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贞绵,失蹤者是張志新(化名)和其女友劉穎厉萝,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體榨崩,經...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡谴垫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了母蛛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翩剪。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彩郊,靈堂內的尸體忽然破棺而出前弯,到底是詐尸還是另有隱情蚪缀,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布恕出,位于F島的核電站询枚,受9級特大地震影響,放射性物質發(fā)生泄漏浙巫。R本人自食惡果不足惜金蜀,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望的畴。 院中可真熱鬧渊抄,春花似錦、人聲如沸丧裁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煎娇。三九已至嘶炭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逊桦,已是汗流浹背眨猎。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留强经,地道東北人睡陪。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像匿情,于是被迫代替她去往敵國和親兰迫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 摘要 本文介紹了跨鏈的3種機制:公證人機制(Notary schemes)炬称,哈希鎖定(Hash-locking)汁果,...
    筆名輝哥閱讀 3,334評論 1 52
  • 1.1區(qū)塊鏈跨鏈技術 在區(qū)塊鏈的設計中,區(qū)塊中記錄著所有的信息玲躯。但區(qū)塊鏈也有其封閉性据德,這個封閉性使得每個區(qū)塊鏈更像...
    Roy_朗哥閱讀 2,353評論 0 4
  • 你那里下雨 我這里下雪 其實我不知道這段熱情會持續(xù)多久 而且我還不完全了解你 可我已經對你有了信任 對你的想念也是...
    尤三歲閱讀 116評論 0 0
  • ?這兩天一條新聞炸鍋了朽缴。 號稱年回款了100億的「第一大微商」摩能國際善玫,讓10萬全國代理血本無歸。我了解下來密强,魔能...
    楊小米閱讀 1,770評論 3 8
  • 他穿著睡衣倚靠在床旁邊的書桌上茅郎,左手手撐著桌面蜗元,右手緊揪著自己的頭發(fā)。頭痛的感覺此刻讓他有點頭暈目眩系冗。他的面前是個...
    青木小橋閱讀 308評論 0 0