web3_共识算法

共识:主要描述的是分布式系统多个节点,彼此针对某一提案达成一致认识的过程。 可以大致认为,一致性描述的是对外呈现的结果状态,共识描述的是过程。

共识算法是分布式系统中维护状态一致性的关键技术,广泛应用于各类系统,如分布式文件系统和分布式数据库。这些算法根据应用场景的具体需求而有所不同,特别是在公链和联盟链的应用中。

在公链中,共识算法需满足高扩展性,确保在节点动态加入网络的情况下,共识流程仍然有效运行,同时防御可能的拜占庭式攻击。由于 FLP 不可能性定理和 CAP 定理的限制,公链的共识算法通常无法提供绝对的一致性保证。

相比之下,联盟链的共识算法则侧重于实现强一致性和高性能。虽然对系统的可扩展性和防御拜占庭节点的攻击力度需求不如公链高,但联盟链仍需确保系统的稳定性和效率。

链接:https://github.com/MetaNodeAcademy/WeeklyTask/blob/main/%E7%AC%AC%201%20%E5%91%A8%20%E6%8E%8C%E6%8F%A1%E5%8C%BA%E5%9D%97%E9%93%BE%E6%8A%80%E6%9C%AF%E5%8E%9F%E7%90%86/2.%20%E5%8A%A0%E5%AF%86%E6%8A%80%E6%9C%AF%E3%80%81%E5%85%B1%E8%AF%86%E6%9C%BA%E5%88%B6%E5%9F%BA%E7%A1%80/%E5%85%B1%E8%AF%86%E6%9C%BA%E5%88%B6/%E5%85%B1%E8%AF%86%E6%9C%BA%E5%88%B6%E5%9F%BA%E7%A1%80.md

背景

  • 共识算法简史

  共识算法是分布式系统的核心,用于确保不同节点间的数据的一致性。发展简史

  两阶段提交 → 三阶段提交 → 拜占庭将军问题 → FLP不可定理 → 部分同步模型 → Paxos算法 → 工作量证明。

  • 通信模型

    • 同步模型:

在同步通信模型中,所有节点间的通信延迟有一个预定义的上限。如果通信超过了这个上限,相关节点将被视为发生故障

    • 异步模型:

异步通信模型不设定任何关于通信延迟的上限。在这个模型中,消息可能在任何未知的时间到达,或因为各种原因(如网络延迟、硬件故障等)延迟未到。这种模型更加贴近现实世界中的网络环境,因此在设计上更具挑战性和实用性。在异步模型中有效的共识算法,由于其健壮性,也必然适用于同步模型,但是同步模型下的算法不一定能够适应异步模型的不确定性。

    • 部分同步模型

部分同步模型介于同步和异步之间,提供了一个更加灵活的框架。在这个模型中,系统可能在大部分时间内表现为异步,但偶尔会有同步的行为。这种模型尝试在理想的同步假设和现实的异步条件之间找到平衡,是很多现代分布式系统设计中的首选模型

  • 区块链的共识算法

    • 区块链共识算法的选择思路

      • 公链项目:考虑节点规模和安全性,通常选择能够容忍拜占庭故障的共识算法,如 PoW、Pos、DPoS 
      • 联盟链和私链项目:考虑高效性和低延迟, 通常选择经典 PBFT、Raft 等
    • PoW共识算法

目的就是要达成由哪个节点获得记账权的共识。

例如比特币,对于给定的一个字符串「blockchain」,给出的工作量要求是,可以在这个字符串拼接一个成为 Nonce 的整数字符串,然后对拼接后的整个字符串进行Sha-256 哈希运算,如果得到的哈希结果(十六进制)是以若干个 0 开头的,则验证通过。

      • 比特币中PoW的大致逻辑, 包含三个要素
        • 工作量证明函数:不断枚举 Nonce 并哈希的过程,PoW 使用的哈希函数就是 Sha-256。
        • 区块:区块包含区块头和区块体
          • 区块头:为 80B,包含 4B 的版本号、32B 的上个区块的哈希值、32B 的默克尔根哈希值、4B 的时间戳(当前时间)、4B 的当前难度值(实际存的是难度值转换后的目标哈希值,通常表示为 nBits)、4B 的随机数组成。
          • 区块体:是交易列表,其中第一笔交易是 CoinBase。
        • 难度值:是比特币节点生成区块时的重要参考指标,它决定了节点大约需要经过多少次哈希运算才能产生一个合法区块。
        • 1 // 区块头结构:80字节
          2 struct header_structure {      // BYTES   NAME
          3  uint32_t nVersion;            // 4       version
          4  uint8_t hashPrevBlock[32];    // 32      previous block header hash
          5  uint8_t hashMerkleRoot[32];   // 32      merkle root hash
          6  uint32_t nTime;               // 4       time
          7  uint32_t nBits;               // 4       target
          8  uint32_t nNonce;              // 4       nonce
          9 };

     

        •   挖矿过程中解决的难题的本质是寻找一个随机数,这个随机数满足区块的头部信息(前块的头部信息+版本+时间+默克尔根哈希值 + 随机数)的哈希值小于等于Target ThresHold, 其中Target ThresHold 是通过Target压缩运算得到的。

      • 难度值

难度值计算公式: 新的难度值 = 旧的难度值 * 最近2016个块生成的时间/系统期望2016个块商城的时间。 

      • 最长链原则

    • PoS共识算法

      • 基本概念
        • 验证者
        • 币龄
      • 共识流程

PoS 算法在打包区块时,将同时考虑币龄和哈希计算难度,使得节点只需要消耗很少的计算资源就可以出块。

  • 实际应用问题
    • Nothing at Stake 无成本作恶
    • Long Range Attack  长程攻击
    • 冷启动问题
    • DPoS 算法

委托权益证明(Delegated Proof of Stake, DPoS)利用权益人投票的权利来公平民主的解决共识问题。

      • 优缺点
        • 优点、
          • 不需要耗费能源和硬件设备;缩短了区块的产生时间和确认时间,提高了系统效率。
          • DPoS 不需要挖矿,也不需要全节点验证,而是由有限数量的见证节点进行验证,因此简单、高效。
        • 缺点
          • 为了提高效率,DPoS 以代理人共识取代全网共识,因此时常被抨击与区块链去中心化的理念相违背。
      • 共识流程

DPoS 的共识流程主要就是投票选出见证人,并由见证人轮流进行区块生成的循环流程。系统在每轮循环中都会重新统计候选人得票,并选出 N 个见证人,并把它们的排序打乱,

然后见证人轮流生成区块。在一个生成周期结束后,再重新进行见证人选举。

 

posted @ 2025-09-29 22:04  直至成伤  阅读(3)  评论(0)    收藏  举报