Cosmos被誉为“区块链的互联网”,也被认为是区块链的3.0版本。Cosmos旨在解决区块链交互操做和可扩展性问题,其区块链间通信协议能够实现区块链的互联,支持不一样区块链之间的资产转移。如下为Cosmos项目详细解读。算法
看点一 Cosmos核心技术:Tendermint安全
Cosmos有一个很独特的宇宙观:这个世界不可能由一个区块链主导,必定是多链并存,多币并行的世界。如何把多链和多币整合成一个生态系统,就是Cosmos的终极理想。它的理想还有个独特的地方,它认为币和链应该是分离的。在Cosmos里有个核心技术,使得代币能够跨区块链进行转移,这个核心技术就是Tendermint。Tendermint是区块链领域较早的基于拜占廷容错协议的PoS共识引擎。网络
Cosmos认为以比特币为表明的区块链1.0,是网络层、共识层和应用层混合成一体的产品。以以太坊为表明的区块链2.0,简化了这一构架,用户不须要直接处理共识和网络层相关细节,只需基于以太坊提供的虚拟机的高级语言写分布式应用就能够了。架构
Tendermint架构的创新之处在于将区块链应用(状态)与底层进行了分离,它的核心代码Tendermint Core涵盖了可重用可配置的共识和网络层功能,同时它还定义了一组ABCI回调接口与应用层进行交互,应用逻辑能够用你熟悉的任何语言来写。客户端发给Tendermint的交易,经过ABCI接口到达应用,好比检查交易的有效性。有效交易进入Tendermint内存池,提议节点从内存池选择交易进入候选新块,通过PoS达成共识的新块向全网广播。收到新块的全节点都会经过ABCI接口把交易播放给应用,应用逻辑在执行交易的过程当中相应地改变自身内部状态,最后把状态哈希以AppHash的形式返回给Tendermint,计入新块头部。异步
当新一轮的区块开始选择的时候,会有一个验证人以轮询等方式选出来,做为提议节点提交一个候选新块。这个新块里包含一些已经跟应用确认过是有效的交易。把这个块广播到网络里之后,全部的验证人进行Prevote预投票。这里由于有超时机制,因此Tendermint协议是一个弱同步协议。Prevote投票超过三分之二后,系统达成所谓的“Polka”状态,接着对这个块进行Precommit投票,一旦Precommit超过三分之二,新块就被提交(Commit)生成新区块高度,进入下一轮提议。分布式
Tendermint共识算法的特点是拜占廷容错。它最多能够容纳整个网络里面三分之一的验证人犯错,包括无心的犯错或者有意的做恶。投票的时候三分二不是指三分之二的验证人数,而是三分之二的权益。工具
另外它有即时最终性,这是跟PoW的最大区别;当它生成新区块高度,这个块就是最终的,它未来不会被推翻,因此它会带来比以太坊、比特币高的性能。性能
它经过应用逻辑和共识逻辑进行整合,经过ABCI接口进行通信,能够用任何语言编写应用。这个应用作的事情实际上就是状态机控制。它把共识引擎这部分抽象出来,能够用它作公有链,也可作私有链。区块链
Tendermint强调一致性的算法,必须三分之二的投票才能生成新的块。若是网络达不到三分之二的人投票,这个协议就被停了。因此它强调的是一致性而不是可用性,它不容许短暂的分叉。开发工具
看点二 如何利用Tendermint机制开发应用
一是基于ABCI协议直接开发应用。只需确保应用逻辑所用到的开发语言特性是肯定的。也就是说这个逻辑在任何一个节点的语言执行环境上执行的时候,都会返回相同的AppHash。这种开发模式的好处是你有最大的控制权,你在应用里想写什么样的逻辑就写什么样的逻辑。联盟链能够采用这种模式开发。但这套协议的缺点是技术难度大,要求开发人员很是熟悉ABCI回调接口,并且应用的全部逻辑都要本身开发。
二是基于Ethermint开发。Ethermint是Tendermint团队开发的另一个项目,它把以太坊的Go语言库拿过来,经过ABCI接口和Tendermint Core进行了融合,实现了在PoS协议上运行以太坊虚拟机。它的性能很强大,好比在以太坊写的分布式应用,能够直接部署在Ethermint上面,以太坊现有的客户端工具和开发工具均可以直接使用。基于Ethermint开发应用的好处显而易见,开发者能够用熟悉的开发工具和理念;缺点是面临以太坊一样的安全风险。
三是基于Cosmos SDK开发。Cosmos SDK是一个提供了基本区块链逻辑的ABCI应用。它是多代币的区块链,帐号能够管理多种代币,同时它还提供一些常见的功能,如比链上治理。它的强大之处在于能够在Cosmos SDK所包含的已有功能、最佳实践和插件架构上快速开发区块链应用。Cosmos Hub就是基于Cosmos SDK开发的,这种方式适合开发公有链项目,速度很快。
看点三 Cosmos生态系统
Cosmos的生态系统总结起来就是:Cosmos Hub做为支持多币种的一个枢纽将多个一样基于Tendermint开发的区块链分区(Zone)链接成一体。Cosmos将在今年末或明年第一季度上线“主网”,即Cosmos Hub。伴随主网上线,将会同时上线几个分区,其中一个就是做为公有链的Ethermint,另一个是OmiseGO,接下来是跟以太坊的桥接分区(Peg Zone)。Hub和Zone之间的通讯,经过IBC协议实现。
看点四 IBC协议
互联链通讯(IBC)协议是个非阻塞的异步协议,能保证不一样链之间不会在交易处理上产生耦合。它经过Merkle树实现可靠的消息队列,并将队列保存在各个分区里面,实现有序存储,而后经过把消息的Merkle证实做为IBC数据包的一部分发出去。
在两个通信链上创建双向信任时如何操做呢?这是一种特殊的,须要有权限管理的消息,并且须要人为干涉。至关于一个分区要将全部验证人的公钥告诉它想与之创建联系的另一条链。当须要验证来自另外一条链的消息时,只需拿对方的验证人公钥集合来验证其Merkle证实的有效性就能够了。
IBC协议还会经过一些高级消息类型超时、状态清理、跨链路由和网关以及多种模式中继等复杂状况进行处理。
链币分离
经过IBC能够帮助代币实现跨链使用。以STORJ.IO为例,它在链上原生的代币就是本身的代币,若是STORJ区块链连到Cosmos Hub上,理论上经过IBC协议就能够把以太币或者其余币转移到STORJ.IO的区块链上使用。这不是币种交换的概念,而是彻底能够把一个币转移到另外一个区块链上。假设一个以太币经过Cosmos Hub转到另一个链上,好比STORJ.IO,那么以太币在以太坊就会被锁定或销毁,在STORJ平台上会生成对应数量的以太币,只不过这个以太币严格意义上来讲不是原生的以太币,可是它是用STORJ区块链的多币系统生成的一个表明对应的以太币价值和功用的代币符号。当你须要把这个代币再转回来时,就会销毁STORJ上的代币,而后在以太坊对应的帐号上生成代币。因此Cosmos在现阶段主要是经过IBC协议实现代币在不一样区块链之间的转移和跨链使用。
由此,许可链也能够与公有链进行交互。许可链没有原生代币,若是许可链由于业务需求,须要引入激励机制,那么能够和公有链进行交互,经过Cosmos把代币转到本身链上进行使用。
看点五 Cosmos——区块链互联网
Cosmos被称为“区块链互联网”,基于刚刚介绍的技术特性,“区块链互联网”呈现出如下几种特色:多样性、互操做性、性能扩展、安全性和自主性。
它的性能扩展包括垂直扩展和水平扩展。水平扩展,由于它是按照应用的边界来划分的一种分片,在减小性能瓶颈上是最符合逻辑的。每个分区或者Hub上是按照不一样的应用来划分的,因此应用的并行处理很是天然。另外从逻辑方面来讲,你只须要成为你关心的应用里区块链的全节点,提升工做效率。
多样性和安全性。大部分的生产级应用不须要跑在图灵完备的区块链上,这也是Cosmos的“宇宙观”和以太坊的根本性差别之一。这样作的好处是能够减小攻击界面,由于用Tendermint写的针对某个特定场景的ABCI应用,只须要几个定制交易类型就能够,不像以太坊的整个EVM和智能合约代码都暴露给潜在黑客攻击。分区还能够下降成本,提高效率,并经过微调来优化,这些都是这种的架构带来的好处。
互操做性就是不一样链上的应用和智能合约能够经过IBC协议进行交互。可使得不一样的代币经济得以深度整合,不一样的代币在一条区块链上能够混合使用,将来可能会实现跨链的智能合约调用。
自主性。举个例子,经过硬分叉分裂出来的以太坊和以太坊经典,它们不可能拥有一样的验证节点集合。按照Cosmos的架构,这两条链各自跑在本身的分区里,它们有不一样的验证人,能够实现不一样的链上治理和经济激励、经济治理。
合并安全性。对于很小的公有链,要找100个见证人是很麻烦的事。这时能够与Cosmos Hub共享100个验证人,实现公有链的快速自举。