2019独角兽企业重金招聘Python工程师标准>>>

本文首发于深入浅出区块链社区 原文链接:比特币如何达成共识 - 最长链的选择原文已更新,请读者前往原文阅读

比特币没有中心机构,几乎所有的完整节点都有一份公共总帐本,那么大家如何达成共识:确认哪一份才是公认权威的总账本呢?

为什么要遵守协议

这其实是一个经济问题,在经济活动中的每个人都是自私自利的,追求的是利益的最大化,一个节点工作量只有在其他的节点认同其是有效的(打包的新区块,其他的节点只有验证通过才会加入到区块链中,并在网络上传播),才能够过得收益, 而只有遵守规则才会得到其他的节点认同。 因此,基于逐利,节点就会自发的遵守协议。共识就是数以万计的独立节点遵守了简单的规则(通过异步交互)自发形成的。

共识:共同遵守的协议规范

去中心化共识

在工作量证明一篇,我们了解通过工作量证明来竞争记账,权威的总帐本是怎么达到共识的,没有完全说清楚,今天补上, 实际上,比特币的共识由所有节点的4个独立过程相互作用而产生:

  1. 每个节点(挖矿节点)依据标准对每个交易进行独立验证
  2. 挖矿节点通过完成工作量证明,将交易记录独立打包进新区块
  3. 每个节点独立的对新区块进行校验并组装进区块链
  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

比特币如何达成共识 - 最长链的选择相关推荐

  1. 工作量证明的最长链原则到底说的是什么?

    前几天的一篇关于比特币的标准的文章引起了很多人的关注.在这篇文章中介绍了比特币的标准是什么以及Bitcoin Core(BCE)和Bitcoin Cash(BCH)符合哪些标准不符合哪些标准.最终经过 ...

  2. 区块链系列教程之:比特币中的共识

    文章目录 简介 比特币中的共识 交易的校验 区块的构建 区块的校验 区块链的分叉 区块链分叉的种类 总结 简介 在比特币的P2P网络中是怎么达成共识的呢?达成共识需要做哪些交易的校验呢?交易和区块是怎 ...

  3. 视频教程-区块链基础:共识算法-区块链

    区块链基础:共识算法 多年互联网从业经验: 有丰富的的企业网站.手游.APP开发经验: 曾担任上海益盟软件技术股份有限公司项目经理及产品经理: 参与项目有益盟私募工厂.睿妙影音家庭物联网设备.手游东方 ...

  4. 视频教程-区块链算法—共识算法-区块链

    区块链算法-共识算法 工科硕士,持有高校计算机教师资格证书,从事计算机科学少儿分级体系课程的教研与教学工作,先后开设计算思维.Scratch.Python等少儿编程课等. Gardener ¥498. ...

  5. 【朋克智库】比特币详解1.0——区块链的萌芽

    区块链是堪比互联网的伟大发明. 比特币是区块链世界的第一个杀手级应用.比特币之于区块链,就好比当年邮件之于互联网. 要深入了解区块链,第一站一定是比特币. 不过在那之前,「朋克」先简单介绍下区块链世界 ...

  6. 共识机制-区块链核心技术之一

    id:BSN_2021 公众号:BSN研习社 区块链是一种多项计算机技术的集成融合创新.在这众多来源中,最重要的一个是共识机制技术. 共识机制就是所有记账节点之间怎么达成共识,去认定一个记录的有效性, ...

  7. HotStuff:基于高效 BFT-SMR 共识的区块链

    参考资料: Yin M, Malkhi D, Reiter M K, et al. HotStuff: BFT consensus in the lens of blockchain[J]. arXi ...

  8. 直播预告 | 共识、区块链和全球一体化经济

    大家好,又到了一周一期的[区块链技术公开课100讲]系列线上直播课啦. 作为国内最优质的区块链技术社区,一块链习已经先后邀请到Celer Network 创始人董沫.开源山寨币矿池 Gpool Cof ...

  9. 开好会议的方法 会议达成共识 明确目标,促成共识 单向会议 互动会议 会议讨论,文档先行 会前文档 会中 3D法则讨论 同步会议,跟进代办 举个栗子 企业管理

    目录 开好会的方法 明确目标,促成共识 单向会议 互动会议 会议讨论,文档先行 会前文档 会中 3D法则讨论 同步会议,跟进代办 举个栗子 开好会的方法 会议有时候时间很长,很多无意义内容,如何开出有 ...

最新文章

  1. JavaScript对css样式表操作
  2. 有必要学python吗-让孩子学Python编程有必要吗
  3. 中班科学计算机,幼儿园中班科学课件:《照镜子》
  4. go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名
  5. Spring MVC入门示例教程--静态页面跳转
  6. c#金额转换成中文大写金额
  7. python中的event_Python event
  8. 【连载】如何掌握openGauss数据库核心技术?秘诀四:拿捏事务机制(3)
  9. 关于FP Spread for Web Forms 2.0.0.0
  10. bit, byte, KB, GB, TB, PB, EB, ZB, YB, BB, NB, DB, CB, XB
  11. linux设计论文题目,计算机linux本科毕业论文题目
  12. python使用gmssl实现SM4算法的OFB模式
  13. 项目管理-PMP-第4章 项目范围管理
  14. 写一个程序,将接收的华氏温度转换为对应的摄氏温度。
  15. 领导讲话稿小标题大全,笔杆子收藏备用
  16. 你真的了解爬虫吗?看完你会对网络爬虫有更深更全面的认识
  17. DMAIC代表了六西格玛改进活动的五个阶段
  18. 【下载网页上的视频】IDM显示无法将下载行为传输到IDM
  19. 超越Yann LeCun:世界模型的学习和推理
  20. vue使用echarts绘制地图

热门文章

  1. boost :: swap交换整数数组的数组
  2. boost::container模块实现比较的程序
  3. Boost:实现了k-means聚类算法
  4. Boost:bind绑定访客的测试程序
  5. ITK:在一幅图像中提取感兴趣区域ROI
  6. VTK:小部件之ImplicitPlaneWidget2
  7. VTK:PolyData之PointLocatorRadius
  8. VTK:模型之DelaunayMesh
  9. VTK:相互作用之Game
  10. OpenCV的随机生成器和输出显示文本