像比特币、以太坊、NXT、Bitshares等这些区块链系统,其本质上是一种加密经济组织,它建立在点对点网络上,是去中心化、无管辖的,由密码学、经济学和社会共识来共同维护。这些加密网络因各种原因有着多种不同的风格——有些基于ASIC的工作量证明(PoW)、有些基于GPU的工作量证明、有些原生权益证明(PoS)、有些授权股权证明(DPOS)、还有我们即将见到的Casper权益证明——这些不同的风格都有着他们的哲学,在学习共识机制的时候,更重要的是理解其中的思想。

“共识”,其汉语解释为共同的认识。相互没有联系的彼此,对一个特定问题持有共同的看法,除了因为一些不可控的道德、价值等方面的共识,规则的作用是非常重要的。

共识机制,就是游戏的规则,社会的法律,是人们共同采用的达成和维护共识的方式,也就是所有人都认可并遵守的规则,这也是区块链的灵魂所在。

共识机制在区块链中

区块链是去中心化的,没有一个指挥中心来告诉每个节点什么时候该做什么。所有网络上的参与者(节点)在共识机制下工作,他们一起协作完成一个按时间顺序的可信的公共账本(公开的数据库),并且每个节点都保存一份完整的数据备份,每个节点的数据内容必须完全一致。

区块链上矿工的工作

区块链上,每个矿工都在努力打包交易数据,某矿工a打包了一个数据块,他把这个数据块向全网广播,其他矿工收到这个块后对数据进行验证,确认无误就把这个块存起来,停止当前的打包工作,继续下一次打包,以此延长区块链。

可能存在的问题

根据FLP原理。Impossibility of Distributed Consensus with One Faulty Process一文提出:在一个异步系统中我们不可能确切知道任何一台主机是否死机了,因为我们无法分清楚主机或网络的性能减慢与主机死机的区别,也就是说我们无法可靠地侦测到失败错误。当多个主机通过异步通讯方式组成网络集群时,这种异步网络默认是不可靠的。

在这个不可靠的网络上,数据会有延迟,也可能丢失,然而每个矿工都在都默默的做着自己的工作,努力的打包、存储数据块,不会问别人打包的情况,那么:

  • 有可能多个矿工打包了同一个交易
  • 可能矿工b和矿工c都打包并广播了数据块,矿工d和矿工e分别收到了来自b和c的块,都验证通过并存储了数据

另外,所有在这个网络上工作的矿工们,他们会思考:

  • 我为什么要那么努力,我能得到什么
  • 我需要具备什么条件才可以出块
  • 如果我打包的数据块没有通过验证,我的这次努力有回报吗

在网络上一定会存在一些恶意的矿工,比如:矿工a不广播他的数据块,而是直接在后面默默的继续打包

区块链的共识机制,主要就是为了解决这些问题,目前,已经发展出了多种机制,每种机制都有利有弊,本文主要简单介绍工POW (Proof of Work) 工作量证明,之后会继续专门介绍其他共识机制。

工作量证明(POW)

最早的比特币区块链所使用的共识机制,以消耗掉大量算力竞争出块。

比特币的最长链规则

比特币区块链上有一个共识——始终以最长连为主链(有效链),也即 “最长链规则”。各节点都以数据块最多的一条链作为自己添加、更新区块的选择。这个规则对于工作量证明来说,无疑是一个神教,主链必然是广大矿工消耗最多经济资本创造出来的链。所有不合法、不在主链上的区块,最终都会被丢弃,以此维护一个权威的公共账本。

矿工挖矿的过程就是找到nonce的值,使得下面的公式成立:

SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + nonce )) < TARGET

version: block的版本

prev_hash:上一个block的hash值

merkle_root:需要写入的交易记录的hash树的值

ntime:更新时间

nbits:当前难度

其中TARGET不是恒定不变的,在比特币区块链中,每2016个块(约14天)会根据这段时间出块的速度做调整,使出块速度保持在约10分钟,也就是难度控制。

在这2016个块的时间段内,哈希运算的难度是一定的,对每个矿工来说都是公平的,需要竞争的就是速度和运气了,谁拥有更多的算力,谁就有更高的概率在竞争中胜出,更快打包出块。

所以比特币区块链的工作量证明真的是一个非常纯粹的力气活,有时也会把它叫经典POW。

为什么需要等这么长时间,在这10分钟里,比特币系统在干什么?

  • 广播区块
  • 验证区块
  • 完成新区块的哈希运算

这么长的时间,因为网络传输导致的数据问题概率大大减小,尽可能大的保证了所有矿工都收到广播并验证数据,但其实,传输和验证也并不需要10分钟那么长,其中90%的时间都用来进行哈希运算,因为这个运算的难度真的很大。也正是这样足够大的难度,才尽可能保证不同矿工同时出块的概率比较小,从而控制区块链少出现分叉。

在最长链规则下,即使区块链出现了分叉,随着时间的推移,两个链会变得不一样长,那么相对较短的一条链就会被丢掉,从而保持只有一条主链。

所以,比特币区块链的数据一致性,是建立在放弃交易处理效率的基础上的。

关于51%攻击

在POW共识机制下,如果某个节点拥有全网51%以上的算力,那么他就可以实现51%攻击(双花攻击)。所以区块链上,算力越多越分散,越安全。那么就需要保持矿工的活力,要有足够的激励让矿工努力挖矿,并且不断有新的矿工加入,这个激励就是丰厚的区块奖励和交易费用。

在比特币区块链上,区块奖励从最初的50个比特币,每四年衰减一半,现在只有12.5个了。但在区块奖励减少的同时,流通的比特币变多了,交易费也变多了,交易费的竞争更加促进了矿工的积极性,以此保障了比特币区块链的健壮性。

POW区块链的安全是建立在巨大的电力消耗上的,有新闻指出,2019年用于比特币挖矿的耗电量超过了瑞士全国用电量

到这里,相信已经对共识机制以及POW有了初步的认识,下面再看看以太坊的POW共识机制。

以太坊的POW共识机制

阅读以太坊发展简史,我们知道目前以太坊依然是POW共识机制。据最新消息,2019年12月将发布伊斯坦布尔(Istanbul)升级,此时以太坊将从POW过渡到POS。有兴趣的小伙伴可以了解一下以太坊2.0的美好图景

以太坊的GHost协议

与比特币的最长链规则相比,以太坊的GHOST协议,唯一的也是最重要的不同就在于它选择主链的方式。

以太坊的出块时间只有十多秒,缩短出块时间就意味着难度降低,同一时间能出块的矿工就会变多,分叉概率就会大大升高,如上图,这种情况下如何维护一条主链。这就是GHOST的精妙之处,在比特币的最长链规则下,要避免出现分叉,而在GHOST协议下,却是利用分叉来保护区块链的安全性,如下图:

在以太坊的GHOST协议中,引入了叔块,如上图。当分叉出现时,矿工m0可以在挖区块2时引用1a、1b作为叔块,当m0挖出区块2时,矿工m1、m2就可以得到区块奖励的7/8,同时m0可以额外得到区块奖励的1/32×2。而矿工m1、m2在收到区块2的广播时会验证并发现m0挖矿的链更长,于是放弃手里的工作,转而在区块2后面继续挖矿。

在引用叔块时,最多同时引用2个,即m0一次引用叔块最多得到1/32×2的奖励

给叔块的奖励会随着离叔块的距离每增加1而减少1/8,直到距离到第8个块时不再有叔块奖励,如上图中区块1引用两个叔块1c、1d,矿工m3、m4分别得到7/8的区块奖励

通过这种方式,可以在网络中产生很多分叉,并且激励矿工在发现最长链时尽快合并,让更多的矿工在主链上挖矿。只要通过难度控制,保持主链和全网出块率不超过一个安全阀值,就可以有效抵御双花攻击。

总结

在工作量证明的逻辑下,区块链会消耗大量能量,并且它的攻击和防守成本是1:1,并没有防守优势。但是我们依然不可否认其在区块链中的价值,它在自由市场和博弈论的基础上建立起来,为之后的其他共识机制奠定了基础。

本文首发于系统学习区块链技术博客——深入浅出区块链

区块链共识机制之工作量证明(POW)的更多相关文章

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

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

  2. 区块链共识机制(POW、POS、DPOS等)的优缺点

    一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...

  3. 区块链共识机制:POW、POS、DPOS、PBFT、POOL

    共识机制作为区块链的关键技术之一,在业务吞吐量.交易速度.不可篡改性.准入门槛等等方面发挥重要的作用. 区块链是去中心化的,没有中心记账节点,所以需要全网对账本达成共识.目前有POW.POS.DPOS ...

  4. [区块链] 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    近几天对区块链中几种常见的共识机制(PBFT,Raft,PoW,PoS,DPoS,Ripple)进行了总结.尽量使用简单易懂语言,篇幅较大,想了解的可以只读每个算法介绍中前边的原理.本篇文章主要参考& ...

  5. [转帖][区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得

    [区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得 置顶 2017-03-12 18:31:19 乐扣老师lekkoliu 阅读数 127953  收藏 更多 分类专栏: 技术管理 区 ...

  6. 老K漫谈区块链的共识(3)——分布式系统和区块链共识

    1. 啥是分布式系统 当我们评价一个新的事物或者介绍一个新的技术的时候,我们不能架空历史和环境,新的事物不可能脱离历史和环境凭空诞生.任何新的事物和新的技术总是或多或少的,与旧的事件以及过去的技术有所 ...

  7. 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述

    共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...

  8. 区块链共识算法|RAFT和PBFT的区别

    这里有个很形象的比喻: 一个团队一定会有一个老大和普通成员.对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行.那什么时候重新老大呢?只有当老大挂了 ...

  9. [转]工作量证明(PoW)权益证明(PoS)和委任权益证明(DPoS)区别

    原文链接 Both in the glossary and in some of our previous posts we've touched on mining and the two main ...

随机推荐

  1. 【python数据分析实战】电影票房数据分析(二)数据可视化

    目录 图1 每年的月票房走势图 图2 年票房总值.上映影片总数及观影人次 图3 单片总票房及日均票房 图4 单片票房及上映月份关系图 在上一部分<[python数据分析实战]电影票房数据分析(一 ...

  2. C++ 构造函数的执行过程(一) 无继承

      引言 C++ 构造函数的执行过程(一) 无继承 本篇介绍了在无继承情况下, C++构造函数的执行过程, 即成员变量的构建先于函数体的执行, 初始化列表的数量和顺序并不对构造函数执行顺序造成任何影响 ...

  3. CSS(1)---css语法、css选择器

    CSS(1)---css语法.css选择器 一.CSS语法 1.CSS语法 CSS 规则由两个主要的部分构成:选择器以及一条或多条声明. 属性 是您希望设置的 样式属性.每个属性有一个属性值.属性和属 ...

  4. UnityWebRequest_ZT

    using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using U ...

  5. Splash的使用

    Splash Lua脚本http://localhost:8050 入口及返回值 function main(splash, args) splash:go("http://www.baid ...

  6. IIS中如何设置域名

    如何在IIS中设置域名: 1,想好我们想要配置的本地域名,我们以www.baidu.com为例. 2,打开系统盘,一般默认的系统盘为C盘,打开:C:\Windows\System32\drivers\ ...

  7. hydra的使用

    hydra参数详解 -R 继续从上一次进度接着破解 -S 大写,采用SSL链接 -s 小写,可通过这个参数指定非默认端口 -l 指定破解的用户,对特定用户破解 -L 指定用户名字典 -p 小写,指定密 ...

  8. git 命令归纳版

    1.克隆: 单纯的克隆名字: git clone [url] 自定义新建项目名称: git clone [url] [项目名字]   2.跟踪文件: git add [文件名]   3.添加忽略文件 ...

  9. 使用 Github + Hexo 从 0 搭建一个博客

    最近有几位同学在公众号后台留言问我的博客站是怎么建站的,思来想去,还是写一篇从 0 开始吧. 前置准备 我们先聊一下前置准备,可能很多同学一听说要自己搭一个博客系统,直接就望而却步.不得有台服务器么, ...

  10. regexp盲注的一些改进

    index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli&qu ...