45 / 691REORG

链重组

链重组将节点区块链的活跃端替换为具有更高累积工作量证明的另一个有效分支;旧的提示块被断开,获胜的分支被连接。

重组是本地链状态的改变,而不是对比特币共识规则的改变。全节点首先根据自己的规则验证候选区块,并且仅在有效分支中选择累积链工作量最高的区块。如果它与当前提示不同,UTXO 将恢复断开连接的块的更改,应用备用分支,并根据内存池重新评估受影响的交易。 (chainwork)

比特币核心不仅仅选择最高或最受欢迎的分支。候选链必须首先满足节点强制执行的所有共识规则。 FindMostWorkChain 和 ActivateBestChain 函数仅适用于有效的候选者;只有这样,累积的工作量证明才是决定性的。因此,一个无效的区块不能仅仅通过拥有更多的算力来获胜。

分支点是当前活动链和备用分支共同的最后一个块。重组的深度通常由必须与该共同祖先断开连接的活动尖端的块数来描述。单块重组替换提示,更深层次的重组返回几个已提交的块。深度与特定节点的视图相关。

DisconnectTip 和后续验证逻辑以相反的顺序返回断开连接的块的效果。已使用的 UTXO 将被恢复,并且删除的区块创建的输出将不再被确认。这就是 Bitcoin Core 存储撤销数据的原因:它必须能够准确地在分叉点重建 UTXO 集。

回滚后,ConnectTip 按正向顺序连接较高链分支的区块。每笔交易都会根据重建的 UTXO 集和给定高度有效的规则进行重新验证。结果是与一个特定历史相对应的链状态,而不是来自两个分支的交易的混合。

来自断开连接的区块的交易可能不会消失。 Bitcoin Core 将尝试将符合条件的非 coinbase 交易返回到内存池。有些可能已经在新的分支中,其他的可能会发生冲突、丢失输入、不再是最终的或不符合内存池政策。因此,钱包必须考虑到可以通过重组来取消确认。

Coinbase 交易是一个例外:它在断开连接后不会返回内存池,并且根据共识,其输出只能在 100 次确认后才能使用。当重组删除带有币库的区块时,该区块的奖励将从活动链状态中消失。依赖已删除历史记录的后续交易也可能无效。

确认对特定节点当前活动链中交易上方的区块进行计数。每个额外的区块通常会增加替换历史所需的工作,但没有有限数量的确认会产生数学上的绝对最终性。因此,交易所和交易者根据支付金额和风险模型来选择阈值。

当两个矿工几乎同时发现竞争区块并且网络的不同部分在一段时间内遵循不同的提示时,短暂的重组可能会自然发生;链条较少的分支就会被淘汰。双花攻击故意使用相同的机制。选链的技术程序是一样的,其原因和经济目的是不同的。

重组发生在一组规则内:节点在它认为有效的分支之间进行选择。另一方面,硬分叉改变了有效性,使得新旧软件已经可以就该块是否有效达成一致。因此,重组本身并不是共识的改变。

Bitcoin Core 中,步骤很明确:FindMostWorkChain 找到最佳有效分支,ActivateBestChainStep 可以断开当前提示,ConnectTip 连接备用区块,而 MaybeUpdateMempoolForReorg 重新检查断开连接的区块中的交易。源代码明确警告,广泛的重组会显着延长ActivateBestChain的处理时间。

要获得更完整的理解,请将本词条与以下词条结合阅读: Timechain, 确认, 陈旧区块, Proof of Work, 中本聪共识, Bitcoin. 反向关联还来自: 确认, 双花, Coinbase交易, Soft Fork.

DOC · 001Bitcoin Core validation.h — ActivateBestChain and reorg primitives一手来源DOC · 002Bitcoin Core validation.cpp — DisconnectTip, ConnectTip and mempool reconciliation一手来源DOC · 003Bitcoin Core Doxygen — DisconnectedBlockTransactions文档DOC · 004Bitcoin Developer Guide — Block chain文档DOC · 005Bitcoin whitepaper — Sections 5 and 11一手来源DOC · 006BIP 50 — March 2013 chain fork post-mortem规范DOC · 007Bitcoin Core RPC documentation文档
复核于2026年8月1日来源优先 · 非投资建议