跳到正文

Nakamoto 共识:有效性、链工作量、确认与重组

Nakamoto 共识结合独立执行的有效性规则、无需许可的工作量证明出块、传播,以及对累计工作量最大有效链的选择。应分别分析本地视图、链工作量、确认、重组、共同前缀假设、激励与网络攻击。

更新于

仅供教育参考,不构成投资建议;投资可能产生损失。

直接回答

Nakamoto 共识是 Bitcoin 式流程:节点独立执行共识有效性规则,工作量证明生产者无需许可成员名单即可延伸区块,区块通过点对点网络传播,每个节点选择累计工作量最大的有效分支。它按节点观察到的视图排列协议有效交易;它不会让无效交易变得有效,不会判定账本之外的事实,也不会产生即时的确定性最终性。

有效性先于链选择。只要分支包含无效的区块头、工作量证明、交易、脚本、已花费输出、coinbase 金额或区块限制,无论其声称的高度或工作量多大,都会被拒绝。在符合节点规则且数据可用的分支之间,决定活跃链的是累计链工作量,而非单纯区块数量。因此,“最长链”只是“代表最多工作量证明投入的有效链”的非正式简称。

活跃链尖是暂时性的。相互竞争的有效区块可能让连接良好的诚实节点短暂拥有不同本地视图;新增工作量通常会解决分叉,节点可能在链重组中断开一个分支并连接另一个。交易确认数衡量它在观察者当前活跃链中的深度。在给定算力和网络模型下,更深的区块可降低追赶概率,但任何确认数都不具有普遍最终性。

该术语不只描述哈希计算。安全论证还依赖区块和交易有效性、点对点传播、诚实采用最大工作量有效链、足够的诚实有效算力、经济行为,以及用户独立观察预期网络与软件。共同前缀、链增长和链质量是只在明确模型中得到证明的形式化属性,并不是每条实际工作量证明链的无条件事实。

如何分析 Nakamoto 共识

  1. 固定身份和观察范围。 记录 chainnetworkgenesis hashclient version、共识规则集、检查点或 assume-valid 设置、观察者、对等节点和时间。保存 bestblockhashheightchainwork;在消息仍传播时,两个节点可以诚实地报告不同链尖。
  2. 先验证,再比较工作量。 验证区块头链接、时间戳约束、解码目标、工作量证明、Merkle 与 witness 承诺、交易、脚本、UTXO 花费、coinbase 和区块资源限制。一个 invalid 分支不会仅凭声称更高高度或更多工作量而取得候选资格。
  3. 重建观察到的区块树。 按前一区块哈希把每个候选连接到已知祖先,并区分完整区块与只有区块头的数据。核对 activevalid-forkvalid-headersheaders-onlyinvalid 状态,数据可来自 getchaintips 等接口;不要把每个可见链尖都称为有效竞争链。
  4. 重新计算累计工作量。 解码每个区块头的 nBits 目标,并按实现的整数规则计算其代表的工作量,概念式为 work = floor(2^256 / (target + 1))。沿祖先关系求和,并从共同祖先开始比较有效分支;高度、哈希数估计和矿池标签都不能替代链工作量。
  5. 追踪选择和重组。 重现节点对最大工作量候选的选择、同工作量下的本地次序及到达状态。若出现更优有效分支,找出分叉点,断开旧后缀,连接新后缀,更新 UTXO set,并核对 mempool 与应用记录中的交易。
  6. 制定基于风险的确认策略。 仅对当前活跃链上的区块计算 confirmations = tip_height - block_height + 1。说明风险价值、可逆性、攻击者份额、传播、eclipse 暴露、观察到的陈旧率、确认深度和应对方案;六次确认是一种惯例,不是协议最终性阈值。
  7. 对完整安全论证做压力测试。 测试网络分区、延迟、区块隐瞒、自私挖矿、eclipse 攻击、矿池和硬件集中、算力突变、费用和补贴激励、客户端分歧、深度重组及恢复策略。仅在所引模型假设下,才把结论映射到共同前缀、链增长、链质量、持久性与活性。

最终结果应是一份针对特定观察者、可复现的说明,解释节点当前选择哪段有效历史以及原因。共识规则定义准入;工作量证明提高替代历史的成本;传播让其他节点看到工作量;分叉选择确定当前历史;确认策略决定应用何时行动。把这些层全部压缩成“网络批准”会掩盖可能失效的条件。

计算示例

1. 无效工作量不会胜出

假设分支 A 报告 valid_A = falsechainwork_A = 1,200 units,分支 B 则为 valid_B = truechainwork_B = 1,000 units。节点拒绝 A 并选择 B。工作量只在合格候选之间比较;工作量证明无法授权超额 coinbase、无效签名或双花。

如果一位观察者只有 A 的区块头,另一位已有 A 的完整区块数据,在下载和验证完成前,两者报告的状态可能不同。区块头有效的分支并不证明其所有交易和状态转换都已通过完整验证。

2. 高度不等于累计工作量

在一个简化的可变目标示例中,分支 C 增加六个区块,每个代表 100 个工作单位,即 6 * 100 = 600 units。分支 D 增加五个区块,每个代表 130 个工作单位,即 5 * 130 = 650 units。若两者均有效且起始工作量相同,D 虽少一个区块,却是最大工作量分支。

如果两个有效链尖恰好都有 650 units,相等工作量不会强制每个节点立即看到同一链尖。到达顺序与本地实现状态可以不同,直到又一个有效区块使某分支更重。不要把短暂的同工作量视图描述成确定的全局最终性。

3. 确认可以被移除

一笔交易包含在高度 100 的区块中,而活跃链尖高度为 105,其确认数是 tip_height - block_height + 1 = 105 - 100 + 1 = 6 confirmations。假设另一条有效分支从高度 99 后分叉,之后在不包含该交易的情况下于高度 106 成为最大工作量分支。重组会断开旧区块 100 through 105;该交易不再有六次活跃链确认,可能返回 mempool、与另一笔花费冲突或继续缺席。

应用必须核对区块哈希和祖先关系,而不能只存储数字六。交易所入账、已交付商品、跨链消息和衍生品结算在经济上可能不可逆,即使源链历史仍可变化。

4. 追赶概率取决于模型

在 Bitcoin 白皮书的示例模型中,令攻击者算力份额为 q = 0.10、诚实份额为 p = 0.90、诚实链领先为 z = 6。其 Poisson 近似给出 lambda = z * (q / p) = 0.6666667P(catch up) = 0.0002428027 = 0.02428027%。当 q = 0.30 且深度相同时,结果升至 P(catch up) = 0.1321111687 = 13.21111687%

这些数字不是实时 Bitcoin 保证。计算假设稳定、独立的哈希试验以及该模型中的竞速条件;它没有包括 eclipse 隔离、传播优势、自私策略、价格和租赁反馈、实现错误及应用应对。策略应披露所用模型并测试更差条件,而不是只引用六次确认。

风险与审查失败

协议与测量错误

  • 在独立验证区块头、区块体和祖先关系之前比较工作量。
  • 不计算累计链工作量,却把最高或最先看到的分支称为胜者。
  • 用区块数、名义算力、矿池份额或浏览器标签代理链工作量。
  • 混淆主网、测试网、signet、分叉、客户端版本、检查点或创世块身份。
  • 把只有区块头、数据不可用或乐观状态当成已完整验证的区块历史。
  • 忽视目标解码、整数工作量算术、前一区块哈希链接或共同祖先。
  • 不记录哈希、高度、时间和对等节点语境,便把一个 RPC 或浏览器视为全局视图。

网络、激励与控制错误

  • 假设瞬时传播,或假设每个节点看到相同的交易与区块到达顺序。
  • 把同工作量分叉视为一个全局确定状态,而不是短暂的本地视图。
  • 忽略陈旧区块、延迟、隐瞒、自私挖矿与传播优势。
  • 从矿池名称推断独立矿工,或从矿池份额推断实体硬件所有权。
  • 忽略矿池、固件、制造商、托管、能源、地域与网络集中。
  • 把奖励当作诚实延伸永远是每个参与者最优策略的证明。
  • 遗漏 eclipse、分区、Sybil、对等节点投毒、拒绝服务和时间操纵暴露。

结算与安全错误

  • 把确认称为协议最终性,或承诺六次确认不可能被移除。
  • 对所有价值、对手方、可逆性与威胁模型采用同一确认数。
  • 把白皮书概率示例转化为当前实测攻击概率。
  • 声称多数算力可以伪造签名、夺取任意硬币或验证通胀。
  • 声称少数算力不可能获利偏离,也不可能造成任何重组或审查。
  • 把当前最大工作量链尖等同于正确的链外事实、合法所有权或应用结算。

常见误解

  • 最长链总是区块最多。 Bitcoin 节点选择累计工作量最大的有效链;当目标不同时,高度本身可能不是合适代理。
  • 矿工决定哪些协议规则有效。 矿工提出区块,而每个全节点独立执行其配置的共识规则。
  • 六次确认产生绝对最终性。 六是应用惯例;重组概率取决于模型、深度、对手、传播和观察完整性。
  • 拥有 51% 算力的攻击者可以花费任何人的硬币。 算力可以支持重组、双花和审查策略,但不会提供其他用户的私钥签名,也不能让未修改的全节点接受无效通胀。
  • 总算力高就证明去中心化且安全。 还要考虑实际控制、网络可见性、硬件获取、矿池协调、客户端多样性、激励和攻击持续时间。

相关主题

来源

导航

搜索知识库...