logo

Cosmos代碼審查:Cosmos SDK才是殺手鐧

瀏覽數

99+

 

摘要:Cosmos怎樣解決今天最難的區塊鏈問題。

讓我們從查看聲明開始這篇Cosmos代碼回顧。就這一個,因為這是個大問題。“Cosmos解決了今天最難的區塊鏈問題。”

可伸縮性——Tendermint BFT解決了這個問題

可用性——Cosmos SDK解決了這個問題

互操作性——IBC協議解決了這個問題

只有三件東西,但這裏有很多東西要打開。Cosmos是一個由不同事物混合而成的大包,所以有時候要知道我們在說什麽有點棘手。我們有以下內容;

Cosmos—基礎

拜占庭共識Tendermint — pBFT共識引擎

Cosmos SDK—允許您構建dapps的軟件包/集合(但不是在以太坊智能合約的意義上,而是在每個dapp的區塊鏈意義上)

IBC—通信協議

Amino——數據傳輸的一種特定協議(本質上是原生buff——這個聲明被過分簡化了,但現在還不是那麽重要)

Gaia -第一個Cosmos“Hub”,是由運行在tendermint上的Cosmos SDK構建的

因此,任何人都可以使用運行在Tendermint上的Cosmos SDK(軟件開發工具包)構建一個dapp(區塊鏈),通過使用Cosmos,它可以兼容IBC,因此可以進行互操作。

因此,可伸縮性通過兩個領域來解決,第一個領域是Tendermint pBFT,第二個領域是每個dapp都有自己的共識系統(Tendermint)。因此,如果你構建一個Cosmos dapp,你不是在Gaia上構建它,而是在構建一個全新的區塊鏈,但是因為它兼容IBC,所以它可以與其他使用Cosmos SDK構建的區塊鏈進行交互(因此是可互操作的)

可用性,是因為Cosmos SDK,它封裝了所有棘手的部分,共識,通信,p2p,所有這些都由Cosmos SDK來處理。

因此,以上內容涵蓋了可伸縮性、可用性和互操作性。

上面的代碼在令牌方面有一些有趣的含義,因為除了Gaia(有點像Cosmos SDK的演示示例)之外,實際上與Atom沒有任何關系。您不需要它來構建自己的Cosmos區塊鏈,也不需要它來實現IBC或互操作性。你只需要stake它就行了,因為Gaia不支持在它上面建造。

撇開這個不談,讓我們看看Gain,然後從那裏深入研究。

只有20個提交?這通常是一個很大的警告信號。但這裏是100% 沒問題,因為這只是Cosmos SDK的實現,真正的工作是Cosmos SDK和Tendermint。我們稍後會講到。Gaia本身是一個相當小的、直接的代碼庫,這是因為它只是Cosmos SDK的“演示”。Cosmos SDK和Tendermint是真正的重量級舉重選手。但讓我們看看它是如何工作的。

Golang項目,所以我們從/cmd/開始

命令行界面,用於創建帳戶,發送轉賬,檢查余額。這包括了RPC / HTTP端點,因此我們將研究它,但首先,我們需要gaiad - daemon,它運行節點/軟件。

所有通常包括候選人,cobra/viper的命令行。這裏的Tendermint很有趣,cosmo -sdk很有意義。

帳戶、驗證器和共識節點的Bech32前綴。常用命令的候選人。

app.go

這很好地概述了從Cosmos SDK中導入什麽是必需的,baseapp是核心框架,codec處理所有組件間的通信,用於基本賬戶和轉賬的認證和銀行。分配,mint(塊獎勵),slashing(壞行為),staking(dPoS)都包括在內。這就是你所需要的。

只設置和初始化組件,這個文件將主要有設置樣板文件。

這是覆制/粘貼的東西,只需要設置鍵值存儲,然後你需要設置所有的保存器(保存器管理所有的工作-我們稍後會講到)

AddRoute for proposal (http/rpc),允許社區設置和表決提案。

這很有趣,setorderbeginblocker,我們造幣,然後分配,然後salshing,相對於setorderendblocker,我們管理,然後staking。因此,我們首先生成塊鑄幣,然後分發它,然後通過委托獎勵(在塊之後)削減跟隨。我得再深入研究一下為什麽是這個順序。

同樣,主要是來自Cosmos SDK的樣板文件。

就是這樣。

網絡是設置腳本。文檔是文檔,其余的是測試系統。這就是運行您自己的Gaia (Atom staking system—這就是它的全部內容)所需的所有“代碼”。

這是一個很好的跡象,它向您展示了Cosmos SDK和Tendermint是多麽強大。

公平地說,如果這是另一個區塊鏈而不是Gaia(也就是Cosmos),我不會有什麽印象,因為他們什麽都沒做,但是既然Gaia是Cosmos,是Cosmos SDK,是Tendermint,我們可以繼續。

Cosmos SDK,真正的秘密武器。5k提交,86個分支,112個版本,92個貢獻者,這個東西非常活躍。出色的公關和問題管理,出色的抽象和封裝。我們已經在Gaia實現中看到了很多;

baseapp——核心客戶端——與服務器編解碼器交互的客戶端——管理所有的通訊服務器——運行服務器端存儲——處理所有的存儲x——這是所有核心模塊的所在

在x/我們有auth,銀行,分銷,ibc、 gov、mint、 staking。在不到100行代碼中實現您自己的可互操作的高可伸縮性dPoS區塊鏈所需的一切。

收取手續費,開始/ 結束塊是你做大部分工作的地方,你希望在得到一個塊之前和之後發生什麽。這是您通常放置大部分工作邏輯的地方(gaia並不真正需要它)。對等過濾器,狀態檢查器,版本管理。這是非常棒的生產級代碼。

不用多說,令人印象深刻的是tendermint、abci和cosmos sdk之間的交互方式。它的設計和構思都很好。

我們不打算深入討論太多,客戶端,密鑰,rpc, tx生成。區塊鏈樣板文件,即使它是非常棒的區塊鏈樣板文件。

編解碼器是一個amino包裝器。Amino也是固體。但是/x/才是真正的工作所在,所以讓我們來看看bank / mint / / staking。

我們從keeper開始。

Keeper定義了我們能做什麽;

Setcoins 、SubtractCoins、AddCoins、InputOutputCoins、DelegateCoins、UndelegateCoins

這裏需要註意的是,keepers是功能包裝器。當你把它全部歸零,在區塊鏈中困難的部分是分布式系統部分,共識。這是由Tendermint處理的,共識基本上是一個“保存”屏障。通常,您只需簡單地說10+10=20,因此讓我們將20保存在存儲(數據庫)中。在這種情況下,您需要協商一致,但是它已經被處理好了,您不需要擔心它,因此您只需輸入10+10=20並存儲。所以所有的Keepers都只是簡單的基本功能。

所以對於像AddCoins這樣的東西,它只需要一個地址,一個硬幣類型,然後加上金額。

就是這麽簡單。

順便說一句,這是副作用免費代碼,不是你經常看到的東西,偉大的設計原則。

Cosmos Code Review總結:

Gaia是沒有意義的,它只是一個Cosmos SDK的演示,但是Cosmos SDK很好。我想我也會用它來做一些鏈。 

感謝Tendermint團隊的高級軟件顧問Alessio Treglia,他補充說:“Gaia只有在最近從@cosmossdk repo的原始位置提取後才提交了20次。”

作者:Ander Croje    Andre是一位擁有20年開發經驗的軟件架構師。在5個月內修完3年的計算機科學課程後,他被要求繼續當講師。在深入研究移動安全和密碼學之前,他進入電信行業,開發大數據、高交易基礎設施。過去5年,他一直致力於打造定制的金融科技解決方案,並利用區塊鏈技術為非洲無銀行部門提供降低成本的金融產品。

編譯:共享財經 Neo