Byzantine fault tolerant (BFT) protocol descriptions often assume application-layer networking primitives, such as best-effort and reliable broadcast, which are impossible to implement in practice in a Byzantine environment as they require either unbounded buffering of messages or giving up liveness, under certain circumstances. However, many of these protocols do not (or can be modified to not) need such strong networking primitives. In this paper, we define a new, slightly weaker networking primitive that we call abortable broadcast. We describe an implementation of this new primitive and show that it (1) still provides strong delivery guarantees, even in the case of network congestion, link or peer failure, and backpressure, (2) preserves bandwidth, and (3) enforces all data structures to be bounded even in the presence of malicious peers. The latter prevents out-of-memory DoS attacks by malicious peers, an issue often overlooked in the literature. The new primitive and its implementation are not just theoretical. We use them to implement the BFT protocols in the IC (Internet Computer), a publicly available blockchain network that enables replicated execution of general-purpose computation, serving hundreds of thousands of applications and their users.
翻译:拜占庭容错(BFT)协议描述通常假设应用层网络原语,例如尽力而为广播和可靠广播。然而,在拜占庭环境中,这些原语实际上无法实现,因为它们在某些情况下需要无限的消息缓冲或牺牲活性。不过,许多此类协议并不需要(或可修改为不需要)如此强大的网络原语。本文定义了一种新的、略弱的网络原语,我们称之为可中止广播。我们描述了这一新原语的实现,并证明它:(1)即使在网络拥塞、链路或对等节点故障以及背压的情况下,仍能提供强交付保证;(2)保持带宽效率;(3)即使在存在恶意对等节点的情况下,也能强制所有数据结构保持有界。最后一点防止了恶意对等节点发起的内存耗尽拒绝服务攻击,这是文献中常被忽视的问题。新原语及其实现不仅具有理论意义。我们将其用于实现IC(互联网计算机)中的BFT协议。IC是一个公开可用的区块链网络,支持通用计算的复制执行,为数以万计的应用程序及其用户提供服务。