导读

《走进Cosmos之入门》中我们已经知道了Cosmos的设计初衷是为了进行跨链的资产转移,也可以看到Cosmos的跨链场景中Zone是参与到Cosmos网络中的应用链,而Zone允许不同类型的区块链加入进来。

在Cosmos的设计中,能够接入进来的Zone是需要满足Cosmos SDK条件的,所以Cosmos SDK可以说是Cosmos生态体系中的重要部分。

什么是Cosmos SDK

Cosmos SDK可以说是一个架构,是为了让开发者能够很容易的创建自定义的区块链。通过Cosmos SDK开源的模块,大家可以根据自己区块链所想要有的功能,选取需要的模块构建出自己需要的区块链。

同时,除了Cosmos已经开源出来的模块,任何一个人都可以根据自己所想要的需求为Cosmos SDK创建一个模块。这样就解决了对于想要使用Cosmos区块链框架但是又有自己定制化开发想法的问题。

那么为什么Cosmos需要设计Cosmos SDK来构建特定区块链生态呢?

事实上,今天区块链的大趋势是像以太坊这样的带有智能合约虚拟机的区块链发展的,通常来说对于某个特定功能,开发者首先想到的是通过区块链上的智能合约来构建这个功能。

在实际场景中,智能合约确实为单用途应用程序带来了便利开发的灵活性,可一旦所要求的功能逻辑变得复杂,智能合约就有了很大的局限性,这也是Cosmos SDK推出的初衷。

Cosmos SDK所提供的特定区块链架构是和智能合约区块链的架构完全不同的开发设计模式。通过特定区块链架构,开发人员可以使用一条特定区块链来服务一项特定的功能,从而避免了一条区块链上业务功能的复杂化,同时也提供给开发人员更好的定制化接口,在性能和管理上提供了很好的保障。

Cosmos SDK的特点

Cosmos SDK作为现阶段比较成熟的特定应用链框架,拥有以下一些特点:

1.   SDK中的默认的共识是Tendermint Core。Tendermint是现在市面上比较成熟的BFT共识,该共识算法也被业界很多区块链所采用。

2.   Cosmos SDK属于开源项目,这也就意味着SDK的生态会随着社区的发展更加的完善和成熟。

3.   Cosmos SDK基于OCAP系统,通过OCAP,可以防止蓬勃发展的Cosmos SDK开源社区中产生包含错误或者恶意的模块对其余模块的攻击。

4.   Cosmos SDK已经有了自己的小范围生态系统,包括Cosmos Hub,Iris,Binance Chain,Terra等,产品的不断加入为生态后续的发展提供了基础。

Cosmos SDK应用程序架构

众所周知,区块链应用的核心是具有最终确定性的复制状态机。而Cosmos SDK所提供的灵活性的模块化设计,能够让开发者自由的定义应用程序的状态,交易类型以及状态变化函数。

在Cosmos SDK中,开发者只需要定义好状态机,那么默认的Tendermint模块就会帮助开发者完成状态机在网络层面的工作。

在共识算法中,Tendermint算法由一组称为验证人节点的节点集合来进行共识,验证人负责向区块链添加交易区块,当共识通过以后,则认为该区块是有效的。验证人节点集合是可以通过状态机中开发者所编写的规则来更改的。对于Tendermint共识的具体解读,将会在之后的文章中深入展开。

所以Cosmos SDK应用程序的主要部分是一个区块链的服务程序,网络中的每个节点都会运行该服务,当共识通过,那么每个节点在查询状态得到的结果都是相同的。

上面我们知道了Cosmos SDK区块链状态机的一致性是由Tendermint共识算法来保证的,那么在Cosmos SDK中共识层和应用层又是如何通信的呢?Cosmos SDK使用了一个名为ABCI的接口将交易从网络层传递给了应用层,而该接口也是应用层开发者所必须要实现的。

事实上,在共识层面,Tendermint对交易的处理仅仅只是字节层面,它并不会对交易的具体内容进行解析,而只是做确定性排序,具体对交易内容的处理则是应用程序所需要做的工作。共识层通过ABCI将交易的字节传给应用程序,并通过接口的返回码来获取消息的成功与否。

Cosmos SDK交易流程设计

从第三部分我们可以看出,Cosmos SDK是一个方便开发者开发基于Tendermint的安全可靠状态机的一套框架,并且从第三部分我们也可以看出基于Tendermint的核心就是ABCI接口的实现。同时,为了存储数据以及处理交易,Cosmos SDK还附带了multistore以及router来实现设计。

下面简单介绍一下Cosmos SDK构建的应用程序是如何处理交易的:

1.   首先应用层会解码从Tendermint共识引擎接受到的交易;

2.   从1中得到的交易中提取消息并进行基本的合理性检查;

3.   将每条消息通过router模块路由到相对应的模块进行处理;

4.   由对应的模块处理完以后提交状态变更。

这就是Cosmos SDK应用层处理交易的整个流程。为了简单的展现该流程的运作,Cosmos SDK用baseapp来实现了一个简单的ABCI的模板。bassapp的目的是在存储和可扩展状态机的之间提供安全接口,同时尽可能少的定义该状态机。这样的话开发者就可以基于baseapp来完成自己所需要的定制化开发。

对于区块链上的存储,Cosmos SDK提供了multistore作为状态持久化的模块。multistore使开发者能够声明任意数量的KVStore。而其中这些KVStore只接受字节数组作为value值输入,因此Cosmos还提供了go-amino来对各种类型进行编码。

在Cosmos的设计中模块化是Cosmos一直强调的概念。区块链应用通过把一组可以互操作的模块组合起来进行构建,从而组成自己想要的特定区块链应用。由于这种模块化的设计,每个模块都可以定义自己的状态子集,并且每个模块都可以包含自己的对消息或者交易处理的引擎,同时SDK会将每个消息根据类型路由到其各自归属的模块。

从上图可以看出,每个模块都可以看作一个小型的状态机,开发者可以自定义该状态机的子集,以及修改状态的message 的自定义类型。通常来说,每个模块在multistore声明它自己的KVStore来持久化保存它定义的状态子集。这就是每个应用链的全节点是如何处理接收的有效块中交易的。

SDK模块在SDK的x/目录下定义。一些核心模块包括:

1. x/auth: 用于管理账户和签名.

2. x/bank: 用于实现token和token转账.

3. x/staking + x/slashing: 用于构建POS区块链.

除了x/中已有的模块,任何人都可以在他们的应用程序中使用自己定义的模块。

总结

从上面的介绍我们可以看出,Cosmos SDK提供了一个可以快速搭建特定区块链的框架,通过这个框架,开发者能够快速便捷的开发自己想要的有特定功能的区块链。

我们也可以看出Cosmos通过Cosmos SDK能够更好的扩充自己的跨链生态,能让更多的通过Cosmos SDK开发的区块链加入到Cosmos Hub的生态中来。

作者简介

夏立伟

来自数据网格实验室BitXHub团队

主要负责区块链账本互操作技术相关研究工作

欢迎进技术交流群和我们一起探讨~

添加小助手桔子(微信:18458407117

更多干货更多活动等你来探索

走进Cosmos之Cosmos SDK相关推荐

  1. 跨链Cosmos(2) Cosmos系统框架

    1. Cosmos 系统 = Tendermint Core + Cosmos SDK Cosmos是tendermint团队推出的一个支持跨链交互的异构网络, 一个分布式的独立并行区块链公链. 1. ...

  2. AToken全面支持Cosmos生态Cosmos最新进展

    2019年7月19日,密码极客邀请到了AToken的创始人边龙飞先生和Cosmos的社区战略负责人Chjango Unchained在社群做语音直播分享. 此次活动由密码极客.AToken和Cosmo ...

  3. 跨链Cosmos(12) Cosmos插件

    Tendermint 有一个插件模块,我们可以实现 plugin 中接口,在 ibc 插件中执行跨链交易. 1. plugin 接口的定义 //与 abci 接口很类似 type Plugin int ...

  4. 走进Cosmos之入门

    导 读 跨链作为近两年来区块链技术一个炙手可热的方向,吸引了许多人的目光. 从技术层面看,Cosmos无疑可以与Polkadot并称"跨链双雄",两者的技术路线并无明显的优劣之分, ...

  5. 微软发布Azure Cosmos DB产品以及新的物联网解决方案

    微软于当地时间2018年12月4日召开了一年一度的以云计算和数据为中心的开发者大会,在会上微软正式发布Azure机器学习服务(Azure Machine Learning service),这是一个云 ...

  6. cosmos官方nameservice测试项目详解(代码注释+官方文档错误纠正)

    目录 文章目录 目录 介绍 1.Getting Started 2.Application Goals State Messages 3.Start your application 4.Types ...

  7. 从设计哲学对比波卡与Cosmos

    前言 初视波卡与Cosmos觉得两个项目挺像的,都是基于中继链/侧链的跨链解决方案,后来为了写这篇对比文章找了很多资料,逐渐的发现设计哲学对项目后续发展不同的影响,得出了一点心得,欢迎大家一起讨论,. ...

  8. Cosmos 与 PolkaDot 互解

    公链层次划分 一条公链从底层至上层可以粗略地被分为三个部分 如下图所示: 网络层:底层的数据结构和通信协议的设计. 共识层:共识机制的设计. 应用层:具体业务逻辑的设计. 公链改进方向 改进基础设施: ...

  9. Cosmos 基础(一)

    Cosmos 区块链互联网 Cosmos是一个不断扩展的生态系统,由相互连接的应用程序和服务组成,为去中心化的未来而构建. Cosmos 应用程序和服务使用IBC(the Inter-Blockcha ...

最新文章

  1. linux下遇到的小问题与解决方法
  2. mysql query日期_如何获取mysql中两个日期之间的日期列表select query
  3. Reporting Services 安装的备份和还原操作
  4. Linux+Nginx+Asp.net Core部署
  5. __builtin_expect详解
  6. resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法
  7. java unexpected type_意外类型需要变量找到值(Unexpected type required variable found value)...
  8. webpack多页面构建优化不完全指北
  9. 软件工程第二次作业——个人项目
  10. labview由于其他对话正在访问FIFO_LabVIEW常用工具、调试工具汇总
  11. 阿里云实时数据加工服务的设计及实践
  12. 项目管理概论网课作业(用于复习)
  13. 用JavaScript实现简单的乘法计算
  14. oracle 独占更新,Oracle的共享封锁 独占封锁和共享更新封锁 (3)
  15. 外卖骑手,巨头的炮灰
  16. Android APP如何简单快速实现控制硬件设备并实现APP签名
  17. 菜鸟应用发布 全民跨入APP2.0时代
  18. 数据可视化界面UI设计大屏展示
  19. 【操作系统】30天自制操作系统--(9)叠加处理
  20. 苹果手机iOS用fiddler抓不了https的包

热门文章

  1. python调用AI百度开放平台API
  2. SSL数字证书需要独立IP吗?
  3. 一个-书,字 我惆怅
  4. Python 处理Excel内的数据(案例介绍*2)
  5. 【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)
  6. 基础SQL Server 操作问题——仅当使用了列表并且IDENTITY_INSERT为ON时,才能为表中的标识列制定显示值
  7. hdoj 2199 Can you solve this equation? 【二分枚举】
  8. 解决eclipse出现This Android SDK requires Andro...date ADT to the latest version.问题
  9. CodeChef 遇到 Language Rejected 怎么办
  10. HTML网页错误状态码