版权声明:凡原创系列文章,均笔者的辛勤于中,如转载,请文章顶部注明来源。谢谢配合 https://blog.csdn.net/smilejiasmile/article/details/86656492
比特币的区块生成、链接和分叉
交易的传播 & 验证
- 交易包含两个部分,n 输入和 m 输出、n > =0 , m >0.
- 输入 == 要被花费的 UTXO + 解锁脚本
- 输出 == UTXO (币值 + 锁定脚本)
- 钱包软件生成交易,并向邻近节点进行广播
- 节点对收到的交易进行验证、并丢弃不合法的交易
- 交易的 size 要小于区块 size 的上限
- 交易输入 UTXO 是存在的。(验证全节点的数据库是否包含)
- 交易输入 UTXO 没有被其他交易应用 - 防止双花(Double Spending)
- 输入总金额 > 输出的总金额
- 解锁脚本验证
- 将合格的交易加入到本地的 Transaction 数据库中,并将合法交易转给临近节点。
区块的生成
-
旷工在挖矿前要组建区块
- 将交易池中高优先级的交易打包进区块
- 优先级 = 交易的额度 * UTXO 的深度 / 交易的 size
- 防粉尘攻击
- 创建区块的头部
- 将交易池中高优先级的交易打包进区块
-
挖矿成功后,将计算出来的随机数 nonce 填入区块头部,向临近节点传播。
区块的验证链接
- 相邻节点收到新区块后,立即做以下检查:
- 验证 POW 的 nonce 值是否符合难度值
- 检查时间戳是否小于当前时间 2 小时
- 检查 Merkle 树根是否正确
- 检查区块 size 要小于区块 size 的上限
- 第一笔交易必须是 coinbase 交易
- 验证每个交易
- 学习源代码网址推荐
http://btc.yt/lxr/satoshi/ident? i=CheckBlock
- Merkle Tree
- 防止数据篡改
- 快速验证某个交易是否存在(轻钱包)
- 节点存储 Hash 值
- 从叶子节点构建树
比特币区块链的分叉
硬分叉 & 软分叉
- 软分叉
- 由比特币交易的数据结构改变引起,但区块的数据结构未改变
- 老节点接受新旧格式的区块,新节点只接受新区块
- 矿工激活软分叉 MASF - Miner Activated Soft Fork
- 用户激活软分叉 UASF - User Activated Soft Fork (BIP148)
- Core 团队新发明,应对矿工的不合作
- 隔离见证 Segwit - Segregation Witness (BIP141) BIP = Bitcoin Improve Protocol (利用椭圆圆锥曲线的一个特性,做到改变签名的一个比特,使得交易仍然可以被验证,BIP141 是解决这个问题的,将签名放在交易之外,但是需要全网矿工 95% 的支持,才能执行,由于某些矿工不支持,Core 团队强行去推这个协议,于是提出了 BIP 148)
硬分叉
- 由于交易结构的变化,或区块的结构的变化引起的
- 新旧节点互相拒绝对方的区块
- 产生两个币种,如 BCC。
- 由于交易数据结构不同,且新区块相互拒绝,故不会出现长链吞并短链的现象。只有当矿工不在短链挖矿时,短链有可能死掉。
临时分叉
- 仅发生于几乎同时爆块的情况
- 分叉是暂时的
- 根据共识机制,矿工最终切换到最长链上挖矿
- 短链上的交易全部无线,包括矿工费
- 矿工是否会继续在短链上挖矿以弥补损失? 除非该矿工算力极大可以 50% 以上,否则,会及时止损,到长链上去挖矿。否则,消耗的电力,和努力都白费了。
隔离见证
- 隔离见证 Segwit - Segregation Witness
- 安全隐患, 黑客通过改变交易签名信息改变交易 ID
- 将签名部分从交易中移除,从而间接扩容。
- 香港共识: 2016 年 2 月 香港会议,Core 团队的代表同意在实施隔离见证后将区块容量扩容到 2 M
- 纽约共识 Segwit2x: 2017 年 5 月纽约会议,代表全网 80% 的算力的矿业代表在纽约达成 Segwit2x 扩容
- 实现 BIP 141(SegWit) + BIP 91(缓和折中方案) + BIP102 (升级到 2M)
- Core 团队之所以不同意矿工的 2M, 是因为 Core 想支持他们的 闪电网络 的概念。
Core 团队 Vs. 矿工 的矛盾
-
Core 反对的原因
- 不愿意轻易更改系统
- 以防个人不能运行全节点,因为每个区块太大了,可能导致中心化问题。
- 认为 增加到 2 M 没什么大的作用,(因为随着热捧,只有持续扩大),认为应该用 闪电网络解决。(闪电网络是一个比特币的侧链,即所有的交易都在侧链上面,只有最后一笔提款的交易才在主链上交易,不过也会产生交易的中心化问题)
-
矿工反对的原因
- 闪电网络将会导致交易的中心化,违背比特币点对点交易的初衷
- 闪电网络隶属于 BlockStream 公司,大多数 Core 团队的成员是 BlockStream 的雇员
- 交易费的损失
-
Core 垄断了海外的论坛,利用他们对社区的影响力“封杀”反对 Core 的开发者和社区成员
-
结论: Core 为闪电网络铺平道路,矿工为了交易费。
BCC 分叉
- BU 团队 - Bitcoin Unlimited
- BU 的大方案曾获得了全网 40 % 的算力支持
- 方案的 Bug 太多,未能获得社区广泛的支持
- BitcoinABC (Adjustable Blocksize Cap)
- 基于 BU 的代码,打造了 BCC, 8月 1 日硬分叉
- BCC 没有 Segwit, 区块容量变为 8M
- BCC 官网: https://www.bitcoincash.org/