序言

上文深入比特币、以太坊源码带你解读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我们就介绍到这里了,大家有什么不同的见解欢迎留言讨论哦

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

  1. PDF签名系列(1):PDF签名机制的漏洞分析

    来源:PDF签名系列(1):PDF签名机制的漏洞分析 - 知乎 研究PDF文件的签名机制有一段时间了,刚开始学习的时候就看到有提到说,被签名的PDF内容的Range gap,会成为这个机制的漏洞,但是 ...

  2. 股权证明pos记账权是根据不同节点_主流共识机制PoS、PoW与DPoS、PoU对比演变

    常见的共识算法有:PoW.PoS.DPoS.PoU.那么,这些共识算法具体是怎么回事呢?今天我们就展开来讲一讲. 在区块链这个虚拟的世界,陌生人之间工作关系的建立.工作进度的推进以及工作内容的完成,都 ...

  3. Windows 组策略(Group Policy Object)机制的漏洞分析

    Windows 组策略(Group Policy Object)机制的漏洞类大约有60个,专门针对策略更新步骤,允许域环境中的标准用户执行文件系统攻击,进而使恶意用户可以逃避反恶意软件解决方案,绕过安 ...

  4. 【转】cve2014-3153 漏洞之详细分析与利用

    背景学习: Linux Futex的设计与实现 使用者角度看bionic pthread_mutex和linux futex实现 By kernux TopSec α-lab 一 漏洞概述 这个漏洞是 ...

  5. NEO从源码分析看共识协议

    2019独角兽企业重金招聘Python工程师标准>>> 0x00 概论 不同于比特币使用的工作量证明(PoW)来实现共识,NEO提出了DBFT共识算法.DBFT改良自股权证明算法(P ...

  6. algorand共识协议_基于Algorand结合VRF的共识机制介绍

    相信大家对于PoS权益证明的概念都不陌生,但是究竟一个PoS的Protocol是如运作的?如何公平的选出下个区块的生产者?如何保证区块生产者不能bias下次自己再次当选的机率?这些实行的细节都是需要经 ...

  7. fastjson 1.22-1.24 漏洞复现与分析

    fastjson 1.22-1.24 漏洞复现与分析 前言 QAQ,感觉自己啥也不会,要好好努力学习了.但是由于本人遗忘度很大,因此要记下来学习QAQ. 概念 RMI(Remote Method In ...

  8. 【面试必备】透过源码角度一步一步带你分析 ArrayList 扩容机制

    该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识).地址:https://github.com/Snailclimb/JavaGuide. 一 先从 Array ...

  9. quartz集群调度机制调研及源码分析---转载

    quartz2.2.1集群调度机制调研及源码分析 引言 quartz集群架构 调度器实例化 调度过程 触发器的获取 触发trigger: Job执行过程: 总结: 附: 引言 quratz是目前最为成 ...

最新文章

  1. js鼠标略过自动选择当前行
  2. GT Transceiver的动态重配置端口
  3. const 常量_软件特攻队|const常量,不一样的新玩法
  4. 一个词法分析器源码的剖析
  5. Linux 下搭建 Scala 开发环境
  6. html:(10):添加空格和hr
  7. python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!
  8. VS2013+OSG3.4.0+Qt5.5.1编译(超详)
  9. First Bad Version
  10. 系统篇: fstab 文件详解
  11. [BZOJ4556][Tjoi2016Heoi2016]字符串(二分+后缀数组+主席树)
  12. msm8916的OTG接鼠标可以使用,但是接U盘无法识别。
  13. RAKsmart高防服务器防御形式解析
  14. 【转】Java中斜杠和反斜杠的替换
  15. 深度学习数据增强数据扩增方法
  16. MATLAB点云处理(十四):圆柱体拟合(RANSAC | MSAC)
  17. CV学习笔记-VGG
  18. 徒步旅行中的注意事项
  19. 水の三角(超级卡特兰数/大施罗德数)
  20. uni-app入门介绍

热门文章

  1. 软考----多媒体与知识产权
  2. 关于面试笔试的相关问题通知
  3. Redhat7/CentOS7 网络配置与管理(nmtui、nmcli、GNOME GUI、ifcfg文件、IP命令)
  4. ROS-ROS中的坐标系管理系统
  5. 难得!微软招测试开发了!
  6. python中的返回值是什么意思_python中函数的返回值是什么
  7. HPB钱包Xcode集成
  8. 一位大佬的亲身经历总结:简历和面试的技巧
  9. 百度松果 小码哥考研小技巧 (概率期望)
  10. 某城市的出租车计费标准为起步价10元(3公里内含3公里),在3公里到10公里(含10公里)之间每公里2.1元,超过10公里部分每公里3元。编写程序,用Python实现输入行车距离x,输出车费。