learn-tech/专栏/深入浅出区块链/第13讲深入区块链技术(五):PoS共识机制.md
2024-10-16 09:22:22 +08:00

118 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
第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共识机制呢你可以给我留言我们一起讨论感谢你的收听我们下期再见