两阶段投票是什么?Tendermint 式共识怎么在秒级定块不分叉 图 1
两阶段投票是什么?Tendermint 式共识怎么在秒级定块不分叉 · 图 1

秒级出块怎么办到的

很多权益证明链宣称”两三秒一个区块、出一个定一个”,而比特币要靠”等六个确认”的习惯已经说明这是两种完全不同的机制。以 Tendermint 系共识(CometBFT 一脉,被 Cosmos 生态广泛使用)为例,它的答案叫两阶段投票:每个高度内,验证者先投一轮预投票(prevote),再投一轮预提交(precommit),两轮各自需要超过三分之二的投票权达成一致,块就永久落定。本文按官方共识规范拆解这两轮投票与配套的锁定规则——它和链上常见的那种”概率最终性”是两条路。

一轮的三步与超三分之二规则

规范把每个高度的推进切成回合,每个回合里有三步:提案(Propose)、预投票、预提交。指定提案者广播区块,验证者先就”这个块看着有效吗”投预投票;当某个块收到了超过三分之二投票权的预投票,就形成一个关键材料——规范称之为 PoLC(proof-of-lock-change,锁变更证明),可以理解为”足够多的人承认见过这个候选”的凭证。随后进入预提交,收到同一轮的 PoLC 的验证者对这个块投预提交;当超过三分之二投票权为同一个块投了预提交,共识直接进入 Commit,这个高度就此定死,没有”再等等更稳”的余地。任何一步凑不齐三分之二,回合超时,换提案者进入下一回合重来。

锁定:防止同高度出现两个决定

验证者两阶段投票汇聚成提交凭证示意

真正让这套机制防分叉的是锁定规则。规范的逻辑是:验证者若见到某块的 PoLC,就把它锁进自己的状态;此后只要还锁着,预投票就只能投给它,除非见到一个来自更晚回合、针对另一块的 PoLC,才允许解锁改投。安全论证靠一个重叠推理:只要作恶投票权少于三分之一,任何一次成功的三分之二投票里至少有一个诚实验证者参与,锁就会一直守到更晚的回合,使得同一高度凑不齐第二个块的三分之二。这就是规范的证明思路——分叉不是被”概率地避免”,而是被锁规则加多数重叠”投票权几何学”地排除。

与概率最终性差在哪

比特币式的最终性说”大概率改不了,越等越稳”;这里说的是”要么没定,定了就定”。用户视角的差异很具体:没有确认数文化,一个节点上 commit 里的块集合本身就是可验证凭证,轻客户端可以直接数签名;代价则是活性依赖网络——超过三分之一的投票权失联时,链会停在回合超时循环里不出新块,宁可停也不分叉。这是 BFT 家族的通用性格:用活性换确定性。权益高度集中的网络里,这个取舍承受的舆论与监管压力也更直接。

用户怎么核验与误读在哪

作为用户,可核验的对象是明确的:某区块是否出现在链上、其提交凭证里带了多少投票权签名、当前高度是否停滞。“链停了”与”链分叉了”是两种不同的表象——前者大家停在同一高度空转,后者需要作恶者同时拿到两套冲突的提交记录,而规范为此准备了可举证的问责材料(违规者签过的投票集都可以被收集出示)。另一个常被略过的细节是回合与超时的作用:出块速度并不恒等于提案传播速度,网络抖动或提案者掉线时,时间戳不推进但高度不变,只是换人重试,所以”这一高度花了几秒”本身就是可观察的活性指标。容易误读的是把”出块快”等同于”更去中心化”:回合结构本身不限制验证者数量问题,安全性依旧押在投票权分布上,这一层要用质押分布数据另查,拜占庭容错的基础逻辑可以再看协议栏目对 BFT 的专述。

风险提示

本文仅解释共识机制原理,不构成任何投资或质押建议。涉及协议行为的描述以官方共识规范当前文本为准,各链实现与参数可能不同。