Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 是投票阶段:

  1. NewRound。重置本轮状态。
  2. Proposal。leader 打包区块,广播给 follower。
  3. Prevote。follower 验证提案合法后广播自己的 prevote。
  4. Precommit。收到 \(> 2/3\) 针对该提案的 prevote 后广播 precommit。
  5. Commit。收到 \(> 2/3\) precommit 后提交区块到账本。

投票消息携带 height、round、区块哈希;提案携带 pol_round——上一 round 的锁定证明,语义与 Tendermint 的 polka / lock 一致。

与 PBFT / CometBFT 的差异

PBFTCometBFTTBFT
leader固定,view-change每 height 轮转每 \(N\) 块轮转(可配置)
投票prepare + commitprevote + precommitprevote + precommit
锁定prepared 集合polka / lockpol_round
出块连续性单 leader每 height 换连续 \(N\) 块再换
  • 公平性:PBFT 用 view-change 换主节点,TBFT 按块数轮转 leader,避免单 leader 长期垄断出块。
  • 归属:TBFT 直接借用了 Tendermint 的 prevote / precommit 与锁定语义,与 CometBFT 是同一设计空间;差别在出块节奏(连续 \(N\) 块)和联盟链的确定性保障。

非确定性交易剔除

联盟链合约可能产生非确定性执行(时间戳、随机数),同一交易在不同节点结果不一致。TBFT 通过共识剔除:

  1. follower 验证提案时比对交易读写集。
  2. 读写集不一致的交易,节点在 prevote 时附「剔除」投票。
  3. 收集到 \(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 模型 的对照。