区块链的共识算法 及 分叉 的通俗讲解 (一)

作者:林冠宏 / 指尖下的幽灵

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities



本文不做一般入门的区块链描述讲解。着重简述讲解:

  • 区块链的分叉
  • 共识算法

目录

  • 前言
  • 简单过一下区块链
  • 通俗讲解共识
  • 共识算法
    • PoW
  • 区块链分叉
    • 硬分叉的出现
    • 软分叉的出现
  • 参考

前言

由于最近的开发工作是与以太坊公链相关的去中心化交易所,项目两个多月之久,对区块链相关的知识内容了解了一些,故择文以记录之,但求文字通俗易懂,无纰漏。因自身求学过程中所遇坑无数,业内良文亦少之又少,深感朦胧之懂之不爽。此外,亦坚信区块链技术未来必能大放光芒,因现在多应用于虚拟货币,故人谈区块链,内心首想皆炒币相关之内容。

简单过一下区块链

我们一般意识形态中的 链 是铁链,由铁铸成,一环扣一环。形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个最简单的雏形

见下图

通俗讲解共识

所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。共识,是一种规则。

继续我们的会议例子。参与会议的人,通过开会的方式来达到谈论解决问题

对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持一致。让账本保持一致的深入一层意思就是,让链中区块信息保持一致。

为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。区块链没了共识的规则,各个节点各干各的,失去一致的意义。

这两个例子的对应的关系如下:

  • 会议的人 = 挖矿的矿工
  • 开会 = 共识方式(算法)
  • 谈论解决问题 = 让自己的账本跟其他节点的账本保持一致

如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。

共识算法

目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致共识方式(算法)有如下几种:

  • PoW,代表者是比特币 (BTC)

    • 弊端:

      • 矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
      • 存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增加,挖出的不够付电费
  • PoS,代表者是以太坊 (ETH),从PoW过度到PoS
    • 弊端:

      • 破坏者对网络的攻击成本很低,拥有代币就能竞争
      • 另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性
  • DPoS,代表者是柚子(EOS)
    • 弊端:

      • 选举固定数量的见证人作为记账候选人有可能不适合于完全去中心化的场景
      • 在网络节点很少的场景,选举的见证人的代表性也不强.
  • PBFT 拜占庭容错,联盟链中常用
    • 弊端:

      • 不适合公有链,适合联盟链

下面通俗讲解下每种共识算法的概念,注意!是概念,非代码层面的详细实现。

PoW

它的全称是:Proof of Work 工作量证明。字面意思,就是谁做的活越多,谁话事权越大,一定层面上类似现实生活的多劳多得的概念。该例子会穿插生活事例,其他的几个讲解将不再累赘。

比特币为例子,比特币挖矿就是通过计算符合某一个比特币区块头哈希散列值争夺记账权。这个过程需要通过大量的计算实现,简单理解就是你进行的计算量大(工作量大),你就有大概率获得记账权,即矿工的挖出的区块并入主链。

  • 区块头,区块链中的区块的头部。你有一个饭盒,饭盒第一层,形象为动物头部,称之为头部。第一层放着米饭,米饭就是头部装载着的东西
  • 哈希散列值,一种通过数学公式计算得出的值
    • 哈希:数学中的散列函数
    • 散列值: 通过哈希函数得出的值
    • 例如加法公式:1 + 2 = 3。那么哈希公式:hash(1,2) = 结果
  • 区块头哈希散列值,饭盒第一层装着的是饭。那么这里的这个值就是区块头装着的东西
  • 记账权,话事权,谁挖出的区块是有效的。

所以说。在很多个节点都在挖矿的情况下,大家都有可能挖出一个区块,随之广播到其他节点中去,那么每个节点中会根据谁先挖出为准,确认该区块,并入链中。

对比现实生活,数学竞赛中,参数者 相当于矿工,一道题目,谁先做出就公布计算过程和答案,不由裁判判断,由参赛者一起验证,没问题后,宣布该题目结束,解题者等相关信息被记录到册子/数据库/网络。之后继续下一道题。

回到比特币挖矿中:

  • 这道难题就是 计算出正确的哈希散列值

    • 计算哈希散列值 随着难度系数增大,会越来越困难
    • 计算需要耗费大量的电力资源,工作量大
  • 一旦计算出了,就告诉其他节点
  • 节点收到通知后,停下手上的计算工作
  • 节点开始验证信息
    • 信息有效,当前的块被挖出,各节点开始重新挖下一个
    • 信息无效,各节点继续自己的手上的计算工作
  • 成功挖出有效区块的节点获得奖励,比特币奖励

同时解出问题的情况怎么办?---① 答案见下一章节 区块链分叉

区块链分叉

注意私有节点不在讨论范围内,所有节点基于公有节点。分叉的情况有:

  • 硬分叉

    • 一旦出现,最后的结果是一分为二
    • 术语的说法:旧节点无法认可新节点产生的区块,为硬分叉
  • 软分叉
    • 一旦出现,最后的结果是能掰正的
    • 术语的说法:旧节点能够认可新节点产生的区块,为软分叉

现在先回答上一章节留下的问题 --- ①,

① 的情况是软分叉的一种,当有两个或多个节点同时挖出了同区块号码的一个区块,然后它们同时广播信息出去,假设一个是A,而另一个是B,那么距离 A 比较近的节点,还没等到收到其他消息就先收到了 A 的信息,并开始确认 A 所挖出的这个区块的信息,随后加入A挖出的这个区块到自己所在的公链中去。同理 距离 B 比较近的节点,也会先处理 B 挖出的区块信息并添加入自己所在的公链中。

上面文字对应于下图。距离 A 最近的是 节点1,距离 B 最近的是 节点5

至此,出现了链的分叉。这是一种使用了同样共识算法,共识规则下导致的分叉,

出现了这种情况,矿工是比较好自我纠正的。由于解题能力和矿工的数量成正比,因此两条链的增长速度也是不一样的,在一段时间之后,总有一条链的长度要超过另一条。当矿工发现全网有一条更长的链时,他就会抛弃他当前的链,把新的更长的链全部复制回来,在这条链的基础上继续挖矿。所有矿工都这样操作,这条链就成为了主链,分叉出来的链便会被抛弃掉。

硬分叉的出现

如果区块链软件的共识规则被改变,并且这种规则改变无法向前兼容,旧节点无法认可新节点产生的区块,且旧节点偏偏就是不升级,那么该分叉将导致链一分为二。

分叉点后的链,往后互不影响,节点在站好派别后,也不会再互相广播区块信息。新节点旧节点会开始在不同的区块链上运行(挖矿交易验证等)

举个简单的例子,如果节点版本1.0 所接收的区块结构字段是10个,1年后发布节点2.0版本,2.0 兼容 1.0,但是 1.0 的不能接受 2.0 版本中多出的字段。

硬分叉的过程:

  • 开发者发布新的节点代码,新的改变了区块链的共识规则且不被旧的兼容,于是节点程序出现了分叉(software fork)
  • 区块链网络中部分节点开始运行新的节点代码,在新规则下产生的交易与区块将被旧节点拒绝,旧节点开始短暂的断开与这些发送被自己拒绝的交易与区块新节点的连接,于是整个区块链网络出现了分叉(network fork)
  • 新节点的矿工开始基于新规则挖矿,旧的依然用旧的规则,不同的的矿工算力出现了分叉(mining fork)
  • 最终,整个区块链出现了分叉(chain fork)。

一个实例:

2017年8月1号,Bitcoin Cash(BCH)区块链成功在区块高度478559与主链分离。这一新的加密货币默认区块大小为8MB,并且可以实现区块容量的动态调整。

由于旧节点只认可小于1MB的区块,所以运行BCH客户端节点产生的区块无法向前兼容,将被旧节点拒绝,最后运行不同客户端的矿工将会长期运行在两条不同的区块链上(BTC和BCH)

软分叉的出现

  • 不同的节点短时间差内挖出了同区块号的区块,也就是上面的例子
  • 因共识规则被改变,旧节点能够识别新节点产生的区块,旧的块不能被新的接受
    • 新节点全网算力大于50%
    • 新节点全网算力小于等于50%

第二种的软分叉是不一定能由节点自我纠正的。万全的解决方案必须依赖人力升级节点到同版本。

  1. 新节点全网算力大于50%,因为新节点算力大于50%,所以不论旧节点升级不升级,最长的链也一定会是全部由新节点生成的区块组成的链。而且,这条最长链最终都会是双方都认为合法的一条,原因参考上面谈到的最长链复制,因满足下面几点所以能被复制。

    • 旧的能接收新的,在分叉点之后的区块参杂着

      • 旧节点的区块
      • 新节点的区块
    • 新的不能接收旧的,但是最终及其之后总比旧的长
  2. 新节点全网算力小于等于50%,最终不能通过短的复制长的达到统一,结果是:分叉。原因如下。
    • 旧节点最终会比新节点的链要长
    • 新的总是不能接受旧的,不会去复制一条含有自己不能接受的块的链

写到这,发现内容铺开后比我想象中的要多。

故目前暂时分成两章节,剩下的共识算法的介绍留到第二章

参考

https://blog.csdn.net/chabuduoxiansheng1/article/details/79740018

https://blog.csdn.net/s_lisheng/article/details/78022645

原文地址:https://www.cnblogs.com/linguanh/p/9502971.html

时间: 2024-10-03 23:39:32

区块链的共识算法 及 分叉 的通俗讲解 (一)的相关文章

区块链主流共识算法

一.POW(Proof Of Work) Proof Of Work,也就是工作量证明.工作量证明系统(或者说协议.函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策.它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间.这种系统要求得到证明的过程是低效且漫长的,可是校验则是高效且迅速,概括起来就是求解难,验证容易. 比特币是第一个区块链应用,同时也是最著名的应用之一,它所使用的共识机制就是POW.那么具体是怎么实现的呢? 在比特币中,使用了SHA256这种哈希函数作为求解手段.

区块链挖矿开发?零之矿机讲解篇

互联网时代,互联网+就是横亘在许多企业面前的关口,而跨过去的手段,唯有创新.一旦闯过关口,就可能迎来风口,微信商城已经成为品牌拓展客源.冲刺业绩的主流平台.以微信商城的全面启动拓展市场渠道,为品牌微时代的创新升级发展提供强大助力. 一.初入游戏 注册账户 :按照注册提示操作即可,在这里,如果填入好友的邀请码,可以额外获得30个矿晶.如果不是邀请注册的玩家,系统初始赠送的矿晶只有15个喔. 注册进入游戏后,立马花10个矿晶去雇佣矿工挖矿,一天妥妥收益48个矿晶. 矿晶作用非常大,可参与夺宝和竞拍.

经典排序算法的零基础通俗讲解

一.几种经典排序算法的排序过程及时间复杂度 冒泡:时间复杂度O(n²) 第一个数和第二个数比较,大的放在后边,然后第二个数再和第三个数比较,大的放在后面.以此类推. 选择:时间复杂度O(n²): 0到n-1里找最小值放位置0上:1到n-1里找最小值放位置1上 以此类推 插入:时间复杂度O(n²) 一个数 和他前边的数比较 如果大于那个数就放在那个数后面 如果比那个数小就一直往前比较 直到比某个数大就放在那个数后面.如果都没有就放在首位置. 时间复杂度:O(N*logN) : 归并排序,快速排序,

区块链共识算法实现

最近对区块链的共识算法比较感兴趣,也在尝试着使用JAVA实现它.进度不是很快,日积月累吧,目前在写POW,RAFT. POW还有一小块部分没有搞明白,还在搜索资料中. RAFT实现了第一个阶段:LEADER选举,使用了JAVA,MAVEN,DOCKER实现.虽然还有一些小瑕疵,慢慢来吧. 附上GitHub地址,希望各位大佬可以指点迷津(主要还是自学进度太慢了). 原文地址:https://www.cnblogs.com/cbkj-xd/p/11614027.html

比特币与区块链

早上看到一则新闻,说比特币可能要分裂比特币现金,很多持有者可能会凭空多出很多财富,又联想到前端时间微信群中讨论的很火热的区块链的话题,记得当时有人曾说这可能是影响未来几年最重要的技术之一,觉得为看懂未来趋势,有必要再深入的了解一下区块链. 印象中区块链就是一个去中心化的分布式数据库,没有中心权威代理,就要解决信息点对点传递的真实有效性问题.下面转载一下刚看到的一篇不错的解释. 作者:maxdeath 代尔夫特理工大学 (TU Delft) 博士后区块链博士后,共识算法专家 链接:https://

区块链和比特币

何为区块链 ? 何为比特币? 比特币采用区块链技术, 但不等于比特币就是区块链 如果用一句通俗的话来概括:区块链,是一种(去中心化)技术,它解决的是市场经济中最核心的"信任"问题,把陌生人之间的信任成本降到极低的水平,对于中介成本很高或者缺乏信任场景的领域很适用区块链技术. 市场经济体制下,有一个很重要的问题就是信任, 如果没有信任, 任何交易都不可能成立. 曾经有一度我经常在想, 比如在初中 高中 大学的食堂, 如果有丧心病狂的人在饭菜里下毒那可怎么办? 困惑了我很久, 还好我没有遇

说信任区块链时究竟在信任什么?

FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行.亦笔科技和越秀金科等金链盟成员机构. 代码仓库:https://github.com/FISCO-BCOS 大家好,我是张开翔. 如你所见,[FISCO BCOS开源社区]开通了,很高兴和你在此以文相会.这个号将由你,由我,由FISCO BCOS背后117家成员单位的工程师们,乃至社区沉淀下来的数千

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

近几天对区块链中几种常见的共识机制(PBFT,Raft,PoW,PoS,DPoS,Ripple)进行了总结.尽量使用简单易懂语言,篇幅较大,想了解的可以只读每个算法介绍中前边的原理.本篇文章主要参考<区块链技术指南>,首先表示感谢! ---Begin--- 区块链架构是一种分布式的架构.其部署模式有公共链.联盟链.私有链三种,对应的是去中心化分布式系统.部分去中心化分布式系统和弱中心分布式系统. 在分布式系统中,多个主机通过异步通信方式组成网络集群.在这样的一个异步系统中,需要主机之间进行状态

区块链共识机制及其迭代

共识,Consensus,故名思义,共同的认识,共识问题研究的就是多个成员如何达成一致,典型的比如投票选举. 区块链是一种去中心化的分布式账本系统,区块链的共识问题实际上来源于分布式系统的一致性问题. 分布式一致性问题 区块链是一种去中心化的分布式账本系统,由于点对点网络下存在较高的网络延迟,各个节点所观察到的交易事务先后顺序不可能完全一致. 因此区块链系统需要设计一种机制对在一定的时间内发生的事务的先后顺序进行共识.这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”. 共识机