ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

POS共识机制竟然漏洞这么多 | 分析POS共识机制的原理带来的思考

2021-07-12 11:51:51  阅读:227  来源: 互联网

标签:hash 币龄 代币 POS 共识 矿工 出块 机制 挖矿


序言

        上文深入比特币、以太坊源码带你解读POW共识机制我们学习探讨了POW共识机制,看完得童鞋们应该就知道POW是有几大缺点的:出块慢,共识时间长、开销大等等,那么有没有其它的共识机制能够解决这些问题呢?答案当然是:有,它就是POS共识机制。下面我们一起来看看它是怎么做到的。

概念

       全称为Proof Of Stake,又叫权益证明。POS是指矿工节点通过自己持有的代币,竞争区块签名机会,持有的代币越多,签名成功出块的概率就越高。出块成功之后,根据各个矿工签名时的代币数量进行奖励分配,简单来说就是付出成本越高,收益越高。

原理

讲原理之前,先给大家普及两个概念:难度值、nonce和币龄

难度值和nonce

        难度值和nonce在上文深入比特币、以太坊源码带你解读POW共识机制有对该名词的详细解释,这里就不再赘述了。

币龄(coinage)

        币龄,顾名思义,就是代币的年龄。那么它是怎么计算出来的呢?它有什么用呢?我们先看下它是怎么计算出来的:
coinage = 币的个数*持有时间
        看到这大家应该就懂了,币龄就是你持有可用币的时间,你的币越多,或者你持有时间越长,你拥有的币龄就越大。你的币龄越大,参与签名出块成功率就越高,因为更容易达到51%嘛。值得一提的是,当你使用币参与签名出块,无论你出块成功还是失败,你此次使用的币龄都将被清空,需要重新从0开始累计。

币龄举例

        比如你有10个币,持有了10天未发生签名投票出块,那么产生的币龄就是100;如果这时候你这10个币参与了签名投票出块,那么你拥有的这100个币龄就被花掉了,你的币数量虽然还是10个,但是币龄要被重置,变更为0。币龄在数据链上就可以取到,任何人都可以验证。

币龄/收益转换

收益计算公式:
收益 = 币龄 * 年利率 / 365
        打个比方说,你如果拥有3650的币龄,持币利率为1%,那么可获得的收益为 3650*0.01/365 = 0.1。说明该矿工此次挖矿成功可获得0.1的代币奖励。

原理

我们先看下它的有效hash计算方式:
hash (block_header) < target * coinage
        其实POS的原理和POW比较类似,系统设定好挖矿目标值target,然后矿工开始工作出块,矿工每次出块都是nonce从1开始递增进行寻找可用的nonce值,直到找到符合规则、可用的hash为止,最先找到的矿工可获得挖矿奖励。
        但是,从上面的就可以看出,coinage这个变量会造成每个矿工获得有效hash的集合大小不一样,矿工的币龄越大,也就意味着它获得有效hash越容易。且矿工参与签名的币越多,就越容易满足51%的成功出块条件,更容易获得奖励。

举例

例如当前target是4369,完整的哈希长度假设是16位.
  A矿工的币龄是15,那么A矿工的目标值为65535,换算成十六进制就是0x000000000000FFFF。即
hash( block_header ) < 0x000000000000FFFF
  而B矿工比较有钱,他的币龄是240,那么B矿工的目标值就是1,048,560,换算成十六进制就是0x00000000000FFFFF。即:
hash( block_header ) < 0x00000000000FFFFF
  B矿工的可用hash集合更大,所以B矿工获得记账权的概率肯定要比A高。

优点

破解了51%***
        如果挖矿者发起51%***,就需要拥有全网51%的币或币龄,这几乎不可能办到,即使你成功地实施了51%***,那么也意味着作为全网最大的持币大户的你,损失也会最大。
相比POW,效率更高
        可用更快的达成共识,出块更快。
能耗低
        挖矿不依赖于大量资源的消耗。通过持币利息进行通胀。
安全性
        规则上限制了必须持币30天以上才能参与区块签名,加大了作恶成本。

缺点

趋于中心化
        POS基于权益证明机制,若代币趋向集中的化,去中心化也变相的趋向于中心化了
效率不高
        虽然相比于POW,POS的效率有显著的提升,但是还是无法满足用户的需求。

思考

币发行问题
        我们从pos的实现算法公式去看,币龄的计算公式中,假如一开始挖矿,只有创始区块中有币,也就是说其他矿机是没法参与挖矿的,因为币的个数这个值对他们来说永远是零,这也就是pos机制的缺陷之一币无法发行的问题。
币龄积攒问题
         同样是从pos的实现算法公式可以分析到,币龄其实就是时间,一旦挖矿者囤积一定的币,很久很久之后发起***,这样他也将很容易拿到记账权,所以我们得给每个币设计一个时间上限。
弱流通性
        设计时间上限后,虽然解决掉了部分挖矿者囤积币的缺陷,从公式中仍然看到还会面临一个问题,也就是币的数量这个因素还是会影响我们拿到记账权,很多挖矿者还会囤积代币,持币者长期不参与出块,想着长时间持币获得利息,给代币造成流通上的缺陷。目前有些平台引入币龄按时间衰弱的方案来解决这一缺陷(例如:瑞迪币)。
矿工离线***
        接下来让我们来看看pos共识机制还有哪方面的不足,即使上面的各种缺陷都多少有些解决方案,但例如挖矿者挖一段时间后离线,此时,时间将不纳入币龄减弱计算,这样,挖矿者通过离线时间长来囤积挖矿,同样面临灾难。
Nothing at Stake
        Nothing at Stake,又叫无成本利益问题。意思在PoS系统中做任何事几乎没有成本,比如在PoS系统上挖矿几乎没有成本,这也就意味着分叉非常方便。方便到什么程度呢,每个诚实矿工在产生孤块的时候都可以继续挖下去,反正也没什么成本,反正分叉链和主链都可以同时挖,也就是任何持币较少的用户都可以尝试分叉,并且把分叉链广播出去。这个时候如果其他诚实矿工看到了,第一反应也是没有成本,那么咱们也来挖吧,说不定什么时候就值钱了,意思就是说任何逐利的矿工并不会使这个系统变得更强壮稳定,而是更加的混乱,可能会出现分叉链长度超过主链长度

POS我们就介绍到这里了,大家有什么不同的见解欢迎留言讨论哦

 

标签:hash,币龄,代币,POS,共识,矿工,出块,机制,挖矿
来源: https://blog.51cto.com/wenxing/3044739

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有