共识算法:从PBFT到HotStuff的拜占庭容错演进
共识算法从PBFT到HotStuff的拜占庭容错演进一、引言区块链的核心:在不可信网络中达成一致。从Liskov 1999年PBFT到2018年Facebook LibraBFT(HotStuff),历经20年从理论到生产的演进。本文将逐层推导共识算法的安全性证明和工程实现。二、PBFT三阶段协议的经典2.1 协议流程Client Request │ ▼ Primary (Leader) ───Pre-Prepare──→ Replica 1 ───Pre-Prepare──→ Replica 2 ───Pre-Prepare──→ Replica 3 (n3f14, f1) │ ┌─────────────┼─────────────┐ ▼ ▼ ▼ Prepare(1) Prepare(2) Prepare(3) ← 至少2f13个Prepare │ │ │ └─────────────┼─────────────┘ ▼ Commit(1,2,3) ← 至少2f1个Commit │ ▼ Reply → Client2.2 核心实现typePBFTstruct{viewuint64// 当前视图(View Leader编号)sequint64// 序列号phase Phase// PrePrepare/Prepare/Commitreplicasmap[uint64]*Replica fint// 最大容错数log*MessageLog timer*time.Timer}const(PrePrepare PhaseiotaPrepare Commit)typeConsensusMessagestruct{Type Phase Viewuint64Sequint64Digest[32]byte// 提案HashSenderIDuint64Signature[]byte}// Pre-Prepare: Leader广播提案func(p*PBFT)sendPrePrepare(request[]byte){digest:sha256.Sum256(request)msg:ConsensusMessage{Type:PrePrepare,View:p.view,Seq:p.seq,Digest:digest,SenderID:p.id,}msg.Signaturep.sign(msg)p.broadcast(msg)}// Prepare: 副本确认收到有效提案func(p*PBFT)handlePrePrepare(msg*ConsensusMessage)error{// 验证: View匹配 签名有效 未处理过ifmsg.View!p.view{returnErrWrongView}if!p.verifySignature(msg){returnErrInvalidSig}ifp.log.Has(msg.View,msg.Seq){returnErrDuplicate}p.log.Add(msg)p.sendPrepare(msg.Digest)returnnil}func(p*PBFT)sendPrepare(digest[32]byte){msg:ConsensusMessage{Type:Prepare,View:p.view,Seq:p.seq,Digest:digest,}msg.Signaturep.sign(msg)p.broadcast(msg)p.checkPrepared()}// Prepared条件: 2f1个Prepare消息(含自身)func(p*PBFT)checkPrepared(){prepares:p.log.GetPrepares(p.view,p.seq)// ★ 核心不变量: prepared(m,v,n) → 不会有其他m在(v,n)被committediflen(prepares)2*p.f1{p.preparedCertificateprepares p.sendCommit(prepares[0].Digest)}}// Committed条件: 2f1个Commit消息 → 最终确定性!func(p*PBFT)checkCommitted(){commits:p.log.GetCommits(p.view,p.seq)iflen(commits)2*p.f1{p.committedCertificatecommits p.execute(commits[0].Digest)// 执行请求,不可回滚p.sendReply()}}// View Change: Leader超时→换Leaderfunc(p*PBFT)startViewChange(){p.viewp.phasePrePrepare msg:ViewChangeMessage{NewView:p.view,LastSeq:p.seq,PreparedCert:p.preparedCertificate,// ★ 关键:携带prepared证明}p.broadcast(msg)}// ★ 安全性证明核心:View Change必须携带prepared证明// 新Leader收集2f1个ViewChange消息后,选取最新prepared的seq继续func(p*PBFT)handleNewView(msgs[]*ViewChangeMessage){// 1. 找到最高prepared的序列号maxPrepared:findMaxPreparedSeq(msgs)// 2. 对其prepared消息重新做PrePrepare(保证不冲突)ifmaxPrepared0{p.rePropose(maxPrepared)}// 3. 继续处理新请求p.seqmaxPrepared1}2.3 形式化安全证明定理1 (Safety): PBFT不会产生分叉 证明: 假设两个冲突的请求m和m都在序列号n被提交 → 需要两个不同的quorum: Q1和Q2,各含至少2f1个节点 → |Q1||Q2| ≥ 2(2f1) 4f2 3f1 n → 至少f1个节点同时在两个quorum中 → 诚实节点不可能对同一seq投两种票 → 矛盾 定理2 (Liveness): 在view change后最终能达成共识 → 新Leader的ViewChange消息包含prepared certificate → 至少2f1个节点接受了prepared消息 → 新Leader可以继续推进三、TendermintPBFT的实用化// Tendermint简化PBFT:去掉了PrePrepare,用提议预投票预提交三阶段typeTendermintConsensusstruct{heightint64roundint32step Step// Propose/Prevote/Precommitvalidators*ValidatorSet}const(Propose Stepiota// 提议者广播区块Prevote// 验证者投票(类似PBFT Prepare)Precommit// 验证者提交(类似PBFT Commit))// Tendermint关键改进:// 1. Round-based: 每一轮有固定Proposer(基于VRF选择)// 2. 锁定机制: Precommit后锁定区块,新轮必须解锁或重提案// 3. 超时递增: 每轮timeoutdelta,避免活锁func(tc*TendermintConsensus)enterNewRound(roundint32){tc.roundround tc.stepPropose// Proposer validators[height % len(validators)]iftc.isProposer(){block:tc.createBlock()tc.broadcastProposal(block)}// 超时进入下一轮tc.scheduleTimeout(tc.timeoutDuration())}四、HotStuff链式BFT革命4.1 三链确认规则Leader每次只提出一个区块,累积QC(Quorum Certificate): Block1 ──→ Block2 ──→ Block3 ──→ Block4 │ │ │ │ QC1 QC2 QC3 QC4 (Prepare) (PreCommit) (Commit) (Decide) ★ 关键: Block3携带Block1的Commit QC → Block1被最终确定!4.2 核心实现// HotStuff的精妙: View Number同时作为Phase指示器// view%30 → Prepare, view%31 → PreCommit, view%32 → CommittypeHotStuffstruct{viewuint64bLock*Block// 最高PreCommit的块bExec*Block// 最高Commit的块bLeaf*Block// 最新块qcHigh*QuorumCert// 最高QC}typeQuorumCertstruct{Type Phase Viewuint64BlockHash[32]byteSigs[]Signature// 包含2f1个签名}// ★ 单链Leader提议(线性通信! PBFT需要O(n²))func(hs*HotStuff)onPropose(block*Block){// 1. 验证前驱QC(Leader必须附带最新QC)if!hs.verifyQC(block.Justify){return}// 2. 更新安全规则: fork必须扩展bLock(PreCommit的块)ifblock.Parent.Viewhs.bLock.View{// 不在bLock之后的分叉 → 拒绝return}// 3. 发送Vote(带签名)hs.sendVote(block)}// ★ Leader收集2f1个Vote → QCfunc(hs*HotStuff)onReceiveVotes(block*Block,votes[]*Vote){iflen(votes)2*hs.f1{qc:hs.aggregateQC(votes)hs.updateHighQC(qc)// ★ 三链确认: 检查祖父区块b1:block// 当前b2:block.Parent// 父b3:block.Parent.Parent// 祖父ifb1.Justify.Viewb2.View1b2.Justify.Viewb3.View1{// b3已获得连续三代QC → Finalize b3hs.commitBlock(b3)}}}// ★ 领导者更换: Pacemakerfunc(hs*HotStuff)onLeaderTimeout(){hs.viewhs.startViewChange()hs.broadcast(NewViewMessage{View:hs.view,HighQC:hs.qcHigh})// O(n)消息复杂度(vs PBFT O(n²))}4.3 性能对比协议消息复杂度延迟吞吐量验证者上限PBFTO(n²)3RTT~1K TPS~30TendermintO(n²)2RTT~5K TPS~100HotStuffO(n)3RTT~50K TPS~1000AvalancheO(k·log n)1s~4500 TPS无上限五、Avalanche随机抽样共识5.1 Snowball ProtocoltypeSnowballstruct{kint// 每轮抽样数alphaint// 多数阈值betaint// 连续确认轮数preference Color// 当前偏好(0或1)countint// 连续偏好计数}func(s*Snowball)decide()Color{for{// 1. 随机抽样k个节点samples:randSample(s.network,s.k)// 2. 查询偏好votes:query(samples)majority:tally(votes)// 3. 更新偏好ifcountOf(majority)s.alpha{ifs.preferencemajority{s.count}else{s.preferencemajority s.count1}}// 4. 连续beta轮 → 确定ifs.counts.beta{returns.preference}}}// 优势:// - 无Leader,完全去中心化// - 吞吐量与节点数无关(每次只抽样k个)// - 亚秒级最终确定性// - 支持数万验证者六、总结区块链共识的演化路径:PBFT(1999)— 奠基理论:3f1容错三阶段协议Tendermint(2014)— 工程化:round-based锁机制增量超时HotStuff(2018)—革命性:线性消息复杂度流水线三链确认Avalanche(2020)— 新范式:随机抽样亚稳态无Leader选择:联盟链用PBFT,公链PoS用HotStuff,高去中心化用Avalanche。

相关新闻

解锁AMD Ryzen隐藏潜能:SMUDebugTool让你的处理器焕然一新

解锁AMD Ryzen隐藏潜能:SMUDebugTool让你的处理器焕然一新

解锁AMD Ryzen隐藏潜能:SMUDebugTool让你的处理器焕然一新 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

2026/8/9 15:30:22 阅读更多 →
从零跑通大模型全流程:基于Qwen3‑0.6B微调中医模型并Docker部署

从零跑通大模型全流程:基于Qwen3‑0.6B微调中医模型并Docker部署

文章目录前言1. 先给你们看看最终成品1.1 四个核心产物1.2 先把定位说清楚2. 我的本地环境家底2.1 硬件软件配置2.2 文件存放思路3. 整个流程就是一条流水线3.1 四个核心脚本3.2 完整数据流4. 数据清洗:先定好模型该学啥4.1 原始数据啥成色4.2 我是怎么筛数据的4.3 …

2026/8/9 15:30:22 阅读更多 →
零基础Milvus快速上手指南,手把手搭建RAG向量检索

零基础Milvus快速上手指南,手把手搭建RAG向量检索

文章目录前言1 环境准备1.1 Windows下用Docker部署Milvus1.2 安装Python依赖1.3 准备嵌入模型API2 连接Milvus并创建数据库2.1 建立客户端连接2.2 创建自定义数据库3 创建Collection集合3.1 检查并创建集合3.2 查看集合元数据4 准备嵌入模型4.1 初始化模型4.2 生成测试向量5 插…

2026/8/9 15:30:22 阅读更多 →

最新新闻

mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南

mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南

mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit常见问题解答:新手入门避坑指南 【免费下载链接】DeepSeek-V4-Pro-Qwen3.5-9B-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-V4-Pro-Qwen3.5-9B-4bit mlx-community/DeepSeek-V…

2026/8/9 19:38:00 阅读更多 →
DeepSeek-V4-Pro-Qwen3.5-4B-8bit未来路线图:即将支持的5大新功能预测

DeepSeek-V4-Pro-Qwen3.5-4B-8bit未来路线图:即将支持的5大新功能预测

DeepSeek-V4-Pro-Qwen3.5-4B-8bit未来路线图:即将支持的5大新功能预测 【免费下载链接】DeepSeek-V4-Pro-Qwen3.5-4B-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-V4-Pro-Qwen3.5-4B-8bit DeepSeek-V4-Pro-Qwen3.5-4B-8bit作…

2026/8/9 19:38:00 阅读更多 →
释放macOS鼠标侧键潜能:解锁第三方鼠标的隐藏导航能力

释放macOS鼠标侧键潜能:解锁第三方鼠标的隐藏导航能力

释放macOS鼠标侧键潜能:解锁第三方鼠标的隐藏导航能力 【免费下载链接】sensible-side-buttons A macOS menu bar app that enables system-wide navigation functionality for the side buttons on third-party mice. 项目地址: https://gitcode.com/gh_mirrors/…

2026/8/9 19:38:00 阅读更多 →
从NLP到CV:Transformer跨界计算机视觉的核心原理与实战指南

从NLP到CV:Transformer跨界计算机视觉的核心原理与实战指南

1. 从NLP到CV:Transformer的跨界之旅如果你在2020年之前问我,Transformer是什么,我会毫不犹豫地告诉你,它是一种在自然语言处理领域大放异彩的模型架构,其核心的自注意力机制让机器理解长距离文本依赖关系的能力得到了…

2026/8/9 19:38:00 阅读更多 →
多物种植物染色质分析新突破:a2zchromatin-accessibility支持12种被子植物研究

多物种植物染色质分析新突破:a2zchromatin-accessibility支持12种被子植物研究

多物种植物染色质分析新突破:a2zchromatin-accessibility支持12种被子植物研究 【免费下载链接】a2zchromatin-accessibility 项目地址: https://ai.gitcode.com/hf_mirrors/multimolecule/a2zchromatin-accessibility a2zchromatin-accessibility是一款基于…

2026/8/9 19:38:00 阅读更多 →
5分钟掌握Windows效率神器PowerToys:告别文件占用烦恼

5分钟掌握Windows效率神器PowerToys:告别文件占用烦恼

5分钟掌握Windows效率神器PowerToys:告别文件占用烦恼 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys…

2026/8/9 19:37:00 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →