0%

ETH八---以太坊权益证明

权益证明proof of stake

图解

​ 比特币和以太坊目前用的都是基于工作量证明,这种机制收到了一个普遍的批评,就是“浪费电”。

上图是比特币的能耗图,TWh指的是Terawatt hours (10^12),常见的KWh:kilowatt hours(10^3),就是千瓦时,这个图上可以看出比特币的能耗随时间推移是不断增长的。

​ 一个交易要花费1000度电,信用卡公司处理一个交易远远到不了这个数字。

以太坊的统计数据:

​ 根据每个区块所消耗的能源来看,以太坊比比特币要小得多,这是为什么?

从交易上来看,比特币的交易都是非常简单的,而以太坊的交易有可能包含对智能合约调用,所以以太坊的能耗应该更高才对,但是实际上不是这样。

出块时间:比特币要十分钟才能挖出一个区块,以太坊15秒就能挖出一个区块。

​ 当然,以太坊一个交易的能耗还是要比信用卡公司高上很多。


​ 把比特币和以太坊当成一个国家来看,它的能耗排名:

这些能耗是不是必须的?

​ 矿工为什么要挖矿?

为了取得出矿奖励,获得收益。

​ 为什么要给矿工这些收益?

激励矿工参与区块链的维护。

​ 矿工是怎么参与挖矿的?如果你是一个矿工,你会怎么做?

需要找一大笔资金,购买一些设备(现成的,如矿机,GPU)

​ 挖矿的收益,有什么决定?

挖了多少区块。

​ 挖了多少区块由什么决定?

由你的算力所占比例所决定的

​ 你的算力由什么决定?

你有多少矿机,有多少设备

​ 说白了,挖矿的收益是由什么决定的?靠拼钱决定的

​ 既然是为了拼钱,那我们直接拿钱出来比一比不就知道了吗?

现在是由矿工竞争算力来决定挖矿的收益如何分配,能不能靠比钱的多少来分配收益?

比如,我出一百万,你出五十万,现在的做法是,用这钱都去买矿机,大家的矿机开始挖矿,比拼一下算力,看谁挖的区块多,与其这样,还不如我们都把这钱投入到区块链的开发,将来按照资金的多少,来决定收益的分配,这就是权益证明的基本思想。有的时候把这种做法叫做:virtual mining。

​ 采用权益证明的加密货币,一般在正式发行之前,会先预留一部分货币,留给开发者,也会出售一部分货币,来换取开发这个加密货币所需要的资金,将来,按照权益证明的共识机制,每个人按照持有货币的数量来进行投票的,这种方法和工作量证明相比,有什么优点?

省去了挖矿的过程,也避免了由此带来的能耗和对环境的影响,减少了温室气体的排放。

基于工作量证明的系统,从某种意义上来说,维护这个区块链安全的资源,不是一个“闭环”(我们的矿机,是从生态系统外面得到的,这就带来一个问题:跟世界经济总量相比,是微乎其微的,所以,如果有某一个组织想要发动恶意攻击,只需要用足够的资金来购买挖矿设备,然后聚集到这个加密货币总算力一半以上的算力就行了,也就是说,发动这种攻击的资源是可以从外面的世界得到的),像比特币这种主流的货币,它的抗攻击能力相比,还是比较强的,如果是一些刚刚发行不久的小的币种,那么遇到这种攻击可能就是致命性的,如AltCoin。对矿工和早期的开发者,造成的损失可能是灾难性的。(Infanticide,“扼杀在摇篮里”),如果采用权益证明,情况会有什么不同?

如果有某人像发动恶意攻击(51攻击),首先要设法获得这个币种一半以上的份额才行,发动攻击的资源,只能从这个加密货币系统内部得到,这就是为什么是一个“闭环”。无论攻击者在外部有多少钱,都不会对加密货币系统造成直接的影响,发动攻击只能大量的买币,而一旦有人大量的买币,会有什么情况?

价格会大涨,本来一个刚刚发行的小币种,没有人买的,价值也不高,突然有人为了搞垮他,结果价格大涨,如果你是这个币的开发者或者投资者,出现这种情况,你就会怎么想?

这不一定是坏事,我正好可以从中大赚一笔,有点类似股份制公司遭受恶意收购。

​ 权益证明和工作量证明并不是互斥的,有的加密货币采用的是一种混合模型,有些加密货币仍然是要挖矿的,但是挖矿的难度和你占有的权益(你持有多少币)是相关的,比如说每个矿工持有一定数量的这种币,挖矿的时候,持有的币越多,挖矿的难度就越小。当然,这么设计是有一定问题的。

这样的话,系统中持有币数量最多的那个人,每次挖矿都是最容易的,所以有的加密货币要求你投入的币要被锁一段时间,不能够重复使用,比如挖这个区块的时候,你投入一定数量的币,用于降低挖矿难度,等这个区块发不出来之后,你投入的这些币就会被锁定一段时间,你下次在挖下一个区块的时候,这些币就不能用了,这个有时候管它叫做(Proof of deposit)。

​ 基于权益证明的共识机制该怎么设计,有很多挑战,其中早期的权益证明遇到的一个挑战就是“两边下注”的问题(nothing at stake)。如下图的区块链所示。

挖矿的话,不能两边都挖,如果两边都挖,那么你的算力就分散了,挖到区块的概率就小了,但是你用权益证明的话,可以两边都下注,如果上面那条链成为最长合法链,你在下面锁定的那些币是没有影响的,你投的这些币,只是记在下面这个分叉上,并不影响你在上面分叉的使用,这就是为什么叫做nothing at stake。这也是早期基于权益证明共识机制遇到的一个问题。

​ 以太坊中准备采用的权益证明协议叫做Casper the Friendly Finality Gadget(FFG),在过渡阶段也是要和工作证明混合使用的,为工作量证明提供Finality,Finality是一种最终的状态,包含在Finality中的交易不会被取消,单纯基于工作量的证明,是有可能被回滚的。

​ Casper协议是怎么做的?

引入了一个Validator(验证者),要想成为一个Validator,必须要投入一定数量的以太币作为保证金,这个保证金会被系统锁定,Validator的职责是推动系统达成共识,投票决定那条链是最后合法链,投票的权重取决于保证金的数目大小,有点类似数据库中的two-phase commit。

还是有人挖矿的,每挖出100个区块,就作为一个epoch,然后要决定他能不能称为Finality,要通过投票,第一轮投票是一个Prepare Message,第二轮是Commit Message,Casper中规定了每一轮投票都要得到2/3以上Validator,才能通过,实际系统中,不区分两个Message,而且把这个epoch从原来的100个区块减少到50个区块,每个epoch只需要一轮投票就行了,这一轮投票对于上一个epoch来说,是Commit Message,对于下一个epoch来说,是一个Prepare Message,那么要连续两轮投票,两个epoch都得到2/3以上才算有效。

​ 原始的版本:

​ 优化之后:(要有两个连续的epoch)

​ 验证者参与这个过程有什么好处?

如果验证者参与这个过程的话,可以得到相应的奖励,就像挖矿能得到出块奖励一样,相反,如果验证者有不良行为,被发现的话,要受到相应的处罚,比如某个验证者,行政不作为,该投票的时候没有投,结果导致系统迟迟达不成共识,那么这种情况下要扣除它的一部分保证金,如果某个验证者乱作为(乱投票,给两个有冲突的分叉都投票),要没收全部的保证金,没收的保证金被销毁,相当于减少了系统中以太币的总供应量,每个验证者有一定的任期,即使你交了保证金,也不是说你可以永远地当验证者,任期满了之后,要经过一定时间的等待期(为了让其他的结点可以检举揭发这个验证者有没有什么不良行为,进行惩处),如果等待期过了,验证者可以取回保证金和应该得到的奖励,这就是Casper协议的过程。

​ 我们原来说Casper协议可以给挖矿挖出来的区块链的某种状态做一个检查点(check point),这个检查点是不是一定安全的?

通过这个验证者投票达成的Finality,有没有可能被推翻?以前说的,包含在Finality中的交易不会被推翻,这个是不是绝对的?

假设有某个有恶意的组织向要发动攻击,这个组织仅仅是矿工的话,那么他是没有办法推翻已经完成的Finality的,因为Finality是验证者投票投出来的,单纯是矿工的话,无论他算力有多强,如果没有验证者作为同伙,是没有办法推翻Finality,那么什么情况下会出现攻击成功的情况?

一定是由大量的验证者两边下注,给前后 两个有冲突的Finality下注。我们要求Casper协议每轮投票要有2/3以上支持才算通过,所以如果出现这种情况,那么至少是有1/3的验证者两边都投票的,一旦发现,1/3验证者的保证金将会被没收。

​ 所以我们可以看到,基于权益证明的共识机制和基于工作量证明的共识机制是很不一样的,以太坊的设想是,要逐步成工作量证明过渡到权益证明。随着时间的推移,挖矿得到的奖励是越来越少的,权益证明获得的奖励是越来越多的,最后达到完全不用挖矿的境界。

​ 权益证明这么好,为什么以太坊不从一开始就用权益证明呢?

因为权益证明不是很成熟,工作量证明是比较成熟的,经过了时间的检验,比特币和以太坊的挖矿算法都经过了bug bounty的检验,没有人发现什么漏洞,很多人认为权益证明是未来的方向,但是目前主流的加密货币,用的还是工作量证明。

​ EOS加密货币就是完全基于权益证明的,用的协议是DPOS:Delegated Proof of stake,先用投票方法选出21个超级节点,然后再由这些超级结点产生区块。

​ 到目前为止,都是假设,工作量证明消耗太多的电是不好的,但是也有人持有不一样的观点,首先挖矿消耗的电并不是很多,比特币的能耗只占全世界的总能耗的0.31%,以太坊只占0.09%,很多人对工作量证明很反感,是因为做的是无用功,其实挖矿对环境的影响是有限的,挖矿为解决边远地区用不到的电提供了一个很好的手段,把多余的电能转化为了加密货币,很多比特币的矿场都是建在电力资源丰富的地方,所以,可以认为挖矿消耗电能并不一定是坏事,可以有效地带动过量电能,带动经济的发展。