第四章 区块链共识机制

  • 1、概述
  • 2、工作量证明共识机制
    • 2.2 交易优先级
    • 2.3 数学难题
      • 2.3.1 数学难题
      • 2.3.2 动态调整难度
    • 2.4 最长链原则
    • 2.5 作用
    • 2.6 缺点
  • 3、其它共识机制
    • 3.1 权益证明
      • 3.1.1 优点
      • 3.1.2 缺点
    • 3.2 工作量证明+权益证明
    • 3.3 股份授权证明
    • 3.4 瑞波证明
  • 4、参考资料

1、概述

区块链是基于去中心网络实现的。

去中心网络的意思就是:网络中的任何一个节点都有着同等地位,大家都有着同样的话语权。每个节点上都存储着完整的账本。

那问题来了,这些数据是如何添加到链上的,这么多的节点,以哪个节点的记录为准呢?

共识机制就是解决这个问题的。共识机制是区块链节点就区块信息达成全网一致共识的机制,可以保证最新区块准确添加到区块链、节点存储的区块链信息一致不分叉、可以抵御恶意攻击。

下面将介绍区块链采用的共识机制的详细过程,并简单介绍一下其他的共识机制。

2、工作量证明共识机制

区块链采用的是工作量证明机制POW。简单来说,就是所有节点去争夺一个任务,哪个节点率先完成任务,则该节点获得记账权及系统奖励。

下面看一下记账的完整流程,假设A转账给B:

  1. A创建一条交易记录:A->B,并把该笔记录向区块链网络中的各个节点进行广播。
  2. 区块链中的各个节点收集网络中尚未确定的交易记录,进行验证并记录下来。
  3. 节点开始计算一个数学难题,不断尝试直到找到合理的随机数。
  4. 节点创建候选区块,先创建区块头信息,再把验证通过的交易记录纳入到区块体中。
  5. 率先完成数学难题的节点,把区块广播到网络中。
  6. 其它节点接收到该区块,并进行验证。通过后在该区块后面继续添加区块。通常在增加6个区块后,该交易被永久留存。
  7. B收到A的转账。

各个节点被称为矿工,这个竞争记账的过程被称为挖矿。

2.2 交易优先级

因为每个区块的大小是1M,包含的交易数大概是2500到3000笔左右,那如何确定哪些交易纳入到候选区块中呢,这就涉及到交易优先级的问题。

A节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块,Priority<0.576就要付费。

Priority = Sum (Value of input * Input Age) / Transaction Size
  • value of input:是由比特币单位“聪”(1亿分之1个比特币)来表示的。
  • input age:是自该UTXO被记录到区块链为止所经历过的区块数,即这个UTXO在区块链中的深度。
  • transaction size:交易记录的大小由字节来表示。

区块中用来存储交易的前50K字节是保留给较高优先级交易的。节点在填充这50K字节的时候,会优先考虑这些最高优先级的交易,不管它们是否包含了矿工费。这种机制使得高优先级交易即便是零矿工费,也可以优先被处理。

然后,A挖矿节点会选出那些包含最小矿工费的交易,并按照“每千字节矿工费”进行排序,优先选择矿工费高的交易来填充剩下的区块。

如区块中仍有剩余空间,A挖矿节点可以选择那些不含矿工费的交易。

在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输入时所引用UTXO的深度(即交易“块龄”)也会随着变大。由于交易的优先值取决于它交易输入的“块龄”,所以这个交易的优先值也就随之增长了。最后,一个零矿工费交易的优先值就有可能会满足高优先级的门槛,被免费地打包进区块。

由于未打包的交易存储在内存中,如果矿工的内存释放了,则未打包的交易就丢失了,为了防止这种情况,发送交易的钱包,需要定期检查交易是否被打包进区块,如果没有的话,则需要重新发送交易记录,从而提醒节点不要把该笔交易忽略。

2.3 数学难题

生成一个区块的时间大概是10分钟,那问题来了,什么问题能让计算机计算10分钟,并且随着区块链网络中计算机的算力的变化生成的时间依然能保持在10分钟左右?

2.3.1 数学难题

这个数学题,是要对整个区块的数据求hash值:
hash值=SHA−256(区块数据)hash值=SHA-256(区块数据)hash值=SHA−256(区块数据)
而这个hash值需要满足一定的限制条件:以n个0开头。由于区块数据是固定的,无论计算多少次hash值,结果都是一样的,为了满足限制条件,引入了一个32位的随机数,计算的过程就是不断的调整随机数,使最终的hash值满足限制条件。如果尝试了所有的32位随机数都不能得到正确的hash值,那么就要改变币基(coinbase)的一个随机数,接着进行反复计算。

这个计算量非常大,比如在 2015 年年底,在大约 2 的 68 次方个随机数中,只有一个可以成功,这个数字比全球总人口的平方还要大。(搞不懂为什么是2的68次方,只要知道非常难就行了)

2.3.2 动态调整难度

这段有点绕,捋了很长时间才捋明白。

随着技术的发展及加入网络的节点的变化,如何保证产生一个区块的时间在10分钟左右呢,区块链采用了动态调整难度的方式。

假设第一批区块创建时:最大目标值为Target1,消耗的时间为2016*10分钟=20160分钟,难度difficulty=1。

每挖出2016个区块(大约为2周,2016*10分钟),会根据当前的难度值调整下一个阶段的难度值。

  • 假设最新2016个区块耗时时间大于2016*10分钟,则意味着之前的难度有点大了,需要降低难度。

  • 假设最新2016个区块耗时时间小于2016*10分钟,则意味着之前的难度有点小了,需要增大难度。

也就是下一个阶段的难度与当前消耗时间成反比,所以下阶段难度为:

difficultynext=2016∗10最新2016个区块耗时时间difficulty_{next}=\frac{2016*10}{最新2016个区块耗时时间}difficultynext​=最新2016个区块耗时时间2016∗10​

下阶段的目标值为:

targetnext=Target1difficultynexttarget_{next}=\frac{Target1}{difficulty_{next}}targetnext​=difficultynext​Target1​

代入上面的公式变为:

targetnext=Target1∗最新2016个区块耗时时间2016∗10target_{next}=\frac{Target1 * {最新2016个区块耗时时间}}{2016*10}targetnext​=2016∗10Target1∗最新2016个区块耗时时间​

难度值、目标值在区块中对应的字段为:Difficulty、Bits。

但是bits不是显式存储的,而是经过了压缩及规则处理后的结果,这里不去细说了。

2.4 最长链原则

矿工进行挖矿的过程中,有可能两个(比如A、B两个矿工)及以上矿工同时完成挖矿,同时把结果公布到区块链网络中。

网络中的节点有的接收到了A矿工的区块,有的接收到了B矿工的区块,确认无误后就开始在各自收到的区块后面继续挖矿,这就会产生分叉。

后续节点继续进行挖矿,又会把新区块发布到全网中,比如是在A矿工区块的后面新增的区块。新区块得到全网认可后,这个区块所在的链就成了最长链,其它节点需要在这个链上继续进行挖矿,这就是最长链原则。

最长链原则可以有效的避免分叉

2.5 作用

该共识机制在区块链提现中有以下几个作用:

  • 交易:在共识机制下,竞争成功的节点完成了交易的记账,其它节点进行了交易的验证并保存了完整的账本信息。
  • 发行货币:竞争成功的节点,会获得系统发放的奖励。正是由于这个奖励体系,在利益的驱使下,各个节点才有动力去竞争记账权,另外,这也是去中心网络上发行货币的唯一方式。挖矿奖励每4年递减一次,依次为50、25、12.5…,基于这个公式,比特币挖矿奖励以指数方式递减,直到2140年。届时所有的比特币(20,999,999,980)全部发行完毕。到时候挖矿系统将不再有奖励,完全靠交易手续费维持。
  • 维持交易安全、不可逆:在该共识机制下,想对之前的数据进行篡改,必须重写之后的所有数据,而重写所有数据,就意味着破坏者的算力需要远超诚实节点;另外,在该机制下,无法占用别人的资金,因为就算算力超越了所有诚实节点,诚实节点还有一个验证的过程。

2.6 缺点

缺点有以下几个:

  1. 容量问题:每个区块大小为1M,最多能放2000-3000条交易,不能应对大流量的场景。当交易数量过多时,会优先选择金额较大、手续费较高的交易,小额的、手续费低的交易有可能永远无法完成交易。这点完全背离了去中心化的初中。
  2. 性能:每10分钟一个区块,最多能放2000-3000条交易,则qps为5,这在大型系统中肯定是无法接受的。
  3. 资源消耗问题:所有节点耗费大量的资源来计算一个数学难题,最终只录取一个节点的结果,造成了大量的资源浪费。
  4. 算力集中问题凸显:随着挖矿难度增大,个体矿工已经无法挖到了,出现了大量的矿池(集合大量的矿工共同挖矿),这些矿池的算力集中,有的已经无限接近51%了,比如Ghash矿池。

3、其它共识机制

工作量证明机制只是众多共识机制里面的一种,下面介绍一下其它的共识机制。

3.1 权益证明

权益证明Pos,与工作量证明不同,工作量证明以算力竞争记账权利,权益证明以持有资产竞争记账权利。

这里涉及到一个重要概念:币天,1币天就是持有1个币1天,比如有30个币,持有100天,则等于3000币天。如果交易出去了,则币天清0。

每个节点依据自己的币天数量,会有不同的目标值(这与pow不同,pow中每个节点的目标值是相同的),币天越大则目标值越大,则竞争成功的概率越大。

3.1.1 优点

相对于pow51%算力攻击,pos的51%资产攻击更加困难。而且资产比较大的节点本身就是系统的受益者,如果攻击网络,它自己的损失会很大。

3.1.2 缺点

缺点也很明显,谁的资产多,谁就占有优势,会造成持有资产较多的节点有意识的持续持有资产,降低了资产的流动性,不利于网络的发展。
第二个问题是,货币发行的问题。在网络之初,是没有任何货币的,此时如何进行货币的发行成为了问题。

3.2 工作量证明+权益证明

采用工作量证明机制Pow发行货币,通过pos维护网络安全。
该机制解决了纯pos初期货币无法发行的问题。

3.3 股份授权证明

简称Dpos。
每个持币节点将投票权授权给一名代表。由票数最多的100个节点作为代表,按照既定的事件表轮流产生区块。所有的代表会收到一个区块交易费的1%作为酬劳。这种方式可以大大提升网络达成共识的效率。

3.4 瑞波证明

这个算法没有搞明白,先介绍下原理,后面再学习吧。
首先,在瑞波网络中,节点分成2大类:验证节点、非验证节点。只有验证节点有记账权限。
验证节点又细分为可信任节点及普通节点。普通验证节点负责对交易进行验证并接受可信任节点的提议。当可信任节点对交易认可比例达到要求后,交易才可以入账。每个普通验证节点会保存一个可信任节点的列表。

下面看一下瑞波证明的过程:

  1. 验证节点接收网络中未确认的交易,存储在本地,与本地账本进行验证,如果不通过,则直接丢弃。如果验证通过,则打包进候选交易集,作为提案发送给其它验证节点。
  2. 验证节点接收到其它验证节点的提案,判断是否在可信节点列表中,如果不在则直接丢弃。如果在可信任列表中,则对比提案与本地的候选交易集,发现匹配的交易则验证次数加1。在一定时间内,当交易获得的票数超过50%,则进入下一轮。
  3. 重复步骤2,每次提高交易获得的票数的阈值,直到该阈值达到80%。
  4. 把达到80%票数的交易写入到本地账本中,交易关闭。

问题:没有说明白多个验证节点同时记账,以哪个验证节点的为主呢??

4、参考资料

详解比特币挖矿原理
共识机制-POS(权益证明)
Ripple共识算法的工作流程介绍

第四章 区块链共识机制相关推荐

  1. 区块链共识机制技术一——POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  2. 区块链共识机制技术一--POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  3. 第3讲 | 浅说区块链共识机制

    ----文章出自极客时间<深入浅出区块链>   作者:元界 CTO 陈浩 我在第2讲"区块链到底是怎么运行的"一文中,提到了"打包Transaction&qu ...

  4. 细说区块链共识机制之pos

    细说区块链共识机制之pos  正版江湖走马 关注 2018.07.15 20:51 字数 1006 阅读 17评论 0喜欢 0 POS全称proof of stake,中文名为权益证明.由NXT最先推 ...

  5. 区块链共识机制之拜占庭算法(BFT)及其发展

                                  区块链共识机制之拜占庭算法(BFT)及其发展 一.什么是拜占庭将军问题 首先假设有10支军队,这10支军队在地域上分散驻扎,每支军队都由各自 ...

  6. 016 | 漫谈区块链共识机制

    原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/blockchain/20180425 微信订阅号:keeganlee_me 写于201 ...

  7. 区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点

    近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...

  8. 区块链共识机制 和 经典分布式共识机制

    共识机制作为区块链的核心技术,决定了参与节点以何种方式对某些特定的数据 达成一致,关系到区块链的安全性.可扩展性和去中心化程度等许多重要特性.共识设计的 优劣是区块链自治能否进入良性循环的关键.共识机 ...

  9. 建造更安全的SGX区块链共识机制 Proof-of-Elapsed-Time,百度安全论文入选安全顶会NDSS...

    百度安全在系统安全领域深耕多年,成果产出持续在多个世界顶会亮相.近日,百度安全有一最新研究成果在信息安全四大顶会之一NDSS 2022发表.文章聚焦在新型区块链共识机制PoET的安全问题以及解决方案. ...

最新文章

  1. Java 数据类型转换
  2. redis hash key mysql_Linux取得Redis数据库中hash类型的所有feild或者所有value
  3. 求解两个非负整数的最大公约数(C语言实现)
  4. nanopi 创建共享文件夹
  5. 8K 星!这可能是最适合你的 TensorFlow 教程
  6. How to get ABAP code coverage result
  7. Linux常用命令—文件处理命令—文件处理命令
  8. SQL Server AUTO_FIX_Login_Users
  9. 管理感悟:一个人的工作效率是不可能提高的
  10. 微信小程序开发常用代码
  11. Win10怎么把登录密码去掉
  12. 国外优秀JAVA技术网站推荐
  13. nginx源码分析—reuseport的使用
  14. n维立方体角、面、边的个数
  15. 幸运大转盘抽奖(前端)
  16. 汉森网络谈谈如何才能增加网站权重
  17. button标签和input的button
  18. SAP MM 公司间STO外向交货单SPED输出报错 - PO### does not contain a confirmation control key -
  19. Solarwinds使用方法
  20. SD卡数据恢复教程:3种工具一键恢复SD卡误删的照片

热门文章

  1. pycharm--opencv报错解决
  2. cv2模块的error解决办法(不断更新)
  3. 打开PS总提示访问钥匙串密钥的解决办法
  4. matlab y2=sin(3t)exp(-t/3);,Matlab工程应用基础_3_3_西安交通大学:Matlab工程应用基础(姜歌东)_ppt_大学课件预览_高等教育资讯网...
  5. 电影院移动端APP更新 观众迎来掌上的社交看电影
  6. Linux内核源码阅读以及工具详解
  7. python常用api_常用的Python接口,C语言也挡不住Python的强大
  8. screen的常用命令和运行程序的操作步骤
  9. 分析思维 第四篇:数据分析入门阶段——描述性统计分析和相关分析
  10. web项目开发 之 前端规范 --- HTML编码规范