解读区块链,软分叉和硬分叉

2024-04-03 05:18
文章标签 区块 解读 分叉

本文主要是介绍解读区块链,软分叉和硬分叉,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解读区块链,软分叉和硬分叉
最近在交流群和论坛中经常听到软分叉和硬分叉,起初对这个概念只是简单认为是区块链软件升级后新旧协议造成新旧节点对新的区块认可时的一种分歧,软分叉一般不会产生永久性分叉的链,而硬分叉则会产生两条链,如果大多数节点升级到新版本,则旧链存活就看算力的大小的。
查询了些资料,再次明确下软硬分叉的概念。
软硬分叉涉及的问题是去中心化节点软件、协议、版本升级的问题,所有在区块链中运行的节点有一样的软件,遵守一样的共识机制、维护同一条链,但是一旦软件、协议、版本升级后,所有节点不可能同一时间都更新到同一版本,这就造成了一部分节点拥有新的共识协议机制,这时候会网络中出现新、老、两种节点。那么在区块生成的时候,新节点产生的区块,老节点就会认为合法或者不合法,老节点产生的区块,新节点也会认为合法或者不合法。在区块链中一直有一个51%算力的临界点,那么我们这里认为新节点的算力是大于50%的。
这里写图片描述
首先再对软硬分叉做一个解释:
软分叉:官方定义:A temporary fork in the block chain which commonly occurs when miners using non-upgraded nodes violate a new consensus rule their nodes don’t know about.(当新共识规则发布后,没有升级的节点会因为不知道新共识规则下,而生产不合法的区块,就会产生临时性分叉。)说实话官方定义感觉有点模糊。
当整个区块链网络中,系统版本或协议升级后,且和老版本协议不兼容,那么升级后的新节点就无法接受老节点挖出来的全部或者部分区块,因为新节点的算力较大,所以老的节点挖出来的区块没有机会得到认可,老节点产生的区块最终会被认为是短链而被放弃,新老节点始终还是在同一条链上工作,这种情况称作软分叉。新节点要求比老节点严格多。
硬分叉:官方定义:A permanent divergence in the the block chain, commonly occurs when non-upgraded nodes can’t validate blocks created by upgraded nodes that follow newer consensus rules.(区块链发生永久性分歧,在新共识规则发布后,部分没有升级的节点无法验证已经升级的节点生产的区块,通常硬分叉就会发生。)
当整个区块链网络中,系统版本或协议升级后,且和老版本协议不兼容,未升级的老节点无法接受新节点挖出的全部或者部分区块,导致出现了两条链,假设新节点的算力较大,新节点们在维护一条链,老节点也始终在维护一条他认可的链,如果这时候大多数的节点都开始升级为新版本,那么老节点维护的链能不能存活就看算力有多少了,这就称作硬分叉。
很明显,最粗浅的理解就是软分叉还是一条链,硬分叉就会分成两条链。
以太坊和比特币中都出现过分叉的问题,针对现实应用,软分叉和硬分叉在实际应用中有什么优缺点:
软分叉只有一条链(最简单明了),开始不要求区块链中所有节点统一时间升级,可以允许逐步升级,并且在软分叉过程中不影响系统的稳定性和有效性。但是软分叉又有个前提就是老的未升级节点要能接受新节点产生的区块,这就要求系统要向前兼容(forward compatible,这个和一般我们在用的软件向下兼容是相反的方式,要求新出现的区块对老系统留一个余地,确保兼容),其实让老节点承认新的区块,实际是一种欺骗,让老节点没法察觉实际上发生的变化,这也违背了单点完整性验证。
以太坊和比特币中都曾出现过软硬分叉的事件:
The DAO在2016年黑客通过splitDAO函数递归发送模式上的漏洞曾经窃取了360万个以太币,splitDAO函数在执行时最后才修改用户的结余和交易额,如果能够在返回splitDAO处理运算之前,进行多次以太币的操作调用,那么多次递归来持续转移以太币到别的账户。(具体代码分析查看邹均大神的区块链技术指南P210或者网上http://blog.csdn.net/sportshark/article/details/51820008),由于代码漏洞发布后无法修改,DAO求助以太坊,以太坊最初采用软分叉的方式,锁定the DAO账号,不允许发生交易,冻结以太币,这里可以发现软分叉实际上是在以太坊软件上加了约束规则,使得黑客的以太币无法交易,这样不影响以太坊其余的正常交易,不要回滚区块链的数据(回滚影响之大难以想象)。在实施软分叉方案时,在以太坊的每个交易上都会检查DAO相关的地址,如果和DAO有关联就拒绝这个交易,从而锁定所有资金,但是这个方案没有收取交易GAS费用,攻击者一旦以零成本发起大量无效交易,那么这个网络就面临瘫痪,最终各个节点回退了软件版本,软分叉失败,随后实施了硬分叉,下图:
这里写图片描述
硬分叉方案在1880000区块把DAO的合约归在另外一个L列表中,在1920000区块,设计一个非常规的状态变更,强行把L所有地址余额转到一个退款地址中,这样众筹的DAO币就可以换回以太币,最终硬分叉成功,上图中1920000区块后面,左边为区块编号,右边为hash值,直线代表新链,节点升级后都在新链上记账,没有升级的节点在旧链记账。
这里写图片描述
现在以太坊上为了区分新链-ETH,旧链ETC,两个链除了DAO涉及部分软件代码相同,历史账号分叉前相同,地址和私钥也相同,故都为合法。(当然还有重放攻击,同样参考邹均大神P216)。
同样在比特币中,出现过软分叉(http://ns2.btckan.com/news/topic/29027 谈国鹏,这位大神还有视频讲解,youku和巴比特都有,可以搜索下。这个文章中写的很详细明,笔者就直接拷贝过来了。)P2SH软分叉升级,P2SH包含在BIP16中,通过软分叉进行升级比特币系统,让比特币在支持P2PKH基础上,再支持一种叫P2SH的标准交易类型。在此之前,比特币已经支持如下的脚本:”OP_HASH160 [20-byte-hash-value] OP_EQUAL”。要花费这样的脚本你只需要把hash值的原数据(preimage)推到(push data)栈上即可。
P2SH是对以上条件的一种更严格限制,在P2SH模式(新节点)下,你不但需要提供该hash值的原数据,还要保证:
该原数据是一个可执行的脚本;
该脚本执行结果返回:true;
该脚本中不能含有”push data”的操作;
以及其它的一些限制;
当支持P2SH的新节点被部署时,新节点的算力>50%(P2SH升级时要求>=55%),系统将处于下面的运行状态中:P2SH交易被转发到老节点时,会被老节点认定为非标准交易(有了新的,或不能理解的OP_CODE),老节点不接受、不打包、不转发;当包含有P2SH交易的区块广播到老节点时,老节点接受区块,并按原有规则验证该P2SH交易,结果通过,因为老的规则只要验证原数据的hash是否相等(显然是相等的);老的节点创建了一个原数据为:123456的脚本输出,并花费该输出。老节点们能够接受。但是广播到新节点时,按新规则(必须是脚本…)则不通过,新节点拒绝接受,认定为非法,不会打包该交易。即使该交易被老节点打包,也会被新节点拒绝。因为新节点控制多数算力,这样的交易将永远无法生效;系统同时维护一条链。
P2SH的升级细节:
要求支持P2SH的矿工在其coinbase交易里包含“/P2SH/” 字样;
2012年2月1日检查之前1个星期内的所有区块(约1000个),如果超过550个包含(约55%)则激活P2SH。
SegWit软分叉升级
SegWit主要包含在BIP141-144中,通过软分叉进行升级比特币系统,让比特币支持一系列SegWit的功能集。关于隔离见证的具体内容详见《谈谈区块连(21):比特币之隔离见证》。
通过软分叉升级需要让老的节点认定新的交易为非标准交易,但同时是合法的。隔离见证是如何做到的呢?答案是:anyone-can-spend的输出交易。
anyone-can-spend:
下面是一个anyone-can-spend的例子:
scriptPubKey: (empty)
要花费这样的输出,你只需要提供这样的签名脚本:
scriptSig: OP_TRUE
隔离见证中将脚本版本(script versioning)和anyone-can-spend完美结合。一个标准的P2WPKH的输出如下:
scriptPubKey: 0 <20-byte-key-hash> (0x0014{20-byte-key-hash})
这开头的0在新节点中将是脚本的版本号,在老节点中是一个anyone-can-spend的输出。
当支持SegWit的新节点被部署时,新节点的算力>50%(SegWit升级时要求>=95%),系统将处于下面的运行状态中:
SegWit交易被转发到老节点时,会被老节点认定为非标准交易(anyone-can-spend),老节点不接受、不打包、不转发;
当包含有SegWit交易的区块广播到老节点时,老节点接受区块,并按原有规则验证该SegWit交易,结果通过(因为它是谁都可以花费的);
老的节点尝试花费SegWit交易,因为它是谁都可以花费的。老节点们能够接受。但是广播到新节点时,按新规则(隔离见证的验证规则)则不通过,新节点拒绝接受,认定为非法,不会打包该交易。即使该交易被老节点打包,也会被新节点拒绝。因为新节点控制多数算力,这样的交易将永远无法生效;
系统同时维护一条链。
SegWit的升级细节:
升级到core 0.13.1及以上的支持SegWit;
2017年11月如果95%算力支持,则激活SegWit。

参考网络和区块链技术指南上的讲解,分析了软分叉和硬分叉,期间也看到另外一篇文章,http://www.8btc.com/tan90d97有兴趣的读者可以了解下,这个具体对乱硬分叉交易数据结构作了分析。 

转载来自:https://blog.csdn.net/sxjinmingjie/article/details/77621311

这篇关于解读区块链,软分叉和硬分叉的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871989

相关文章

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步分析 Results1. 概括2. 具体分析2.1 语言模型

Open-Sora代码详细解读(1):解读DiT结构

Diffusion Models专栏文章汇总:入门与实战 前言:目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。 目录 DiT相比于Unet的关键改进点 Token化方