比特币的区块的生成、链接和分叉

版权声明:凡原创系列文章,均笔者的辛勤于中,如转载,请文章顶部注明来源。谢谢配合 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/

猜你喜欢

转载自blog.csdn.net/smilejiasmile/article/details/86656492