2019年6月30日,IRISnet创始人&Cosmos中国负责人Harriet 在一块链习社区《区块链技术公开课100讲》线上直播专栏分享了主题为《深度剖析Cosmos跨链技术 ——用Cosmos SDK和 iService 开发复杂分布式商业应用》的演讲,本文为此次直播演讲的全部内容复盘。
首先Harriet介绍了IRISnet是专注于提供跨链服务的跨链枢纽。而且IRISnet团队也是Cosmos中国的开发者,从2017年就参加了Cosmos SDK的开发,大家经常会说IRISnet是中国最懂Cosmos跨链技术技术的团队了。Cosmos对业界有三个非常大的贡献,其中第一是Tendermmint,第二是跨链通讯协议,inter-blockchain communication,第三是Cosmos SDK。
因为是面向开发者社区的分享,Harriet还介绍了Cosmos SDK的一些核心模块,包括Tendermmint、IBC、iService。iService就是IRISnet的跨链服务,可以用它来开发复杂的分布式商业应用。
区块链应用开发的方式是如何演进的呢?
大家比较熟悉的是比特币的网络,在比特币的网络的代码库中,还提供了一些重要的功能支持,包括对于UTXO账户、payments的支持,还提供了script语言能够支持书写逻辑,底下的共识是基于PoW来支持分布式共识的达成。在比特币这一代网络当中,如果大家想要对于网络有一些新的功能想要进行改进的话,没有非常灵活的开发接口,所以唯一的方法就是分叉,就是拿来代码了以后,重新开启一个新的项目再进行开发。
后来以太坊出现了,以太坊提供了图灵完备的EVM(虚拟机),在虚拟机上能够支持用Solidity语言完成智能合约的开发,可以开发DApp跑到以太坊上。但是Solidity有很多限制,非常容易出安全的故障,同时以太坊性能也有瓶颈。安全、共识基础设施都由以太坊提供的,所以跑DApp需要给以太坊矿工交gas fee,运行DApp有成本。
而Cosmos SDK,就能很好的解决的第1代第2代区块链对于开发者的一些困难,Cosmos SDK开发工具包是非常模块化的,也具有很强的可扩展性,它允许用在程序员中很热门的Golang语言来开发,还提供了一个非常高效的共识引擎Tendermmint,让我们不用担心底层复杂的共识如何来实现,更好地专注于解决业务逻辑问题。
为什么要使用Cosmos SDK?
首先Cosmos SDK可以让开发者自己开发完全可控的商业区块链,完全可控的意思就是拥有自己的治理。而且运行业务逻辑时也不用像第2代智能合约的系统,需要付给提供安全治理的底层gas fee,成本也会更低。同时Golang语言比Solidity友好很多,现在Cosmos SDK也完全开源。同时Cosmos SDK非常模块化,允许在开发自己区块链的时候,可以非常灵活地选择所需要的模块,定制化地开发自己的应用,同时在开发过程中也可以贡献模块。
Cosmos SDK开发的区块链具有这个图示的一些特点,首先它是非常先进的Proof of Stake(权益质押证明)的区块链。Cosmos SDK带的共识引擎Tendermint是在2014年被Cosmos 创始人Jae发明出来的。Cosmos自开源以来,已经经过有近百个项目使用和验证,其中包括很早的Oracle的联盟链、今年上线的比如Cosmos Hub、IRIS Hub这样的大公链、还有币安的去中心化交易所使用的币安链。Tendermint也是现今被应用证明验证后,达到了商业级别拜占庭容错的共识引擎。
Tendermint的共识引擎效率非常快,像现在已经上线了几个大公链Cosmos Hub和IRIS Hub的平均出块时间是在6秒钟左右。基于Cosmos SDK的币安链是专门做去中心化交易所的,采用了更少的节点,出块速度被设置成小于一秒,支撑百数量级的TPS是完全没有问题。
在联盟的环境下,在更少节点的时候,Tendermint也是可以支持千数量级的TPS,也是目前运行最高的一个实时确认区块链。同时Cosmos SDK带有IBC跨链通讯协议,可以支持异构网络之间的互操作。Cosmos SDK开发出来的区块链可以直接支持IBC,也为后期按照需要介入跨链生态提供了非常好的帮助和支持。
Cosmos SDK是一个非常通用的开发框架,基于Cosmos SDK的Cosmos Hub和IRIS Hub公链可以允许节点在没有许可的情况下就可以加入,任何节点加入都可以参与共识。Cosmos Hub和IRIS Hub现在定义的活跃节点数是100个,前100个具有最高投票权的节点就可以参与出块,后续的一些节点没有达到前100的在候选状态。当前面的100个节点当中,如果发现发生任何投票权的变化以后,后续节点就有可能会补上。Cosmos SDK也可以支持开发联盟链和私链,这个模块里面可以非常方便地去配置共识节点,它的投票权你可以定义为一样的。一些相关的公链所需要的PoS模块,在联盟链里你也可以不要,所以打造联盟链也是会非常方便。
区块链承载了大家对于下一代价值互联网的很多期待,然而在Cosmos SDK出现之前,其实区块链来支撑复杂的商业应用是有着许多局限性的。其中大家经常会谈及,在2017年年底,加密猫这样的一个简单的DApp应用,都会让以太坊造成阻塞。这主要是因为在一个分布式的环境里面,会经常遇到如何去解决安全、性能和去中心化的挑战,而Cosmos 解决这样的问题的思路就是,也许我们不需要一条大公链来解决所有的问题,未来更可能是百花齐放的区块链互联网。
在这个百花齐放的区块链互联网里,各个应用链专注于解决一定的并不是全部的业务需求,通过跨链枢纽来完成互联互通,就像这张示意图里面的应用专有链就是Zone,也可以把它叫做分区,会有专门的链来承担链与链之间的互操作,这就是跨链枢纽,叫做Hub。通过这样的一种方式把复杂的问题分而治之,跨链枢纽和独立专有链结合,一同协作来解决区块链中安全、性能和去中心化的不可能三角形。
Cosmos SDK核心模块的介绍
Tendermint
在Cosmos SDK里面最为重要的就是Tendermint共识引擎,它是一个非常成熟先进的拜占庭容错的共识协议和网络协议,而且它大大地提升了BFT的共识效率,是现在唯一商用级别的一个共识引擎。Tendermint是2014年由Cosmos 的创始人Jae Kwon开发的。当时他参与了比特币网络的开发,而且很早在那个时代他就开始思考,因为PoW网络低效以及对环境不友好,所以他对于PoS就很早就开始进行了探索。Tendermint具有一个非常好的特性,叫做instant finality,就是及时确认,也叫一块最终性。
不像很多PoW,当出块的时候,其实并不是最终块,必须要等到一定的数量,比如6块以后,才能确定现在是不是在一个最长链上,而Cosmos的及时确认性是只要一块区块出来了,它的状态就已经是最终的了,我们就可以认定这是一个可信的不可逆转的区块。Tendermint是一个非常好的可以解决网络性能的共识引擎,包括现在一直在谈的以太坊Casper的升级,就是从PoW升级到PoS的设计,也是借鉴了很多Tendermint的前期工作。在IRISnet现在上线的公链中,有100个验证节点,之前在跑测试网的时候最高也在全球跑了超过300个节点,还能够非常高效的完成全球化的去中心化共识。
绑定权益证明BPoS
基于Tendermint共识引擎模式,Cosmos给业界还有一个非常重要的贡献,就是对于PoS权益证明的一些创新,我们把它叫做绑定权益证明BPoS,它的功能是在Staking模块当中实现的。在Cosmos 模块里面,已经有了非常多的基础功能来支持权益抵押、罚没机制。可能大家也看到了一个新闻,在Cosmos的网络上面,由于主机和备机的一个问题,结果造成了双签,节点遭到了惩罚,罚掉了5%的通证。在Staking的模块里面,它允许我们自定义激励机制,来支持自己的应用专有链所需要的安全特性。
Cosmos的BPoS是一个非常去中心化的安全的PoS,也是现在看到的最大程度的去中心化网络,因为它有Delegation(代理委托机制)的机制。作为每一个通证的持有者,如果你不想跑一个节点的话,你可以把你的通证委托给给节点,这样你的通证也能够参与到网络的安全验证当中来。同时也可以非常灵活地进行转委托,如果你觉得可能另外一个节点更加符合你的期待,在这种程度上也可以让普通的用户更大程度地参与到网络的安全治理当中去。
BPoS和EOS的DPoS有很大的一点不同,就是通证是绑定在网络上的,这也就是我们常常说的skin in the game(利益共享)。当出块的时候,可以享受出块奖励,但是同时参与网络治理的时候也要承担相应的风险。大家经常有些不太熟悉Cosmos和IRISnet的同学有时候经常会在问,现在缺省的解绑期时间是21天,为什么会有那么长的解绑期?因为这个设计主要是为了能抵御长程攻击。
链上治理
如果大家对有些参数,有不同的一些想法,觉得网络有更好的支持方式的话,那么这些参数也是可以通过链上治理,非常方便地进行调整。链上治理可以通过链上proposal的系统进行。现在的proposal系统有支持文本提案、自动链上参数修改、软件升级。自动链上的参数修改和软件升级已经在IRISnet上面部署了,在Cosmos的网络当中或许应该也会加上。
像最近在IRISnet上面,网络节点们就会对于链上参数包括对于验证者节点投票。对于在线时长或者是像DoubleSign情况下的一些惩罚机制,IRISnet做了一个提案,呼吁验证节点们能够给予支持。如果投票通过的话,那么这些新的参数就会自动在链上会得以实施,而不会终止网络服务。
详细链接请查看:IRISnet首次链上参数治理投票,开启自进化时代
BPoS是一个动态的流动性的民主权益,因为只要自己的通证参与质押,就可以参与到投票当中来。这要稍微说明一下,虽然现在网络底层实际上是支持每一个通证的持有者,只要把通证质押在网络上就能够投票,但是客户端现在还没有这个功能。预计应该是会在7月底或者8月初的时候,客户端钱包也就会添加新功能,让每一个通证的持有者,通过移动钱包也能来参与到投票治理当中来。
奖励和费用
Cosmos SDK当中还有一个重要的模块,也是开发者可以定制的模块,我们称之为Rewards & Fees(奖励和费用)。像在Tezos这样的网络,大家参与到质押以后获得的出块奖励,实际上是没有办法在链上直接完成分配的,而在Cosmos SDK中已经写到Rewards & Fees的模块中,每一个奖励都是在链上进行计算的,在每一块都能够完成这个 奖励的分配,所以也是一个非常安全的特性。
大家可能要问究竟要用什么样的通证来支持?因为是本来就是跨链网络,所以一上来这个账户系统就是多代币支持的,这样可以提升用户的体验。用户可以使用任何数字资产,只要这个通证是被你的网络里面定义成为白名单的通证,那么它就可以作为费用通证。
跨链通讯协议(IBC)
大家有时候会经常问:我如果把通证质押在网络上了,如果节点跑路了,那么我的通证会不会丢?其实答案是不会丢的。因为所有的奖励是每一块都进行了计算,而且结果都已经在链上自动执行了。最为让人期待的是Cosmos SDK模块的进展,是现在处于开发中的IBC模块中,也就是Inter Blockchain Communication(跨链通讯协议),它让区块链的互联成为可能,可以实现不同区块链之间的通证或者是数据的传递。一定要注意,这里面是通证或者数据的传递,而不是交换。
IBC是水平扩容和互操作的基础,更专注的是一个通用的基础协议,是类似于TCP/IP的基础协议。IBC现在的状态是已经完成了协议的设计,正在开发原型中。IRISnet团队现在也在尽最大的努力,希望能够在夏天结束之前,能够完成IBC的原型实现。
模块化的应用专有链示例
模块化的应用专有链示例
Cosmos Hub:跨链枢纽
刚才谈到了Cosmos SDK当中的一些核心模块,那么用这些Cosmos SDK,如何能够通过组合这些核心模块,甚至在模块化的开发接口之上,再继续开发自己的业务逻辑?在此就给大家介绍几个应用专有链的事例。
首先是Cosmos Hub。当大家在谈到Cosmos 的时候,其实如果要严格一点来说的话,它的含义是多重的。Cosmos可以泛指整个什么生态,它包括枢纽、应用的分区链(zone),这些区块链的彼此都是相互独立的区块链。而在Cosmos大生态当中。第1个跨链枢纽就是Cosmos Hub,Cosmos Hub是今年3月14号上线的,它用了Cosmos SDK当中的核心模块,包括治理、Staking。Cosmos Hub当中的治理有提案、Staking、Slashing、IBC以及奖励和费用的分配模块。
Cosmos SDK可以让我们非常方便地去打造其他的应用专有链,其中一个例子是Ethermint,Ethermint取用了Cosmos SDK当中Staking和治理的模块。同时它还新增了开发的一些模块,比如对于以太坊的虚拟机兼容的EVM模块,通过EVM支持共享安全机制(shared security)。这样的话,大家可以用智能合约和Solidity开发DApp,底层用的是非常高效快速的Ethermint作为共识引擎,Ethermint也是用来支持以太坊扩容非常好的方案,它是一条以太坊兼容的应用专有链。
IRISnet(IRIS Hub):跨链服务枢纽
IRISnet,也可以把它叫做IRIS Hub。它是一个跨链服务枢纽,图中用紫色颜色标出了IRIS Hub里面一些特有的定制化的模块。其中最核心的就是Microservices(基于服务的基础设置)。IRIS Hub打造了支持面向服务的区块链基础设施,能够去支持集成各种异构系统的计算服务,能够支持集成包括公有链、联盟链、甚至现有的传统企业信息系统,它不仅支持通证在一些异构系统当中进行传递,也更能允许像数据和复杂计算等更复杂的服务形式被跨链使用。
除了Microservices以外,在IRIS Hub上面,还有其他的一些定制化或者一些升级的开发,其中有包括更复杂的在线治理、参数的自动更新,还有一点很重要,即IRIS Hub一直是一个可自进化的BPoS网络。其中一个重要功能就是软件升级,通过软件升级可以让网络在不分叉的情况下能够继提供服务,同时还能够非常安全地根据社区决议的结果,来执行究竟是否要加载新的功能。
IRIS Hub现在还有一个让大家感到非常兴奋的消息,就是已经完成了多资产管理的模块,这个模块即将上线IRISnet的nyancat彩虹猫测试网。通过多资产管理,大家发行三种资产,包括原生资产、网关资产、IBC所支持的跨链资产。有了这个多资产管理的模块以后,也能够让IRISnet打造现在很火的DeFi(开放金融)应用。在IRISnet的彩虹猫测试网上面,我们将会对资产管理进行测试网的测试,也欢迎社区当中爱好技术的小伙伴参与到IRISnet测试网中,IRISnet对于测试网的参与者也都会给予感谢和奖励。
跨链为什么会这么难?
Harriet表示,在2017年,很多人都会觉得跨链是伪命题,经常有人在问她,跨链有什么用?有什么意义?到了2018年大家倒是都认可了,跨链是一个非常重要而且有创新性的领域,这时候就会经常会被问到是什么时候上线?也有人觉得很诧异说,跨链很难吗?在交易所里面,如果要把以太坊换成比特币,已经完成了跨链的功能。所以接下来,Harriet跟大家分享了一下,跨链为什么会这么难?
首先,就是要求资产的信息从一个网络可信地传递到另外一个网络,而且是在去中心化分布式的复杂网络环境中,信息有可能丢失,也会有很多不可信的拜占庭因子进行主观或者非主观的作恶,所以如何保证区块链接受另外一个链的信息是真实可靠的?这是需要解决的第1个难题。
第2个难题就是如何通过分布式共识,能够实现交易的一次性?也就是不能够双花。这在一条链上去进行共识已经是一个难题了,而跨链问题就是更加增加了复杂度。比如说我们如果把比特币从自己的网络转到另外一个时候,经过了这么多的hub和zone,怎么样能够保证在整个生态中的资产跟原来原生链上的正确资产数保持一致?
另外一点就是如何保证进程的原子正确性,就是交易要么成功要么失败。如果我们现在进行一笔跨链交易。比如以太坊通过Cosmos Hub发到IRIS Hub上一笔资产,万一中间有信息包的丢失,或者出现任何失败的时候,怎么保证这个交易还能够进行取消?而且尤其是这些链的一些共识机制都有可能不一样,这在去中心化的环境中都要进行解决。
现在大家一般讨论的跨链技术可以分成三种,第1种叫公证人机制,它的英语名字叫做Notary Scheme,其中最具代表性的就是Ripple提出的Interledger协议,简单而言就是通过密码学的方式提供了一个第三方托管来完成不同账本和账本间的转账。具体而言就是假定区块链a和b本身是不能直接互操作的,那么就引进一个共同信任的第三方作为中介,由这个中介来进行跨链消息的验证和转发。公证人机制的优点是在于它可以灵活支持不同结构的区块链,但是也有缺点,它一般是会采用一种类似联盟的形式,也会存在中心化的风险。
第2种是哈希锁定技术,主要支持跨链中的原子性,最早起源于比特币。哈希锁定也叫作Hashed TimeLock Contract,哈希锁定的原理是主要通过时间差来达到原子的资产交换。但是严格意义上面来说,其实哈希锁定只是做到了资产的交换,但是并不能够做到资产或者信息的转移,哈希锁定并不能算是一个跨链技术。
还有很重要的就是侧链和中继链技术,侧链技术最早的代表是Blockstream。侧链是指的完全拥有主链功能的另外一条区块链,侧链可以去读取和验证主链上的信息,而中继链是和公证人机制的一个结合体,中继链具有访问、需要和验证链进行互操作的关键信息,并对两条链的跨链信息进行转移。Cosmos就是对于中继链和侧链技术进行了优化,形成了IBC。
谈到跨链,大家经常有不同的理解,就是有些人提到的交易所实现了跨链,只不过是个中心化的跨链。其实这个在严格意义上它只是一个资产交换,而并不是我们所谈到的通用跨链通讯协议,但是IBC实际上是可以支持跨链资产交换的。
跨链IBC可以实现的一个场景就是大家经常谈到的去中心化交易所,这就是它互操作性的体现。还有Ethermint,它也可以通过跨链带来扩容的能力支持。
Cosmos IBC/Tendermint
像这张图里面可以看到的是,如果在以太网上跑不动的应用,那么就可以把ETH转到Ethermint分区当中来,Ethermint可以提供更为高效的执行速度。
另外还有治理、安全的问题,如果我们企图在一条大公链上来解决治理和安全的问题,那么它是具有很大的复杂度的。如果在一个应用专有链上解决治理和安全的问题,也就会更加容易能够去解决了。Cosmos 在一开始就采用了非常开放的架构,所以每一个链在完成关联交易处理时,还可以通过多枢纽来协作。像现在从一上线开始,IRISnet就设计了这样的双枢纽架构,有Cosmos Hub和IRIS Hub可以互相协作。当一个hub出现问题时,另外一个Hub也可以进行跨链功能的补充和支持,所以能够实现互操作、扩容、治理和安全,这就是跨链协议可以支持的非常重要的一些功能。
Cosmos/IRISnet和Polkadot没有竞争关系
谈到跨链,大家总要问Cosmos和Polkadot究竟谁优谁劣,其实是没有竞争关系的。跨链还是一个非常创新的领域,所以可以看到的是大家在进行不同的尝试。其中最核心的差异,就是安全治理的实现。Cosmos是独立治理(Independent Security)的机制,而Polkadot所实现的是叫做Shared Security(共享安全治理)。在Cosmos 中,每一条链都是独立自主的,不依靠枢纽就能够完成自己的业务功能。Polkadot中有一个重要的角色叫Relay Chain(中继链),这个就相当于Cosmos当中hub的地位。而其他的一些应用链叫做平行链(Parallel Chain),而这些平行链是需要中继链来验证的。
所以有些社区小伙伴也总结,感觉Cosmos 更像安卓系统,每一条链都有更强的定制开发空间。而Polkadot更像iOS,底层安全都是通过中心化的中继链来提供,这样也可以让开发者上手,不需要自己维护验证者节点和治理共识。所以如果应用比较轻的话,用三个月就可以让开发者快速上手,不需要自己维护验证者节点和治理共识,可以用Substrate开发平行链。如果应用重,有定制化需求,Cosmos SDK就提供了非常好的开发基础。而且像Cosmos这种独立自主的特性可以支持多个枢纽,不像Polkadot只有一个中继链为它提供安全验证。
所以像现在Cosmos Hub和 IRIS Hub可以彼此协作,加强安全支持,互为备份。这样一个多枢纽也为跨链生态的繁荣带来了无尽的想象力。
IRISnet跨链服务iService
在IRIS Hub这个跨链服务枢纽中,是最为创新的部分就是跨链服务iService的实现。如图所示,IRIS代码库中的SDK,包含了Cosmos SDK,也增加了iService模块。iService模块有着对服务的基础支持的交易类型,这些交易类型支持大家非常方便的去定义自己的服务、绑定自己的服务到提供的一个地址上。同时我们对IBC 和 relay 都进行了扩展支持服务信息的跨链可靠传递。
iService是非常灵活性的,因为它并不依赖于IBC。图中最右边的系统不是基于IRIS iService的技术开发的,那么他们可以直接通过IRIS Hub所提供的服务接口,把其他的一些公链,甚至是中心化的一些传统的商业系统,通过iService接口,把定义发布在IRIS Hub上面,这样在IRIS Hub的生态当中的其他应用专有链就可以通过iService的调用接口,来可信地调用这些服务计算了。
这里是一个服务跨链调用的示例,假定右边的区块链里面有一个服务提供商,提供了天气查询的数据服务,这时候在服务定义中就会有调用期待参数,比如时间、地点。这个服务定义会有服务绑定的地址,指定了是个跨链服务。这时候在右边的区块链上面,有一个客户端如果想要获取这样的一个天气信息的查询,那么就可以通过已经定制好的transaction type,通过这个服务调用的交易类型,把自己的需求,比如说”上海”、”6月30号”这几个参数传进去,通过里面一系列的transaction ,传递到目标链里面。
同时,Service provider在完成了链下计算以后,把信息通过PostServiceResponseTx的交易类型发回在链上。而其中,不管是作为服务的提供商还是服务的客户端,其实都不需要知道服务究竟是在本链还是在链外的,因为当这样的一个跨链请求发布到了链上的时候,Relay会进行监听。如果这个服务请求不在本链,那么它就会把信息给摆渡到目标链上去,同时让目标链上的服务能够正确执行。比如图中左边链的客户端向自己所在链发起服务请求,这个服务请求被relay监听到后,会摆渡到右链。
跨链应用场景
所以有了跨链服务了以后,开发者就还有了另外一个更加高层次的模块化开发接口。图右也显示了IRIS Hub现在正在跟生态合作伙伴进行协作开发的一些分布式应用,比如说像BEAN就是专注于数据隐私保护的医疗数据分析和交换网络。由于治理的需求,BEAN需要是个联盟链。大家也可以在IRIS Hub中享受PlatON提供的隐私服务计算。IRIS Hub7月份将会上线的多资产支持,也会对于DeFi进行支持,Axonomy将会发布自己的原生资产。同时IRISnet也会有网关,把一些稳定币、比特币和以太坊发布在IRS Hub上,能够供DeFi应用来完成理财,或者是投资等DeFi应用场景。