【BFT帝国】20250409更新PBFT总结

2411 2411 2411

Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024
索引时间(可被引用): 240412
被引: 9'ACM COMPUTING SURVEYS'
卷56期5 DOI10.1145/3636553
出版商名称: ASSOC COMPUTING MACHINERY期刊影响因子 ™
2023: 23.8
五年: 21.1JCR 学科类别
COMPUTER SCIENCE, THEORY & METHODS
其中 SCIE 版本
类别排序 类别分区 
1/144	Q1

Toward More Efficient BFT Consensus

一、PBFT Practical Byzantine fault tolerance-1999

Miguel Castro, Barbara Liskov, et al. 1999. Practical Byzantine fault tolerance. In OSDI, Vol. 99. 173–186.

角色介绍:

客户端 Client:向区块链网络 发起交易或状态更新请求,等待共识结果。

主节点 Leader/Primary:负责 接收请求「交易排序」,协调共识。(轮换时同步状态)

副本节点 Replica:负责 备份请求,促进共识达成。「验证合法,维护一致」

故障节点 Byzantine Fault:负责 选择性响应,篡改数据。【何不直接剔除,因设计目标为容忍而非实时剔除】

正常流程:客户端请求 → 主节点排序广播 → 副本节点三阶段验证 → 客户端确认。

1.请求 I n v o k e Invoke Invoke

客户端 ClientPrimary(ld)发送调用请求Req,并启动计时器 Timer。【OP: 时间戳】

Client 收到来自不同的 Replicas 的仅 F+1个回复 Reply,即可判定操作完成,停止计时 Timer

否则直到计时器到期,认为调用失败。【原因1:内部错误只能等待。原因2:链接不可靠未达Primary,广播】

2.协商(共识)

image-20241115202006547

1.Pre-prepare阶段

1> 分配唯一序列号 Sequence,范围[h, h+k](h为最后一个稳定检查点的 Seq,k为限增值)

2> ViewNumSeq、对请求Req的摘要hash组成PRE-PREPARE,然后签名Sig。(搭载原生Req)

3> 发给所有 Backups==Replicas。

总结,指定一个编号Seq,把请求打包发送给所有节点。

2.Prepare阶段

1> 验证Sig

2> 检查ViewNum是否处于同一视图。

3> 检查Seq未分配给其他Req。

4> 验证hash

广播PREPARE消息,收集满2F个消息后,造一个(都已准备)谓词Prepared Predicate。【共识基本达成】

总结,检验消息包后广播「没问题,我已准备提交」,满2F个后达成共识。

3.Commit阶段

1> 通过广播COMMIT消息,(广播谓词Prepared Predicate)。

2> 收集满2F个消息后,造另一个谓词committed-local predicate。【仲裁证书提供安全属性:正确副本执行方式相同】

总结,上阶段满2F个准备消息后,广播「我已提交」,再满2F个后达成共识。

4.Reply阶段

Client发送REPLY消息 (resultOfOp=true)。

Weak Certificate 弱证书,仅需F+1个回复。

总结,上阶段满2F个提交消息后,向客户端回复调用完成。

检查点 C h e c k P o i n t CheckPoint CheckPoint

通过周期性状态同步,解决日志膨胀问题。【我理解为状态确认稳定后即可删除多余「过期」日志】

ReqCommit时的 execute 会更新节点的状态,该状态需要确保所有正确副本一致性,通过检查点机制。

O n c e a r e q u e s t i s c o m m i t t e d , t h e e x e c u t i o n o f t h e r e q u e s t r e f l e c t s t h e s t a t e o f a r e p l i c a . Once\ a\ request\ is\ committed,\ the\ execution\ of\ the\ request\ reflects\ the\ state\ of\ a\ replica. Once a request is committed, the execution of the request reflects the state of a replica.

算法定期对一系列 exe 生成证明,称为检查点

同样的,在广播CHECKPOINT并收集2F个回复后,进化成稳定检查点。【水位范围同上述Seq

总结,节点「已提交」后会更新状态,通过CheckPoint消息将其状态广播,满2F个后确认状态稳定。

3.视图切换 V i e w C h a n g e ViewChange ViewChange

Primary故障或共识超时,启动切换协议。【确保故障时系统活性】

视图切换期间,节点处于异步状态(i.e., 没有完全同步)。协议来自论文1:但可能需要无限空间。

副本节点在收到 Req 后,启动一个 「节点Timer」等待 Req 被提交 Commit。

Commit 完成,则 Timer 终止; R e s t a r t s t h e T i m e r i f t h e r e a r e o u t s t a n d i n g v a l i d r e q u e s t s t h a t h a v e n o t b e e n c o m m i t t e d . Restarts\ the\ Timer\ if\ there\ are\ outstanding\ valid\ requests\ that\ have\ not\ been\ committed. Restarts the Timer if there are outstanding valid requests that have not been committed.

若 Timer 到期,则认为 Primary 故障,广播VIEWCHANGE消息,引发视图切换

该消息包含三个参数: C P Q CPQ CPQ.

选主公式:p = v mod |R| 。【R为节点总数】

各副本节点收到VIEWCHANGE后。

1> 验证:生成PQ的视图小于v

2> 发送VIEWCHANGE-ACK消息给v+1Primary(新主)「支持视图切换」。【包含节点ID、摘要及发送方ID】

3> Primary在收集 2F-1 条VIEWCHANGE和*-ACK后,确认更改,将VIEWCHANGE*加入集合 S S S.【至少F+1条】

生成一个仲裁证书, view-change certificate

总结:通过超时检测和多方认证,切换Ld「视图+1」。

Primary 将 ID 与 S S S中的 msg 配对后,加入集合 V V V.

选择检查点最高值h。

提取[h, h+k]之间未提交的 Req,加入集合 X X X.【请求已在v或仲裁证书中准备好】

Backups 检查 V 、 X V、X VX中 msg 是否支持新主的【选择检查点和延续未提交请求】的决定。若不支持则切换视图至v+2.

终止 View-Change 协议。

视图切换期间异步处理请求。

总结,副本节点超时触发视图切换,新主节点基于最高检查点恢复未完成请求。

4.优缺点

开创异步网络中BFT的实用方案,启发高效BFT算法时代。

二次消息复杂性,阻碍其在大规模网络中的应用。

f a u l t y c l i e n t s u s e a n i n c o n s i s t e n t a u t h e n t i c a t o r o n r e q u e s t s . faulty\ clients\ use\ an\ inconsistent\ authenticator\ on\ requests. faulty clients use an inconsistent authenticator on requests. 会导致系统重复视图切换而卡死。

二、SBFT Scalable-2019

Guy Golan Gueta, Ittai Abraham, Shelly Grossman, Dahlia Malkhi, Benny Pinkas, Michael Reiter, Dragos-Adrian Seredinschi, Orr Tamir, and Alin Tomescu. 2019. SBFT: a scalable and decentralized trust infrastructure. In 2019 49th Annual IEEE/IFIP international conference on dependable systems and networks (DSN). IEEE, 568–580.

A s c a l a b l e a n d d e c e n t r a l i z e d t r u s t i n f r a s t r u c t u r e A\ scalable\ and\ decentralized\ trust\ infrastructure A scalable and decentralized trust infrastructure.

3f + 2c + 1个 Servers。【f为拜占庭故障,c为崩溃或流浪】

拥有Fast、Slow两种模式,前者需要无故障节点、同步环境;后者就是线性PBFT。

利用门限签名(阈值签名, t h r e s h o l d threshold threshold)解决了二次拜占庭广播问题。(其中阈值表示签名者数量)

1.快速通道 F a s t p a t h Fast\ path Fast path

image-20241115202109841

1.Pre-Prepare 阶段

Primary 向所有 Servers 发送指令。

Servers 将回复发给 CommitCollector

2.Full-commit-Proof 阶段

C-Collector 将收集到的 s i g n e d r e p l i e s signed\ replies signed replies 转换成一个门限签名 msg,并发给所有 Servers

3.Full-execute-Proof 阶段

Servers 将回复发给 ExecutionCollector

E-Collector 将收集到的 s i g n e d r e p l i e s signed\ replies signed replies 转换成一个门限签名 msg,并发给所有 Servers,包括 Client。【对比PBFT的F+1条确认】

2.线性PBFT l i n e a r − P B F T linear-PBFT linearPBFT

将所有 Collector 聚合到 Primary。【权柄收回】

i f S B F T u s e s o n l y t h e p r i m a r y a s a l l “ l o c a l ”  l e a d e r s i n e a c h p h a s e if\ SBFT\ uses\ only\ the\ primary\ as\ all\ “local”\ leaders\ in\ each\ phase if SBFT uses only the primary as all local leaders in each phase​.

那么工作流就类似PBFT。

但是拥有门限签名

给定视图

Primary 根据视图号选择。

Collectors 根据视图号和 Seq(commit state index)选择。

SBFT 建议随机选择二者。

线性PBFT模式下,Primary总是选最后一个Collector

当视图切换时,Servers 的角色更改。

3.视图切换 V i e w C h a n g e ViewChange ViewChange

View Change Trigger 阶段

两种情况会导致视图切换:

  • Timeout.
  • 收到 F+1 个节点的质疑(主有问题)。

View Change 阶段

l s ls ls:最后稳定 Seq( l a s t s t a b l e s e q u e n c e last\ stable\ sequence last stable sequence​)。【因部分同步可能不一致】

w i n win win:用于限制未完成块数量,预定义值。【因此 Seq 在 l s ∼ l s + w i n ls\sim ls+win lsls+win

Seq 可以指明 Server 的状态。

触发 ViewChange 的 Server 会发送VIEWCHANGE消息给新主。【包含 l s ls ls和到 l s + w i n ls+win ls+win之间的状态摘要】

New View 阶段

收集满 2F+2C+1 后,启动新视图,并将其广播。

Accept a New-view 阶段

节点们接受 l s ∼ l s + w i n ls\sim ls+win lsls+win间的Seq,或一个安全的、可用于未来交易的Seq。

4.优缺点

两种模式下均可实现线性消息传输,并且 Reply 阶段的通信为O(1)。

继承PBFT缺点,Client 完全可以只与F+1部分节点通信,触发不必要的视图切换。

关于实验

实验设置

  • 部署规模:在真实世界规模的广域网(WAN)上部署了200个副本。每个区域使用至少一台机器,每台机器配置32个VCPUs,Intel Broadwell E5-2686v4处理器,时钟速度2.3 GHz,通过10 Gigabit网络连接。
  • 故障容忍:所有实验都配置为能够承受f=64个拜占庭故障。
  • 客户端请求:使用公钥签名客户端请求和服务器消息。

实验方法

  • 微基准测试:简单的Key-Value存储服务,每个客户端顺序发送1000个请求。
  • 智能合约基准测试:使用以太坊的50万笔真实交易数据,副本通过运行EVM字节码执行每个合约,并将状态持久化到磁盘。
- 无批处理模式:每个请求是一个单次put操作,写入随机值到随机键。
- 批处理模式:每个请求包含64个操作,模拟智能合约工作负载。
'客户端请求':客户端通过将交易分批成12KB的块(平均每批约50笔交易)发送操作。

三、HotStuff-2019⭐️

Maofan Yin, Dahlia Malkhi, Michael K Reiter, Guy Golan Gueta, and Ittai Abraham. 2019. HotStuff: BFT consensus with linearity and responsiveness. In Proceedings of the 2019 ACM Symposium on Principles of Distributed Computing. 347–356

3F+1个Servers。

达成活跃性、安全性无需同步假设。乐观响应:前2F+1个消息即可进行共识决策。

采用轮换 Primary 保证链质量

采用门限签名达到共识线性。(最坏情况,连续Primaries故障,复杂度为f*n

1.请求

Client向所有Servers发送Req

同PBFT,等待F+1个Reply,操作完成。

客户端请求失败处理部分,引用了文献:

Alysson Bessani, Joao Sousa, and Eduardo EP Alchieri. 2014. State machine replication for the masses with BFT-SMART. In 2014 44th Annual IEEE/IFIP International Conference on Dependable Systems and Networks. IEEE, 355–362.
Miguel Castro, Barbara Liskov, et al. 1999. Practical Byzantine fault tolerance. In OSDI, Vol. 99. 173–186.

2.共识

image-20241115202200497

1.Prepare阶段

Primary在收到Req后,向节点(Replica)广播PREPARE消息。

节点验证消息:

  1. 为上次提交的msg的扩展(无间隔)
  2. 最高View(最新视图)

验证后,用部分签名对PREPARE-VOTE消息签名,并发给Primary

Primary在等待2F+1后,生成仲裁证书(Quorum Certificate,QC),记为 PrepareQC。【可以理解为完成

2.Pre-Commit 阶段

广播带有 PrepareQC 的msg,节点将其存储。

将COMMIT-VOTE消息签名后发给Primary

Primary在集齐2F+1后,形成 Pre-CommitQC

3.Commit 阶段

广播带有 Pre-CommitQC 的msg。

节点回复COMMIT给Primary,并且更新变量 lockedQC。【保存QC计数/Req

k e e p s c o u n t i n g t h e n u m b e r o f r e c e i v e d Q C s f o r a r e q u e s t keeps\ counting\ the\ number\ of\ received\ QCs\ for\ a\ request keeps counting the number of received QCs for a request.

4.Decide 阶段

Primary在收到2F+1后,广播DECIDE给Replicas。

节点认为共识达成,开始执行请求。

然后ViewNum++。【视图切换开始】

然后发送New-View新主

三个变量

  • p r e p a r e Q C prepareQC prepareQC:当前节点已知的最高锁定 PREPARE msg(最新)。

  • l o c k e d Q C lockedQC lockedQC:已知最高锁定 COMMIT msg(最新)。

  • v i e w N u m viewNum viewNum:节点当前所处视图。

新主收到2F+1个New-View后,在 p r e p a r e Q C prepareQC prepareQC基础上扩展。(理解为+1)

若未能及时收满2F+1,则触发超时,视图切换。

3.视图切换 V i e w C h a n g e ViewChange ViewChange

为了确保链质量,HotStuff可以更频繁的切换试图。

通过广播协调消息和收集门限签名进行共识。因此视图切换被包含于HotStuff的核心流程。

新主选择方式为 p = v m o d n p = v\mod n p=vmodn

4.优缺点

使用门限签名,实现线性消息传递。

每个阶段的收集投票,构建门限签名,可以被流水线化 p i p e l i n e d pipelined pipelined。从而简化HotStuff协议的构建,例如Casper:(同时降低O(n))

Vitalik Buterin and Virgil Griffith. 2017. Casper the friendly finality gadget. arXiv preprint arXiv:1710.09437 (2017).

还可以用延迟塔 d e l a y t o w e r s delay\ towers delay towers扩展到公有链:

Shashank Motepalli and Hans-Arno Jacobsen. 2022. Decentralizing Permissioned Blockchain with Delay Towers. (2022).
arXiv:2203.09714

failures情况下,HotStuff吞吐量显著下降(不能达成共识)。

关于实验

  • 使用Amazon EC2 c5.4xlarge实例,每个实例有16个vCPU,由Intel Xeon Platinum 8000处理器支持。
  • 所有核心的Turbo CPU时钟速度高达3.4GHz。
  • 每个副本运行在单个VM实例上。

网络配置:

  • 测得的TCP最大带宽约为1.2 Gbps。(使用iperf工具)
  • 网络延迟小于1毫秒。

实验设置:

  • 实验中使用了4个副本,配置为容忍单个故障(即f = 1)。
  • 使用了空操作请求和响应,没有触发视图更改。
  • 实验中使用了不同的批次大小(100、400和800)和不同的有效负载大小(0/0、128/128和1024/1024字节)。

软件和工具:

  • HotStuff的实现使用了大约4K行C++代码,核心共识逻辑大约200行
  • 使用secp256k1进行数字签名。
  • 使用NetEm工具引入网络延迟。

使用BFT-SMaRt的ThroughputLatencyServer和ThroughputLatencyClient程序测量吞吐量和延迟。


四、ISS: Insanely Scalable State Machine Replication-2022

Chrysoula Stathakopoulou, Matej Pavlovic, and Marko Vukolić. 2022. State machine replication scalability made simple. In Proceedings of the Seventeenth European Conference on Computer Systems. 17–33.
会议17th European Conference on Computer Systems (EuroSys)欧洲计算机系统会议,顶级学术会议
地点Rennes, FRANCE
日期APR 05-08, 2022
赞助方Assoc Comp Machinery; ACM SIGOPS; USENIX; Huawei; Stormshield; Microsoft; Protocol Labs Res; Red Hat; Amazon; Meta; Google; Intel; Cisco

3F+1节点。

是一个通用框架,

通过划分工作负载,并且关联 SB(Sequenced Broadcast) 实例与Leader,

将传统的单Leader的 TOB(Total Order Broadcast) 协议扩展为多Leader的协议。

达成PBFT的37倍,Raft的55倍,Chained HotStuff的56倍。

1.初始配置

image-20241115110356687

日志log:该节点接收的所有消息,由Req组成,被批处理以降低消息复杂性。

SN(Sequence Number)序列号:相对于日志开头的偏移量。

将日志分成epoch,按SN以轮询方式分配给Leader,再将epoch分成segment,这样与Leader相对应。

所有Req基于modulo哈希函数分类到桶bucket中,再将桶分配给Leader。

段、Leader、桶,一一对应。

2.复制协议 R e p l i c a t i o n P r o t o c o l Replication\ Protocol Replication Protocol

image-20241115110456327

初始配置阶段

1> 选中N123三个节点为Leader。

2> 分别分配segment 1、2、3。

分别对应SN1 4,2 5,3。

3> 分桶给Leader,包含用于提出提议的Req批次 r e q u e s t b a t c h e s request\ batches request batches

分别为B1、2、3。

等待Req 阶段

通过多SB实例(共识实例)达成共识。

SB实例与一个Leader及其Segment相关联

等待客户端发送请求,记为 S M R − C A S T ∣ < r x > SMR-CAST|<r_x> SMRCAST<rx>,散列到本地桶队列中。直到:

  • 桶满(预定义大小)如 ∣ B i ∣ = 3 |B_i|=3 Bi=3.
  • 预定时间(距上次提案)。

将桶里的Req请求打包为一批次 β i \beta_i βi。然后广播 S B − C A S T < 1 , β A > SB-CAST<1,\beta_A> SBCAST<1,βA>消息。

共识阶段

每个Leader运行底层包装的TOB协议,就其提议的SB实例达成共识。【可并行non-blocking

  • 共识成功,将SB中承载的一批Req交付。
  • 共识失败log中记录⊥。

TOB可以保证,成功时所有正确节点中的序列号与批次一致。

当一个epoch的所有SN号对应的log都被填满时,节点向Client发送 S M R − D E L I V E R E D SMR-DELIVERED SMRDELIVERED,收满 a q u o r u m a\ quorum a quorum即完成。

3.多领导选择 M u l t i p l e L e a d e r S e l e c t i o n Multiple\ Leader\ Selection Multiple Leader Selection

L e a d e r S e l e c t i o n P o l i c y , L E Leader\ Selection\ Policy,LE Leader Selection Policy,LE​选主策略可以自定义,只要能保证活性:each bucket will be assigned to a segment with a correct leader infinitely many times in an infinite execution将桶分配给正确Leader的段。

例如:保证足够多的正确Leader.

Zarko Milosevic, Martin Biely, and André Schiper. 2013. Bounded delay in byzantine-tolerant state machine replication. In 2013 IEEE 32nd International Symposium on Reliable Distributed Systems. IEEE, 61–70

Leader 故障检测

每个SB实例用== F a i l u r e D e t e c t o r Failure\ Detector Failure Detector==,用来检测quiet nodes

ISS会从集合移除故障Leader,用LE再选个主。

4.优缺点

Pros

  • 吞吐量,因为并行。
  • 对客户端高响应,可立即执行Req
  • 资源不浪费,Req仅入一个桶。

Cons

  • 共识延迟,引入额外开销。
  • 故障时,SB实例高概率共识失败。(任何Leader故障,新主,并重新提出未提交的Req
  • Req需要发到所有节点,以确保Req放入正确桶。

五、DAG-Rider-2021

Idit Keidar, Eleftherios Kokoris-Kogias, Oded Naor, and Alexander Spiegelman. 2021. All you need is dag. In Proceedings of the 2021 ACM Symposium on Principles of Distributed Computing. 165–175.

D i r e c t e d a c y c l i c g r a p h ( D A G ) Directed\ acyclic\ graph\ (DAG) Directed acyclic graph (DAG).有向无环图。

image-20241115110257809

图中为完整的消息传播历史,包含:遍历的路径、因果关系 c a u s a l h i s t o r y causal\ history causal history.

传统的Leader服务器承担:

  • tx分发。 t r a n s a c t i o n d i s t r i b u t i o n transaction\ distribution transaction distribution
  • 达成共识。 c o n s e n s u s p h a s e consensus\ phase consensus phase

两项责任,巨大工作量导致tx积压、系统瓶颈

而DAG-based算法将二者分离,在tx分发阶段无需Leader(吞吐量显著增加),在共识阶段每个实例都有一个Leader。

1.系统模型&服务属性 S y s t e m m o d e l a n d s e r v i c e p r o p e r t i e s . System\ model\ and\ service\ properties. System model and service properties.

DAG-Rider是一种异步拜占庭原子广播协议 a s y n c h r o n o u s B y z a n t i n e A t o m i c B r o a d c a s t , B A B asynchronous\ Byzantine\ Atomic\ Broadcast, BAB asynchronous Byzantine Atomic Broadcast,BAB)。

以最佳时间和消息复杂度实现了后量子安全

分为两层:

  1. 基于轮的结构化DAG,分发tx用。
  2. 零开销的共识协议,独立确定提交消息顺序。

使用Bracha广播。

共3F+1个节点。

假设了一个全局完美硬币 g l o b a l p e r f e c t c o i n global\ perfect\ coin global perfect coin)来确保活性。允许在wave的实例上独立选择一个Leader.

2.DAG流水线 P i p e l i n i n g Pipelining Pipelining

节点独立维护自己的DAG,用一个数组[]存储。(所有节点间消息传播拓扑)

以轮 r o u n d round round为单位。

强边:分发相同的msg,直链(directly linked in the previous round)。

弱边:没有直链。

协议流程

验证器一直等待客户端发送交易(请求、顶点),存储于缓冲区buffer,并监视:

定期检查,若其所有前导顶点都已成功接收,则加入DAG[],并根据round组织起来。

当满2F+1个顶点时,进入下一轮r+1。(下一波?虽然首轮也是下轮

生成新的顶点v:r+1,弱边,并广播。

因为网络部分同步,可能有不同的DAG出现,但BAB会保证最终收敛

4.共识 C o n s e n s u s i n D A G s Consensus\ in\ DAGs Consensus in DAGs 「我也不知3跑哪了」

利用全局完美硬币,节点可以独立检查DAG,推断需交付的区块及其提交顺序。(无需额外协调)

在DAG于节点中发送顶点完毕后,系统启动共识旨在确保分发的tx完成提交aimed at deterministically finalizing the commit of the disseminated transactions.

在这个过程中,DAG被分为波waves,每波有4个轮次rounds

利用完美硬币在第一轮中随机选择Leader(满2F+1强边)。

按照预先确定的顺序交付顶点块。交付区块时,会将其因果关系历史上的值也一并提交。

5.优缺点

Pros.

  • 吞吐量显著提升。
  • DAG达成消息分发和促进共识两种目的 d u a l p u r p o s e dual\ purpose dual purpose​。
  • 更稳定的提交。

Cons.

  • 因为分离,延迟激增 𝑂 ( 𝑛 3 l o g ( 𝑛 ) + 𝑛 𝑀 ) 𝑂(𝑛 3 log(𝑛) + 𝑛𝑀) O(n3log(n)+nM)​ 。

六、Narwhal and Tusk-2022

George Danezis, Lefteris Kokoris-Kogias, Alberto Sonnino, and Alexander Spiegelman. 2022. Narwhal and tusk: a dag-based mempool and efficient bft consensus. In Proceedings of the Seventeenth European Conference on Computer Systems. 34–50.

tx传播tx排序分离,实现高效共识。

Mempool负责可靠传播,少量元数据用来排序。

1.系统模型&服务属性

共3F+1节点。

Mempool是一个KV键值存储 ( d , b ) (d,b) (d,b)

K:digest.

V:交易块block

服务属性

  • 完整性:(d,b)。
  • 可用性:写入(d,b)后。
  • 包含性 C o n t a i n m e n t Containment Containment:后块包含前块。
  • 2 / 3 2/3 2/3因果性:后块包含至少 2 / 3 2/3 2/3前块。
  • 1 / 2 1/2 1/2链质量:至少有一半causal history是诚实者所写入。

2.复制协议

替换Bracha广播。

用固有DAG+证书实现。

blocks包含

  • hash sig。
  • tx list。
  • 证书certificates of availability

证书包含:hash、2F+1 sig、round

原理

  1. 收集tx —— tx list 和 证书list。
  2. r-1 主收集2F+1证书 —— r,新块广播。
  3. 验证sig、含2F+1、唯一块,签名(确认)。
  4. 满2F+1, 造一个证书并广播,此时停止广播新块。

3.Tusk共识

  • 选主同DAG-Riders
  • 一波三轮。
  • 一三🉑重叠,4.5rounds。

4.优缺点

Pros.

  • 一个基于DAG的BFT算法的具体实现。
  • 吞吐量优势。

Cons.

  • 高延迟(提交区块前等待多轮)。
  • 未满足标准的tx需要等更多wave

E n d . End. End.


  1. Miguel Castro and Barbara Liskov. 2002. Practical Byzantine fault tolerance and proactive recovery. ACM Transactions on Computer Systems (TOCS) 20, 4 (2002), 398–461. ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端用用jsonp的方式解决跨域问题

前端用用jsonp的方式解决跨域问题 前端用用jsonp的方式解决跨域问题 前端用用jsonp的方式解决跨域问题限制与缺点&#xff1a;前端后端测试使用示例 限制与缺点&#xff1a; 不安全、只能使用get方式、后台需要相应jsonp方式的传参 前端 function jsonp(obj) {// 动态生成唯…

MySQL详解最新的官方备份方式Clone Plugin

一、Clone Plugin的动态安装 install plugin clone soname mysql_clone.so;select plugin_name,plugin_status from information_schema.plugins where plugin_name clone; 二、Clone Plugin配置持久化 在 MySQL 配置文件my.cnf中添加以下内容&#xff0c;确保插件在 MySQL …

解决python manage.py shell ModuleNotFoundError: No module named xxx

报错如下&#xff1a; python manage.py shellTraceback (most recent call last):File "/Users/z/Documents/project/c/manage.py", line 10, in <module>execute_from_command_line(sys.argv)File "/Users/z/.virtualenvs/c/lib/python3.12/site-packa…

鸿蒙NEXT开发资源工具类(ArkTs)

import { AppUtil } from ./AppUtil; import { StrUtil } from ./StrUtil; import { resourceManager } from kit.LocalizationKit;/*** 资源工具类。* 提供访问应用资源的能力&#xff0c;包括布尔值、数字、字符串等资源的获取。** author 鸿蒙布道师* since 2025/04/08*/ ex…

css使用mix-blend-mode的值difference实现内容和父节点反色

1. 使用场景 往往开发过程中&#xff0c;经常遇到产品说你这个背景图和文字颜色太接近了&#xff0c;能不能适配下背景图&#xff0c;让用户能够看清具体内容是啥。 这么说吧&#xff0c;这种需求场景非常合理&#xff0c;因为你做开发就是要给用户一个交代&#xff0c;给他们…

el-input 中 select 方法使用报错:属性“select”在类型“HTMLElement”上不存在

要解决该错误&#xff0c;需明确指定元素类型为 HTMLInputElement&#xff0c;因为 select() 方法属于输入元素。 步骤解释&#xff1a; 类型断言&#xff1a;使用 as HTMLInputElement 将元素类型断言为输入元素。 可选链操作符&#xff1a;保持 ?. 避免元素为 null 时出错…

Mybatis Plus与SpringBoot的集成

Mybatis Plus与SpringBoot的集成 1.引入Maven 依赖2.配置application.yml文件3.创建实体类4.分页插件5.逻辑删除功能6.忽略特定字段7.自动填充 1.引入Maven 依赖 提前创建好一个SpringBoot项目&#xff0c;然后在项目中引入MyBatis Plus依赖 <dependency><groupId&g…

大数据学习(104)-clickhouse与hdfs

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

【简历全景认知2】电子化时代对简历形式的降维打击:从A4纸到ATS的生存游戏

一、当简历遇上数字洪流:传统形式的式微 在1990年代,一份排版精美的纸质简历还能让HR眼前一亮;但今天,超过75%的 Fortune 500 企业使用ATS(Applicant Tracking System)进行初筛,未优化的简历可能在5秒内就会沦为数字废土。这种变迁本质上符合「技术接纳生命周期」理论—…

esp32cam -> 服务器 | 手机 -> 服务器 直接服务器传输图片

服务器先下载python &#xff1a; 一、Python环境搭建&#xff08;CentOS/Ubuntu通用&#xff09; 一条一条执行 安装基础依赖 # CentOS sudo yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel # Ubuntu sudo apt update && sudo apt install b…

SeaTunnel系列之:Apache SeaTunnel编译和安装

Apache SeaTunnel编译 Prepare编译克隆源代码本地安装子项目从源代码构建 SeaTunnel构建子模块安装 JetBrains IDEA Scala 插件安装 JetBrains IDEA Lombok 插件代码风格运行简单示例不仅如此 安装下载 SeaTunnel 发布包下载连接器插件从源代码构建 SeaTunnel 运行 SeaTunnel 在…

JavaScript/React中,...(三个连续的点)被称为 扩展运算符(Spread Operator) 或 剩余运算符(Rest Operator)

const processOrder (order) > {const tax order.total * 0.1;const finalAmount order.total tax;return { ...order, tax, finalAmount }; }; 解释一下&#xff0c;特别&#xff1a;...?在JavaScript/React中&#xff0c;...&#xff08;三个连续的点&#xff09;被称…

FRP的proxies只是建立通道,相当于建立与服务器沟通的不同通道而不是直接将路由器与服务器云端沟通

没有更好的办法了吗&#xff0c;我看frpc.toml的里面可以设置两个proxies那我esp32的监听端口设置在frpc.toml里面它不也能跟云服务器建立联系吗&#xff0c;比如远程与本地端口都配置为5112那云服务器接收到的5112访问会以frp配置的本地端口5112转发到frp客户端的路由器&#…

#在docker中启动mysql之类的容器时,没有挂载的数据...在后期怎么把数据导出外部

如果要导出 Docker 容器内的 整个目录&#xff08;包含所有文件及子目录&#xff09;&#xff0c;可以使用以下几种方法&#xff1a; 方法 1&#xff1a;使用 docker cp 直接复制目录到宿主机 适用场景&#xff1a;容器正在运行或已停止&#xff08;但未删除&#xff09;。 命…

Java的JDK、JRE、JVM关系与作用

Java的JDK、JRE、JVM关系与作用 java中的JDK、JRE和JVM是三个核心组件&#xff0c;各自承担不同角色&#xff0c;且存在层级依赖关系 1. JVM&#xff08;Java Virtual Machine&#xff0c;Java虚拟机&#xff09; 是什么&#xff1a; JVM是虚拟的计算机&#xff0c;能够执行…

C++学习之套接字并发服务器

目录 1.昨天套接字服务器的弊端 2.如何通过多进程方式实现服务器并发 3.多进程服务器-1 4.多进程服务器-2 5.多进程版程序-回收子进程被信号中断的处理 6.多线程版TCP服务处理思路 7.多线程并发服务器编写 8.为什么不能把文件描述符地址传到子线程中 9.多线程程序测试 …

机器学习新范式:Kubernetes + Kubeflow,解锁模型训练与部署的高效密码

一、Kubernetes在机器学习模型训练与部署中的作用 Kubernetes作为一个强大的容器编排平台&#xff0c;为机器学习模型的训练与部署提供了以下核心支持&#xff1a; 分布式训练支持&#xff1a;Kubernetes能够自动化部署和管理PyTorch等机器学习框架的分布式训练任务。通过利用…

动态科技感html导航网站源码

源码介绍 动态科技感html导航网站源码&#xff0c;这个设计完美呈现了科幻电影中的未来科技界面效果&#xff0c;适合展示技术类项目或作为个人作品集的入口页面&#xff0c;自适应手机。 修改卡片中的链接指向你实际的HTML文件可以根据需要调整卡片内容、图标和颜色要添加更…

数字内容智能推荐优化策略

个性化推荐算法构建路径 构建高效数字内容体验的推荐系统&#xff0c;需以多源数据融合为基础框架。首先通过用户画像建模整合人口属性、行为轨迹及兴趣标签&#xff0c;结合协同过滤与深度学习算法建立内容关联矩阵。在此基础上&#xff0c;引入上下文感知机制&#xff0c;动…

# 深度学习中的优化算法详解

深度学习中的优化算法详解 优化算法是深度学习的核心组成部分&#xff0c;用于最小化损失函数以更新神经网络的参数。本文将详细介绍深度学习中常用的优化算法&#xff0c;包括其概念、数学公式、代码示例、实际案例以及图解&#xff0c;帮助读者全面理解优化算法的原理与应用…