一切BFT共识都是联盟链
引言
在现在的Web3世界里,人们常常把“公链”和“BFT”绑死在一起,仿佛只要用了PBFT、HotStuff、CometBFT、Casper 等一众拜占庭容错算法,就能理直气壮地宣称自己是“去中心化的公链”。
本文要揭露一个残酷却逻辑自洽的事实:
凡是把BFT类算法(无论是经典PBFT,还是现代的HotStuff、DiemBFT、Grandpa、Casper FFG等)当作核心fork choice机制的链,无论它多么大声喊自己是公链,本质上都是一条联盟链。
拜占庭将军问题的真正含义
1982年Lamport那篇论文的核心只有一个:
在存在任意类型故障(包括恶意说谎)的将军群中,如何保证忠诚的将军们就同一个行动方案达成一致,避免一部分进攻、一部分撤退导致全军覆没。
论文证明了:只要恶意节点不超过1/3,通过多轮可认证的消息交互,所有忠诚将军最终一定能收到同一个一致的命令(进攻或撤退)。
关键在于:
Lamport老爷子从来没说过“该进攻还是该撤退”应该由算法决定。
算法只负责把“某个已经存在的主观决定”安全、无歧义地传递给所有人,它解决的是“一致性传播”问题,而不是“该做出什么决定”这个前置问题。
换句话说:
BFT的前提是已经有了一个主观决定(进攻/撤退),它只管把这个决定防篡改地广播出去。
它根本不负责产生这个决定,也不负责判断这个决定是对是错。
区块链把BFT用错了地方:把它当成了fork choice本身
比特币之前根本不存在“区块链”这个概念,自然也没有人把BFT拿来做fork choice。
比特币的伟大发明在于:它把fork choice彻底客观化了——
哪条链累计了最多的不可伪造、不可逆的物理成本(PoW),哪条链就是正统。
每个人抬头看累计难度就知道该跟谁走,根本不需要互相发消息投票。
而所有依赖BFT的所谓“公链”干了什么事?
它们把“该进攻还是撤退”这个本该由客观物理成本决定的前置问题,硬生生塞给了BFT:
- 先定义一个有限的验证者集合(不管是100个还是10万个,本质都是有限可识别的“将军团”)
- 让这群将军投票决定“哪条链是正统”(即进攻还是撤退)
- 用BFT算法保证投票过程不脑裂(不超过1/3作恶就不会出现两条链都拿到2/3签名)
这完全是本末倒置。
公链的fork choice根本不应该依赖任何主观投票,它应该像比特币一样,靠客观、可独立验证、难以逆转的物理成本说话。
为什么PoS等非PoW共识几乎都得抱BFT大腿?因为没有客观锚定
PoW之所以能彻底摆脱BFT,是因为它有最硬的客观锚定:烧电。
你想让我跟你的分叉?请拿出比当前主链更多的电费单据给大家看,全世界都能独立验证。
PoS没有这种物理成本,质押的币本身就是链内数据,可以同时在两条分叉上使用(nothing at stake)。
即使你设计再复杂的罚没规则,罚没本身也需要先达成共识才能执行——陷入死循环。
于是只能退而求其次:
设计各种“最重链”“最新justified块”等启发式规则 → 再叠加一层层BFT投票来提供最终性。
它们不是因为BFT更高级才用BFT,而是因为没有客观锚定,只能靠主观投票来模拟客观性。
惩戒机制彻底无用:永远不知道该站哪一边
很多人说:“PoS有罚没啊,作恶会被slash,BFT链不怕长程攻击!”
错得离谱。
真正致命的问题不是“同时在两条链签名会被slash”,而是合法的2/3倒戈本身就是允许的:
- 第1个月,验证者集合的2/3投票认定A链是主链,B链是少数派 → B链上的签名者可能被A链罚没
- 第2个月,验证者集合换了一批人/被收买/被威胁,又有新的2/3投票认定B链才是主链 → 现在轮到A链上签名的人被罚没
- 第3个月,又倒回去……
这就是典型的“攻击合法化”:只要你每次都能拉到2/3的票,你就可以名正言顺地改写历史、没收异己。
而普通用户和轻节点永远搞不清“到底该跟哪一波2/3”,因为两波人都声称自己代表了“社区共识”。
惩戒机制在这种场景下完全失效——它只会变成胜利者对失败者的秋后算账工具,永无止境。
这不就是现实中的政治斗争吗?今天议会2/3通过法案没收你的财产,明天新议会2/3推翻上一届决定再把支持者送进监狱……
你作为一个老百姓,永远不知道该站哪一边才安全。
结语:没有北极星的船,注定在海上打转
真正的公链像大航海时代的水手,大家都朝着北极星(累计难度)航行:
北极星位置固定、任何人都能独立验证、谁也改不了。即使船队暂时走散,最终也必然抵达同一片大陆,期间完全不需要互相投票“现在该往哪开”。
而BFT类“公链”把水手扔到没有星空的太平洋上:
“大家投票决定方向吧!我们用最先进的BFT算法保证投票过程不脑裂!”
→ 第1个月2/3票往东 → 全队往东
→ 第2个月2/3票往西 → 全队掉头往西
→ 第3个月又有人倒戈……
方向永远是相对的、暂时的、可推翻的。
船只会在海上无限漂流,永远到不了任何目的地。
只要你的fork choice核心依赖BFT投票,那你就已经不是公链了——
你只是把联盟成员名单从Excel表格搬到了链上,本质无二。
北极星才是公链,投票永远只是联盟链的遮羞布。










