TBFT
TBFT(Tencent BFT)是腾讯长安链(ChainMaker)的拜占庭容错共识,基于 Tendermint 改造:height / round 驱动、提议者轮转、prevote / precommit 投票。与 CometBFT 同族,针对联盟链场景加了可配置的连续出块与「非确定性交易剔除」。模型见 BFT。
系统模型
- 共识节点数 \(\ge 3n+1\),拜占庭节点数 \(< 1/3\)(即 \(n \ge 3f+1\))。
- 节点身份由证书体系管理(联盟链准入),消息带签名 / 背书(endorsement),无不可伪造认证则 quorum 相交不成立。
- 部分同步:超时推进 round,不改变已提交 height 的结果。
Round 协议
TBFT 的每轮共识分五步,其中 Proposal / Prevote / Precommit 是投票阶段:
- NewRound。重置本轮状态。
- Proposal。leader 打包区块,广播给 follower。
- Prevote。follower 验证提案合法后广播自己的 prevote。
- Precommit。收到 \(> 2/3\) 针对该提案的 prevote 后广播 precommit。
- Commit。收到 \(> 2/3\) precommit 后提交区块到账本。
投票消息携带 height、round、区块哈希;提案携带 pol_round——上一 round 的锁定证明,语义与 Tendermint 的 polka / lock 一致。
与 PBFT / CometBFT 的差异
| PBFT | CometBFT | TBFT | |
|---|---|---|---|
| leader | 固定,view-change | 每 height 轮转 | 每 \(N\) 块轮转(可配置) |
| 投票 | prepare + commit | prevote + precommit | prevote + precommit |
| 锁定 | prepared 集合 | polka / lock | pol_round |
| 出块连续性 | 单 leader | 每 height 换 | 连续 \(N\) 块再换 |
- 公平性:PBFT 用 view-change 换主节点,TBFT 按块数轮转 leader,避免单 leader 长期垄断出块。
- 归属:TBFT 直接借用了 Tendermint 的 prevote / precommit 与锁定语义,与 CometBFT 是同一设计空间;差别在出块节奏(连续 \(N\) 块)和联盟链的确定性保障。
非确定性交易剔除
联盟链合约可能产生非确定性执行(时间戳、随机数),同一交易在不同节点结果不一致。TBFT 通过共识剔除:
- follower 验证提案时比对交易读写集。
- 读写集不一致的交易,节点在 prevote 时附「剔除」投票。
- 收集到 \(f+1\) 个剔除投票后,调用核心引擎删除该交易。
保证进入账本的交易结果可复现,不依赖重放一致性。
与核心引擎的交互
共识引擎与核心引擎通过消息总线(msgbus)对接:ProposalState(本节点当前高度是否 leader,决定是否打包)→ Proposal → Verify(读写集验证)→ VerifyResult → Commit → BlockInfo(已提交高度,进入下一高度)。
配置参数
| 参数 | 含义 |
|---|---|
TBFT_propose_timeout | 提案超时(如 10s、1m) |
TBFT_propose_delta_timeout | 每轮超时递增量 |
TBFT_blocks_per_proposer | 每个节点连续出块数 |
对照
TBFT 是「Tendermint 血缘的联盟链 BFT」:有界验证者集合、即时最终性、无概率化确认窗口,安全阈值与 CometBFT 相同(拜占庭投票权 \(< 1/3\))。长安链的另一套共识 Maxbft 是 HotStuff 流水线的联盟链实现(星型通信 + QC + three-chain)。联盟链不需要抗女巫,见 PoS 通论 与 BFT 模型 的对照。