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

序言

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

概念

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

原理

讲原理以前,先给你们普及两个概念:难度值、nonce和币龄ide

难度值和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的代币奖励。get

原理

咱们先看下它的有效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高。hash

优势

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

缺点

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

思考

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

POS咱们就介绍到这里了,你们有什么不一样的看法欢迎留言讨论哦

相关文章
相关标签/搜索