IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 六,比特币系统 中 存在的 几种分叉 -> 正文阅读

[区块链]六,比特币系统 中 存在的 几种分叉

0,fork: 在一些情境下,BTC system 中的 block chain 出现2条 (甚至 多条)分叉链。

根据 造成 fork 的 不同原因,可以 将fork分为以下2类:

1,state fork:
当有2个 fullnode 同时 挖到1个 block,他们 会 直接跟在 previous block 之后,形成2条分叉链。

在这种situation下,随着一条 分叉链 变为 最长合法链,势必 会有 1个 fullnode 变为 orphan block。
forking attack 属于一种 特殊的 state fork,其 fork 为 人为造成,mainly for double spending,是对BTC system的一种 harmful attack。

2, protocal fork:
当BTC agreement发生 modify 时,不同的 full node 会 in respective 沿用 new / old agreement,因此,导致 blockchain 发生分叉。
由于 agreement modification 而发生的 fork,根据 2 条分叉链 是否可以 并存与 system,将 protocal fork 分为 soft fork && hard fork。

2.1 hard fork:
对于 hard fork 来说,由于2条 分叉链 均 符合 new agreement 的 规定,因而 两条 forkingchain 均 会 并存于 BTC system。
以 BTC agreement 对 block size limit 进行 修改为例 说明:
在 旧协议 中,block size is limited within 1M (assume 1transaction 需占用 250bits ,一个 1M block 可以存储 4000个 transaciton。BTC 中 出块儿时间 为 10min/个,据此计算,在旧协议中,BTC system 平均每秒 可以 上链 7笔 tansaction , 每秒交易写入量 过小,会直接 导致 BTC system 网络延迟 过长。为解决这一问题,一些 new fullnode 会 将 block size 从 1M 修改为 4M)。假设,system中大多数 算力 均 confirm to new agreement,只有少数 old node 依然 沿用 old agreement,二者 产出的 block 上链时,会导致 blockchain 发生 forking。

对于 new fullnode 来说,只要block size在4M以内,均属 合法block,而对于 old node 来说,其 只 将 blocksize <= 1M 作为 legal block,因而,遵循 old agreement 的 fullnode 仅会 沿 1M forking chain 接着扩展,而 对于 new fullnode 来说,blockchain中2条 forking chain 均 合法,因而,其可能 会沿着 任意一条 forking chain 进行扩展,最终,会导致 blockchain中 同时存在 2 条 合法链。

对于BTC system中的一些 fullnode,因 system efficiency 原因,确实 会 refuse to obey the new agreement。actually,block也并非越大越好,因为,BTC system 中,info spread采用的是 P2P flooding 的 方式,block size 过大,需 消耗 很多 带宽,影响 block 在 网络的传播速度。

在这里插入图片描述
上述提及的 hard fork 可能 在 actual transaction 中 出现 sort of problem,举例说明:
在 blockchain 分叉前,A产生一笔交易,A->B。当 blockchain 发生 hard fork 之后,B便可通过在不同的 分叉链 上进行消费,而 实现 double spending。after hard fork,B可用在 A->B 获得的BTC,分别在 2条 硬分叉链 上 同时实现2笔交易(这就相当于,你可通过 在不同的 分叉链上 进行transaction,而用 一笔钱 购得 2倍的 商品), new agreement chain 的 block and old agreement chain的 block,均可通过 追踪 blockchain 中 A->B 这款交易,而 认为 其在 该链上 产生的交易 为 合法交易。
出上述situation外,hard fork 后,也可能出现 一些有恶意的节点 故意将在 一条分叉链中产生的 transaction ,在另一条 分叉链 上 进行回方,从而实现 double spending。如下图中,B->C then C->B 的情形:B make a deal with C first ,then 撤销该笔交易,通过这种操作,B可通过回放 “C refund” 这个操作,而在 2 条分叉链上 各获得 一笔钱。为handle this,BTC system中 设定了 “chain ID",通过 在 transaction 上 写入 chain ID,而 防止 用户在另外一条分叉链上 回放 transaction 的 操作。

在 以太坊 ETH 中,也曾 真实 发生过 hard fork的事件,hard fork 后的两条链 最终 in respective 作为了 不同的 digital coin 发展。分叉后的 区块链 ETC 在自成一家后,曾做出 将 ETC 中 ETH 退还给 ETH clients的 举动。

在这里插入图片描述
2.2 soft fork:
在 soft fork中,不会存在 永久性分叉。
如果我们 通过 在 BTC agreement 中 加入一些限制,来更新 BTC agreement,那么 原来 合法的一些机制 就会变得 不合法。在此 过程中,一些old fullnode 依然 会按照 旧有协议 来 出block,BTC blockchain 就会发生 分叉。new fullnode 自成一叉,原有的 一些 old fullnode 自成一叉。由于 BTC system中所有 new fullnode 仅 将 new agreement 的 forking chain 视为 legal chain,因此,随着时间的推移, 这条 forking chain 会 变为 系统中 the longest legal chain,对于 BTC system 中 即将 出块 的 old node 来说,为保证 其block 不变为 orphan block,其需 一直不断的调整 block在 blockchain 中的位置,只要old fullnode 不对其 软件进行更新,这种问题将一直困扰着他。最终结果便是,blockchain中,仅有符合 New agreement的block 被留存了下来。而其他 未进行 agreement upgrade 的forking blockchain最终都会被废弃。

举例说明:
将 block size 从 原有的1M 改为 0.5M,new fullnode 会将 1M block 视为 illegal,而 另外形成一条 forkingchain,从而 使 BTC system 发生 分叉。对于 new fullnode来说,只有 0.5M 的 forking chain 为 合法chain,因而,其会在这条forkingchain上不断扩展,0.5M forkingchain 会变为 系统中的 the longest chain。此时,即便 old fullnode 将其block 跟在 0.5M forkingchain上,由于,其 blocksize > 0.5M,会被 新上链的 new fullnode 视为 illegal,从而导致 blockchain 在次 发生 分叉。也即:after new agreement,只要有 1M block 上链,new fullnode 便会将其视为 illegal block,而重新分叉,所以,最终,仅有 0.5M block 上链成功,而1M block 统统被 遗弃。
**note that:**在实际中,并不会 有人真的将 blocksize 由 1M 改为 0.5M,因为,1M 的 block 对于 实际运行中的 BTC system 来说,已经比较小。

在这里插入图片描述
在这里插入图片描述

BTC system中,coinbase transaction中 存在一个 coinbase 域,一般,fullnode 会将其作为extra nonce使用(blockheader中 仅给 nonce
留了 4bytes ,相当于 fullnode 仅可 寻找 2^32 bits 的nonce,而将 coinbase 域 中的 前 8bytes 作为 extra nonce,可以将 nonce的搜索范围 扩大到 12bytes。)。但是,除前8bytes外,coinbase域中 还存在许多写入空间。因此, 有些 fullnode,便提议,将 UTXO 中的 unspent transaction 也组织成 一个 merkle tree,并将其 根哈希值 计入 coinbase 域中,这样,lightnode 便可以通过 从 fullnode 那里得到的 merkle proof,来 证明 某个 账户 是否 存有一定数量的 BTC,在这一步中,存在一个问题,在现有system中,UTXO 仅存储于 fullnode的本地内存,那么,lightnode 根据什么proof 来判定 fullnode 给出的是 正确的 unspent transaction info?
答:如果按照 some fullnodes 的提议,将 UTXO组织成merkle tree,并将其 根哈希值 写入 blockheader中的 coinbase 域,那么,便确保了 merkle root hash 的 不可更改性(一旦 merkle root hash 被 改动,则blockheader的hash值也会随之变动,而 lightnode 是拥有 blockheader信息的,因此,其可通过 确认 block header的hash值,来 判定 fullnode 有没有造假)。
Question:有一点不明,merkle proof 是 merkle tree 中的什么部分?
个人理解,这里所指的 merkle proof,是指 fullnode所提供的 unspent transaction的 info,lightnode 可以按照 fullnode 给出的 unspent transaction 自行计算其 hash值,并将其 代入 UTXO merkle tree 的相应部分,计算 merkle tree的 根哈希值,如果,计算结果 和 blockheader中保存的 roothash 相符,则证明,fullnode 给出了 正确的 unspent transaction info。
如果 系统 对 agreement 作了如上修改,其造成的 forking chain 为 soft fork。

BTC system中,一个 经典的 soft fork实例,便是 P2SH 的 应用:
由于 P2SH (PAY TO SCRIPT HASH) 中,其 交易合法性 认证 分为 2步,第一步 要验证 inputscript中给出的 redeemscript 和 outputscript中给出的redeemscript hash值 是否对的上(这一步 与 old node 所遵循的 PAY TO PUBLIC KEY HASH 的 验证过程一致);
在第二步中,需要验证 inputscript 给出的 publickey 和 signature(privatekey) 是否能够匹配的上,如果match,才能最终 证明 交易合法。
对于 old node 来说,其 只需做 P2SH 的第一步验证,而 new node 需要同时做 P2SH 的 第二步验证,因此,对于 old node 来说 合法的transaction,new node 不一定认为其合法(因为,transaction 可能 在P2SH 第二阶段的验证 中 通不过)。
这就导致了 一旦 new node block上链过程中,遇到 old node block which confirms to P2PKH,其便会进行分叉,久而久之,为了 block不被遗弃,old node便只能将其 script 改为 P2SH,从而使得 blockchain 中仅存在 应用 P2SH 的block。

总结:
在 hard fork中,old node认可的agreement 条款,new node也认可,而 new node 认可的 agreement 条款,old node则不予接受,这边使得BTC system中,同时出现 2 条 legalchain(对于 new node formed chain,old node不会选择链接其上,因为,根据 old agreement,new node为illegal,而 对于 old node formed chain ,new node 可以在此链上继续扩展,因为,new agreement 扩展了 old agreement 的 部分限制要求,相当于 old agreement 被包含于 new agreement。
soft fork中,情况刚好与 hard fork相反,old node 可以沿着 new node formed chain继续扩展,但是,new node 会将old node 所出 block 视为 illegal,这就导致,只要遇到 old node produced block,new node就会分叉,只要 系统中 new node 占据 50% 以上算力,从概率上来讲,new node formed chain 便会成为 the longest chain,即便 后来的 old node ,根据 链长,选择 在 new node formed chain 上扩展,但是,后来new node 在上链时,会在次 将 old node produced block 视为 illegal,从而 产生 新的分叉。如此循环反复,old node 要想在 block chain中 合法,不被遗弃,便只能 根据 new agreement 更新 其 软件。在 soft fork这一情景中,new agreement 为old agreement的子集,其 进一步 shrink 了 old agreement 的 restriction。
soft fork中,只要 系统中 50%以上的算力 更新了软件,便不会 出现 永久性分叉。
hard fork中,只有 系统中全部算力 均 更新了软件,系统 才不会 出现 永久分叉。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:57:50  更:2022-01-28 11:57:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:00:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码