这个还是很有意思的
pos全称为proof of stake,中文翻译为权益证明,其最早使用在点点币中,它主要是解决pow中资源浪费的问题。
要理解pos的实现原理,我认为从pos的实现算法公式来理解是最为直观的,其公式为: hash(block_header) =<target * coinage
币龄的计算:coinage = 币的个数*币的剩余使用时间
其中,coinage表示币龄,这将意味着,币龄越大,越容易得到答案。 而其中币龄的计算是通过挖矿者拥有的币乘以每个币的剩下使用时间得到,这也将意味着拥有的币越多,也越容易得到答案。
这样,pos解决了pow中浪费资源的问题,同时挖矿者不可能拥有全网51%的币,所以也解决了51%攻击的问题。
从pos的实现原理和实现算法公式上分析,pos很完美的解决了pow的算力以及51%攻击问题,那么,pos是不是真的就很完美了呢?
缺陷一:
我们再从pos的实现算法公式去看,币龄的计算公式中,假如一开始挖矿,只有创始区块中有币,也就是说其他矿机是没法参与挖矿的
因为币的个数这个值对他们来说永远是零,这也就是pos机制的缺陷之一币无法发行的问题。
缺陷二:
同样是从pos的实现算法公式可以分析到,币龄其实就是时间,一旦挖矿者囤积一定的币,很久很久之后发起攻击
这样他也将很容易拿到记账权,所以我们得给每个币设计一个时间上限。
缺陷三:
设计时间上限后,虽然解决掉了部分挖矿者囤积币的缺陷,从公式中仍然看到还会面临一个问题,
也就是币的数量这个因素还是会影响我们拿到记账权,很多挖矿者还会囤积代币,给代币造成流通上的缺陷。
目前有些平台引入币龄按时间衰弱的方案来解决这一缺陷。
缺陷四:
即使上面的各种缺陷都多少有些解决方案,例如挖矿者挖一段时间后离线,此时,时间将不纳入币龄减弱计算,这样,挖矿者通过离线时间长来囤积挖矿,
同样面临灾难。
由于pos存在以上四大缺陷,所以pos的发展历程经历了三个版本,即pos1.0、pos2.0以及pos3.0 其中pos2.0在算法公式中使用的是币的数量,这样,上述缺陷二到四就不再是问题,可这样以后却导致了pos共识机制面临了无成本利益的问题 (即 nothing at stake),这也将意味着很容易产生分叉。
我们说到pos的发展历程时,提到其为了解决其中4个缺陷,引出很多版本,也就是使用了pos2.0,也会无法避免的引发无成本利益导致很容易分叉的问题 而以太坊的共识机制就是使用的pos共识机制,那么我们来看看以太坊是如何解决这个问题的?
1.什么是无成本利益关系问题 在解决无成本利益关系这个问题前,我们先来看看什么是无成本利益关系问题,因此,我们可以先模拟下这种场景,如下图所示: -
假设我们处在上面的这种情况下,有一条绿色的主链和一条红色的从主链中分出来的链条,如何禁止一个恶意的矿工在红色区块上挖矿然后推动一次 硬分叉(Hard Fork)呢? 在一个工作量证明系统上,这一风险是可以被减轻的。 假设恶意矿工想在红色链上挖矿。即便她投入了她所有的哈希算力,也不会有任何矿工加入她在新链上挖矿。 每个其他人都将继续在蓝色链上挖矿,因为在最长的链上挖矿收益更可观,而且没有风险。 记住,工作量证明在资源方面是非常昂贵的。对一个矿工来说,花费许多资源在一个将会被网络拒绝的区块上是没有任何意义的。 因此,链分裂在一个工作量证明系统中是被避免了的,因为攻击者将不得不付出大量金钱。 但是,当你把这种情形放到到权益证明下的时候,事情看起来就有些不一样了。如果你是一个验证者,你可以简单地把钱投到红蓝两条链上,完全无需担心间接的不良后果。 不管发生什么事,你都总是可以赢,不会失去任何东西,不管你的行为有多恶意。
这就是所谓的“无成本利益关系(Nothing at Stake)”问题,也是以太坊必须解决的问题。他们需要一种协议,可以实行权益证明, 同时减少“无成本利益关系”问题 2.引入casper协议解决无成本利益关系问题 Csaper是以太坊选择实行的PoS协议,既然有人恶意去使得我们的区块链产生分叉,那么我们想方设法去对恶意制造者加以惩罚,这样不就可以解决我们说的无成本利益关系问题了吗? Csaper协议正式奔着这样的做法去实现的,那我们来看看Csaper是如何去做的呢? i. 验证者押下一定比例的他们拥有的以太币作为保证金。 ii.然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。 iii.如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。 iV.但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉。
正是利用了这样的对赌协议,帮我们对恶意制造者加以了惩罚,使得我们的区块链尽量保障不会产生分叉。