标签:必须 统一 而且 能力 1.0 net tail 掘金 概率
作者:林冠宏 / 指尖下的幽灵
GitHub : https://github.com/af913337456/
腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities
本文不做一般入门的区块链描述讲解。着重简述讲解:
由于最近的开发工作是与以太坊公链相关的去中心化交易所,项目两个多月之久,对区块链相关的知识内容了解了一些,故择文以记录之,但求文字通俗易懂,无纰漏。因自身求学过程中所遇坑无数,业内良文亦少之又少,深感朦胧之懂之不爽。此外,亦坚信区块链技术未来必能大放光芒,因现在多应用于虚拟货币,故人谈区块链,内心首想皆炒币相关之内容。
我们一般意识形态中的 链 是铁链
,由铁铸成,一环扣一环。形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块
连接而成,这是一个最简单的雏形
见下图
所谓共识
,通俗来说,就是我们大家对某种事物的理解达成一致的意思。比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。共识,是一种规则。
继续我们的会议例子。参与会议的人
,通过开会
的方式来达到谈论解决问题
。
对比区块链
中,参与挖矿的矿工
通过某种共识方式(算法)
来解决让自己的账本跟其他节点的账本保持一致
。让账本保持一致的深入一层意思就是,让链中区块信息保持一致。
为什么需要共识
,不需要可不可以?当然不可以,生活中没了共识的规则
,一切乱套。区块链没了共识的规则
,各个节点各干各的,失去一致的意义。
这两个例子的对应的关系如下:
会议的人
= 挖矿的矿工
开会
= 共识方式(算法)
谈论解决问题
= 让自己的账本跟其他节点的账本保持一致
如果你对节点
的概念意思不懂,请先理解为矿工
,一个节点内部包含很多角色,矿工是其中之一。
目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致
的共识方式(算法)
有如下几种:
下面通俗讲解下每种共识算法
的概念,注意!是概念,非代码层面的详细实现。
它的全称是:Proof of Work 工作量证明
。字面意思,就是谁做的活越多,谁话事权越大,一定层面上类似现实生活的多劳多得的概念。该例子会穿插生活事例,其他的几个讲解将不再累赘。
拿比特币
为例子,比特币挖矿
就是通过计算符合某一个比特币区块头
的哈希散列值
争夺记账权
。这个过程需要通过大量的计算实现,简单理解就是你进行的计算量大(工作量大),你就有大概率获得记账权,即矿工的挖出的区块并入主链。
区块头
,区块链中的区块的头部。你有一个饭盒,饭盒第一层,形象为动物头部,称之为头部。第一层放着米饭,米饭就是头部装载着的东西哈希散列值
,一种通过数学公式计算得出的值
哈希
:数学中的散列函数散列值
: 通过哈希函数得出的值哈希公式
: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)一个实例:
2017年8月1号,Bitcoin Cash(BCH)区块链成功在区块高度478559与主链分离。这一新的加密货币默认区块大小为8MB,并且可以实现区块容量的动态调整。
由于旧节点只认可小于1MB的区块,所以运行BCH客户端节点产生的区块无法向前兼容,将被旧节点拒绝,最后运行不同客户端的矿工将会长期运行在两条不同的区块链上(BTC和BCH)
例子
第二种的软分叉是不一定能由节点自我纠正的。万全的解决方案必须依赖人力升级节点到同版本。
当 新节点全网算力大于50%
,因为新节点算力大于50%,所以不论旧节点升级不升级,最长的链也一定会是全部由新节点生成的区块组成的链。而且,这条最长链最终都会是双方都认为合法的一条,原因参考上面谈到的最长链复制,因满足下面几点所以能被复制。
当 新节点全网算力小于等于50%
,最终不能通过短的复制长的达到统一,结果是:分叉
。原因如下。
写到这,发现内容铺开后比我想象中的要多。
故目前暂时分成两章节
,剩下的共识算法的介绍留到第二章
。
https://blog.csdn.net/chabuduoxiansheng1/article/details/79740018
https://blog.csdn.net/s_lisheng/article/details/78022645
标签:必须 统一 而且 能力 1.0 net tail 掘金 概率
原文地址:https://www.cnblogs.com/linguanh/p/9502971.html