简单来说:本文基于现有BFT类共识算法,提出了改进BFT协议Gosig,基于gossip协议设计并改进了共识协议流程,利用传输流水线进行带宽优化,利用聚合签名gossip减少消息数量。增强了BFT类协议的安全性,提升了性能。
1、简介
目前BFT类协议普遍面临三个挑战:
1、目标单点故障在只有少数数据中心的云中很常见。
2、带宽有限、时延长。
3、受最慢节点的限制。
2、概述
提了一些其他的改进项目的优缺点,然后引入本文设计的理由与优势,可见原文。
注意:OmniLedger 和RapidChain 为每个分片选择一个小型委员会来提高可伸缩性,由于重新配置的开销,它只能缓慢地(几天)更改,因此仍然容易受到自适应攻击。
联想下开题怎么解决重新配置分片的开销。
系统模型和一些假设说明在文中已给出,改进BFT类共识应该具有BFT协议中常用的标准系统模型和安全性假设。
3、Gosig协议设计
第一阶段:区块提议
通过随机性算法进行领导节点的随机选取,然后通过密码学保密性算法告知需要提议的节点。然后打包区块进行gossip传播全网。
第二阶段:签名收集
节点验证第一阶段的区块,如无误则进行数字签名,签名集合中签名数量超过阀值则进行区块提交。具体分为准备与提交两个子步骤。最后区块上链。
4、性能优化
1)、传输流水线
Gosig将每个块分为以下三个部分:1)标头,包括协议中使用的所有元数据,例如凭据和提议证书; 2)包含交易哈希的有序列表的主体; 3)交易中的原始交易块。这种设计背后的直觉是BFT协议在不同阶段需要不同种类的信息。采用这种块结构使Gosig可以尽可能多地流水线协议的不同阶段,从而独立地优化对延迟敏感的元数据和带宽受限的数据传输。它还使Gosig通过异步处理原始事务和投票消息来充分利用计算和数据传输之间的独立性。
Gosig进一步将主体分为几部分,从而使节点可以在接收整个块主体之前开始发送数据,就像BitTorrent传输文件的方式一样。与BitTorrent不同,生成块的提议者在将每个段细分给不同的对等方之前对其进行签名。请注意,提议者在每个网段的签名至关重要,因为否则,对手可能会生成大量垃圾网段,从而使整个网络变得拥塞。
在不同阶段中的流水线传输:
在Gosig的八卦网络中先传播一个块的标头,然后再传播主体及其原始交易。这使得两个阶段(用于块传播的阶段I和用于签名传播的阶段II)可以相互重叠。回想一下,第一阶段的结束时间实际上是一个超时,我们可以假设所有节点都收到了具有最低提议者分数的块,因此他们可以决定将哪个块分配给P。实际上,一个节点只需要块头即可算法2中的决策(第4行)。因此,一旦所有节点都收到了报头,首先传播报头并进入阶段II是安全的。由于报头通常很小(10,000个参加者大约为41 KB,如果我们应用第5.2节中讨论的压缩,则为21 KB),因此此优化极大地缩短了阶段I的时间。另外,当节点较早看到标头时,它们可以及早确定分数最低的提议者,而不会浪费带宽来进一步传播其他提议者的“丢失”块。
然后,Gosig的gossip网络仅传播带有交易哈希的块体。对于body,我们采用比特币核心]的紧凑块的想法。除非有冲突,否则我们仅包括6个字节的短哈希而不是完整的32个字节的SHA256哈希。因此,主体也远小于所有原始交易的总和。
概括一下:就是将区块结构进行分片,在不同的阶段gossip不同的数据,同时对数据大小进行优化,优化通信时间。还可重叠两阶段,实现异步。
在不同轮次中的流水线传输:
在普通协议中,仅当前一轮r-1的第二阶段结束时,才开始回合r,而潜在的提议者要等到该回合开始提议一个区块为止。我们意识到,只要节点在回合r − 1中提交了一个块(即,看到具有足够签名的消息),节点就可以通过提议一个新的块安全地开始回合r,仍在回合r-1中的节点将临时缓冲这些接收到的块,并在它们进入回合r-1中或在回合r的开始时间到来时对其进行处理。即使节点在回合r-1结束之前进入回合r,该节点也将继续执行回合r-1的阶段II的任务,例如转发/签名P消息,直到回合结束。这样,我们可以为回合r − 1保留较高的签名传播速率。
2)、任意顺序聚合签名gossip
Gosig使用聚集的签名八卦来优化香草BFT协议第二阶段中的签名传输,从而减少了每个节点的数据传输,从而避免了单个节点的过载。请注意,每个节点都需要从所有其他节点的2/3收集票或签名。如果天真地执行Stage II,签名消息的数量将随着节点数量的增加而线性增长。为了解决这一可扩展性挑战,Gosig使用技术在gossip期间将多个接收到的签名聚集到一个紧凑的多重签名中。具体来说,Gosig通过将节点在P消息中看到的所有签名包括在内,来收集签名以及gossip过程。这样,节点在接收到P消息后,便可以了解多个新签名,可以将其与之前看到的签名进行合并。这使Gosig能够转发一个紧凑的多重签名,而不是许多单独的签名,以节省网络资源。同样,在消息中而不是在节点上累积签名对于节点故障更具弹性。由于每个节点可以发送和接收的数据更少,因此我们可以缓解挑战3中表达的单节点容量问题。
如果签名到达的速度太快而无法及时处理,则节点会将这些消息放入后进先出(LIFO)堆栈中。 Gosig选择LIFO堆栈而不是FIFO队列,因为以后到达的消息可能包含更多签名。
3)、特殊情况处理
1、参与者加入/离开。我们支持授权节点加入或离开的任何非交互式证明,无论是来自可信机构的签名还是来自组的多重签名。为了加入/离开组,节点提交包含证明的特殊交易。现有节点将在提交事务时更新其自己的参与者列表。
2、处理临时故障。如果节点从崩溃或数据丢失中恢复,则应检索丢失的块和证明。恢复整个历史记录后,它才能继续参与。由于只能在提交前一个块后才能对块进行任何表决,因此所有诚实节点在计算表决数时将看到相同的成员身份。如果节点检测到与对等方的明显通信问题(连接失败,超时等),则它将在对等期间To(通常是循环时间的一半)内将对等方“黑名单”(即停止向其发送消息)。在同一个对等方发生后续故障时,它将累加To,直到收到来自该对等方的消息或成功重试为止。这种退避机制有效地限制了连接失败节点的浪费尝试。
5、实验评估
主要对吞吐量、时延、带宽等指标进行实验测试。针对多组不同数量的节点进行测试,节点数从几百到1万不等。
6、总结
虽然BFT协议是构建联盟区块链的有前途的工具,但当将其应用于公共Internet上的云服务时,它们面临着巨大的挑战。我们为联盟区块链提出了一种新的BFT协议Gosig。在Gosig中,每个新区块的提议者都是随机秘密选择的,以防止自适应攻击。我们共同优化了BFT协议层和八卦层,流水线化了所有通信以尽可能地最大化网络利用率。使用聚合的签名八卦,我们可以将部分投票结果打包成一条短消息,从而允许每个节点传输更少的数据。这些优化可帮助Gosig支持具有数千个甚至更多节点的单个共识组,并在广域网中实现更高的性能,同时保持与传统BFT相同的安全级别(例如,容忍异步网络和自适应攻击)。在未来的工作中,我们希望设计一种激励机制来鼓励玩家遵循协议,例如,尽其所能转发消息。此外,Gosig既是一个完整的系统,又是高级区块链的基础。例如,我们希望使用Gosig作为每个分片的共识协议来提供分片/脱链设计。