区块链共识机制之工作量证明(POW)
像比特币、以太坊、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)的更多相关文章
- (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...
- 区块链共识机制(POW、POS、DPOS等)的优缺点
一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...
- 区块链共识机制:POW、POS、DPOS、PBFT、POOL
共识机制作为区块链的关键技术之一,在业务吞吐量.交易速度.不可篡改性.准入门槛等等方面发挥重要的作用. 区块链是去中心化的,没有中心记账节点,所以需要全网对账本达成共识.目前有POW.POS.DPOS ...
- [区块链] 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
近几天对区块链中几种常见的共识机制(PBFT,Raft,PoW,PoS,DPoS,Ripple)进行了总结.尽量使用简单易懂语言,篇幅较大,想了解的可以只读每个算法介绍中前边的原理.本篇文章主要参考& ...
- [转帖][区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得
[区块链]共识算法(POW,POS,DPOS,PBFT)介绍和心得 置顶 2017-03-12 18:31:19 乐扣老师lekkoliu 阅读数 127953 收藏 更多 分类专栏: 技术管理 区 ...
- 老K漫谈区块链的共识(3)——分布式系统和区块链共识
1. 啥是分布式系统 当我们评价一个新的事物或者介绍一个新的技术的时候,我们不能架空历史和环境,新的事物不可能脱离历史和环境凭空诞生.任何新的事物和新的技术总是或多或少的,与旧的事件以及过去的技术有所 ...
- 区块链共识算法 PBFT(拜占庭容错)、PAXOS、RAFT简述
共识算法 区块链中最重要的便是共识算法,比特币使用的是POS(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算理便的不怎么重要了,而今PO ...
- 区块链共识算法|RAFT和PBFT的区别
这里有个很形象的比喻: 一个团队一定会有一个老大和普通成员.对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行.那什么时候重新老大呢?只有当老大挂了 ...
- [转]工作量证明(PoW)权益证明(PoS)和委任权益证明(DPoS)区别
原文链接 Both in the glossary and in some of our previous posts we've touched on mining and the two main ...
随机推荐
- odoo联调补充
odoo联调补充(剑飞花 373500710) 安装某些py插件包时需要vc++2008发行包,可访问下面地址. 安装python-ldap一定要用支持9.44postgresSQL的exe安装,同样 ...
- jquery 往上滚动的时显示,上下滚动执行的js
$(document).on("mousewheel DOMMouseScroll", function (e) { var delta = (e.originalEvent.wh ...
- 谜一样的Java编码和Windows编码
本文适用于Java源码用UTF-8编码,平台系统为Windows的情况 不管是maven,还是javac,你的IDE都会带上一个参数:-Dfile.encoding=UTF-8 Windows(或许W ...
- bash_history文件怎么删除
Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易.每个在系统中拥有账号的用户在他的目录下都有一个 ...
- 数据结构(四十五)选择排序(1.直接选择排序(O(n²))2.堆排序(O(nlogn)))
一.选择排序的定义 选择排序的基本思想是:每次从待排序的数据元素集合中选取最小(或最大)的数据元素放到数据元素集合的最前(或最后),数据元素集合不断缩小,当数据元素集合为空时排序过程结束.常用的选择排 ...
- Linux 提示符格式及颜色
# 提示符颜色配置: 颜色 黑 红 绿 黄 青 紫 蓝 白 字体 30 31 32 33 34 35 36 37 背景 40 41 42 43 44 45 ...
- SpringBoot整合SSM(代码实现Demo)
SpringBoot整合SSM 如图所示: 一.数据准备: 数据库文件:数据库名:saas-export,表名:ss_company 创建表语句: DROP TABLE IF EXISTS ss_co ...
- SpringCloud之Hystrix断路器(六)
整合Hystrix order-service pom.xml <dependency> <groupId>org.springframework.cloud& ...
- MongoDB自建和阿里云RDS备份还原
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
- 使用Magicodes.SwaggerUI快速配置SwaggerUI以及设置API分组
Magicodes.SwaggerUI 快速配置和集成SwaggerUI 特点 通过配置文件简单配置即可完成SwaggerUI的API格式JSON生成和集成 支持API分组和隐藏 支持自定义页面和验证 ...