当前位置: 首页 > news >正文

【BTC】分叉

目录

一、分叉的定义与原因

二、硬分叉

2.1 硬分叉后的加密货币与社区分裂

三、软分叉


一、分叉的定义与原因

分叉指原来的一条链分成两条链。其产生原因多样,比如挖矿时两个节点几乎同时挖到矿,都可发布区块,会出现临时性分叉,即 state fork;分叉攻击也属于 forking attack,不过这是人为故意造成的分歧;另外,比特币协议改变时,由于去中心化系统无法保证所有节点同时升级软件,部分节点未升级或不同意协议修改,也会导致分叉,这种叫 political fork。

在该部分内容中,老师详细讲解了比特币系统中分叉的定义,以及从不同角度产生分叉的原因,具体如下:

  1. 分叉的定义:老师明确指出,在比特币系统中,分叉指的是原本的一条区块链,现在分裂成了两条链,这种现象就被叫做分叉
  2. 分叉产生的原因:
    • 挖矿导致的临时性分叉(state fork):在挖矿过程中,如果有两个节点差不多在同一个时候挖到了矿,按照规则,这两个节点都可以发布区块。在这种情况下,就会出现一个临时性的分叉,老师将这种分叉称为 state fork。例如,在正常的挖矿竞争中,两个幸运的节点几乎同时计算出了符合要求的新区块,它们分别将自己挖到的区块广播到网络中,此时就会形成两条不同的链,这便是 state fork 的情况。
    • 分叉攻击导致的分叉(deliberate fork):老师提到之前讲过的分叉攻击例子,分叉攻击也属于 state fork 的一种类型。不过与普通的 state fork 不同,分叉攻击中的意见分歧是故意造成的,是人为干预的结果,所以有时候也将其称为 deliberate fork。比如,某些恶意攻击者为了达到特定目的,如获取更多利益或破坏系统稳定,故意制造分叉情况,干扰正常的区块链运行。
    • 比特币协议改变导致的分叉(political fork):当比特币的协议发生改变时,就需要进行软件升级。然而,在一个去中心化的系统里,升级软件时无法保证所有的节点同时都升级软件。假设大部分节点进行了软件升级,而少数节点因为各种原因没有升级,比如还没来得及升级,或者不同意对协议的修改(社区中部分人不支持协议的改动),那么这时就会出现分叉。这种由于对比特币协议产生分歧,使用不同版本协议而造成的分叉,老师将其称为 political fork。例如,当比特币社区讨论对某个关键协议进行修改时,一部分节点按照新协议升级了软件,而另一部分节点坚持使用旧协议,从而导致区块链分裂成两条链。

二、硬分叉

对比特币协议增加新特性、扩展新功能时,如果旧节点不认可新特性,认为其非法,就会产生硬分叉。以比特币区块大小限制为例,有人认为 1 兆的限制影响交易吞吐量并增加延迟,假设将区块大小限制从 1 兆增加到 4 兆,多数算力节点更新软件认可 4 兆,少数旧节点仍认为是 1 兆。新节点挖出的 4 兆大区块旧节点不认可,旧节点挖出的小于 4 兆的区块新节点认可,但因多数算力在新节点,新节点会沿大区块所在链继续挖,旧节点则沿自己认可的链挖,若旧节点不更新软件,分叉将永久存在 。

在这部分内容中,老师详细讲解了硬分叉的概念、产生的原因、具体的例子、节点对不同区块的认可情况、分叉后的结果以及硬分叉名称的由来,具体如下:

  1. 硬分叉的概念:当对比特币协议增加一些新的特性、扩展新的功能时,那些没有升级软件的旧节点会不认可这些新特性,认为这些特性是非法的,此时就对比特币协议的内容产生了意见分歧,从而导致硬分叉。
  2. 硬分叉产生的原因:主要是由于对协议进行了较大的改动,增加新特性和功能,使得新旧节点对协议的理解和执行出现差异。
  3. 硬分叉的例子:以比特币中的区块大小限制为例,比特币规定每个区块最多为 1 兆。但有些人认为这个限制太小,影响了比特币的吞吐量(throughput),增加了交易延迟。经计算,1 兆约为 100 万个字节,一个交易差不多 250 个字节,这样一个区块大约能容纳 4000 个交易,而平均每 10 分钟产生一个区块,换算下来每秒大约处理 7 笔交易,与信用卡公司(如 Visa、Master Card)以及很多电商网站的每秒交易量相比,这个吞吐量非常低。所以有人提出要增加区块大小限制,假设发布一个软件更新,把区块大小限制从 1 兆增加到 4 兆。

  1. 节点对不同区块的认可情况:假设大多数节点(按照算力计算,即系统中拥有大多数哈希算力的节点)更新了软件认可 4 兆的区块大小限制,少数节点没有更新仍认为是 1 兆。新节点挖出的比较大(如 4 兆)的区块,旧节点是不认可的,所以旧节点不会从这个区块往下继续挖;而旧节点挖出的区块,新节点是认可的,因为新节点规定的是不能超过 4 兆,小于 4 兆的区块符合要求。
  2. 硬分叉后的结果:新节点认为上下两条链都是合法的,但上面包含大区块的链是最长合法链,所以新节点会继续沿着这条链挖,并且由于新节点算力足够多,会使这条链变得越来越长;旧节点则认为下面的链才是合法的,上面的链无论有多长都是非法的,所以旧节点会沿着下面的链挖。虽然新节点也可能挖出一些大小不到 1 兆的区块,这些区块是新旧节点都认可的,但由于上面的链存在非法的大区块,旧节点不会认上面的链。

  1. 硬分叉名称的由来:只要这部分旧节点不更新软件,这个分叉就不会消失,这种分叉是永久性的,所以将其称为硬分叉(hard fork)。同时,老师还提到比特币社区中有些人比较保守,不同意提高区块大小限制,而且区块大小也不是越大越好,因为比特币系统底层是 P2P 网络,传播主要采用 flooding 方式,对带宽消耗大,带宽是瓶颈

2.1 硬分叉后的加密货币与社区分裂

硬分叉后变成两条平行运行的链,有各自的加密货币,分叉前的加密货币在两条链上都认可,会出现类似一个拆成两个的情况,如以太坊分叉出 ETH 和 ETC,社区也会因对协议修改的分歧而分裂。分叉后若不采取措施,两条链会相互影响,后来通过分叉后的链各加一个chain id 将两条链分开,就解决了这个问题,相当于把分叉后的两条链完全独立运作,互不影响。

在 “硬分叉后的加密货币与社区分裂” 这部分内容中,肖臻老师结合实际例子,详细阐述了硬分叉后加密货币的变化以及社区的分裂情况,具体如下:

  1. 硬分叉后加密货币的情况:出现硬分叉后,原本的一条链会变为两条平行运行的链,且彼此拥有各自的加密货币。对于挖矿奖励,在各自的链上都是被认可的,两条链都会继续向下扩展。以比特币硬分叉为例,分叉后产生的两条链会分别发展,各自的矿工在自己认可的链上挖矿并获得相应奖励。
  2. 分叉前加密货币的处理:分叉之前的加密货币,按道理会变成上下两条链都认可的情况,即原本的一个加密货币会拆分成两个。例如以太坊分叉的例子,最初的以太坊(ETH)在经历一次事件后发生了分叉,产生了以太坊经典(ETC)。其中 ETC 是保留了原来协议的链,而 ETH 是经过调整(有人攻击 ETH 上的智能合约 The DA,以太坊社区将黑客偷到的钱重新分配退回给投资者)后的链。分叉前的一个以太币,在分叉后实际上变成了两个,分别存在于 ETH 和 ETC 两条链上。
  3. 社区的分裂:硬分叉会导致社区分裂,社区中的成员会因对协议修改的意见分歧而分成不同阵营。一部分人认为某一条链才是正统、未经过篡改的,而另一部分人则持有相反观点。例如在比特币或以太坊的硬分叉事件中,社区成员对于协议的修改存在争议,最终导致不同群体支持不同的链,按照各自认可的规则继续运行和发展。
  4. 分叉后两条链的相互影响及解决措施:在分叉刚完成时,如果不采取一些措施,两条链会相互影响。因为原本是一条链,账户、私钥等在分叉初期是相同的,而两条链运行的协议不同,账户余额等也应不同。曾出现过实际案例,如在 ETH 和 ETC 分叉后,有人将一条链上的交易在另一条链上回放,导致意外情况发生(如原本只想在 ETH 链上转账,结果在 ETC 链上也进行了转账,使得接收方收到两笔钱)。为解决这个问题,后来在两条链上各加了一个chain id将它们分开,目前以太坊分裂的链已不存在此类问题 。

三、软分叉

对比特币协议加限制,使原来合法的交易或区块在新协议中可能变得不合法,进而引起软分叉。例如将区块大小从一兆变小到 0.5 兆,新节点挖的小区块旧节点认可,旧节点挖的大区块新节点不认,但最终旧节点会迁移到新节点的链上,软分叉是临时性的。

肖臻老师在讲解软分叉部分时,从软分叉的出现情况、举例说明、实际案例以及软分叉特点总结等方面进行了详细阐述,具体内容如下:

  1. 软分叉的出现情况:当对比特币协议增加一些限制后,原本合法的交易或合法的区块,在新的协议中可能变得不再合法,这种情况就会引起软分叉
  2. 软分叉的举例说明:以区块大小调整为例,假设有人发布软件更新,将区块大小从 1 兆变小为 0.5 兆。此时存在新节点和旧节点,大多数是新节点,新节点认为区块大小限制是 0.5 兆,旧节点仍认为是 1 兆。分叉后,新节点开始挖不超过 0.5 兆的小区块,旧节点可能挖出大区块。新节点挖出的小区块旧节点认可,而旧节点挖出的大区块新节点不认,新节点会认为旧节点挖出的是非法链新节点会按照比特币协议扩展最长合法链,即沿着自己挖出的小区块的链继续扩展。最终,旧节点看到新节点的链成为最长合法链后,会放弃自己所在的分叉,切换到新节点的链上。这表明软分叉是临时性的,如果旧节点不更新软件,它们挖出的大区块可能会白挖,且即便切换到新链后,若再次挖出不被新节点认可的大区块,仍可能出现问题,会再次出现临时分叉,旧节点可能会面临挖矿成果不被认可的情况,但系统不会产生永久性的分叉

  1. 实际中可能出现软分叉的情况:
    • 赋予新含义和规则:给某些目前协议中没有规定的部分增加一些新的含义,赋予它们新的规则。例如 coin base 域,在每个发布的区块里有一个铸币交易(coin base transaction),其中的 coin base 域原本用途未规定且无人检查。在挖矿难度方面,曾将其前 8 个字节用于增加挖矿时的搜索空间(与 block header 里的 nes 结合,使搜索空间从二的 32 次方提升到二的 96 次方),而该域不止 8 个字节,剩余字节有人提议作为 utxo 集合的根哈希值。因为 block header 不便再修改,而这个域正好无人使用,将 utxo 集合组织成一棵默克尔树,其根哈希值写入 coin base 域,最终网上传递时会传递到 block header 里的根哈希值中。这样,若有人发布软件更新规定 coin base 域按此要求填写,多数节点升级软件,少数节点未更新,此时产生的分叉就是软分叉。因为新节点发布的区块旧节点认为合法(旧节点不管其中内容),但旧节点发布的不按要求填写的区块新节点可能不认
    • pay to script hash:比特币历史上一个比较著名的软分叉例子是 pay to script hash,该功能在最初的比特币版本里没有,是后来通过软分叉加入的。花钱时,交易的输入脚本需跟前面币来源的交易的输出脚本拼在一起执行,验证分为两步,第一步验证输入脚本中给出的赎回脚本(redeem script)与前面输出脚本给出的 script 的哈希值是否匹配,证明输入脚本提供的 script 正确;第二步验证执行 redeem script,检查输入脚本里给出的签名是否合法。对于旧节点来说,它不知道这个特性,只会做第一阶段的验证,即验证 redeem script 是否正确,而新节点会做第二阶段的验证。所以旧节点认为合法的交易,新节点可能认为非法(若第二阶段验证不通过),而新节点认为合法的交易,旧节点肯定认为合法(因旧节点只验证第一阶段)
  2. 软分叉的特点总结:只要系统中拥有半数以上算力的节点更新了软件,那么这个系统就不会出现永久性的分叉,可能会有一些临时性的分叉,但不会产生像硬分叉那样的永久性分裂情况

 相关文章:【BTC】挖矿_btc矿池-CSDN博客
                  【BTC】比特币网络-CSDN博客
                  【BTC】比特币系统的具体实现_btc操作系统-CSDN博客
                  【BTC】协议(共识机制)_btc 协议-CSDN博客
                  【BTC】比特币脚本-CSDN博客

http://www.dtcms.com/a/550009.html

相关文章:

  • 高端建站咨询wordpress 音乐播放器 歌词
  • 网站开发北京外贸公司大全
  • 最便宜网站空间做h5好点的网站
  • 网站的建设与板块如何保存wordpress主题设置
  • 基于hadoop的电商用户行为分析系统(源码+论文+部署+安装)
  • 通达oa 做网站可以做动图的视频网站
  • 做黄金比较专业的网站网站自助制作
  • 长沙建站工作室乐陵森林覆盖率
  • 移动电子商务网站建设深圳公司建立网站
  • 1.0 机器学习实际上是什么
  • 352-Spring AI Alibaba OpenAI DashScope 多模态示例
  • 网站的备案用wordpress建站域名和空间哪里买比较好
  • vue3 中组件的生命周期详解
  • 单片机实现队列功能
  • 魔多 AI 支持 Seedance 系列在线生成:赠送免费生成额度
  • 怎样建立一个主题网站群晖做网站服务器 套件
  • 淘客app网站是怎么做的深圳做网站佰达科技三十
  • 【JavaScript】构造函数与 new 运算符
  • OpenEuler 22.03 安装 snmptt 1.5
  • 摇杆控制View
  • 常州网站建设段新浩网站推广公司有哪些
  • TCP三次握手和四次断开
  • 黑马JAVA+AI 加强08 File-IO流
  • (XMODEM协议)自旋锁异常报错
  • 关于光照探针的实验和疑问
  • 校园网站建设的优点wordpress最新文章链接插件
  • 南城网站建设公司策划山东省建设执业资格注册中心网站
  • 【机器学习】模型持久化与部署
  • 「用Python来学微积分」21. 玩转高阶导数
  • 不谈AI模型,只谈系统:SmartMediaKit低延迟音视频技术现实主义路线