什么是共识机制?
共识机制是区块链网络用来决定“接下来接受哪一个区块、采用哪一段账本历史”的一套规则。网络中的节点分别接收和检查数据,即使消息到达时间不同,或有人提交冲突信息,它们仍需要用相同规则得出能够继续处理的结果。
这里的“共识”不表示每个人对所有事情意见一致,也不要求每个节点在同一时刻看到完全相同的数据。它表示:在协议设定的条件成立时,遵守规则的节点最终能够采用兼容的账本历史,并知道哪些交易仍可能变化,哪些已经达到协议定义的确定程度。
区块有效不等于网络已经选中
节点验证区块时,会检查它是否符合协议,例如交易签名是否正确、资产是否被重复花费、区块大小是否超限。验证回答的是“这个候选区块能不能被接受”。
共识还要回答另一个问题:“如果同时出现多个有效候选,网络继续采用哪一个?”网络延迟可能让两个负责组装并发布候选区块的参与者几乎同时发出不同区块。两个区块分别看都可能有效,却不能同时占据同一账本位置。节点需要按照工作量、验证者投票、预定顺序或其他协议信号作出一致选择。
有效性规则先判断候选数据是否有资格参与选择;分叉选择和最终性规则再决定节点沿哪段历史继续。它们承担不同任务,但在本文采用的广义口径下,都属于区块链形成共同账本状态所需的共识规则。
共识形成的基本过程
不同网络的细节差异很大。下面用更通用的四个环节说明;在 Bitcoin、Ethereum 这类按区块推进的链式账本中,待处理数据通常会被组织成候选区块。
提出或收集待处理数据
协议先规定谁可以提出、排序或收集下一批待处理数据。工作量证明让参与者通过计算竞争出块机会;权益证明通常根据质押、随机选择和协议限制安排验证者;许可型网络则可能由名单内的节点轮流提出数据,或通过多轮消息共同确定顺序。
在按区块推进的网络中,这一步需要分配出块机会;更广泛地说,共识机制还要防止一个参与者仅靠创建大量虚假身份就获得同等数量的影响力。不同机制为此要求付出计算、质押资产、获得许可或满足其他条件。
检查候选数据
节点收到候选交易、区块或排序结果后,会执行协议要求的验证。提出者即使拥有相应资格,也不能让无效交易自动生效。其他节点可以拒绝错误签名、重复花费、无效状态变化或不符合数据格式的内容。
处理竞争历史
节点可能收到顺序不同的交易,也可能在同一高度或时段看到多个有效区块。协议需要确定处理顺序,或规定节点跟随哪一条分支。例如,Bitcoin 节点比较各分支累计的工作量,Ethereum 的权益证明节点根据验证者证明所代表的质押权重选择当前视为最新位置的区块。节点接收新信息后,近期采用的分支可能被另一条分支替换,这种变化称为链重组。
判断交易何时足够确定
确认和最终性用来描述一笔交易被替换的可能性。有些机制采用概率性确认:后续区块越多,重写这段历史通常越困难,节点对它不会被替换的把握越大,但没有某个瞬间把区块标记为绝对不可改变。另一些机制会定期选取供投票确认的参考区块,这类区块称为检查点;达到投票门槛的检查点可以进入协议定义的最终状态。
如果系统出现相互冲突的最终结果,通常意味着参与者数量、诚实比例或通信条件等安全前提已经被破坏。采用质押罚没的网络还可能让违规参与者承担协议处罚,但这种处罚并不是所有最终性机制的共同条件。
“最终”仍然带有条件。软件缺陷、足够多的恶意参与者、网络长时间分裂或协议外的紧急处理,都可能超出正常安全假设。判断一笔交易是否足够确定时,需要区分确认数、随区块增加而提高的确定把握,以及明确的最终性规则。
共识机制通常包含的规则
一个完整的共识设计不只是“挖矿”或“投票”这一个动作,通常还需要共同规定:
- 参与条件:谁能提出区块、投票或验证,以及如何限制虚假身份。
- 提议规则:何时由谁组织交易并发布候选区块。
- 验证规则:其他节点怎样判断区块和交易是否有效。
- 分叉选择:同时存在多个有效分支时,节点跟随哪一个。
- 最终性规则:什么条件下可以把区块视为不应再被正常回退。
- 故障处理:参与者离线、消息延迟或有人发送冲突信息时,网络怎样继续。
- 奖励与处罚:是否用区块奖励、交易费、质押罚没或其他方式影响参与者行为。
不是每种机制都把这些规则写成相同模块,也不是所有网络都使用代币奖励。判断一个共识机制时,需要看整套流程,而不是只看它使用计算还是质押。
常见共识机制的区别
工作量证明
工作量证明让出块参与者反复计算,寻找满足协议难度条件的结果。有效链之间发生竞争时,节点通常选择累计工作量更高的分支。攻击者若想重写历史,需要重新完成相关工作并追上诚实网络的进度。
这种机制把影响力与可验证的计算工作联系起来,代价包括能源、设备、运营成本和区块确认等待。具体安全性还取决于算力分布、网络连接、难度规则和节点是否正确验证。
权益证明
权益证明让锁定协议资产的验证者参与区块提议或投票。协议会规定验证者选择、投票权重、奖励、离线处罚以及对冲突投票等行为的处理。部分设计还会在达到投票门槛后明确标记最终区块。
质押并不是简单的“持币就投票”。验证者仍需运行软件、检查区块并按时发送协议消息;不同权益证明网络的选择算法、处罚和最终性规则也不相同。
许可型投票或轮流出块
一些许可型区块链预先确定可以参与共识的组织或节点。这些节点可以轮流提出区块,或通过多轮消息和投票确认顺序。由于参与者身份和数量受到限制,系统可以预先规定能够容忍多少节点离线或作恶,以及通信需要满足什么条件;这些前提通常称为故障假设。
这类机制不需要开放网络使用的计算竞争或公开质押,但会依赖成员准入、密钥管理和组织治理。它是否适合某个用途,取决于参与者之间的信任关系和系统目标。
安全与持续运行之间的平衡
分布式系统常用两个问题检查共识设计:节点会不会确认互相冲突的结果,以及网络能不能继续产生新区块。前者通常称为安全性,后者通常称为活性。
假设一部分节点暂时无法与另一部分节点通信,也就是发生网络分区。一种协议可能暂停最终确认,避免两组节点同时确认冲突结果,但这段时间无法完成最终结算;另一种协议可能允许两组继续产生数据,保持局部运行,等连接恢复后再通过分叉选择处理竞争历史。前一种做法更侧重避免冲突,后一种做法更侧重持续推进,但可能产生需要回退的近期分支。
不同设计对参与人数、恶意比例、消息延迟和同步程度采用不同前提,因此不能只用“确认更快”判断机制更好。
常见取舍还包括:开放参与程度、硬件或质押门槛、确认时间、数据吞吐量、故障恢复、资源消耗以及参与权是否集中。提高其中一项,可能增加另一项的成本。
共识不能证明链外信息真实
共识可以让网络参与者按规则接受同一段数字记录,却不能单独判断这段记录引用的链外信息是否真实。例如,多个验证者一致处理了一条价格数据,只能说明这条数据被按协议写入,不能证明数据源没有出错或被操纵。
共识也不能保证智能合约没有漏洞、私钥没有被盗,或用户理解了自己签署的交易。数据来源、软件安全、密钥保护和用户授权仍需分别解决。
共识规则与协议治理
共识规则决定节点当前怎样处理区块;协议治理决定规则将来怎样改变。开发者可以提出升级,运营者可以选择安装软件,验证者或其他参与者也可能表达支持,但代码发布本身不会让所有节点自动采用新规则。
如果参与者运行不兼容的规则,网络可能分叉成不同历史。因此,升级过程中的沟通和采用属于治理问题;升级生效后,节点怎样验证和选择区块才属于共识执行。两者有关联,但不是同一个概念。
常见问题
共识机制就是投票吗?
不一定。部分机制使用明确投票,工作量证明则主要通过可验证计算和链选择表达对历史的延续。即使使用投票,共识也通常包含提议、验证、分叉选择和最终性等其他规则。
共识是否要求所有节点同时同意?
不要求。节点接收消息的顺序可能不同,也可能暂时处于不同分支。协议目标是在设定的故障和攻击范围内,让遵守规则的节点最终采用兼容结果。
一笔交易进入区块后就最终确定了吗?
不一定。交易可能只得到初步确认,所在区块仍可能因链重组被替换。需要结合具体网络的确认和最终性规则判断。
共识机制能防止所有攻击吗?
不能。它只在规定的网络、参与者和资源假设下处理特定故障与冲突。软件漏洞、密钥泄露、外部数据错误、网络隔离或超过安全阈值的协同行为仍可能造成问题。
相关词条
继续了解区块链和区块,以及区块链节点与密码学哈希等相关概念,或返回加密货币术语表。
参考来源
- NISTIR 8202:区块链技术概述——共识、冲突处理以及多类共识模型的通用说明。
- Bitcoin 白皮书——交易广播、工作量证明、竞争链选择和后续区块确认。
- Bitcoin Developer Guide:区块链——累计工作量、区块验证和链选择。
- Ethereum.org:权益证明——区块提议、验证者证明、分叉选择和最终性。
- Ethereum.org:Gasper——Ethereum 分叉选择与检查点最终性的组合。
- Raft 论文:一种易于理解的共识算法——分布式共识中的安全性、持续运行和通信条件。









