You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
9.2 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第13讲 | 深入区块链技术PoS共识机制
上一篇我们讲到了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对应使用的是币数量相当于是财产证明后面黑币又升级到PoS3.0,这个版本又回到了币龄。
PoW早在比特币出现之前就已经应用了而PoS是才是真正意义上为了区块链而创造出来的概念。
## PoS的实现原理
好了现在我们开始讲解PoS的具体实现原理吧。这一部分公式较多如果你在收听音频可以点击文稿查看。
通过上一篇我们知道PoW挖矿的基本逻辑和步骤我们先寻求一个nonce小于目标值,这一步用公式可表示为:
**Hash (block\_header) < Target**
从公式中我们可以看到PoW下所有矿工的目标值是一样的只要计算结果哈希小于目标值即可简化来看就是前导0的个数。
而在PoS系统中这个公式变更为
**Hash (block\_header) < Target \* CoinAge**
我们可以看出多引入了一个变量叫做CoinAge也就是币龄这里就有意思了。
这个变量为会造成每个矿工看到的目标值不一样,如果你的币龄越大,也就意味着你的获得答案越容易。这里的Target与PoW一致与全网难度成反比用来控制出块速度的。
例如当前全网的目标是4369A矿工的输入的币龄是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共识机制呢?你可以给我留言,我们一起讨论,感谢你的收听,我们下期再见。