首先自我介紹一下。我是Ping.Pub的梁平侍芝,我們是一家軟件公司,主營業(yè)務(wù)是軟件開發(fā)埋同,曾設(shè)計開發(fā)超百億交易規(guī)模的大型電商系統(tǒng)州叠,金融項目;去年開始探索區(qū)塊鏈技術(shù)凶赁,一接觸Cosmos就喜歡上了這個項目咧栗。我們參加了Cosmos官方舉辦的對抗黑客松比賽《Game of Steak》,是為數(shù)不多地獲勝的中國團(tuán)隊之一虱肄。我們也是Cosmos Hub致板, IRISnet Hub的創(chuàng)世節(jié)點(diǎn)。我們對Cosmos的技術(shù)架構(gòu)比較了解咏窿,但是我們接觸區(qū)塊鏈的時間比較短斟或,經(jīng)驗比較少,如果有些地方說的不對歡迎大家批評指正集嵌。
首先萝挤,Cosmos是一個明星跨鏈的項目御毅,歡迎大家訪問 https://cosmos.network 獲取更多信息,我們今天的分享主要專注在技術(shù)層面怜珍。在Cosmos體系中主要兩個非常重要的定義:hub 和 zone, 目前cosmos主網(wǎng)端蛆,IRISnet Hub就是hub, 它主要定位在跨鏈數(shù)據(jù)交換酥泛。zone是實(shí)現(xiàn)比較專屬的功能的鏈:例如用來連接以太坊的zone叫ethermint今豆。而支撐Hub和zone的底層技術(shù)就是Cosmos SDK。?
Cosmos SDK是一套完整的區(qū)塊鏈技術(shù)開發(fā)框架柔袁,主要有以下特點(diǎn):
1.POS共識呆躲,Cosmos SDK采用的是由cosmos自己團(tuán)隊開發(fā)的拜占庭容錯(BFT)共識引擎-tendermint. 這些工作Cosmos SDK已經(jīng)都集成好了,項目開發(fā)方只需要根據(jù)項目要求設(shè)定自己的權(quán)益分配捶索,并將權(quán)益分配加入到genesis即可歼秽。權(quán)益分配對應(yīng)著投票權(quán),因此情组,需要避免出現(xiàn)擁有超過1/3以上投票權(quán)的節(jié)點(diǎn)出現(xiàn)燥筷。因為出現(xiàn)1/3以上投票權(quán)的節(jié)點(diǎn)如果宕機(jī)就會導(dǎo)致cosmos共識失敗,鏈就會停止院崇。
2.秒級出塊肆氓,目前Cosmos Hub擁有超過100個認(rèn)證人節(jié)點(diǎn),且認(rèn)證人節(jié)點(diǎn)分布在全球五大洲底瓣,目前平均出塊速度為6秒左右谢揪。前不久幣安公布的擁有7個節(jié)點(diǎn)的幣安鏈的平均出塊時間為1s。Cosmos SDK支持超過1000+個以上認(rèn)證節(jié)點(diǎn)捐凭,支持秒級出塊拨扶。當(dāng)然實(shí)際數(shù)據(jù)可能會受節(jié)點(diǎn)的物理位置,節(jié)點(diǎn)數(shù)量,網(wǎng)絡(luò)質(zhì)量等因素的影響。
3.高TPS掘剪,Cosmos-SDK應(yīng)該是目前主網(wǎng)上線后TPS最高的開源SDK, 根據(jù)官方的實(shí)際公布的數(shù)據(jù)可以到1000+筆/秒。這個數(shù)字已經(jīng)可以滿足絕大多數(shù)場景的需求匹颤。而且,和另一個明星項目polkadot不同是的托猩,Cosmos采用的是實(shí)時finalize印蓖,即:出塊就確認(rèn),而不必等到若干個塊后再確認(rèn)京腥,大大提升了交易的實(shí)際效率赦肃。如果你認(rèn)為這個性能還達(dá)不到你的要求的話,那可以采用多條鏈來分解你的壓力。我想這個是Cosmos最大的亮點(diǎn)他宛。
4.支持跨鏈操作船侧,在傳統(tǒng)的IT解決方案里,兼容性和可擴(kuò)展性是非常重要的指標(biāo)堕汞,Cosmos SDK將內(nèi)置跨鏈操作模塊-IBC勺爱,基于IBC的實(shí)現(xiàn)晃琳,你可以輕松的連接BTC, ETH讯检,Cosmos Hub,IRIS Hub卫旱,以及其他基于Cosmos SDK開發(fā)的所有的區(qū)塊鏈人灼,甚至可以連接substrate開發(fā)的區(qū)塊鏈。當(dāng)然這個目前都還沒有實(shí)現(xiàn)顾翼,我預(yù)計在今年年底就可以實(shí)現(xiàn)部分投放,到明年應(yīng)該就會非常成熟。
第二适贸,如何使用Cosmos SDK構(gòu)建一個自己的區(qū)塊鏈項目灸芳。Cosmos SDK經(jīng)過兩個年的開發(fā),已經(jīng)完成了cosmos hub主網(wǎng)上線拜姿,代碼已經(jīng)經(jīng)過充分的驗證并且已經(jīng)運(yùn)行的很穩(wěn)定烙样;因此選擇Cosmos SDK可以少踩很多坑。大家都是圈中的大牛蕊肥,所以今天我就不再者分享具體的代碼谒获,最新的源碼都可以直接在github上直接下載。地址為:https://github.com/cosmos/cosmos-sdk壁却。我簡單從以下幾個方面談?wù)勎业囊恍┛捶ǎ?/p>
1批狱,應(yīng)用場景,Cosmos SDK是一個通用的區(qū)塊鏈開發(fā)框架展东,你可以用它來開發(fā)公鏈赔硫,聯(lián)盟鏈,私有鏈盐肃。具體可以分為兩種情況:不需要定制模塊和需要定制模塊卦停。不需要定制模塊的情況主要針對的是發(fā)行數(shù)字資產(chǎn)類的項目,cosmos-hub的所有功能你都可以直接拿來用恼蓬。這類型的項目可以參看《部署你自己測試網(wǎng)絡(luò)》的教程:https://cosmos.network/docs/cosmos-hub/deploy-testnet.html惊完,項目方只需要5分鐘即可完成開發(fā)自己的區(qū)塊鏈的所有工作。需要定制模塊開發(fā)項目大家可以具體看看這個教程《域名服務(wù)》:https://cosmos.network/docs/tutorial/处硬,這個教程還是非常簡單的小槐。開發(fā)者只需專注在開發(fā)自己module即可,總體來說比較容易。
2凿跳,SDK架構(gòu)剖析:Cosmos SDK主要有3部分組成:1件豌,總體部分,app.go 和 go.mod 這些文件位于項目的根目錄控嗜。主要用來集成項目各個部件和管理項目依賴茧彤。2,命令行部分,位于./cmd/疆栏,通常分為服務(wù)進(jìn)程曾掂,以"d"結(jié)尾(如:gaiad, nsd等等)和命令行工具,以“cli”結(jié)尾(如:gaiacli, iriscli等等)壁顶,這部分代碼建議大家去看看著名的Viper項目珠洗,能夠幫助大家快速理解,Docker, Kubernetes等明星項目都是用的這個框架若专。 3.模塊部分许蓖,通常位于./x/MyModuleName/, 整個Cosmos SDK都是基于模塊化設(shè)計的。 你可以添加自己的模塊调衰,你也可以引用和者剔除任何cosmos-sdk的原生模塊膊爪。
3,模塊的構(gòu)成:每一個模塊主要包括一下幾個部分:1嚎莉,Types, 定義你的數(shù)據(jù)結(jié)構(gòu)米酬。2,Keeper定義數(shù)據(jù)庫交互萝喘,里面通常會實(shí)現(xiàn)get, set, iterator之類的數(shù)據(jù)庫操作方法淮逻。3,Msg & Handler阁簸,主要用來處理共識爬早。每一個Msg會對應(yīng)一個Handler。 需要強(qiáng)調(diào)的是所有的Hander調(diào)用前都會執(zhí)行一個叫anteHander的前置處理器启妹,來做一些通用的工作筛严,如:安全校驗。4饶米,Codec 編/解碼器桨啃,為了提升P2P層網(wǎng)絡(luò)的性能,cosmos要求所有的自定義消息體都需要有一個編/解碼器檬输,來執(zhí)行序列化和反序列化的操作照瘾。5,Queriers, 查詢器丧慈,提供面向服務(wù)的查詢接口析命。
4主卫,Cosmos中的智能合約:當(dāng)查看官方文檔的時候,你根本就找不到智能合約的字眼鹃愤。Cosmos真的能實(shí)現(xiàn)智能合約嗎簇搅?答案肯定是Yes. 整個Cosmos SDK就是一組由智能合約組成分布式系統(tǒng)。其中每一個module都可以看作是一個智能合約软吐,包括官方的module也是一樣瘩将。所以,你可以根據(jù)你的場景設(shè)計一個你自己的module實(shí)現(xiàn)你自己的cosmos智能合約凹耙。如果你覺這個還沒有辦法滿足你的需求姿现,可以用IRISnet的中 iService, 在這里你可以完成服務(wù)的創(chuàng)建,部署使兔,調(diào)用建钥,銷毀等全生命周期的管理藤韵。當(dāng)然將來會支持真正的智能合約虐沥。目前在ethermint項目中已經(jīng)實(shí)現(xiàn)了。
第三泽艘,安全欲险, 安全問題總是區(qū)塊鏈項目繞不開的話題。這里面可以討論問題很多匹涮,我挑重要的幾個方面來分享一下我們的經(jīng)驗天试。
1. DDOS 攻擊,首先DDOS攻擊是一個基本無解的命題然低。因此喜每,有以下建議供大家參考:a. 部署服務(wù)器到帶有DDOS防護(hù)的機(jī)房;b.添加多個哨兵節(jié)點(diǎn)雳攘,關(guān)閉認(rèn)證人節(jié)點(diǎn)和其他非哨兵節(jié)點(diǎn)的通信带兜;c.不要暴露validator節(jié)點(diǎn)的公網(wǎng)IP,d. 確保validator節(jié)點(diǎn)通過私有網(wǎng)絡(luò)與其他認(rèn)證人節(jié)點(diǎn)相連吨灭。
2. 51%攻擊刚照,在設(shè)計和規(guī)劃的時候需要盡量將投票權(quán)分散到多個節(jié)點(diǎn)去,防止出現(xiàn)投票權(quán)大于1/3節(jié)點(diǎn)出現(xiàn)喧兄,更不能有超過51%的節(jié)點(diǎn)无畔。
3. Double Sign. 這個問題在Cosmos里面會受到非常重的處罰。一旦發(fā)現(xiàn)節(jié)點(diǎn)有double sign的行為吠冤,就會予以5%的slashing浑彰,并且將進(jìn)入墓碑狀態(tài),也就是說將失去認(rèn)證人資格拯辙。
4. Uptime郭变,在線時長。Cosmos允許節(jié)點(diǎn)短暫的停機(jī)來處理類似升級更新的操作,genesis里面會定義一個窗口期饵较,如果這個超過這個窗口期就會受到處罰拍嵌。我們目前運(yùn)行的Cosmos 節(jié)點(diǎn)沒有一個丟塊,我們也是IRISnet hub在高度到達(dá)100萬后唯一一個沒有丟塊的節(jié)點(diǎn)循诉。
今天簡單分享就先到這里横辆,后面有機(jī)會再和大家做更進(jìn)一步的分享。