比特币如何达成共识 - 最长链的选择
2019独角兽企业重金招聘Python工程师标准>>>
本文首发于深入浅出区块链社区 原文链接:比特币如何达成共识 - 最长链的选择原文已更新,请读者前往原文阅读
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐本,那么大家如何达成共识:确认哪一份才是公认权威的总账本呢?
为什么要遵守协议
这其实是一个经济问题,在经济活动中的每个人都是自私自利的,追求的是利益的最大化,一个节点工作量只有在其他的节点认同其是有效的(打包的新区块,其他的节点只有验证通过才会加入到区块链中,并在网络上传播),才能够过得收益, 而只有遵守规则才会得到其他的节点认同。 因此,基于逐利,节点就会自发的遵守协议。共识就是数以万计的独立节点遵守了简单的规则(通过异步交互)自发形成的。
共识:共同遵守的协议规范
去中心化共识
在工作量证明一篇,我们了解通过工作量证明来竞争记账,权威的总帐本是怎么达到共识的,没有完全说清楚,今天补上, 实际上,比特币的共识由所有节点的4个独立过程相互作用而产生:
- 每个节点(挖矿节点)依据标准对每个交易进行独立验证
- 挖矿节点通过完成工作量证明,将交易记录独立打包进新区块
- 每个节点独立的对新区块进行校验并组装进区块链
- 每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链
共识最终目的是保证比特币不停的在工作量最大的区块链上运转,工作量最大的区块链就是权威的公共总帐本。
第1 2 3步在比特币如何挖矿-工作量证明一篇有提到过,下面着重讲第4步。
最长链的选择
先来一个定义,把累计了最多难度的区块链。在一般情况下,也是包含最多区块的那个链称为主链 每一个(挖矿)节点总是选择并尝试延长主链。
分叉
当有两名矿工在几乎在相同的时间内,各自都算得了工作量证明解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。 当这个两个区块传播时,一些节点首先收到#3458A, 一些节点首先收到#3458B,这两个候选区块(通常这两个候选区块会包含几乎相同的交易)都是主链的延伸,分叉就会产生,这时分叉出有竞争关系的两条链,如图: 两个块都收到的节点,会把其中有更多工作量的一条会继续作为主链,另一条作为备用链保存(保存是因为备用链将来可能会超过主链难度称为新主链)。
分叉解决
收到#3458A的(挖矿)节点,会立刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受#3458B区块的节点会以这个区块为链的顶点开始生成新块,延长这个链(下面称为B链)。 这时总会有一方抢先发现工作量证明解并将其传播出去,假设以#3458B为父区块的工作量证明首先解出,如图:
当原本以#3458A为父区块求解的节点在收到#3458B, #3459B之后,会立刻将B链作为主链(因为#3458A为顶点的链已经不是最长链了)继续挖矿。
节点也有可能先收到#3459B,再收到#3458B,收到#3459B时,会被认为是“孤块“(因为还找不到#3459B的父块#3458B)保存在孤块池中,一旦收到父块#3458B时,节点就会将孤块从孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。
比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易确认更快地完成,也会导致更加频繁地区块链分叉。与之相对地,长的间隔会减少分叉数量,却会导致更长的确认时间。 ☛ 深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
☛ 我的知识星球为各位解答区块链技术问题,欢迎加入讨论。
☛ 关注公众号“深入浅出区块链技术”第一时间获取区块链技术信息。
转载于:https://my.oschina.net/u/3724910/blog/1814069
比特币如何达成共识 - 最长链的选择相关推荐
- 工作量证明的最长链原则到底说的是什么?
前几天的一篇关于比特币的标准的文章引起了很多人的关注.在这篇文章中介绍了比特币的标准是什么以及Bitcoin Core(BCE)和Bitcoin Cash(BCH)符合哪些标准不符合哪些标准.最终经过 ...
- 区块链系列教程之:比特币中的共识
文章目录 简介 比特币中的共识 交易的校验 区块的构建 区块的校验 区块链的分叉 区块链分叉的种类 总结 简介 在比特币的P2P网络中是怎么达成共识的呢?达成共识需要做哪些交易的校验呢?交易和区块是怎 ...
- 视频教程-区块链基础:共识算法-区块链
区块链基础:共识算法 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设备.手游东方 ...
- 视频教程-区块链算法—共识算法-区块链
区块链算法-共识算法 工科硕士,持有高校计算机教师资格证书,从事计算机科学少儿分级体系课程的教研与教学工作,先后开设计算思维.Scratch.Python等少儿编程课等. Gardener ¥498. ...
- 【朋克智库】比特币详解1.0——区块链的萌芽
区块链是堪比互联网的伟大发明. 比特币是区块链世界的第一个杀手级应用.比特币之于区块链,就好比当年邮件之于互联网. 要深入了解区块链,第一站一定是比特币. 不过在那之前,「朋克」先简单介绍下区块链世界 ...
- 共识机制-区块链核心技术之一
id:BSN_2021 公众号:BSN研习社 区块链是一种多项计算机技术的集成融合创新.在这众多来源中,最重要的一个是共识机制技术. 共识机制就是所有记账节点之间怎么达成共识,去认定一个记录的有效性, ...
- HotStuff:基于高效 BFT-SMR 共识的区块链
参考资料: Yin M, Malkhi D, Reiter M K, et al. HotStuff: BFT consensus in the lens of blockchain[J]. arXi ...
- 直播预告 | 共识、区块链和全球一体化经济
大家好,又到了一周一期的[区块链技术公开课100讲]系列线上直播课啦. 作为国内最优质的区块链技术社区,一块链习已经先后邀请到Celer Network 创始人董沫.开源山寨币矿池 Gpool Cof ...
- 开好会议的方法 会议达成共识 明确目标,促成共识 单向会议 互动会议 会议讨论,文档先行 会前文档 会中 3D法则讨论 同步会议,跟进代办 举个栗子 企业管理
目录 开好会的方法 明确目标,促成共识 单向会议 互动会议 会议讨论,文档先行 会前文档 会中 3D法则讨论 同步会议,跟进代办 举个栗子 开好会的方法 会议有时候时间很长,很多无意义内容,如何开出有 ...
最新文章
- JavaScript对css样式表操作
- 有必要学python吗-让孩子学Python编程有必要吗
- 中班科学计算机,幼儿园中班科学课件:《照镜子》
- go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名
- Spring MVC入门示例教程--静态页面跳转
- c#金额转换成中文大写金额
- python中的event_Python event
- 【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(3)
- 关于FP Spread for Web Forms 2.0.0.0
- bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB
- linux设计论文题目,计算机linux本科毕业论文题目
- python使用gmssl实现SM4算法的OFB模式
- 项目管理-PMP-第4章 项目范围管理
- 写一个程序,将接收的华氏温度转换为对应的摄氏温度。
- 领导讲话稿小标题大全,笔杆子收藏备用
- 你真的了解爬虫吗?看完你会对网络爬虫有更深更全面的认识
- DMAIC代表了六西格玛改进活动的五个阶段
- 【下载网页上的视频】IDM显示无法将下载行为传输到IDM
- 超越Yann LeCun:世界模型的学习和推理
- vue使用echarts绘制地图