Skip to content

Latest commit

 

History

History
267 lines (134 loc) · 23 KB

《读懂区块链PoS共识》第十章 PoS项目例子--Cosmos.md

File metadata and controls

267 lines (134 loc) · 23 KB

Cosmos

1.1.项目介绍

Cosmos的中文翻译是宇宙,之前看过一个讲宇宙起源的纪录片《宇宙时空之旅》,IMDB的评分非常高,也叫Cosmos,其中展示了整个宇宙的浩瀚和壮阔,令人震撼。我想项目方给项目起Cosmos这个名号也是有原因的,象征着区块链世界的浩瀚广阔。

Cosmos的口号喊的很大,大概是我见过最有理想气息的区块链项目。

The Internet of Blockchain 区块链的互联网

同时跨链明星项目的Polkadot,其中开发团队的一篇博文中也起了一个旗鼓相当的口号

The Foundation of a New Internet 一个新互联网的组织结构

这两个跨链项目,无疑都在争夺的是同一个角色的位置,那就是区块链世界最底层架构。这个角色的重要性可以追溯到整个互联网的起源时代,类似于奠定互联网基础协议的TCP/IP协议。TCP/IP这个协议规范了整个互联网初期的数据传输标准,提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化,对现代互联网奠定了非常重要的基础。

如果我们认为区块链是下一个互联网时代,未来也是多链共存的这么一个情况,那么提供基础架构/协议支持多链互通是一件非常重要的,而且是必然会发生的一件事。

Cosmos作为跨链项目最早的参与者,最早可以追溯到2014年,到目前为止已经发展了5年,2019年Q1预计会上线主网。

Cosmos的愿景是实现代币最底层的价值交换,即Token交换,让Tendermint共识成为人们值得信赖的"第三方",来保证价值互换的安全性,取代目前中心化交易所实现价值交换的方法,消除暗箱操作的可能性,让密码学为安全做背书。

插件化,模块化是Cosmos一个典型的特点,可集成性让众多基于CosmosSDK搭建的项目获便利了许多。项目开发方恶意自由定制相关模块,也可以直接使用和Cosmos hub一样的机制,这是Cosmos希望作为中心的一种市场策略,即尽量降低项目方接入的成本。目前,从Cosmos论坛上看,选择使用Cosmos SDK搭建的项目已经超过50多种。

模块化,插件化只种,Tendermint就是Cosmos中一个很重要的插件,也是Cosmos团队的第一个重磅产品(SDK)。基于该SDK开发的区块链项目可以使用和Cosmos一样的共识,并可以使用SDK中的IBC(Inter-Blockchain Communication)模块和进行其他连接公链进行价值交换。所有交换都会指向到一个中心(Cosmos Hub)区域,Hub是Cosmos中一个中心记账本,接受IBC传递的信息并记录,最终实现多链之间的价值互换,其中的安全由Tendermint Core来保证。

其他重要的模块化还包括Stake模块,奖励分发模块,IBC模块等。

基于Tendermint共识建立的项目,需要自己的验证人体系,这和Polkadot的分享验证人机制不同,Polkadot有类似于Cosmos的hub,叫Relay Chain,其中心的验证人可以帮助连接的侧链做区块验证,而Cosmos的hub只是承担记账中心的功能,没有帮助侧链验证的功能,这是两者非常不同的一种策略。

Cosmos测试网跑了大概2年时间,也一直在修正roadmap,我在写这本书时,Cosmos已经完成测试网的测试,正在进行最终上线前的代码审计。

1.2.代币情况

Cosmos是一个双代币结构的区块链,主代币称号为Atom,主要用于Stak;次代币称号为Photon,主要用于流通性。ICO主要是众筹的Atom,其总量为68,475,963个,Photon总量不定,按照ETH1:1数量锚定。

总共1090人参与了Atom的众筹,整个募资结构分为ICF 基金会(10%),AIB 开发团队(10%),Initial Donors 战略投资伙伴(5%),ICO (75%)。

Cosmos ICO 日期 2017 4月4号,30分钟募资结束,募资金额1700万美金左右,其中btc占1/3,eth占2/3,按照当时估值为一个Atom0.1美金左右。

Atom每年会有增发,增发率7%~22%,具体的比例根据当前Atom Staking的数量。当Stake数量大于整体Atom总量的1/3时,增发率为7%,小于1/3时,增发率为22%。

1.3.代币作用

Atom的作用主要用于Stake,Photon的作用主要用于流通。因为Cosmos的Tendermint共识是PoS+BFT的混合共识,Stake是保证系统安全的重要因素,加上拜占庭容错机制的加入,Cosmos对Atom的Staking量要求更要严格。

Cosmos会有系统增发,越多Atom Stake,增发率越小,这会让持有人为了防止Atom被增发稀释,通通来Stake,那么系统的Atom流通性就减弱,为了提高系统代币的流通性,Cosmos新发了Photon来代替Atom作为系统流通性的燃料。

当然,除了Stake,Atom和其他PoS共识的公有链一样,还拥有链上投票的作用。Photon则只是充当手续费的燃料,另外,Cosmoshub支持手续费白名单体系,也就是说,未来只要是被大部分人认同的手续费token种类,都可以被当做为手续费使用代币。

1.4.发展路线

Cosmos对自己路线图的规划一直都比较清晰,官网对路线图的记录页一直保持着完整的记录。以下列举了从第一个测试网以来到即将上线的路线图:

  • 2017-10-19:gaia-1000测试网,支持Token的交易

  • 2018-01-31:gaia-2000测试网,全节点和验证人节点可以升级连接的节点

  • 2018-04-20:gaia-3000测试网,社区成员可以从创世区块开始,参与网路验证

  • 2018-04-20:gaia-4000测试网,全节点验证人可以声明成为验证人节点

  • 2018-05-02:gaia-5000测试网,验证节点出块可以获得区块奖励

  • 2018-06-08:gaia-6000测试网,持币人可以通过委托,将代币委托给验证节点

  • 2018-06-08:gaia-6000测试网,加入Slash,惩罚不对区块进行验证的验证节点

  • 2018-07-16:gaia-7000测试网,支持链上治理,简单的投票

  • 2018-07-21:gaia-7000测试网,支持Ledger Nano S 硬件钱包

  • 2018-09-28:GoS牛排赛

  • 2018-10-31:gaia-9000测试网,支持区块和手续费奖励

  • 2018-11-09:gaia-9000测试网,Cosmos SDK v0.26版本

  • 2018-12-18:GoS牛排赛,开始测试网测试比赛

  • 完成SDK审计

  • 结束GoS牛排测试赛

以下是未来规划

  • 建议创世区块的代币分配

  • 上线主网

在上线主网之后,还要对一些既有提案的表决,决定是否执行,如

  • Atom的交易:上线主网时,Atom并不能转移

  • 支持IBC:上线主网时,跨链资产交易还不能进行

  • 社区治理

从发展规划来看,Cosmos算是发展比较顺利的,至少从每个里程碑上看,都有在做事情。但是,Cosmos主网上线也是跳票了几次,本来在2018年中要上线了,现在已经延续到2019年Q1了。从测试网GoS的比赛来看,网络稳定还并不明朗,我很惊讶官网在此时结束了GoS,并宣布即将启动主网上线。那既然开发团队都官宣了,我们就拭目以待吧。

1.5.设计哲学

Cosmos的设计哲学围绕着两个方向展开的,一个是扩容,一个是互通。

扩容的设计采取了侧链的方式,非必要且不重要的价值交换都放在侧链上进行,重要的,必要的的价值交换都放在主链上进行,这是目前主链性能瓶颈出现下的解决方案。这能有效解决现在的性能问题,并且顺从整个生态的发展方向。Cosmos正是这样的设计思路:让所有主链都连接自己,成为Cosmos Hub的侧链,并承担起一个中心账本的作用,记录连接自己的各条主链之间的价值互换关系,这也是Cosmos设计哲学围绕的第二个方面:互通。

Cosmos设计了一套中心(中心)-区域(Zone)的模型,每个连接自己的Hub的都是一个Zone,每个Zone有着自己的作用,比如产权链,金融链等,每个Zone只有需要进行价值交换,即Token互换时才会和Hub发起交互。为此,Cosmos特意设计了一套交互协议IBC(Inter Blockchain Communication)来保证接入的Zone都可以以统一标准进行交互,这样一来,Cosmos hub就可以成为一个类联合国一样的机构,统管,协调来自各个Zone的价值交换。

所以可以看到,Cosmos的设计哲学,将解决问题和基础架构合理的结合在了一起,一方面看到以太坊的性能瓶颈,一方面看到多链架构下有交换价值的需要,Cosmos以一个统一的协调方出现,安全,有效的模型让人们看到了区块链世界,基础架构的重要性。

为此,Cosmos开发团队给接入方提供了诸多的便利,提供了基于Tendermint的SDK,用于开发方可以轻松实现自己的区块链项目,并集成了接入Cosmos Hub的IBC模块。同时Cosmos项目方还为那些不是以SDK搭建的区块链项目做了连接桥,方便现存的区块链也可以简单接入Cosmos的中心,进行价值交换。

Cosmos SDK实现了多功能模块的可插拔,这意味着以Cosmos SDK搭建区块链项目的项目方有比较大的便利性,也有比较大的可选择性来建立自己的生态,这和Polkadot项目方只能依赖系统的验证人系统的方式是大大不同的。

这也许就是Cosmos设计哲学给Cosmos带来的优势吧。

1.6.Tendermint

Tendermint是Cosmos的共识名称,其背后是BFT共识。也有人将Cosmos共识称作为BPoS,因为Cosmos中也有PoS共识存在。BPoS,其中的B是Bond(抵押金),意思是说Cosmos其实也是一种抵押金的PoS共识。

Tendermint中利用的是非常典型的拜占庭容错方案,一个高度上,验证人被提前选举出来,按照投票权重,通过随机算法被选出,成为区块的出块人,在此高度上打包交易,生成新区块,然后所有人对新区块进行验证,并投票,投票通过后新区块生成,转而进入下一个循环。投票的过程有两个阶段,一次Prevote,一个Precommit,两次投票都超过2/3的投票权重,新区块才得以生效,否则会有新的区块代替没通过的区块来重新发起投票。因为有了投票权重的加入,Tendermint为Cosmos带来了及时的区块确定性,这让Cosmos的交易速率大大提高。

投票权重的概念是PoS在最早提出时就已经明确的概念,意思是持币人币量占总量的比例(而非验证人数占据的比例)。Tendermint的安全和投票权重有很大的关系,所以为了让足够多的Atom Staking到系统中来,Cosmos定义了动态的高稀释通胀方案。Staking的越多,稀释的越少,投票权重也就越高,对区块达成共识权重也更大,也就更安全。

为了提高性能,Tendermint规定了Cosmos Hub在第一年只有100个验证人位置,然后以每年30人左右的人数增加,人数的增加依赖于网络速度的提升(如5G),这些验证人以接受的Atom委托量决定是否从全节点转为出块节点。

Cosmos中的委托和Tezos的委托还不太一样,虽然都是将代币权利关系转移,但是Cosmos中的委托需要用户一起来承担系统风险,委托是一个池子的概念,而不是块的概念。这个池子可能面对很多风险,这个风险可能来自于系统的不成熟,也可能来自于出块节点的不作为,或者是有意作恶,当发生系统不可预期的情况发生时,系统会扣除池子里面的Atom,扣除的Atom按照比例摊到每个委托人身上,同时,除了承担风险,委托的代币还会被系统锁定15天左右的时间,来防止长程攻击。

Cosmos是池子式的委托模式,Tezos是基于块的委托模式,我认为Cosmos这种类型的委托是对Tezos的进一步设计,是将"市场解决"的这只手变成了开发团队的直接规定,Cosmos这样做可以将大量的代币委托引向社区名望较大的验证人,也就是有效的让代币趋向于前100个验证人,这对整体系统启动有直接作用。

这前100名委托量的排名,和EOS投票选出前21个验证人的逻辑很相似,从这个角度上看,可以将Cosmos的系统看成是一个放大版本的EOS,只不过Cosmos是允许将验证人给委托/投票的人给与区块奖励分红的,并且将这种分红模式做成了功能,写在代码(Protocol)里了,EOS则不行,这样分红会被宪法定义为贿选,是不合法的。

Cosmos对出块节点的要求较为严格,要求24小时在线,如果出现不在线的情况,会被系统Slash,还有新的提案需要投票时,节点也需要对提案进行投票,不积极参与投票的也会被Slash。这种Slash的制定和BFT的性能,安全都有关系,这也是Tendermint比较典型的特点了。

总的来说,被抽出来的Tendermint共识,被人们看到了轻松实现区块链项目的可能性,连币安的公链都是基于Tendermint共识来搭建的,可见,其便利性还是有项目方看中的。

Tendermint首次实现了无需信任的Token交互机制,用中心Hub运行共识来保证安全,这种跨链技术和其他跨链技术,如第三方信任人,哈希时间锁等方式并不同。这种方式目前来看,被验证是可行的,但还需要Cosmos上线来检测。

1.7.性能

按照主网上线前的测试网(Gos,Game of Stake)演练来看,200+个验证人,Cosmos的出块速度为7s左右,TPS没有真实的数据。由于GoS验证人超标(主网第一年只会有100个),所以测试网的出块时间应该是不准确的,如果按照2倍的关系来看,GoS的出块时间在3s左右。

另外一方面,从Cosmos官网显示的测试数据来看,Tendermint共识的出块时间在1s左右,TPS在1000+,但不确定这个数据是基于哪个测试网的。

不过官网显示的一般是理论值,所以只能看看。结合真实的测试网数据来看,理论值都需要打对折,甚至更多,但是,如果仅仅是打对折的话,那Tendermint的共识应该还算蛮快的。

Tendermint的性能和验证人数量多少强相关,验证人数量过多,性能肯定是降低的,Cosmos官网中和了性能和去中心化的需要,第一年定了100个验证人。按照现在的市场情况来看,1个项目启动初期能有100个验证人,就已经非常不容易了,其他基于Tendermint搭建的项目,很可能达不到如此高的数量,从这个角度看,性能还会有所提升。

1.8.运行

Cosmos节点有全节点和出块节点之分,运行Cosmos的出块节点有门槛,得到的投票权重必须是前100名之内。节点运行简单来说只需要两步:

  • 运行节点

具体操作步骤可以看官网:https://cosmos.network/docs/gaia/what-is-gaia.html

  • 创建验证人

运行好节点后,需要创建成为验证人,并设置自己的投票权重(Voting Power),比如你的账户已有Atom,你可以将该账户中全部的Atom都设置为投票权重。如果该权重排名不在前100中,那么这个验证人将不能获得选举出块的机会。

增加投票权重的方式可以通过二级市场购买,也可以从委托用户处获得。

1.9.出块人

Cosmos的出块人也叫验证人(Validator)第一年只有100个名额,每年新增十几到二十个位置不等,最终维持在300个验证人左右,以下是验证人的年增加情况:

  • Year 0: 100

  • Year 1: 113

  • Year 2: 127

  • Year 3: 144

  • Year 4: 163

  • Year 5: 184

  • Year 6: 208

  • Year 7: 235

  • Year 8: 265

  • Year 9: 300

  • Year 10: 300

任何人都可以成为验证人,只需要按照系统要求,运行节点程序,参加到网络维护中来,并获得足够多的投票。验证人的职责很简单,就是保护网络安全,只需要按照系统要求完成系统所安排的工作,就能获得系统的奖励,比如出块,投票等。当然,验证人不能做出毁坏系统的行为,比如双签,否则会被Slash。下面列举一下Cosmos验证人所需要做的工作包括有:

  • 出块:完成指定时间系统的打包交易,生成新出块的工作

  • 投票:参与链上治理,决定社区发展方向

  • 在线:保持投票权重7x24小时在线

由于采用了较为典型的BFT,Cosmos对验证人的在线时间要求极其严格。Atom的总量我们知道是系统中所有的投票权重,只有当拥有投票权重超过66%以上的验证节点出现的情况下,Cosmos网络才会启动创世区块。而在启动之后,Cosmos对于超过66%的共识安全要求,让节点在线的严格性比其他PoS公链要强很多。

所以最早在验证人的要求上,Cosmos提出了诸如,要是公司或者团队,需要硬件服务器

,在社区有足够高的影响力等在一般公有链上,体会不到的"高大上"要求。但从GoS测试网比赛看来,不是所有验证人都能满足如此严格的要求。

Cosmos的验证人可以接收持币人的委托,以此来达到前100名投票权重的要求,当然如果验证人自己有足够多的Atom,也可以不接受委托。验证人接收委托会被要求设置一定的委托手续费,这系统层面的设定,系统会按照这个比例给委托用户做区块奖励的分红。

另外,Cosmos每年增发7%~22%的Atom用于奖励维护网络的验证人。这些验证人获得奖励的多少和做的工作量有关系,而工作量的机会获得是按照验证人所拥有的投票权重来确定的,权重越高,获得的机会越多,同样,奖励也就越多。

目前来说,跨链的验证人还是比较有吸引力的,Cosmoshub承担了一个中心验证人角色,如果这个hub真正成为了区块链世界的Internet,那么这个中心验证人的角色,肯定是非常非常重要的。

1.10.持币人

持有Atom的人可以将代币委托给验证人,来获得区块的分红奖励。当然,前提是你委托给的是前100的投票权重的验证人,否则是没有奖励的。系统会按照验证人设置委托手续费,扣除后手续费后,将奖励发送到委托人用户。

除了Stake,Atom的持币人目前还有太多的使用功能。

1.11.激励

Cosmos的激励方式有3种

  • 区块奖励(Block Provision),奖励是Atom,主要是用于奖励那些Stake Atom的委托人

  • 区块奖励(Block Reward),奖励是Photon,主要用于奖励 Ethermint zone的验证奖励

  • 手续费(fee),奖励是白名单中的代币种类,现在有Atom和Photon

因为Cosmos是跨链架构,所以会多出来一个区块奖励,这个区块奖励是为了激励Pegzone区域的验证的,也就是支持那些不是基于Tendermint共识的区块链项目的。这些项目如果想接入Cosmos,需要有一个单独的架构来支持,而这个架构的验证支持,同样需要经济激励,这个多出来的区块奖励(Block Reward)就是奖励给这些验证人的。

Atom其总量为68,475,963个,每年增发7%~22%的比例用作是区块激励,按照Stake的比例来决定奖励数值,但目前具体单区块,单行为的奖励还未明确。Photon的初始总量是1:1锚定ETH数量的,最终总量还没有明确,增发的情况也不确定,因为Ethermint的开发计划还暂时在搁浅中。

另外,为了Cosmos的后续发展,Cosmos设计了一个基金池子,来源是交易费Fee中的一部分,主要是用来资助后续的Cosmos开发人员的工资。

1.12.惩罚

Cosmos的惩罚Slash方式有以下3种

  • 双签:在同一高度签两条不同链的区块

  • 不在线:没有参与Tendermint的共识流程,如Prevote,Precommit等

  • 不投票:没有参与社区的治理投票

除此之外,还有一些不能太明确的"坏"行为,如节点崩溃,失去连接或是遭遇DDoS攻击等这些行为都会让该节点的抵押金被Slash。

具体Slash多少还未确定,但可以明确的是,如果发生Slash,委托人的委托金一样会被Slash。举一个例子,一个验证节点有1000个Atom,其中有600个是通过委托来的,由于非恶意的行为,该验证节点在4545高度发生了双签,导致系统扣除了100个Atom。这100个Atom会按照验证节点的Atom比例来扣除,这里就是节点被扣除40个,委托人总共被扣除60个。

前面说过,Cosmos对验证人的要求极其严格,要求7x24小时都需要在线,否则会被Slash。节点在线就相当于投票权重在线,这能增加系统被攻击的成本,这个Slash就是上述描述中的第2点。

1.13.治理

链上治理不是Cosmos的特点,Cosmos的治理目前看到的只有链上投票,比较简单,而且没有上线,相对于Dfinity和Tezos来说,还没看见什么创新的方向。

1.14.问题

从我参加Cosmos主网上线前的测试网来看,Cosmos的团队并没有像我想象中的出色,第一印象感觉就是人力有限,很多应该在前期由开发团队主导的工作,并没有得到及时的支援,反倒是社区里面有几个团队还比较活跃,帮助开发团队完成了很多方面的组织工作,甚至是修复工作。

但宣传方面,Cosmos是比较在行的,官网随着项目进展的多次改版,路线图的及时更新,以及创始人频繁在各个大会上的演讲,Cosmos的市场宣传一直在有条不紊的进行。

这也许会给人一种错觉,只会宣传,不会做事。但这可能只是我的个人偏见,从Cosmos的另外一个Hub——Irisnet团队口中得知(Irisnet的团队曾经是Cosmos中国开发团队),Cosmos团队其实是一个非常追求完美的团队,对很多新的技术都保持好奇心,同时也是很非常积极向上的一个团队。

这点我是比较认同的,但是我也觉得这样所带来的问题是,无法明确一个很简化的产品方向,大而全的设计会导致不可预知的情况出现,导致延期上线,投资者诟病等。相信,这也是为什么Cosmos主网屡次跳票的原因之一了。

另外一个问题就是Cosmos的融资额度有点小了,总共1600万美元,不知道这个资金是否能支撑Cosmos的开发,好在,融资时,获得ETH和BTC的价格都较低,且在2017你那4月进行的ICO,如果团队在牛市将ETH和BTC都换成了法币,那肯定是可以支持团队不断发展的。目前,Cosmos团队并没有公布财务状况。

1.15.未来

和Polkadot一样,Cosmos站在跨链的风口,未来还是可期的。如果我们认为未来肯定是一条多链的世界,公有链,联盟链,私有链在各个行业里面生存,那么其本身价值的交换就肯定有需求,这个需求在Cosmos看来,可以非常轻松的满足,同时又不会对接入的生态造成破坏。

我个人还是比较倾向多链架构的,未来的区块链世界肯定不是一条公链主导,而是多链并存的情况,那么多链并存的底层基建就是强需求,那么最早开始搭建的Cosmos,是有一定优势的。