区块链共识机制技术二——POS(权益证明)共识机制

前言

由于区块链是去中心化分散网络,所以必须设计一套维护系统的运作顺序和公平性的机制,即共识机制,用来决定谁取得区块链的记账权并获得系统新币奖励。比特币的POW共识机制是一种多劳多得的模式,其优点是算法简单,容易实现,破坏系统的话需要投入巨大的成本,能够有一定的安全保障。不过该算法的缺点也比较明显,就是需要耗费大量电力,对交易的处理效率较低,像比特币系统就是每秒7笔交易的处理能力。因此,人们不断去琢磨新的共识机制,以便更好地运作区块链系统。

上一节,我们介绍了POW共识机制,本章将对区块链另外的一些共识机制做介绍,它就是POS共识机制。POS全称为proof of stake,中文翻译为权益证明,其最早使用在点点币中,它主要是解决POW中资源浪费的问题。

对于PoW,由于矿场的出现及挖矿设备性能的不断提升,算力开始集中,节点数和算力值渐渐不适配,同时PoW太浪费了,旷工持续挖矿进行的重复性Hash计算没有任何实际或者科学价值,而且还有一个更大的问题,作恶是没有成本的,旷工的恶意攻击并不会对旷工下次记账并获取相关权益(比特币)产生任何影响,鉴于此,人们提出了PoS。

PoS算法是针对PoW算法的缺点的改进。PoS由Quantum Mechanic2011年在bitcointalk首先提出,后经Peercoin和NXT以不同思路实现。PoS不像PoW那样,无论什么人,买了矿机,下载了软件,就可以参与。PoS要求参与者预先放一些代币(利益)在区块链上,类似将财产存储在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。用户只有将一些利益放进链里,相当于押金,用户才会更关注,做出的决定才会更理性。同时也可以引入奖惩机制,使节点的运行更可控,同时更好地防止攻击。

一、PoS的实现原理及公式

要理解pos的实现原理,我认为从pos的实现算法公式来理解是最为直观的,其公式为:

hash(block_header) =<target * coinage

币龄的计算:coinage = 币的个数*币的剩余使用时间

其中,coinage表示币龄,这将意味着,币龄越大,越容易得到答案。而其中币龄的计算是通过挖矿者拥有的币乘以每个币的剩下使用时间得到,这也将意味着拥有的币越多,也越容易得到答案。这样,pos解决了pow中浪费资源的问题,同时挖矿者不可能拥有全网51%的币,所以也解决了51%攻击的问题。

PoS(Proof of Stake):股权证明,与PoW相比,不需要证明你在记账前做了某项工作,而是证明你拥有某些财产。股权决定一起,谁的股权大,谁记账的概率就越大。由于PoS是BitCoin出现后提出的共识算法,目前还有得到实际的验证,并且,PoS不是一个,而是一类共识算法。最先使用PoS的是Peer Coin,不过是一种朴素的PoS,目前呼声很高的是ETH Casper,但还没有投产(拭目以待吧),所以关于PoS的描述基于Peer Coin。

工作机制
开始竞争出块记账前,拥有权益的节点将自己的权益放入PoS机制中,同时身份变为验证者,PoS机制根据验证者下注的多少,采用随机的方式选出一个记账者进行出块记账。这个随机并不是真正的随机,一般跟下注的权益成正比,谁的权益多,谁获取记账权的概率就越大。如果选出的记账者在一段时间内没有记账,PoS机制重新选择记账节点,当出块完成,开始进入下一轮的记账。

我们以Peer Coin来举例说明PoS的工作机制。Peer Coin是最先采用PoS共识机制的数字货币。在Peer Coin中,引入了币龄和币天的概念。所谓币天,就是你持有货币的时间,币龄=币的数量比天。比如你有100个币,总共持有30天(Peer Coin中未使用至少30天的币可以参与竞争下一区块),那么你的币龄就是10030=3000,你作为币的持有者,参与下一轮竞争,过程如下:

  1. 在竞争开始前,你将3000币龄作为筹码下注,并成为记账验证者,
  2. PoW机制会随机的选出一个记账者,刚好是你 你开始记账并完成
  3. 你的3000币龄被清0
  4. 你获得利息=3000 * 5% / 365 = 0.41个币(每被清空365币龄,你将会从区块中获得0.05个币的利息)

理解随机:选我、选我、选我?PoS在选择记账者时一般有两种做法,一种是挑选下注多(权益大)的进行轮流记账;还有一种是跟PoW结合,在PoW中,决定旷工能否出块的一个重要因素是出块的难度,PoS将出块难度和权益挂钩,权益越大,难度越小,出块概率越大。

二、PoS的优缺点

通过上面的描述和PoS的特点,PoS优点为:

  1. 节能环保,不需要无用计算;
  2. 性能高;
  3. 更加安全;
  4. 人人可挖矿(获得利息),不用担心算力集中导致中心化出现;
  5. 避免货币紧缩

为什么PoS更加安全?
在指定时间内,在POS体系中,即使你拥有了全球51%的算力,也未必能够进行51%攻击,因为,有一部分的货币并不是挖矿产生的,而是由利息产生(利息存放在POS区块中),这要求攻击者还需要持有全球超过51%的货币量。这大大提高了51%攻击的难度。
在PoS机制下,持有币越多,越容易获得记账权,接近于赢家通吃的感觉,但持有的币越多,越接近于一个诚实的节点,因为破坏整个网络带来的损失也越大,即假设富人不会做恶,毕竟做恶的目标是钱,若你富有,自然就没有做恶的动力。

pos的缺陷:

从pos的实现原理和实现算法公式上分析,pos很完美的解决了pow的算力以及51%攻击问题,那么,pos是不是真的就很完美了呢?

缺陷一:

我们再从pos的实现算法公式去看,币龄的计算公式中,假如一开始挖矿,只有创始区块中有币,也就是说其他矿机是没法参与挖矿的,因为币的个数这个值对他们来说永远是零,这也就是pos机制的缺陷之一币无法发行的问题。

缺陷二:

同样是从pos的实现算法公式可以分析到,币龄其实就是时间,一旦挖矿者囤积一定的币,很久很久之后发起攻击,这样他也将很容易拿到记账权,所以我们得给每个币设计一个时间上限。

缺陷三:

设计时间上限后,虽然解决掉了部分挖矿者囤积币的缺陷,从公式中仍然看到还会面临一个问题,也就是币的数量这个因素还是会影响我们拿到记账权,很多挖矿者还会囤积代币,给代币造成流通上的缺陷。目前有些平台引入币龄按时间衰弱的方案来解决这一缺陷(例如:瑞迪币)。

缺陷四:

接下来让我们来看看pos共识机制还有哪方面的不足,即使上面的各种缺陷都多少有些解决方案,但例如挖矿者挖一段时间后离线,此时,时间将不纳入币龄减弱计算,这样,挖矿者通过离线时间长来囤积挖矿,同样面临灾难。

三、PoS特点及分类

PoS 特点

  1. PoS需要一定量的权益作为出块的竞争资本
  2. PoS不需要进行大量的“无用”Hash计算
  3. PoS偏向“权利”集中制,但又做了均衡(出块清0)
  4. PoS通过股权质押对作恶者进行惩罚
  5. PoS提供激励机制

PoS 分类
先说三个问题:
链分叉问题:PoW从经济角度,可以自然做到防止链分叉,但PoS需要精心审计,即nothing at stake问题。PoS可以采用一定的惩罚机制。

远程攻击问题:即如旷工在撤回被定的虚拟资产后,再发起之前发生的例行区块的分叉。

卡特尔形成问题:即区块链的寡头垄断,由于PoS共识算法是谁“富有”,谁就有更大的话语权,这样少数富有旷工之间的“协调”将导致寡头龙蛋的形成。

目前业内PoS共识算法的实现主要分为两类:

简单的的PoS系统。这类PoS很少甚至没有从算法的设计上来解决上述问题,一般是比较早期的PoS尝试。比较典型的例子是Peer Coin(点点币,PPC)、新星币(Nova Coin,NVC)、黑币(Black Coin,BLK)、NextCoin(未来币,NXT)等等。

精心设计的PoS系统,相对来说比较新。基于不同的实现方式,精心设计的PoS系统可以分为两种。一种是基于拜占庭容错的权益证明(BFT based PoS),比如Tendermint,另一种是基于链的权益证明(Chain based PoS),比如ETH Casper和ADA的Ouroboros。

第一类PoS系统安全性不够。第二类PoS系统目前还不够成熟,有一些处于早期运行阶段,有一些还处理讨论和测试阶段。

四、pos的发展历程

由于pos存在以上四大缺陷,所以pos的发展历程经历了三个版本,即pos1.0、pos2.0以及pos3.0,其中pos2.0在算法公式中使用的是币的数量,这样,上述缺陷二到四就不再是问题,可这样以后却导致了pos共识机制面临了无成本利益的问题(即 nothing at stake),这也将意味着很容易产生分叉。

五、casper协议

第四章节我们说到pos的发展历程时,提到其为了解决其中4个缺陷,引出很多版本,也就是使用了pos2.0,也会无法避免的引发无成本利益导致很容易分叉的问题,而以太坊的共识机制就是使用的pos共识机制,那么我们来看看以太坊是如何解决这个问题的?

1.什么是无成本利益关系问题

在解决无成本利益关系这个问题前,我们先来看看什么是无成本利益关系问题,因此,我们可以先模拟下这种场景,如下图所示:
区块链共识机制技术二——POS(权益证明)共识机制_第1张图片
假设我们处在上面的这种情况下,有一条蓝色的主链和一条红色的从主链中分出来的链条,如何禁止一个恶意的矿工在红色区块上挖矿然后推动一次硬分叉(Hard Fork)呢?

在一个工作量证明系统上,这一风险是可以被减轻的。

假设恶意矿工想在红色链上挖矿。即便她投入了她所有的哈希算力,也不会有任何矿工加入她在新链上挖矿。每个其他人都将继续在蓝色链上挖矿,因为在最长的链上挖矿收益更可观,而且没有风险。

记住,工作量证明在资源方面是非常昂贵的。对一个矿工来说,花费许多资源在一个将会被网络拒绝的区块上是没有任何意义的。因此,链分裂在一个工作量证明系统中是被避免了的,因为攻击者将不得不付出大量金钱。

但是,当你把这种情形放到到权益证明下的时候,事情看起来就有些不一样了。如果你是一个验证者,你可以简单地把钱投到红蓝两条链上,完全无需担心间接的不良后果。不管发生什么事,你都总是可以赢,不会失去任何东西,不管你的行为有多恶意。

这就是所谓的“无成本利益关系(Nothing at Stake)”问题,也是以太坊必须解决的问题。他们需要一种协议,可以实行权益证明,同时减少“无成本利益关系”问题。

2.引入casper协议解决无成本利益关系问题

Csaper是以太坊选择实行的PoS协议,既然有人恶意去使得我们的区块链产生分叉,那么我们想方设法去对恶意制造者加以惩罚,这样不就可以解决我们说的无成本利益关系问题了吗?Csaper协议正式奔着这样的做法去实现的,那我们来看看Csaper是如何去做的呢?

  1. 验证者押下一定比例的他们拥有的以太币作为保证金。
  2. 然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。
  3. 如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。
  4. 但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉。

正是利用了这样的对赌协议,帮我们对恶意制造者加以了惩罚,使得我们的区块链尽量保障不会产生分叉。

3.PoS运作的机制大致如下:

  1. 加入PoS机制的都是持币人,成为验证者( validator);
  2. PoS算法在这些验证者里挑一个给予权利生成新的区块。挑选顺序依据持币的多少;
  3. 如果在一定时间内,没有生成区块,PoS则挑选下一个验证者,给予生成新区块的权利,
  4. 以此类推,以区块链中最长的链为准。

你可能感兴趣的:(区块链,区块链,算法,比特币)