上一篇我们讲到了PoW共识机制,这一篇我们就来分享另外一种共识机制,PoS共识机制。

PoS全称是Proof of Stake,中文翻译为权益证明。这一篇我们会将PoS与PoW对比讲解,帮助你加深理解。

# PoS的由来

PoS最早出现在点点币的创始人Sunny King的白皮书中,它的目的就是为了解决使用PoW挖矿出现大量资源浪费的问题。PoS共识机制一经提出就引起了广泛关注,Sunny King 也基于PoW的基础框架实现了第一代PoS区块链:点点币。

PoW的具体实现有很多版本,但它们大多只是在挖矿算法上有所改进,主体逻辑并没有发生质的变化。PoS包含了多个变种实现,每个变种往往会涉及区块链代币经济模型的改动,可以说是牵一发而动全身。

这些实现有点点币、黑币、未来币、瑞迪币,它们都推动了PoS机制的发展,PoS研究前沿还有以太坊的 Casper ,以及 Cardano 的Ouroboros。

那到底是什么样的机制导致PoS具有这样的特性呢?让我们来看一看。

# 什么是PoS?

在讲PoS之前,我先来讲一个叫做币龄的概念,币龄这个概念其实很好理解,它的英文是 CoinAge,字面意思就是币数量乘以天数。

比如你有100个币,在某个地址上9天没有动,那么产生的币龄就是900,如果你把这个地址上这100币转移到任意地址,包括你自己的地址,那么900个币龄就在转移过程中被花费了,你的币数量虽然还是100个,但是币龄变更为0。币龄在数据链上就可以取到,任何人都可以验证。

我们回过头来看看PoS究竟是什么,区块链共识机制的第一步就是随机筛选一个记账者,PoW是通过计算能力来获得记账权,计算能力越强,获得记账权的概率越大。

PoS则将此处的计算能力更换为财产证明,就是节点所拥有的币龄越多,获得的记账的概率就越大。这有点像公司的股权结构,股权占比大的合伙人话语权越重。

以上算是简述了PoS的概念,实际上,PoS的发展经历了三个版本,第一个版本是以点点币为代币的PoS1.0版本,这个版本中使用的是币龄;第二个版本为代表的是黑币(blackcoin),它使用的为PoS2.0版本,对应这个版本使用的是币数量,相当于是财产证明,后面黑币又升级到PoS3.0,这个版本又回到了币龄。

PoW早在比特币出现之前就已经应用了,而PoS是才是真正意义上为了区块链而创造出来的概念。

# PoS的实现原理

好了,现在我们开始讲解PoS的具体实现原理吧。这一部分公式较多,如果你在收听音频,可以点击文稿查看。

通过上一篇我们知道PoW挖矿的基本逻辑和步骤,我们先寻求一个nonce小于目标值,这一步用公式可表示为:

Hash (block_header) < Target

从公式中我们可以看到,PoW下所有矿工的目标值是一样的,只要计算结果哈希小于目标值即可,简化来看就是前导0的个数。

而在PoS系统中,这个公式变更为:

Hash (block_header) < Target * CoinAge

我们可以看出多引入了一个变量叫做CoinAge,也就是币龄,这里就有意思了。

这个变量为会造成每个矿工看到的目标值不一样,如果你的币龄越大,也就意味着你的获得答案越容易。这里的Target与PoW一致,与全网难度成反比,用来控制出块速度的。

例如当前全网的目标是4369,A矿工的输入的币龄是15,那么A矿工的目标值为65535,换算成十六进制就是0xFFFF,完整的哈希长度假设是8位,也就是0x0000FFFF。

而B矿工比较有钱,他输入的币龄是240,那么B矿工的目标值就是0x000FFFFF。你如果仔细观察肯定会发现,相比A矿工的目标值,B直接少了一个零。即如下:

  • A 矿工 Hash( block_header ) < 0x0000FFFF
  • B 矿工 Hash( block_header ) < 0x000FFFFF

所以B矿工获得记账权的概率肯定要比A高。

具体代码分析这里就不讲解了,这里需要币龄作为输入,如果我们写示例代码也只是一个简单的参数,PoS需要放到区块链的语境中才能运作。

# PoS的相关问题

通过上述的介绍我们知道:PoS似乎完美地解决了PoW挖矿资源浪费的问题,甚至还顺带解决了51%攻击的问题,这里可以顺便讲一下51%攻击是什么,它是指PoW矿工如果积累了超过51%的算力,则可以一定程度篡改账本。

这里顺便科普一下,什么是51%攻击呢,我们发现,矿工挖矿的成本不再是物理设备和电费,而是虚拟代币,它的边际成本几乎为零,本质上PoS让挖矿者和使用者合二为一了。

这也意味着如果挖矿者发起51%攻击,就需要拥有全网51%的币或币龄,这几乎不可能办到,即使你成功地实施了51%攻击,那么也意味着作为全网最大的持币大户的你,损失也会最大。

PoS看起来相当完美,其实并不然,PoS有很多缺陷。

PoS遇到的第一个问题就是币发行的问题。一开始的时候,只有创始区块上有币,意味着只有这一个节点可以挖矿,所以让币分散出去才能让整个网络壮大,那么如何分散出去又是另外一个难题了。

所以早期PoS币种基本都采用了分阶段挖矿,有的叫混合挖矿,其实,我并不同意混合挖矿这个说法,混合就意味着同时。很多币种其实是分了阶段的,即第一阶段是PoW挖矿,到第二阶段才是PoS挖矿。

随着ERC20类型的标准合约代币的出现,这个问题被解决了,不再需要第一阶段改成PoW,也可以将代币分散出去。

第二个问题是由于币龄是与时间挂钩的,这也意味着用户可以无限囤积一定的币,等过了很久再一次性挖矿发起攻击;所以解决方案是:PoS机制需要引入一个时间上限来控制时间因素的自然增长。

第三个问题是虽然引入了时间上下限,用户还是倾向于囤积代币,这会造成币流通的不充分;基于此,所以瑞迪币引入了币龄按时间衰减,构造了权益速度证明,鼓励用户流动代币,而不是倾向于囤积代币。

第四个问题是离线攻击,即使引入了时间上下限,时间仍然是自然流动的,也就是可以不需要求挖矿节点长时间在线。挖矿是可以离线的,这简直是灾难,所以任意一个PoS机制的实践形式都必须避免这个问题,因为网络节点数量的多少直接关系到区块链网络的健壮性。

当然这些问题都不是致命问题,还记得我们一开始提到了PoS经历了三个版本,而第二个版本PoS 2.0使用的不是币龄,而直接是币的数量。

这会造成完全不同的结果,上述第二、三、四问题都不存在了,似乎看起来直接使用币的数量会更好一些,但却出现了整个PoS机制的致命问题。

这个问题叫做Nothing at Stake,翻译过来叫做无成本利益问题。大体的意思在PoS系统中做任何事几乎没有成本,比如在PoS系统上挖矿几乎没有成本,这也就意味着分叉非常方便。

方便到什么程度呢,每个诚实矿工在产生孤块的时候都可以继续挖下去,反正也没什么成本,反正分叉链和主链都可以同时挖,也就是任何持币较少的用户都可以尝试分叉,并且把分叉链广播出去。

这个时候如果其他诚实矿工看到了,第一反应也是没有成本,那么咱们也来挖吧,说不定什么时候就值钱了,意思就是说任何逐利的矿工并不会使这个系统变得更强壮稳定,而是更加的混乱。

无成本利益问题无论以币龄还是币数量作为PoS的参数,都无法避免。

而PoW则没有这样的问题,我们回到PoW系统中来看,因为任何的分叉都会造成挖矿成本直接变成负收益,所以这会抵抗分叉的产生,矿工倾向于跟随“最长”的链。

由于以太坊部分采用了PoS共识,它的名字叫做Casper,它必须解决上述无成本利益问题攻击。所以Casper协议要求PoS矿工需通过抵押保证金的方法对共识结果进行下注,具体实践结果我们还需要拭目以待。

# 总结

最后我们来总结一下PoS共识机制,PoS的区块链系统无需外部物理输入,所以它相比PoW更为环保不费电,并且矿工就是使用者,这会在一定程度上抵御了51%攻击,所以基于PoS机制的数字货币属于理想状态的数字货币。

PoS的缺点是缺乏工业级的区块链应用,从逻辑上来看有点循环自证明的味道,就是用自己的币来维护系统的安全,而币的安全性是由系统保证的,所以现阶段PoS共识机制往往不是独立运行的,而是混合了PoW一起运行,这就可以弥补PoS的缺陷。

PoS共识机制目前也出现了矿池,也可能会出现中心化挖矿的风险。

虽然PoS共识机制未来变数依然很多,但它的可塑性比PoW好,技术上的探索空间大,目前PoS币种相比较PoW币种风险也较高。

那么有哪些区块链项目使用了PoS共识机制呢?你可以给我留言,我们一起讨论,感谢你的收听,我们下期再见。