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

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

大家好,又见面了,我是你们的朋友全栈君。

777.png

 

前几天的一篇关于比特币的标准的文章引起了很多人的关注。在这篇文章中介绍了比特币的标准是什么以及Bitcoin Core(BCE)和Bitcoin Cash(BCH)符合哪些标准不符合哪些标准。最终经过对比,BCH只在白皮书中的工作量证明的最长链原则这一标准中输给了BCE,这也是在众多比特币标准中BCH唯一不符合的标准。

有些朋友看到之后对此产生了疑惑:目前BCH的区块高度不是比BCE要高吗?不已经是最长的链了吗?为什么还说它不符合最长链的原则?今天小编就对这个问题做一个简单的科普,希望能够帮助大家更好的理解。

什么是工作量证明的最长链原则

这一说法最初来自于中本聪的论文《比特币:一种点对点的电子现金系统》。文中提到:“信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。”以及“工作量证明机制的本质则是一CPU一票。大多数的决定表达为最长的链,因为最长的链包含了最大的工作量。”

通俗来说就是,比特币区块是依靠矿工们不断进行数学运算而产生的,每一个区块都必须引用其上一个区块。如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明的迷题。这道题关键的三个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法也就是SHA256,区块决定了这道题的输入数据,难度值决定了这道题的所需要的计算量。只有工作量最大的那条链才能被称为最长链,节点永远认为最长链才是有效的区块链,也只有在最长链上挖矿的矿工才能够获得奖励,这就是我们常说的比特币最长链原则。因此也可以说,累积难度值最大的那条链才是最长链。这也是比特币的重要标准之一。

为什么要制定这一规则?

因为比特币是去中心化的,是没有中心机构的,想要让所有的完整节点都有一份相同的公共总帐本,就需要达成共识。这一规则就是一种共识,能够保证比特币不停的在工作量最大的区块链上运转,工作量最大的区块链就是权威的公共总帐本。尤其当两个矿工同时挖出区块的时候,系统就会根据最长链原则进行取舍,即哪个新产生的区块能使其所在的区块链变得更长,则哪个区块得以被记录。如果两者一起记账就会造成区块链的分叉,这时会把其中有更多工作量的一条会继续作为主链,另一条作为备用链保存,如果新添加的区块使备用链累积了更多的工作量,那么这条备用链将被作为新的主链。

为什么BCH不是工作量证明的最长链?

由于BCH的挖矿难度比BCE小,所以现在BCH的区块高度确实比BCE要高,但是这并不是说明最长的链。因为BCH累积的难度值是远远小于BCE的。这一切都归结于BCH诞生之初为了能够在小算力环境下顺利的生存下来,修改了难度值的算法,降低了挖矿难度,所以现在的它还不是那条工作量证明的最长链。

虽然目前来说,BCH不是最长的链,但是BCH却是最符合中本聪白皮书的点对点电子现金系统。而且它现在在不断的高速发展,在未来当BCH的价格、用户和总市值都超过BTC之后,BCH超越BCE成为最长链也是有可能的。

转载于:https://my.oschina.net/u/3797746/blog/1808868

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107531.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MAC下最好用的抓包工具–charles简单操作教程

    MAC下最好用的抓包工具–charles简单操作教程一、Charles介绍给大家推荐一款在mac上我觉得很好用的抓包工具,再过去的半年中给我很大帮助,在工作学习中使用很方便。那么什情况下我们会需要使用抓包工具呢,比如我想查看一个接口请求的参数、返回值,还有移动设备上的http请求、https请求,有了charles一下搞定,妈妈再也不用担心我的学习了,咳咳……,回归正题,介绍一下charles。Charles是一个HTTP代理服务器…

    2022年6月12日
    59
  • linux卸载mysql(完全卸载)[通俗易懂]

    linux卸载mysql(完全卸载)[通俗易懂]//rpm包安装方式卸载查包名:rpm-qa|grep-imysql删除命令:rpm-e–nodeps包名//yum安装方式下载1.查看已安装的mysql命令:rpm-qa|grep-imysql2.卸载mysql命令:yumremovemysql-community-server-5.6.36-2.el7.x86_64查看mysql的其它依赖:rpm…

    2022年6月29日
    27
  • c语言获得当前时间_c语言怎么表示时间

    c语言获得当前时间_c语言怎么表示时间函数名:time()头文件:time.h函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从UTC(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后可以调用localtime将time_t…

    2022年10月10日
    2
  • hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware

    hyper-v虚拟机安装xp系统网络不通_hyper-v转换vmware下载一个ISO格式的XP系统镜像,把ISO文件设置为虚拟机的光驱,启动虚拟机,会自动从ISO镜像文件启动,创建虚拟机,创建虚拟磁盘VHD,然后加入启动项。打开本系统的磁盘管理,对虚拟磁盘进行格式化,并设置为活动分区(有一个就行)然后启动虚拟机,给虚拟机安装系统,就可以了。我是启动虚拟机后进入PE,然后选择Ghost32装的。如果启动虚拟机鼠标不能动,就点“

    2022年8月16日
    3
  • idea怎么查看maven版本_maven项目中plugins爆红

    idea怎么查看maven版本_maven项目中plugins爆红idea查看maven版本idea查看maven版本

    2025年7月8日
    6
  • pytest报错_pytest失败重跑

    pytest报错_pytest失败重跑前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

    2022年7月29日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号