《读懂区块链PoS共识》第十章 PoS项目例子-以太坊

  • 时间:
  • 浏览:51

  接下里的第十章,我会分别写一下各个PoS项目,一共包括8个主流项目。每个项目我会主要介绍它的简介,Token分配/作用,运行,奖惩,验证人/持币人,问题和未来等角度。由于微信公账号的文字是50000的限制,所以我会分成多篇来发。

  项目介绍

  以太坊(Ethereum)是第一代智能合约平台,也常常被称作为区块链2.0,2013年由Vitalik Burtain发起。官网上的宣传语(Slogan)是:

  区块链应用平台(Blockchain APP Platform)

  以太坊是一个支持运行智能合约的平台,智能合约是一段实现某种功能或者服务的代码,智能合约+用户界面就可以理解为现在说的Dapp(去中心化应用,Decentralized Application)。

  运行在以太坊上的Dapp,具有永不宕机,透明,抗审查和抗第三方干扰等中心化app没有的优点。而支持Dapp这套架构的背后,其实是一个分散在世界各地的节点网络,是一个名副其实的世界超级计算机。

  以太坊的崛起归因于Token发行,2017年ICO的狂热,很多项目方因为以太坊发行Token的简单性,都使用以太坊来发行Token进行融资,甚至很多有自己代币的主链项目,为了提前获得认同,也会用以太坊发行代替Token来融资,等待主链上线后再做1对1映射。巨大的需求性,使得以太坊一战成名,名气和市值双丰收。社区里面,很多用户除了知道比特币,最多了解的就是以太坊了。

  发行的代币逻辑实际上是写在以太坊里的智能合约,运行合约需要消耗以太坊的Gas,Gas需要用以太坊自己本身的流通代币(ETH)来购买,这变相导致了ETH的需求猛增,价格更是水涨船高。直到现在,ETH的市值仍然是老二的位置。

  ICO不仅给以太坊带来了市值的飞涨,同样带来了众多开发者,虽然现在以太坊遭遇了性能瓶颈,但是后来的公链项目,在开发者的数量上,也从来没有超越过以太坊,这也是以太坊能继续在今天飞速发展的重要原因了。

  2019年会是公链打架的一年,起步在2014~2016年的几个公有链项目,都是剑指新型智能合约平台位置,针对以太坊的性能提出了新的优化计划,这些项目中包括Cardano,Tezos,Dfinity,Polkadot等,其中有曾任以太坊CTO——GavinWood主导的Polkadot,以太坊前支持者,主导ETC分叉的重要任务的开发者——Charles Hoskinson带领的Cardano,还有好些项目都是前以太坊技术大拿跳出以太社区后新做的项目,这些竞争者势必会给以太坊带来巨大的威胁。

  而以太坊是否能继续领跑智能合约平台,2019年是关键的一年,而2019年也是以太坊从PoW共识转型PoS共识关键的一年,还有大家最关心的性能升级方案——分片(Sharding)等等,如果过程中不出什么幺蛾子,以太坊按部就班的实现既有计划,也许以太坊还能继续占据智能平台一哥的位置。

  代币情况

  以太坊的代币叫以太,代号是ETH。2014年发起众筹,总发行量是7.2千万枚,其中,6千万枚ETH给众筹用户,1.2千万枚ETH给以太坊基金会和早期开发者,另外还有给矿工的增发机制,以太坊PoW共识,一个块有3枚ETH奖励,孤块或者弃块也有0.625~2.625枚ETH的奖励(和比特币不一样),按照15s一个块来说(不存在孤块或者弃块的情况下),每年发行新的ETH数量为630万。ETH每年的增发有硬顶,硬顶是1.8千万枚ETH,这意味着ETH的增发是固定的。

  考虑到每年因为各种原因丢币的情况(如销毁、死亡、丢币),理论上,以太坊社区认为目前的增发比例能满足一定均衡,即保持ETH的总量不再继续增多。

  但是目前这种情况,随着以太坊从PoW共识转向PoS共识过程中会发生转变。称号为康斯坦丁(Constantinople)的硬分叉,就有EIP(以太坊提案缩写)提议修改奖励机制,希望将现在以太坊的区块奖励从3ETH降到2ETH。作为一种降通胀的手段,以太坊官方博客在2014年发表了对以太坊的通胀解释:

  经济型通胀分为两种,一种基于ETH的价格来增发,一种是基于ETH的数量来增发,这两种不能完全分开,因为基于数量的增发往往会影响价格。以太坊选择的是后者——基于数量来增发,考虑到每年的丢币,目前以数量做增发的比例来计算,以太坊实际上是一个紧缩性货币。因为每年增发有硬顶1.8千万,第一年的增发率是1.8/(1.8+6)-1%=22%,第二年的增发率是1.8(1.8*2+6)-1%=17%,以此类推,每年的通胀率是降低的(其中1%是指每年的丢币量比率)。这样,大约在64年后,通胀率会降低到1%左右。

  而到真正的PoS阶段,奖励还可能会发生新的变化。在我写这本书的时候,以太坊正要准备进行康斯坦丁的硬分叉,Casper FFG的奖励模型还没没有完全确定,但目前可以可以确定的是,每年设置的增发硬顶是不会变的,甚至可能比这还少。

  代币作用

  ETH充当以太坊网络资源使用手续费的作用。以太坊是一个世界计算机,当一个程序需要跑在以太坊网络上时,以太坊需要为其分配足够的网络资源(计算,存储,带宽等),那么以太坊是如何确认应该分配资源多少呢?

  以太坊采取了资源使用计费的模式,也就是说,按照运行的代码所需消耗的资源量计费,来收取运行者的费用,这个费用就是ETH,这也是ETH在以太坊中的基础作用了。

  具体的计价是这样的,一个程序的运行费用=Gas x Gas Price。这里的Gas是对应于一个交易(Transaction)中以太坊虚拟机(EVM)的实际运算步数,Gas Price是指运行着愿意给每一个Gas付多少钱,钱也ETH计价,最小单位是Gwei,1ETH=10^9Gwei。

  发展路线

  以太坊发展路线分为5个主要开发阶段(大升级),和多次的硬分叉开发阶段(小升级),小升级穿插在5次大升级期间。硬分叉的出现并不都是计划的,有的是为了解决社区问题,有的是为了解决线上bug,有的是为大升级做准备的。比如,著名的DAO被攻击事件,就是解决资金被盗的问题的。

  每次硬分叉都会有社区分歧,分歧的结果可能会导致社区分裂,DAO事件的硬分叉就导致了以太坊社区分裂成了以太坊和以太坊经典,代币也分成了两个——ETH和ETC。但是硬分叉却又是必须的,因为区块链早期阶段的代码并不是很完善,可扩展性并没有那么强,后期扩展就必须要要写新的代码,而不能在原来的代码上缝缝补补。当写出来的代码越写越多时,会发现向后兼容越来越困难,如果硬是写代码兼容可能会导致各种意料不到的隐患,这对一个金融系统来说可不是什么好事,所以最好的方案就是重写,不对以前的代码做兼容。以太坊上有很多次由基金会主导的硬分叉。

  下面的时间表,是在2015年3月由Vinay Gutpa在提出来的,Vinay Gutpa主要提了4个大阶段,包括前沿,家园,大都会和宁静,后被社区采用。其实,在前沿之前还有一个奥林匹克测试网的阶段,有些资料会把测试网和前沿写成是一个阶段,可能是因为两个阶段离的很近,功能又很像,就写到一起了,我在这里明确一下。

  · 奥林匹克(Olympic testnet):测试网,时间是2015年5月

  · 前沿(Frontier):从第0个块开始,时间是2015年7月~2016年3月,发布以太坊1.0。

  · 冰河世纪(ICE AGE)- 在200000区块引入指数级难度增长的一个难题,激励向权益证明的过渡

  · 家园(Homestead):从1,150,000区块开始,时间是2016年3月~2017年10月,将以太坊1.0从Alpha带到了Beta阶段。

  · DAO - 在1192000区块恢复被破坏的DAO合约的硬分叉,导致以太坊和以太坊经典分成两个竞争系统。

  · 大都会(Metropolis):从4370000区块开始,时间是2017年10月启动,主要是提高用户的使用体验。

  · Byzantium 拜占庭,大都会的第一阶段

  · Constantinople 康斯坦丁,大都会的第二阶段

  · 宁静(Serenity):还没公布启动日期,主要是转型到PoS

  宁静这个阶段,Vitalik定义了这个阶段一些解释,如下图:

  

  在写这本书的时候,以太坊的升级正在进行大都会的第二阶段康斯坦丁。康斯坦丁包含两个重要的升级,1个是降低区块奖励,从3ETH降到2ETH;一个做PoS共识的转型。这次社区对于硬分叉的意见比较一致,一般情况下,不会有分叉币产生。

  在康斯坦丁硬分叉结束后,以太坊基金会应该会着手准备最重要的第四阶段的升级,这部分的升级是至关重要的转型升级,也是最早在以太坊发布技术黄皮书时候就决定的,到时候Casper登场。

  Casper FFG和Casper CBC

  Capser共识的发展重点,我觉得有两个,1个是抵押金-削减(Deposit-Slashing)策略,2是BFT拜占庭共识。再引入拜占庭共识之前,原来的第2个重点叫做是押注共识(Consensus by bet),但后来押注共识被BFT取代了。

  押注共识主要是为了获得PoS共识出块的最终确定性,这个概念属于PoW的衍生寓,PoW里面矿工通过押注算力、电力资源来获得出块机会,但每个高度只有一个块,很多矿工的工作量其实是浪费的,换个解释就是很多矿工投入了自己的资源,来达成共识,获得出块的矿工获得了奖励,而大部分人是没有奖励的。而PoS的验证人要获得奖励也需要进行押注:即在出块高度,验证人选择对已出来的区块进行验证,被押注最多的哪个块会成为新高度,从而获得奖励,反之,则不会获得奖励,并且会被扣除对应的抵押金。

  以太坊的PoS算法分为两个版本,一个叫Casper FFG(Casper the Friendly Finality Gadget),由Vitalik领衔;一个Casper CBC(Casper the Friendly GHOST:Correct-by-Construction),由Vlad Zamfir领衔。准确来说FFG是一种PoW和PoS的一种混合共识,CBC是一种纯PoS共识。

  Casper最初只有一个版本,从2014年开始研究,分成两种版本的时间点是在Vitalik为Casper引入BFT机制后,Vlad对于现有BFT的实现方案不太认同,转而采用了一种叫Correct by Construction" (CBC)的方案替代,才有了新的Casper CBC版本,两者大概的时间周期是:

  · Casper FFG(2017年Q3)

  · Casper CBC(2018~)

  大家都会比较疑惑为什么以太坊的PoS要研究这么长时间,如果2019年还不能部署的话,那么这前前后后花了5年了,这5年里面有很多项目都基于PoS上了主链,其中不乏一些出色的项目,2014年的Tezos已经在2018年上线了主网,2016年的项目,Cosmos和Cardano也宣称会在2019年上线主网。这么一比,速度差距就出来了。但是社区也有说辞,有3点原因:

  · PoW改PoW比出身就是PoS要复杂的多

  · DAO被攻击成为社区分歧

  · 上海DOS攻击

  这些原因直接导致了PoS研究的延期,其中DAO时间和DOS攻击让社区分散精力的时间起码在半年以上。

  2017年初,Casper开始重新进入主流的研究周期,后来也出现了像Casper FFG和Casper CBC这样的研究主力。

  FFG和CBC两种版本独立发展,除了在共识上有一定的差别,在激励和惩罚上也有差别,FFG主张小惩小罚,CBC主张大抵押金大罚,而且要罚要罚所有相关人员。FFG的设计要相对于简单,且尝试用智能合约的方式来部署实施,CBC则是独立于PoW外一种完全干净的PoS共识,实现起来较为复杂,且理论上可以挂在任何PoW的上层。总的来说,两者都是以太坊转型的方案,目标也一样,只不过用了不同的技术手段,Vitalik在一次Twitter的头脑风暴中,对FFG和CBC进行了总结:

  34. In simplest terms, in Casper CBC the finality overlay adapts to the fork choice rule, whereas in Casper FFG the fork choice rule adapts to the finality overlay.

  翻译为:简单来说,Casper CBC的最终确定层适用于分叉选择的规则,而Casper FFG的分叉选择规则适用于最终确定层

  目前两个方案都没能落地,两者的研究团队都在加大马力,希望能成为最早部署的那个方案。从Vitalik的Twitter中可以看得到两个团队的竞争很激烈,但毕竟CBC的复杂度更高 ,所以FFG在2019年内率先部署的可能性很高。加上以太坊从PoW转PoS过程中会碰到很多问题,转型肯定阻碍重重,那么FFG这种从PoW转型到混合的PoW+PoW的过渡方式,可能会是一个更好的方案。PoW-FFG-CBC也符合以太坊社区至始至终追求纯PoS共识的理念。

  从目前进展来看,以太坊的第5阶段——宁静,极有可能先实行FFG,我们也很有可能看到以太坊的第6个阶段,可能是纯PoS的实现(CBC)。

  运行

  Casper FFG的网络由验证人来维护,验证人需要跑节点客户端,通过操作命令来修改当前的状态,可以执行的操作如下列表。在FFG中,每个验证人运行的节点都是一个状态机,每个状态机的状态通过发送操作的交易来改变,以下介绍一些验证人运行节点时的操作步骤:

  创建验证人代码

  · 部署一个智能合约,用来验证验证人的签名

  提交抵押金

  · 调用casper.deposit(validation_addr, withdrawal_addr) 来传递步骤1中的验证人合约地址和提取地址

  [每个周期开始时] 提交新的投票信息:

  · 等待检查点在主链上上已经超过1/4周期长度再投票,这保所有证验证人都投上同一个块

  · 根据你当前链的区块头,生成未签名的投票信息

  · 广播信息

  退出

  · 提交退出申请

  · 调用casper.logout(logout_msg) 传递提交的信息

  提取

  · 调用casper.withdraw(validator_index),你的资产将会给发送到2步骤中的提取地址

  Casper CBC:目前还处于论文的验证阶段,很多实现还在不断的修正,以后等到CBC实现开始明确的时候,我再来补充。

  性能

  几乎可以确定的是,如果以太坊实现了Casper,无论是FFG还是CBC,都会给以太坊带来性能上的提升,但由于还没真正实施,具体会提高多少TPS,还不得而知(目前以太坊大约15s一个块,TPS在7~8左右(1s处理7~8笔交易)。

  Vitalik在今年的Devon4上公布了FFG的初步性能数据:

  · 交易确认时间(8~16s)

  · 最安全的交易确认时间(10-20m)

  · ~1000倍以上的性能提升

  另外一项提高性能的策略,是结合了分片技术(Sharding)的Casper——Shasper,目前会和FFG版本的Casper一起推出,如果真的能实现,会使以太坊的交易处理速度更上一个台阶。

  激励

  Casper FFG的激励是一个短期性的激励,因为FFG是一种PoW和PoS的混合共识,仍然需要过渡到纯PoS共识去,所以为了让过渡变的被需要,FFG的激励奖金池总共只有125万ETH增发,这样的增发量只能维持2年左右的时间。当增发的ETH被消耗完之后,新的社区决定会出来,来决定纯PoS情况下可长期维持的增发比例。

  上面有说到过以太坊社区的原则是不再多增发,且每年有增发硬顶,那么混合共识里面奖励给PoS验证人的ETH从哪来呢?答案是,PoW矿工的奖励里。

  目前,PoW出块人可以获得3个ETH,社区计划将PoW的奖励慢慢减少,从3ETH的奖励最终减少到0.6ETH。目前以太坊正在康斯坦丁硬分叉阶段,其中有一条提议就是将3ETH减少到2ETH。减少奖励和PoS过渡一样,都是一个慢过渡的结果。

  PoS中增发的ETH会分给验证人,包括出块和在检查点投票。出块是有奖励的,这不用解释了,检查点不是一个新的技术,以太坊将比特币上的检查点技术用到了以太坊的PoS共识中来,用来确定区块的最终确定性(在检查点>2/3的人投票),区块的最终确定性能一定程度上提高攻击成本,同时能带来性能提升。表象就是交易的速度变快了,而不需要在交易发出后还需要等待6个区块确认。

  在正确的检查点(每50个块一个周期Epoch,每个周期最后一个块是一个设立的检查点)完成投票,验证人可以获得成功投票后所获得奖励的1/8。理论情况下,矿工可以获得总体增发量的1/5。

  惩罚

  Casper FFG的惩罚策略,在Vitalik的博客中进行了比较详细的描述,我对其惩罚方式进行一下精简:FFG会对企图分叉的验证人进行惩罚。

  验证人企图分叉的行为有多种,这些行为会被Slash,包括但不限于

  · 双签(双Prepare):BFT-Prepare阶段,尝试提交一个同样周期值(Epoch)的不同哈希或是不同周期来源值(Epoch_source)

  · 双签(双Commit):BFT-Commit阶段,尝试对同一个哈希值提交多次Commit

  FFG采用了拜赞庭容错算法BFT,并进行了优化。BFT会带来基于区块确定性的特性。为了让区块交易达到及时确定,提高攻击成本,典型的BFT会要求验证人除了出块,还有对当前区块的状态进行签名确认。FFG中新区块确认前有两轮投票,只有投对了对应的区块(>2/3的验证人都投了的区块),才会被认为合理的行为,其他的尝试都可能被系统判定为不良行为,然后被Slash。所以我们看到两轮投票都能产生双签的可能性,这种可能性是当前以太坊主要惩罚的对象。

  验证人

  以太坊上的出块人还是PoW的矿工,PoS中的矿工称作为验证人。准确来说,过渡阶段的FFG,PoS验证人除了承担出块的作用外,还承担验证区块的作用,这和一般的出PoS共识差不多。以太坊里面,任何拥有ETH的人,都可以成为以太坊的验证人。在Casper FFG上,一个完整的验证人周期是:

  

  1. 交抵押金:需要往Capser的智能合约中抵押32个ETH

  2. 等待入选通知:等待1天时间

  3. 投票:等2确认后,在检查点投票,确认区块

  4. 退出:发出退出协议后,还需要继续验证7天

  5. 提取抵押金:提交申请后,需要等待4个月左右才能取出。

  32个ETH的门槛较低,架构在PoW上的PoS是以智能合约的形式存在,节点程序可能会稍微简单一点,用户只需要在电脑上运行钱包就可以了,配置要求性也不会很高。验证人最重要做的事情是步骤3的投票,准备,及时投票就可以让验证人得到奖励,免于Slash。

  验证人比较关心的一些初始参数,参考2016年Vitalik写的褐皮书

  · 区块时间(BLOCK_TIME): 4s

  · 跳过时间(SKIP_TIME): 8s

  · 周期长度(EPOCH_LENGTH): 10800 (理想情况下,12小时)

  · 异步延迟(ASYNC_DELAY): 10800 (理想情况下,12小时)

  · Casper地址(CASPER_ADDRESS): 255

  · 提币延迟(WITHDRAWAL_DELAY): 10000000, 大概4个月

  · 创世区块(GENESIS_TIME): 未来时间,假如为 1500000000

  · 奖励系数(REWARD_COEFFICIENT): 3 / 1000000000

  · 最小抵押金(MIN_DEPOSIT_SIZE): 32 ETH

  · 最大抵押金(MAX_DEPOSIT_SIZE): 131072 ETH

  · V_LOSS_最大增长因子(V_LOSS_MAXGROWTH_FACTOR): 32

  · 确定性奖励系数(FINALITY_REWARD_FACTOR): 0.6 / 1000000000

  · 确定性奖励衰减系数(FINALITY_REWARD_DECAY_FACTOR): 1000 (理想情况下,1.1小时)

  · 最小押注系数(MIN_BET_COEFF): 0.25

  · 分片数量(NUM_SHARDS): 80

  · 每个分片的验证人(VALIDATORS_PER_SHARD): 120

  其中,个人验证人需要关心的参数是奖励和抵押金提取参数。为了防止长程攻击,以太坊对于抵押金的提取延迟更为注重,4个月才支持被取出。另外一个就是需要注意出块奖励和验证奖励,他们之间大概是5倍的关系。

  目前运行节点步骤的客户端还没出来,出来之后再和大家介绍细节。

  持币人

  以太坊中的持币人,如果没有成为验证人的情况下,会受到通胀ETH的稀释,但是当验证人被锁定的周期太长,所以很多小资产用户不见得会参与到Staking中来。

  在PoW和PoS的混合共识下,底层由PoW来保证以太坊的安全性,用智能合约实现的FFG,仍然还需要漫长的时间来探索,所以FFG并不会像其他的PoS一样,强调Stake的量,也没有委托Stake的服务。

  具体的Stake逻辑也没有具体明确,等明确后我再和大家解释了。

  治理

  以太坊和比特币类似,遵循“代码即法律(Code is law)”的原则,所以以太坊没有现成的链上治理模块。现在主链的主要升级方式是以以太坊基金会为主导的硬分叉,而智能合约更是连修改功能都没有,只要是运行在链上的代码,除了删除,就是运行。

  以基金会为主导的硬分叉也以太坊继承了比特币的治理模式,通过BIP/EIP提案的方式对主链进行升级治理。任何人都可以向社区提交升级建议EIP,由基金会统一来采纳和执行。当初ICO的时候,以太坊基金会是留有资金用于资助开发者开发的,所以一些有用的提议最终都由基金会资助开发。

  可能会在2019年上线的以太坊2.0(包括FFG,分片和EWASM),是没有包括具体的链上治理协议。我觉得以太坊的升级仍然会继续延续当前以EIP提议的这套方式,目前,EIP的方式在社区里面比较奏效,全球各区域也建立了相关的基金会,由总基金会下方权利,更高效的处理一些有意义的提案。

  所以,以太坊应该是没有具体推进链上治理的计划的。

  问题

  以太坊的主要优势是社区比较完善,开发者较多,而它的优势也是太的问题所在。在分布式网络中,社区发展的太大,协调就是一个比较非常严重的问题。我们都知道众口难调,对于以太坊的发展路线,一千个开发者,有超过一千种想法,想让这些思想极客达成一致,是一件非常要命的事情。最关键的事情是,以太坊作为一个承载着加密货币圈子,市值第二体量的一个开放平台,想要安全的进行升级,满足当前需求,真的是一件难上加难的事情。2014年到现在,我们已经见到了很多开发者在陆续的离开以太坊社区,其中不乏一些顶级技术大牛,离开的原因或多或少和以太坊的现状有关系。

  我梳理了一下以太坊社区目前存在的几个主要的问题:

  · 底层重,修改慢

  作为一个发展5年的平台,代码结构已经变得非常复杂,对于现在需求的满足,恐怕都要改到底层架构,这些架构牵一发则动全身,安全问题是首要考虑的,目前来看,从PoW改成PoS的速度这么慢,就知道问题在哪里了。

  · 社区大,决策慢

  以太坊社区里面,不乏很多有想法的开发者,但是他们的想法从提出到落地,需要经过非常长时间的社区决议,这使得开发变得非常慢,和我们认为的小步快跑,快速迭代的互联网产品印象是相悖的,这也会让很多开发者失去耐心,甚至是失去信心。

  · 性能瓶颈

  很多开发想在世界最大的区块链社区进行项目开发,但是受限于现在以太坊的性能瓶颈(≈15TPS),很多需要高性能的项目并能很好的在以太坊上运行,提高性能的Plasma侧链,PoS共识转型等又没能很快的出来,导致开发者流失的情况时有发生。

  · 竞争激烈

  是一个公有链都会把以太坊当成竞争对手,是一个公有链都会在智能合约层兼容以太坊代码,为的就是最快速,最方便的让开发者能转移到自己的公链上来,所以以太坊面临的竞争压力是非常大的,如果以太坊不能很好的将自己的实例提高,那么肯定会给别的公有链超越的机会。

  · 算力集中,51%攻击

  算力集中是当前以太坊碰到的一个系统性风险,在没有从PoW转移到PoS之前,这个风险会一直都在。掌控以太坊算力的大矿池可以简单的进行联合,就可以发起51%的算力攻击。如果这种攻击武器一直掌控在少人数中的话,以太坊肯定是发展不大的。

  以太坊社区都是认识到这个问题的,但是转PoS的速度太慢了,不免还是让人担心。

  未来

  个人认为,以太坊还是非常具有社区属性的去中心化社区,开发者质量非常高,同时作为外界进行区块链智能合约的入口,以太坊在开发者流量上有天然的优势。都说进圈的人,投资人都知道BTC,开发者都知道ETH,这话说的是有一定道理的。

  但以太坊目前所面临的问题上,也是极其严峻的。这些问题即时解决是保护以太坊核心竞争力的最有力武器,可以看到的是,社区的确在这个方向上努力当中。

  如果以太坊转PoS成功,我相信它依然能站稳市值老二的这个位置的。