三、共识协议和系统实现

317 阅读11分钟

共识协议和系统实现

1.共识协议

1.1 有关名词解释

Double Spending Attack(双重支付攻击)

  • 双重支付攻击是通过重复使用同一笔资金完成多次交易,从而欺骗区块链网络的一种攻击方式。

Coinbase Transaction(铸币交易)

  • Coinbase Transaction 是矿工创建的特殊交易,用于奖励矿工,包括区块奖励和交易费用。
  • 它是新区块中的第一个交易,负责向矿工支付挖矿所得。

Bitcoin Script

  • 比特币脚本是用于验证交易条件的简单、图灵不完备的编程语言。

Block Header(区块头)

区块头是区块链中每个区块的重要部分,包含以下字段:

  1. Version:协议版本,指定区块格式和验证规则。
  2. Hash of Previous Block Header:前一个区块的哈希值,确保区块链的顺序性。
  3. Merkle Root Hash:默克尔树根哈希值,用于快速验证区块内交易的完整性。
  4. Target:当前区块的挖矿难度目标。
  5. Nonce:随机数,用于工作量证明(PoW)。

Block Body(区块体)

区块体存储实际的交易数据,包含:

  1. 默尔克树:包含交易列表叶子节点和哈希指针节点。
  2. Transaction List:交易列表,记录区块内的所有交易

节点类型

  • 全节点 (Full Node) :保存整个区块链的数据,负责验证所有交易和区块,确保网络的安全性和一致性。
  • 轻节点 (Light Node) :只保存区块头信息,不存储完整的区块链数据,通常用于资源受限的设备。

1.2 区块如何保证数据一致性

Distributed Consensus(分布式共识)

分布式共识是区块链中多个节点在无中心化管理的情况下达成一致的方法。比特币的共识协议通过以下方式实现:

1. 工作量证明(Proof of Work,PoW)
  • 矿工通过解决计算难题来竞争生成新区块。
  • 挖矿过程的目标是找到符合目标难度的哈希值(即Nonce)。
2. 长链规则(Longest Chain Rule)
  • 网络总是选择链条最长的有效区块链作为主链。
  • 长链代表了累计更多的工作量,是网络一致性的基础。
3. Sybil Attack(女巫攻击)
  • 定义:攻击者通过创建大量虚假身份(节点)试图控制网络。
  • 防御:比特币通过PoW机制抵抗女巫攻击,因为创建虚假身份需要大量计算资源。
4. Computational Puzzle(计算难题)
  • 挖矿的计算难题是一种基于哈希函数的数学问题。

  • 特点

    • 难以解决:矿工需要反复尝试随机数(Nonce)以满足目标难度。
    • 易于验证:新区块生成后,验证计算结果只需一次哈希计算。
5. 分叉及孤块(Fork and Orphan Block)
  • 分叉:当两个节点同时生成区块时,会出现链分叉。
  • 孤块:最终被抛弃的区块。
  • 规则:节点总是优先选择工作量更多的链(即最长合法链)。

1.3 共识相关理论基础

CAP Theorem(CAP假说)

CAP理论说明在分布式系统中,无法同时满足以下三点:

  1. C - Consistency(一致性) :所有节点的数据在任何时间都相同。
  2. A - Availability(可用性) :系统能响应每个请求,即使部分节点出现故障。
  3. P - Partition Tolerance(分区容忍性) :系统能继续运行,即使网络分割成多个部分。

比特币选择了 AP(可用性 + 分区容忍性),在网络分区的情况下可能会暂时牺牲一致性,但最终通过最长链规则实现数据一致性。

FLP Impossibility Result(FLP不可能性结果)
  • 在异步分布式系统中,无法在不确定的时间内实现完全的确定性共识。
  • 比特币通过引入随机性(PoW)和概率性最终一致性来绕过FLP限制。

1.4 比特币的共识协议

共识机制:工作量证明(PoW)
  • 目标:确保账本的正确性和安全性。

  • 核心原则

    • 记账权由算力决定,算力越高的矿工获得新区块奖励的概率越大。
    • 挖矿过程通过计算大量哈希值来找到一个满足目标难度的解。
挖矿过程
  1. 收集区块中的所有交易并计算默克尔树的根哈希。
  2. 将区块头信息组合为哈希输入。
  3. 重复尝试不同的随机数(Nonce),直到找到符合目标难度的哈希值。
  4. 广播新区块并验证其合法性。
投票机制
  • 投票权重依赖矿工的算力,而非账户的数量。
  • 网络的最终一致性由算力最多的一方决定。

补充内容

比特币中的安全性
  1. 数据篡改不可行:通过哈希指针和工作量证明,修改任意区块的数据需要重新计算从该区块开始的所有区块。
  2. 抗女巫攻击:比特币依靠算力竞争代替身份验证,从而有效抵御虚假节点攻击。
挖矿奖励
  1. 区块奖励:每生成一个新区块,矿工会收到一定数量的新比特币(当前为6.25 BTC)。
  2. 交易费用:区块中所有交易的手续费也归矿工所有。
共识的挑战
  1. 网络分叉:网络中可能会出现多个合法的链分支。
  2. 51%攻击:如果一个实体控制了全网超过50%的算力,则可能篡改交易历史。

总结

比特币的共识协议通过 工作量证明哈希指针长链规则 来保证网络的一致性、安全性和去中心化。虽然存在网络分叉和51%攻击等挑战,但比特币通过强大的算力竞争机制,使得这些攻击的代价极高,从而保证系统的运行安全。

2. 系统的实现与攻击防范

2.1 基于交易的账本模式(Transaction-Based Ledger)

  • 定义:比特币采用基于交易的账本模式,系统上不会直接记录每个账户的余额,而是通过交易输出(UTXO)进行维护。

  • UTXO(未花费交易输出)

    • 指所有未被花费的交易输出的集合,用于快速检测二次花费。
    • 举例:若 A 转给 B 1 BTC,转给 C 2 BTC,B 已将 1 BTC 转出,而 C 的 2 BTC 仍未使用,则 A -> B 的交易不在 UTXO 中,A -> C 的交易仍在 UTXO 中。
    • 随着交易的进行,不仅会花费现有的输出,也会产生新的输出。

2.2 矿工的激励机制

  • 第一种激励:区块奖励(Coinbase Transaction)。

    • 每个新区块包含一笔铸币交易(Coinbase Transaction),没有输入,只有输出,是新币的发行方式。
  • 第二种激励:交易手续费(Transaction Fee)。

    • 矿工通过将用户支付的交易费收入囊中获得额外激励。
  • 为什么需要交易费?

    • 随着区块奖励逐渐减半直至消失(如比特币的总量上限 2100 万枚),交易费将成为矿工收入的主要来源。

2.3 比特币总量的计算由来

  • 基于几何级数(Geometric Series)

    • 比特币的区块奖励每 21 万个区块减半,总量通过求和公式得出。
    • 总量公式:image-20250105155952591.png

2.4 比特币网络的攻击类型及解决方案

2.4.1 双重消费攻击(Double Spending)
  • 攻击原理

    • 用户 M 用 1 BTC 购买商品后,试图通过秘密挖掘一条包含 M -> M1 交易的私链(而非 M -> A),当私链长度超过主链时,根据最长链原则,网络会认可私链,导致 M 恢复其 BTC,商家 A 的交易被回滚。
      image-20250105105118676.png
  • 防范机制

    1. 6 个区块确认

      • 比特币网络要求交易被 6 个区块确认后才视为完成。
      • 平均出块时间为 10 分钟,6 个区块大约需 1 小时,确保交易具有较高安全性。
    2. 算力成本

      • 攻击者需要超过 50% 的全网算力(即 51% 攻击)才能成功完成攻击。
      • 攻击代价高昂:失败则失去挖矿奖励和电力资源;即使成功,收益可能不足以弥补成本。
2. 4.2 恶意节点拒绝发布合法交易
  • 现象

    • 恶意节点可能故意不广播合法交易,试图延迟交易确认。
  • 防范机制

    • 诚实节点的传播

      • 诚实节点会验证合法交易,并将其广播到网络中,确保交易不受单个节点的控制。
    • 交易池(Mempool)

      • 每个节点维护自己的交易池,未被打包的交易会存储在交易池中等待确认。
      • 由于区块大小限制为 1MB,交易需要支付更高手续费以优先被打包。

2.5 Zero Confirmation(零确认交易)

  • 定义:零确认交易是指未被区块确认的交易。

  • 风险与应用

    • 商家在收到零确认交易后即可发货,但需承担回滚的风险。
    • 若交易被回滚(如买家恶意攻击或双重消费),商家可选择不发货以降低损失。

2. 6 矿工为什么要将其他人的交易纳入区块?

  • 矿工的动机

    1. 经济收益

      • 将交易打包到区块中,矿工可获得交易手续费。
    2. 网络规则

      • 矿工需要遵循比特币网络的共识规则,打包合法交易以维持链条的延续性。
    3. 奖励优化

      • 矿工通常优先打包手续费较高的交易,以最大化收益。
  • 技术限制

    • 区块大小限制为 1MB,矿工需要合理选择交易进行打包。

2.7 比特币网络设计原则和特点

2.7.1 比特币网络设计的原则
  1. 简单

    • 比特币的设计理念之一是简化,使得系统更易于理解和实现。
    • 通过去中心化的方式,避免复杂的依赖关系,确保系统在不同节点之间的高效性。
  2. 鲁棒性

    • 比特币网络强调鲁棒性,即在面对网络攻击、故障或其他问题时,能够继续正常运行。
    • 系统应具备韧性,即即使某些节点或组件失效,整体系统仍能保持稳定。
    • 鲁棒性是比特币成功的关键特性之一,保证了其在全球范围内的可扩展性和稳定性。
2.7.2 比特币网络的层次
  • 应用层 (Application Layer) : 比特币区块链

    • 应用层是比特币网络的最上层,负责提供核心功能,如交易的生成、验证和存储。
  • 网络层 (Network Layer) : P2P 网络

    • 比特币采用P2P(Peer-to-Peer)网络架构,网络中的所有节点都是对等的(Peer),没有中央控制点。
    • 每个节点都有相同的权利和责任,参与数据传输、交易验证和区块的挖掘。
2.7.3比特币消息传递特性
  • Flooding

    • 在比特币网络中,消息通过Flooding机制传播,即每个节点接收到信息后会将其广播给所有邻近节点,直到信息在整个网络中传播开来。
    • 这种机制确保了即使某些节点离线或连接不稳定,其他节点仍能接收到必要的信息。
2.7.4比特币网络的特点
Best Effort: 尽力而为
  • 比特币网络的Best Effort特性反映了其去中心化系统的核心设计理念。Best Effort意味着比特币网络会尽最大努力提供交易处理服务,但并不承诺每次交易的即时确认或绝对的成功率。

    • 尽力而为:系统会尽力处理和传递交易,但在极端情况下可能会发生延迟或失败。
    • 不承诺速度和成功率:虽然比特币网络会尽力传播和确认交易,但由于网络拥塞、算力差异等因素,交易确认可能会有延迟。网络中的节点之间会尽力合作,但无法保证每次交易都会及时完成。
鲁棒性(韧性)
  • 比特币网络具有鲁棒性,即系统能够应对各种不确定性或攻击,继续保持功能不受影响。

    • 例如,当某些节点发生故障或离线时,其他节点可以接替其任务,确保网络的持续稳定运行。
    • 这种鲁棒性是比特币得以长期稳定运行并扩展的关键因素之一。

总结
  • 比特币网络采用去中心化设计,强调简单性和鲁棒性,能够在面对网络攻击或节点故障时继续稳定运行。
  • Best Effort特性确保了比特币系统的弹性,但也意味着交易处理不一定保证绝对的速度和成功率。
  • Flooding机制用于传播交易和区块信息,确保消息能够在网络中广泛传播,增加系统的鲁棒性和稳定性。

补充说明

  • 为何是 6 个区块确认?

    • 根据中本聪在白皮书中的计算,如果攻击者算力为 50%,等 6 个区块后,成功回滚交易的概率接近于零。
  • 指数分布(Exponential Distribution)

    • 比特币出块时间服从指数分布,平均时间为 10 分钟。