pala中文翻译

1 绪言

我们描述了PaLa,一种概念上简单的,部分同步的区块链协议,可以容忍少于1/3的作恶。 在PaLa,提议者提出了一个块,扩展了迄今为止看到的最新鲜的公证链。 如果满足某些条件,共识节点(即委员会成员)就该提案进行投票。 当一个区块获得至少2n/3票时,它就会变成公证。 有效区块链中有两种类型的块,正常块和超时块,并且每种类型都有一组不同的有效性约束。 在任何时间点,公证链中的每个块直到最后一个正常块(不包括)都被认为是最终确定的。

PaLa的设计精简。 消息提议和投票只有两种类型。 在良好的条件下,每个区块只需要进行一轮投票即可确认 - 但是为了最终确定,必须等待下一个正常区块获得公证。

总的来说,关于提议者选举存在两种学说:democracy-favoring(偏向民主)的方法(例如,Dfinity [11],Algorand [8])为每个确认的区块切换提议者; 和tability-favoring(偏向稳定)方法(例如,PBFT [7]和Thunderella [14])。 我们的范例允许使用任一策略。

我们还描述了一种简单的方法,用于在不等待任何同步事件的情况下更改委员会,同时保持协议的简化执行。

1.1 Pipelined-BFT范式的背景

经典型BFT协议使用两轮或多轮投票来确认每个块,例如在PBFT中,它们分别被称为“prepare”轮和“commit”轮。最近,加密货币社区出现了一个优雅的流水线理念,即,如果每个块需要两轮投票,为什么不在第二轮投票中捎带?这个想法在Buterin和Griffith [15]的优雅Casper-FFG作品中被隐含地描述,其形式为终极小工具“用于工作证明区块链。论坛和在线博客帖子[2,3]表明DPoS (即,EOS采用的共识协议,按市值排名前5的加密货币[1])可能正在考虑采用类似的方法,尽管在撰写本文时尚未发布对DPoS协议和证据的正式描述。 Casper-FFG [15]和DPoS [2,3]的这种想法的实例都只实现了同步性能,即,即使网络能够更快地传送数据包,这些协议也只能以较慢的间隔确认块。 DPoS仅以固定间隔提出块[2,3],而在Casper [15]中,块提议是进程是潜在的PoW区块链,因此块提议仅偶尔以随机间隔发生。

Abraham等人最近的优雅作品HotStuff。 [4]扩展了这种“流水线”方法,以提供可证明安全的BFT协议,容忍部分同步网络中的2/3损坏。在高层次上,PaLa依赖于与HotStuff非常相似的直觉(但我们给出了一些 - 在实现中可能有价值的更简单的想法表示)。在HotStuff中,活跃依赖于拥有一个旋转的提议者(即“支持民主的方法”),而在PaLa中,我们还展示了如何使用适合性能要求的场景的稳定性偏好的提议者轮换策略来实例化PaLa(参见章节 9关于具体的,现实世界的应用场景的更多讨论)。此外,我们提出了一种双流水线变体,它是对性能要求严格的场景所必需的流水线-BFT范例的进一步概括。此外,如上所述,我们提出了一种简单的方法来启用委员会切换(我们考虑的应用程序也需要这种方法)。

1.2 协议概述

我们在此提供PaLa共识协议的描述,重点是“随机”提议者选举政策和固定委员会。设$\Delta$是同步期间网络延迟的约束。由于我们处于部分同步模型中,协议只需要在同步期间取得进展,但一致性/安全性应始终保持在任意网络分区之下。为了简化表示法,我们将使用别名秒为$ c\Delta $,别名分钟表示为$ c^2\Delta $(即c秒)表示某些适当的常量c(在实际协议中c = 6)

每个节点保持一个从0开始的本地时期计数器e和当前的一个块链(b1, b2,…,bn);每个块具有形式(e,TXs,h_1),使得时期数e严格增加,并且h_1是当前块之前的链的散列。我们说如果$ \pi $包含来自链中每个块的 >= 2/3的有效签名,则$ \pi $是链的公证。链的纪元号被定义为最后一个块的纪元号。该协议如下:

  • 更新链:每个节点都存储到目前为止所见的最新的公证链c。 当一个节点看到一个有效的链c’(上述形式)带有公证时,其时代号高于其当前链c的时期号(我们称c’比c更“更新”)c’替换当前链。
  • 块提案:在每个时期e中,通过将哈希函数(随机预言)应用于时期号而确定的随机节点被选为“提议者”。 提议者进行如下:
    • 如果提议者的链以一个时期块e-1结束,则提议者可以立即提出一个新块(e; TX; H(c))并将其多播,其中TX表示要确定的未完成事务。
    • 如果提议者的链具有早于e-1的时期,(如先前的提议者未能将其块包含在链中),则等待1秒(以便可能接收“更新鲜的”链),之后提出一个新的块(如前一种情况)。
  • 公证:在时期e,每当节点i从时期e的提议者接收块(e; TXs; h_1)时(1)它已经看到与h_1一致的公证链c-1,并且(2)c-1是 至少和时代e开始时的链条一样新鲜,并且(3)它之前没有为时期e签署过块,i对块签名并进行广播。
  • 时代推进:无论何时发生以下事件中的任何一个并且当前处于小于e的时期,节点i前进到时期e:(1)它看到用于纪元e-1的公证链,或者(2)它接收到>=2/3节点数个带签名的clock(e)消息。 如果自节点进入纪元e-1以来已经过了一分钟,它将组播clock(e)。

蓝图.上述协议称为基本PaLa,将在第3节中正式描述,并在第4节中证明是安全的。

然后,我们重点描述PaLa的概括,称为双重流水线PaLa,面向高性能场景。 这个应用程序是由ThunderCore推动的,ThunderCore是一个区块链公司,旨在将以太坊转移到被称为“加速器”的专用基础设施节点(即提议者)加速的“快速路径”。 我们还描述了使用PaLa执行委员会重新配置的简单但非平凡的技术。

2.模型

2.1 部分同步网络建模

背景:与GST建模部分同步. 我们采用部分同步通信网络,我们的正式模型是Dwork,Lynch和Stockmyer [10]提出的“全球稳定时间(GST)”模型的扩展。 回想一下GST模型假设如下:

  • 最终,在被称为GST的一些点,网络将是稳定的和忠实的消息将在$\Delta$的时间内传递。
  • 部分同步协议提供参数$\Delta$但协议不知道GST。

长时间运行的部分同步建模. 由Dwork等人提出的GST模型。 [10]更适合单发一致性协议。 相比之下,区块链协议是长期运行的,确认了不断增长的,线性排序的日志(例如,交易)。 因此,我们将GST模型扩展为适合这种长期运行的场景。

我们正式定义了一个称为同步周期的概念。 直观地,一段同步是当网络连接良好并且忠实节点或多或少同步时,它们可以彼此通信经历最大$\Delta$延迟。 然而,有时,网络可能失去同步,例如,在重大中断或分区期间。 当发生这种网络分区时,部分同步协议应该保持一致性。 另一方面,只有在同步期间才需要活跃度。 一种部分同步协议知道参数$\Delta$ (即,协议描述中固有$\Delta$),但不知道当同步的周期会发生。

定义1(同步周期)。 修正一些协议执行。我们说周期[t0, t1]是同步期(w.r.t.执行),当且仅当一个忠实节点在其本地时间t<=t1发送的每条消息在其本地时间max(t0, t +$\Delta$)之前也会被任何其他忠实节点接收到。

我们注意到,在一些关于部分同步共识的现有工作中已经采用了“同步时期”这个术语(有时是非正式的)[4,5]。 上述定义1是我们对本文采用的这一概念的明确表述。

为了方便起见,在本文中,除非另有说明,否则我们假定节点总是通过向每个人多播消息来响应它看到的每条新消息—注意,所有消息都将在我们的协议中签名。这样,我们可以做出一个更强的同步假设:

定义2(较强的同步周期概念)。 我们说周期[t0, t1]是同步的周期(w.r.t.此执行),当且仅当一个忠实节点在其本地时间t <= t1观察到的每条消息在其本地时间max(t0, t + $\Delta$)之前也将被任何其他忠实节点观察到。

备注1. 在整篇论文中,我们可以假设节点允许有界时钟偏差,在这种情况下,忠实节点之间的最大时钟偏差被符号$\Delta$吸收。

2.2 执行模型和假设

总共有n个节点编号为1,2,…,n,其中n是公知参数。 我们假设公钥基础结构(PKI)和第i个节点的公钥表示为pki,并且相应的密钥表示为ski。

作恶模型。 我们假设一个多项式有界的对手可以破坏少于n / 3个节点。 为简单起见,我们将首先在静态损坏模型下证明安全性,其中攻击者在开始执行之前做出作恶选择。 稍后在A.1节中,我们将解释如何将我们的安全保证扩展到自适应损坏,即,当攻击者在协议执行过程中自适应地破坏节点时。

在本文中,我们假设所有忠实节点在0时刻开始执行协议。

3.热身:基本的PaLa

3.1定义和符号

单位时间的别名。 为方便起见,我们使用术语一秒钟(或简称为秒)和一分钟(或简称为分钟)不通过挂钟测量时间,而是作为特定时间单位的别名(即输入到协议的参数)。 在整篇论文中,我们假设如下: \(1sec \geq 5\Delta \quad and \quad 1min \geq6sec\)

有效块: 现在块的形式为(e,TXs, h_1),即,我们不再需要块中的时间戳字段; 此外,现在每个块都带有一个时代号 $ e \in N $。 TXs和h_1的定义如前所述。

区块链定义: 一个有效的区块链,表示c,是一个有序的块序列。 因此,我们使用以下符号:

  • c[i]表示链中第i个block,其中$1 <= i <= \mid c \mid $;为了方便起见,我们假设每个区块链c前面都有一个虚构的genesis块$c[0]:= ((0,1),\bot,\bot,0)$;
  • c[: i]表示直到第i个块(含)的所有块;
  • c[-i]是c[L -i + 1]的别名,其中$L = \mid c \mid $;和

区块链的有效性。 一个区块链当且仅当满足如下条件时是有效的:

  1. 对于每$1 <= i <=\mid c \mid $, c[i].h_1 = H(c[: i - 1])。
  2. 对于任何$1 <= i <j <= \mid c \mid $,它必须是c [i] .e <c [j] .e,即有效区块链中包含的纪元数必须严格增加(但可能 跳跃)。

    我们稍后将在基本PaLa方案的证明中使用以下术语: 如果c [i] .e = c [i-1] .e + 1,则c [i]被认为是正常块; 否则它被称为超时块。

“更新鲜”的关系: 我们说c比c’更新,如果c [-1] .e> c’[ -1] .e。 如果c [-1] .e = e,我们也说c链是历元e链。像以前一样,我们有时使用术语“块”作为以该块为结尾的链的(前缀)的别名。

投票和公证: 如果$\sum.verify(pki, H(c),\sigma)= 1$,则签名$\sigma$被认为是来自节点$i\in[n]$的有效投票,其中pki表示节点i的公钥和$\sum$表示正在使用的签名方案。

备注2(区块作为链的别名): 注意,由于每个块都引用它所扩展的父链的散列,所以我们经常使用术语“块”作为以该块结束的链的别名(假设没有发生散列冲突)。例如,当我们说一个区块上的投票或公证时,它与在该区块结束的链上的投票或公证是一样的。

提案人资格: 我们假设节点$i \in [n]$是历元e的一个合格的提议者,当且仅当$ i=(H^*(e) mod n) + 1 $,其中$ H^* $是在竞争对手决定破坏哪个节点之后由随机预言机选择。

3.2 协议

内部时钟同步: 每个共识节点维护本地时钟指示当前时期(以下称为节点的本地时期)。 起初,本地时期设置为1.节点使用以下机制来推进其本地时期:

  • 如果节点已经在本地时期超过1分钟,则签名和多播时钟(e + 1),表示它想要前进到时期e + 1(但此时还没有推进到e + 1)。

  • 在看到epoch-(e-1)块的公证时,或者在看到来自至少2n/3个不同节点的签名时钟(e)消息时,将本地时期推进到e(如果本地时期小于e)。

提案: 当节点处于本地时期e时,根据以下哪个情况先发生,选择一个块B提议(如果可能):

  • 它看到一个时期为epoch-(e - 1)的公证链c,然后如果符合条件,则建议块B:=(e,TXs,H(c))其中TXs是未完成交易的集合。

  • 否则,如果自进入时期e已经过了1秒,则选择到目前为止观察到的最新的公证链c,如果符合条件并且B是从c延伸的有效块,则建议块B:=(e,TXs,H(c))。

请注意,忠实节点在同一时期建议不超过1个块。此外,如果一个提议者因为收到epoch-(e-1)的原因而进入时期e,它将立即在epoch开始时提出一个epoch-e的块

选举投票: 当节点处于本地时期e时,对于所收到的第一个有效提案(e,TX,h-1)(可能早于本地时期e),如果满足如下条件,则对提议进行投票:  

  • 节点观察到c使得H(c)= h_1,并观察到c的公证;
  • 上面定义的父链c至少与节点在其本地时期e开始时观察到的最新的公证链一样新鲜。

析构函数: 定义Finalize(.)如下: 定义Finalize(c):= c [:l -1]; 其中chain [l]是链中的最后一个正常块。

换句话说,$c [:l] \preceq c$ 是链的最长前缀,以具有连续纪元号的两个块结束。

在任何时候,让chain成为节点到目前为止观察到的最新的公证链,如果Finalize(c)比当前输出日志长,则用Finalize(c)替换输出日志。

4. Basic Pala证明

理想执行: 后续我们忽略一些微不足道的破坏性执行,例如忠实节点的签名是伪造的或者是出现哈希碰撞。 为简单起见,在下面的所有定理和引理中,我们省略了“排除可忽略的概率” - 但是,读者应该记住,下面的所有定理和引理只适用于“理想执行”,其中忠实节点的签名不是伪造的,忠实节点视图的并集中不存在哈希冲突。

术语 我们定义如下有用的术语

  • 我们说如果存在一些忠实的节点已经观察到链和它的公证,那么在某些执行中,链是一个忠实节点视图的公证链。 请注意,如果在某些执行中,链是忠实视图中的公证链,那么链的每个前缀也都是忠实视图中的公证链。
  • $c \preceq c’$ 表示链c是链c’的前缀;按照惯例,$c \preceq c$

4.1 一致性

引理1: (每个时期e的唯一性)。 让c和c’在良好执行的忠实视图节点中是两个公证链,满足c [-1] .e = c’[ - 1] .e,则c = c’。

证明 假设两个不同的c和c’在它们的结束块中具有相同的时期e,并且两个链在忠实的视图中获得公证。 假设两个链之间没有哈希冲突,H(c)和H(c’)的不同签名总数必须至少为4n / 3。 但是,请记住,任何忠实的节点对一个纪元块的投票不超过一票,而作恶节点可以对H(c)和H(c’)投票。 因此,H(c)和H(c’)的不同签名的总数不能超过nH + 2nC = n + nC <4n / 3,其中nH和nC分别表示忠实和作恶节点的数量。 因此,我们得到了矛盾的结论。

定理1 定义c和c’在一个良好的执行中是忠实节点视图的两个公证链,则有$Finalize(c’)\preceq Finalize(c)$或$Finalize(c)\preceq Finalize(c’)$。

证明 出于矛盾的考虑,假设Finalize(c)和Finalize(c’)不是彼此的前缀; 令B0为它们的最后一个普通块,i0为索引,使得B0 = c [i0] = c’[i0]。

对于c和c’中的每一个,我们定义了待稳定块和稳定块的概念。 我们用c说明这些概念,并且以相同的方式定义与c’相关联的块。

  • 待稳定块。 如果紧跟在B0之后的块c [i0 +1]是超时块,则链中的待稳定块B2是B0之后的第一个正常块。 否则,链中的待稳定块B2是c [i0 + 1]之后的第一个正常块; 这是很好的定义,因为Finalize删除链中的最后一个正常块。

  • 稳定块。 链中的稳定块B1是紧接在待稳定块B2之前的块。

观察到B1和B2都在c中的B0之后。 我们以相同的方式为c’定义块B1’(稳定块)和B2’(待稳定块)。

我们接下来通过案例分析得出矛盾。 首先,观察如果c [i0 + 1]和c’[i0 + 1]都是正常块,则它们具有相同的纪元号; 但这与引理1相矛盾。因此,对于证明的其余部分,我们可以假设至少有一个c [i0 + 1]和c’[i0 + 1]是超时块。

接下来,定义e0 := B0.e,e := B2.e 和e’:= B2’.e。 通过引理1,$ e \neq e’ $; 不失一般性的假设e<e’。 我们分为两种情况:(i)e = e0 + 2,和(ii)e> e0 + 2。

(i)考虑e = e0 + 2的情况。必须是在链中,正常块B1 = c [i0 + 1]和B2 = c [i0 + 2]分别具有时期数e0 + 1和e0 + 2。

1
2
3
4
5
此外,由于B2是正常块,因此必须存在超过n/3个忠实节点的集合S,每个节点必须在其本地时期e0 + 2期间具有公证B2。特别地,S中的每个忠实节点都已经看到在本地时代e0 + 2期间链的前缀B1的公证。

另一方面,我们可以推断出紧跟在c'中的B0之后的块Bx'= c'[i0 + 1]必须是具有一些纪元号e''的超时块,其中e''> = e0 + 3, 因为引理1。

因为本地纪元数不能减少,对于S中的每个忠实节点,在纪元e'> e0 + 2的开始处,它必须已经看到链的前缀达到B1,其严格比直到B0的前缀更新鲜。 因此,可以得出少于2n / 3个节点可以投票给块Bx'。

(ii)考虑e> = e0 + 3的情况。在这种情况下,稳定块B1必须是具有时期编号e-1> = e0 + 2的超时块。

1
2
3
4
5
由于B2是正常块,因此必须存在多于n / 3个忠实节点的子集S,每个节点在其本地时期e期间已经将链的前缀B1公证。

观察到e <e'意味着c'必须具有从c [i0 + 1]到B2'的一些块,其时期号严格大于e。 因此,考虑c'中具有时期数e'的块Bx',使得e''是大于e的最小时期。 通过选择Bx',其前一个块最多具有时期数e; 但是,通过引理1,前一个块必须具有严格小于e的纪元号。

因此,我们可以得出结论,在其本地时代e'> e的开头,S中的每个忠实节点必须看到链的前缀高达B1,这比c'不包括从Bx'开始的块更严格新鲜。因此,可以得出少于2n/3个节点可以投票给c'中的块Bx'。

这就完成了引理的证明。

4.2 活跃度

事实1 考虑一个好的执行,让[t0,t1]表示一段同步。如果某个忠实节点,在本地时期e时是在 $ r \in [t0 - \Delta, t1] $ 或是更早,那么到时间$r + \Delta $ 时,所有忠实节点都在时期e或是更高。

证明: 直接由“强同步周期”推得。

引理2: 考虑一个好的执行,让[t0,t1]表示一段同步。 假设在某个时间$ t \in(t0 + 2sec,t1)$,某个忠实节点进入其本地时期e并已过去最多2秒。那么,在时间t,没有忠实节点处于时期 e’>e ,除非在时刻t忠实节点视图存在e,e + 1,…,e’ - 1的公证。

证明: 事实1,不可能在时间t某个忠实节点进入本地时期1分钟或更长时间。 因此,没有忠实的节点会在时间t + 1秒内为e’> e发送时钟(e’)。 现在,通过忠实的协议定义,忠实节点进入时代e’> e的唯一方法是接收epoch-(e’ - 1)公证。 如果e’-1> e,要接收epoch-(e’-1)公证,至少一个忠实的节点必须首先输入epoch e’ - 1并在该时期投票,因此必须存在于忠实的视图中 时代e’ - 2的公证,等等。

引理3(忠实的提议者可以成功提议): 考虑在[t0,t1]的同步时段良好执行,并且让t为属于同步时段的某个时间。如果一个忠实的提议者在$ t \in (t0+1sec, t1-1sec) $时首先进入时期e,那么它必须成功地提出一个epoch-e块;此外,在提出划一e块之前,忠实节点视图不能对e’ > e进行任何公证。

证明: 通过引理2,当忠实的epoch-e提案者(表示为u)1秒进入本地时期e时,除非在忠实节点视图中存在epoch-e的公证,否则任何忠实的节点(包括u本身)都不能处于时代e’> e视图 —— 但是直到你提出一个epoch-e块才会发生这种情况。因此,如果时期e提议者在其深入本地时期1秒之前已经看到了一个epoch-(e-1)的公证链,那么它必须通过算法的定义成功地提出。否则,当它1sec进入本地时期e时,它将尝试在其视图中提出从最新的公证链延伸的块。这足以证明这个最新的公证链不包含来自时代e’> = e的任何块。显然,在u提出一个时代e块之前,没有一个时代e块可以在忠实节点视图中进行公证;通过引理2,在u制作一个时代提议epoch-e之前,没有忠实的节点可以处于本地时代e’>e(因此没有忠实的节点会投票给任何一个epoch-e’块)。因此,在u为e’> e提出一个划时代的提案之前,没有一个epoch-e’块可以在忠实的观点中进行公证。

引理4(忠实提议获得公证): 在良好的执行中考虑表示为[t0,t1]的同步时段。 假设一个诚实节点在时间$ t \in(t0 + 1sec,t1-1sec)$ 提议一个链延伸的epoch-e的块B.那么,在时间t + 1sec,每个诚实节点将看到链+B的公证。

证明: 当一个诚实的提议者u在$ t \in(t0 + 1sec,t1-1sec)$ 提出一个块时,到时间$ t + \Delta$, 由于“强同步时间”假设,每个诚实节点都将收到所提议的块延伸的父链及其公证。由事实1,通过时间$ t + \Delta$,所有诚实节点将进入时代e或更高。注意,一个诚实的节点只能在进入其本地时期e的1sec时提出epoch-e块。通过引理2,到时间$ t + \Delta $没有诚实的节点在时代e’> e,除非在那时候在诚实节点视图存在一个epoch-e的公证 - 并且在后一种情况下,由于“强同步时期”假设和事实,诚实的节点将只投票给u提出的epoch-e块。

因此,此后我们可以假设对于每个节点节点i,在$ [t,t + \Delta] $中的某个时间点,i已经接收到所提出的块延伸的父链及其公证,此外i在本地时期e中。只要表明i会在发生这种情况时投票支持该提案就足够了(这适用于每个诚实的节点i)。为了证明这一点,证明诚实提议所依赖的父链表示的链至少与任何诚实节点在其本地时代e开始时的最新的公证链一样新鲜就足够了。现在,如果提案的父链是在时期e-1结束,那么由于引理3,声明显然成立。否则,假设父链在e’<e-1处结束。这意味着诚实的提议者u必须在它进入本地时代1秒时提出这个块。 这意味着诚实的节点在t-1sec+之后不能进入epoch e或更高。因此,如果某个忠实节点在其本地时代e开始时已经看到了一个e’’> e’的公证链,那么通过“强同步时间”假设,忠实的提议者u,在它进入本地时代e的1秒内一定可以看到它(即在时间t)。 因此,u不能建议扩展时代e’<e’‘的父链。

定理2(活力): 考虑一个好的执行,让[t0,t1]表示执行期间的同步周期。 假设epoch-e和epoch-(e + 1)都具有忠实的提议者,此后分别表示为u和v。此外,假设u在时间$ t \in(t0 + 1sec,t1-2sec)$进入时期 e。那么对于每个诚实节点i,其在时间t + 2sec的输出日志一定比在时间t的日志长,并且必须包含由u提出的块。

证明: 由于引理3和4,u在t+1sec内必须成功提出一个epoch-e块,所有诚实的节点都将看到一个epoch-e公证块。因此,v在t+1sec内进入时期e+1或是更高。根据引理2,v在时间t+1sec时不能进入高于e+1的时期。因此,当v在[t,t + 1sec]期间进入epoch-(e + 1)时,通过引理3,v必须成功提出一个epoch-(e + 1)块。不难看出,这个块必须从块epoch-e延申,无论v是在1秒之前提出进入本地时代e + 1,还是在1秒之后进入本地时代e + 1。

推理1(在足够长的同步期间的活动). 除了在执行选择中k概率可忽略不计之外, 必须是在[t0,t1]的任何同步期间,至少$ \omega(log k)$min 长,它必须是任何诚实节点,与t0时的输出日志相比较,其在时间t1输出日志包含一个或多个有忠实节点提议的块。

证明: 由于事实1和忠实协议的定义,如果一个忠实节点在时间$ t \in [t0,t1-3sec] $进入时期e,那么到时间t+1min+2sec,所有忠实节点必须已进入时期e + 1或更高。因此,如果[t0, t1]至少有$ \omega(log k) $min长,则必须存在至少$ \omega(log k) $min连续的时代(表示为集合E),以便所有忠实节点在(t0 + 3sec, t1 - 3sec)内进入这些时代(E)。

5 双重流水线PaLa

如上所述,提议者轮换有两种常见的哲学,democracy-favoring(偏向民主)的方法和tability-favoring(偏向稳定)的方法。在之前的热身中,我们专注于前者,我们为每个块轮换提议者。我们现在描述PaLa的一种新型变体,它适用于后一种情况,我们希望只要它表现良好就坚持使用相同的提议者。具体地,通常为高性能应用选择tability-favoring(偏向稳定)策略 - 在这种情况下,提议者可以是具有比普通共识节点更丰富的配置(例如,在带宽,CPU和其他资源方面)的专用基础设施节点。

在前面描述的基本PaLa中,共识节点必须等待收集整个祖先链的公证,然后才能对下一个块进行投票。因此,由于投票算法的顺序性质,系统受到网络延迟的倒数的限制。这对于性能来说是不可取的,特别是当网络延迟很大但带宽很丰富时。

我们的“双重流水线”PaLa避免了这个缺点,因而采用tability-favoring(偏向稳定)的提议者轮换政策。在这种双重流水线变体中,即使没有收集齐祖先块的所有公证,也允许节点有机会对块进行投票,只要末端的未经公证的块的数量受到机会参数k的限制,其中k=1是第3节中的基本方案。最终,节点现在必须等待大约k个连续公证的块。

5.1 定义和符号

提议者和委员会: 我们考虑一个概括,即提议者和委员会的逻辑角色是分开的。 在本节中,我们假设有n个委员会成员和n’个提议者。 只要对手控制不到委员会的1/3,并且至少有一位提议者是诚实的,我们就可以实现一致性和活跃性。

单位时间的别名: 与之前定义相同。

有效块: 现在块的格式为(seq,TXs,h_1),其中seq:=(e,s)称为序列号,$ e \in N $称为时代编号(epoch)。 TXs和h_1的定义与以前一样。

有效链: 当且仅当一条链c满足如下条件时被认为是有效的:

  1. 对于每一个$ 1 <= i <= \mid c \mid $, c[i].h_1 = H(c[:i-1]).

  2. 对于每一个$ 1 <= i <= \mid c \mid $,每个块都是正常块或超时块:

    • 正常块: 必须是c[i] .e = c[i-1].e和c [i].s = c[i-1].s + 1。

    • 超时块:必须是c[i] .e> c[i-1].e和c[i].s = 1。

更新鲜的叙述: 当且仅当c[-1] .seq> c’[-1] .seq时,我们说c比c’更新。 如果c[-1].seq=(e,_),我们也说c是一个epoch-e链。

投票和公证: 与之前定义相同。

完全公证: 为了避免歧义(可能源于使用块作为链的别名),我们说如果链中的每个块都在节点视图中获得了公证,则链在某个节点视图中被完全公证。

提案者资格: 我们考虑一种简单的循环策略,其中在时代e,第(e mod n’)提议者被认为是合格的。

5.2 双重流水线PaLa

现在描述我们的双重流水线PaLa方案。

内部时钟同步: 每个共识节点维护一个本地时钟,表示为当前时期e(此后称为节点的本地时期)。 最初,本地时期设置为1.节点使用以下机制来推进其本地时期:

  • 如果一个新鲜节点的完全公证链1分钟前没有包含新的epoch-e块,而且节点在时期e已经过去了1分钟,现在签名并多播时钟(e+1)(如果还没有这样做的话)。

  • 在收到来自至少2n/3个不同节点的签名时钟(e)消息时,将本地时钟推进到e(如果本地时期小于e)。

提案: 每当节点进入新的时期(e)时,前1秒,不做任何事情并等待网络。如果节点是时期e的合格提议者,则从此时起,提议者执行以下操作:

  • 首先,假设c为节点迄今观察到的最新鲜的完全公证链; 提出超时块B:=((e,1),TXs,H(c))其中TX是一组未完成的事务;

  • 现在重复以下步骤:如果节点在序列号(e,1),…,(e,s)已经提出了块,并且s<k或者所有(e,1),… ,(e,s-k + 1)已经在节点的当前视图中进行了公证,那么提出包含未完成事务的下一个正常块(到目前为止(e,s)结束的链的延伸)。

直观地,只要在属于当前时期的末尾存在少于k个提议但未经公证的块,提议者就可以继续提出提案。

投票表决: 当收到一个来自合格提案者的具有有效签名的提案B:=((e,s),TXs,h_1)提案后,仅当满足如下条件时,节点对包括提议B的扩展链进行投票:

  1. 它目前处于本地时代e,并且没有投票给任何具有序列号(e,s)的块;

  2. 它必须看到链c,使得B是链c扩展的有效块,H(c)= h_1;

  3. 链中与B属于不同时期的所有块都必须已公证,并且前缀链c[:-k]在节点视图被完全公证(即,包括所提议的区块本身,最多在末端的k个区块可以未公证)。

  4. 链必须至少与节点在时代e开始时观察到的最新鲜的、经过完全公证的链一样新鲜。

确认: 给定链,让c[:i]表示以至少k个连续正常块结束的链c的最长前缀链,然后Finalize(c)将输出c [:i-k],即从c [:i]中删除k个尾随块。 如果在链中找不到这样的前缀,则Finalize(c)输出$ \emptyset $。

在任何时候,节点都采用其最新鲜的完全公证链c,并且输出Finalize(c),如果它比先前输出的长。

正式证明: 我们将正式证明推迟到第7节。事实上,我们将直接证明支持委员会重新配置的变体,这是对本节所述方案的严格概括。

6 双流水线PaLa的委员会重组

我们考虑像ThunderCore这样的应用场景,这是一个区块链公司,它提供专门的基础设施节点作为“加速器”(即提议者),并且委员会的参与对任何参与区块链的人都是开放的。 我们描述了支持委员会重新配置的简单但非平凡的技术。 在本节中,我们可以假设有一组固定且公开的基础设施节点作为提议者; 另一方面,负责投票的委员会成员集合从区块链中选择(例如,根据区块链上的一组赌注消息计算)。

6.1 k=1

我们描述假设k = 1,即,在投票给下一个块之前,节点必须具有父亲的公证,而且,我们砍掉1个正常的块用于完成。

由于以下原因,委员会切换很棘手。回想一下,我们的一致性证明严格依赖于以下直觉:当两个连续的序列号,例如(e,s)和(e,s + 1)都在忠实节点视图中获得公证时,我们得出结论,许多忠实节点必须非常快地看到(e,s)的公证,因此,所有这些忠实节点都会坚持将(e,s)的块包含在任何未来的链中。通过这种方式,我们可以确定(e,s)处的公证区块是最终的。如果委员会对未来的链条变化进行投票,这一论点就会破裂。 在这种情况下,我们希望未来的委员会也会坚持将(e,s)的公证区块包括在内。

我们提出了一个非常简单的想法来解决上述问题并支持委员会重新配置。在非常高的级别上,每次遇到正常块时,下一个块的委员会可以对半切换。作为一个特例,要完全从旧的委员会Cold改为新的委员会Cnew,我们可以完成两个正常区块的转换,拥有一个由Cold和Cnew组成的混合过渡委员会。

更一般地说,从此我们可以假设每个委员会由两个小组委员会组成(C0,C1),每个小组委员会的大小为n。我们假设每个小组委员会中只有不到1/3的节点被作恶。 对于要经过公证的区块,每个小组委员会必须至少有2n/3票。现在,只要在区块链中遇到正常的块,下一个区块的委员会就可以从(C0,C1)切换到(C1,C2)—— 请注意,两个小组委员会中只有一个可以转换。请注意,委员会中的两个小组委员会可能是相同的。因此,作为一种特殊情况,如果我们希望使用这种新符号从Cold切换到Cnew,我们可以在两个正常块上完成从(Cold,Cold)到(Cold,Cnew)到(Cnew,Cnew)的切换。

下面我们将这个想法概括为双重流水线的PaLa,其中k通常可以大于1。

6.2 委员会重组计划

在前面的6.1节中,我们描述了k = 1的情形。在每个正常的块之后,委员会的构成可以改变一半。这个想法可以推广到k>1如下:委员会的组成可以在每k个连续正常块之后改变一半。这意味着从旧委员会Cold到新委员会Cnew的完全切换必须在两组连续的k个正常块(属于相同的时期或不同的时期)上进行。

我们现在给出一个正式的描述:在第一组(k-连续正常区块)之后,一个包含Cold和Cnew的混合委员会负责; 在第二组(k-连续正常区块)之后,委员会可以完全切换到Cnew。

委员会重组功能: 我们假设有一个有效的可计算和确定性函数Comm(.), 并且Comm(c [:i-1])输出下一个块c [i]的委员会。每个这样的委员会是形式(C0,C1),其中C0和C1中的每一个是一组n个公钥。此后,我们假设对手控制不到C0和C1各自的1/3节点。 请注意,C0和C1中的每一个必须包含n个不同的公钥,但它们可以交叉存在与不同小组。

进一步,我们要求Comm(.)满足以下约束:

如果Comm(c[:i]) != Comm(c[:i-1]),即c[i+1]和c[i]的委员会不同,则必须满足以下条件:

  1. 将Comm(c [:i-1])解析为(C0,C1),然后Comm(c[:i])必须是(C1,C2),其中C2包含n个公钥; 即,委员会的组成只能改变一半;

  2. 先前的k个区块链[i-k + 1:i]必须都是具有相同时代编号的正常区块; 而且,这k个区块必须具有相同的委员会。

作恶假设: 假设如下:对于在忠实视图中表示为c的任何公证链,让(C0,C1):= Comm(c),它必须是对手控制不到C0和C1中每一个的1/3。

委员会重组的双重流水线PaLa: 为了支持委员会委员会重组,在我们之前在第5节中描述的双重流水线PaLa之上需要进行以下修改。

我们说(C0,C1)是链c的委员会,当且仅当它是由Comm(.)函数计算的c[-1]的委员会。

  • 公证: 对于要进行公证的链c,让(C0,C1)表示链的委员会,必须是来自C0的至少2n/3个节点已经在链上投票,并且来自C1的至少2n/3个节点也在链上投票。更正式地说,如果签名集合包括C0中至少2n/3个不同节点对H(c)签名,并且包括C1中至少2n/3个不同节点对H(c)签名,则称该签名集合是链的有效公证。

  • 时钟同步: 时钟同步如下进行,其中来自任何公证链定义的任何委员会的足够多的时钟消息将被统计。

    • 如果一个节点听到了一些已经公证的链c并让Comm(c)=(C0,C1)成为其委员会;如果节点还听到来自C0或C1的不同节点的至少2n/3个带签名的时钟(e)消息,如果其当前本地时期较小则前进到时期e;

    • 如果在过去的1分钟内,一个节点已经处于时代e,但其从1分钟前开始最新鲜的完全公证链未包括任何新的epoch-e块,则签名并多播时钟(e + 1)。

在下一节中,我们将证明我们的双重流水线PaLa方案是安全的,包括委员会重组技术。

7 证明双重流水线PaLa和委员会重组

我们直接证明了委员会重组的双重流水线PaLa,因为它是对静态委员会计划的严格概括。只要对手控制不到1/3的委员会,就保证一致性; 另外,在足够长的同步期间保证活跃,至少一个提议者是诚实的。

7.1 一致性

引理5(每个序列号的唯一性) 设c和c’是两个链,由同一个小组委员会C在良好执行的忠实视图中公证,使得c.seq = c’.seq,它必须是c = c’。

证明: 假设两个不同的链c和c’具有相同的seq,并且两个链在忠实视图中获得公证。假设两个链之间没有哈希冲突,H(c)和H(c’)的不同签名总数必须至少为4n/3。但是,回想一下,任何忠实节点对每个序列号seq投不超过一票,而作恶节点可以对H(c)和H(c’)投票。因此,H(c)和H(c’)的不同签名的总数不能超过nh + 2nc = n + nc <4n / 3,其中nh和nc分别表示忠实和作恶节点的数量。 因此,我们达成了矛盾。

定理3 考虑委员会重组的双重流水线变体协议。 定义链c和c’是在良好的执行中的忠实节点视图的两个完全公证链,则它必须保持$Finalize(c’)\preceq Finalize(c)$或$Finalize(c)\preceq Finalize(c’)$。

证明: 出于矛盾的考虑,假设Finalize(c)和Finalize(c’)不是彼此的前缀链; 令B0为它们的最后一个公共块,i0为索引,使得B0 = c [i0] = c’[i0],且具有时代e0。

对于c和c’中的每一个,我们定义稳定块和待稳定块的概念。 我们以链c说明这些概念,并且以相同的方式定义c’中相关联的块。

  • 待稳定块: 如果c[i0 + 1:i0 + k + 1]中的所有k + 1个块具有相同的时代号,则c中的待稳定块B2是c[i0 + k + 1]。否则,假设e是严格大于e0的最小时代,使得链中存在具有序列号(e,k + 1)的块; 然后,在这种情况下,链中的待稳定块B2是具有序列号(e,k + 1)的块。 由于Finalize的定义,可以检查这是否定义明确。

  • 稳定块: 如果待稳定块B2是c[i2],则链中的稳定块被定义为B1:=c[i2-k]。

观察到B1和B2具有相同的时代编号,并且它们都在c中的B0之后。 我们以相同的方式为c’定义块B1’和B2’。

通过Comm(.)的定义,c[i0 + 1]和c’[i0 + 1]具有相同的委员会对(C0,C1)。对于c[i0 +1]是正常块的情况,从c[i0 +1]到待稳定块B2的每个块至少共享一个(C0,C1)中的子委员会; 对于c[i0 + 1]是超时块的情况,从c[i0 + 1]到B2的每个块都具有委员对(C0,C1)。 这也类似于c’。

我们接下来通过案例分析得出矛盾。 首先,观察如果c [i0 + 1]和c’[i0 + 1]都是正常块,则它们具有相同的序列号; 但这与引理5相矛盾,因为两个块都具有相同的委员会(C0,C1)。因此,对于证明的其余部分,我们可以假设c[i0 +1]和c’[i0 +1]至少有一个是超时块,这意味着从c [i0 + 1]到待稳定块B2的所有块以及从c’[i0 + 1]到B2’的所有块共享一些共同的子委员会C.

接下来,定义(e0,s0):= B0.seq,(e,s):= B2.seq和(e’,s’):= B2’.seq; 不失一般性,假设e <= e’。

案例1: e = e’。子情况e0 = e = e’意味着c [i0 + 1]和c’[i0 + 1]都是正常的块,我们已经证明这是不可能的。e0 <e = e’的情况意味着两个链在B0之后具有序列号为(e,1)的超时块B和B’。 由于这些块共享小组委员会C,这与引理5相矛盾。

案例2: e <e’。 我们进一步分为两种情况:(i)e0 = e,和(ii)e0 <e。

  • (i)考虑案例e0 = e。 在链中,正常块B1 = c [i0 + 1]和B2 = c [i0 + k + 1]必须分别具有序列号(e0,s0 + 1)和(e0,s0 + k + 1)。

此外,由于B2由小组委员会C公证,因此必须存在超过n/3个忠实节点的集合$ S \subseteq C $,且每个节点在其本地时期e = e0必须已公证B2。这意味着在其本地时期e0期间,S中的一个诚实的节点必须已经看到B1前缀链的完整公证。

另一方面,对于某些e’‘>e0,我们可以推断出在c’中紧跟的B0之后的块Bx’= c’[i0 + 1]必须是具有序列号(e’‘,1)的超时块。

由于一个节点的本地时代号不会随着时间的推移而减少,因此在其本地时代e’‘开始时,S中的每个忠实节点必须已经看到链到B1完全公证前缀链,这比到B0的前缀链严格更新。因此,小组委员会C中少于2n/3个节点可以投票支持Bx’。

  • (ii)考虑案例e0 <e。在这种情况下,稳定块B1必须是具有序列号(e,1)的超时块,B2具有序列号(e,k + 1)。由于B2已由小组委员会C公证,因此必须有超过n/3个诚实节点的子集$ S \subseteq C $,其每个节点在其本地时期e内已经看到链的到B1的完全公证前缀。

观察到e <e’意味着c’从c[i0 + 1]到B1’必须有一些超时块,其时期号严格大于e。因此,考虑c’中具有序列号(e’‘,1)的超时块Bx’,使得e’‘是大于e的最小时代。

同样,我们可以得出结论,在其本地时代e’‘的开始,S中的每个忠实节点必须已经看到链到B1的完全公证前缀链,它比不包括从Bx’开始的c’的前缀链严格更新; 由于引理1,Bx’之前的块不能具有时代号e(必须具有严格小于e的时代号),因此,小组委员会C中少于2n/3个节点可以投票选出c’中的Bx’区块。

这就完成了引理的证明。

7.2 活跃度

首先,不难看出4.2节的事实1仍然存在。

引理6: 考虑一个好的执行,让[t0,t1]表示一段同步时段。 假设在某个时间$ t \in(t0+ sec,t1)$,某个忠实节点进入其本地时代e最多2秒,那么,在时间t,没有忠实节点处于本地时期e’,其中e’> e。

证明: 假设在某个时间$ t \ in(t0 + sec,t1)$,一些忠实节点进入其本地时代e最多2秒,那么,每个忠实节点在时刻t时必须进入时代e,但由于事实1,其进入本地时代e不会超过3秒。因此,没有忠实节点会发送时钟(e + 1)或比其更高的时钟。

引理7(忠实提议者可以成功提议) 考虑在良好执行的同步时段[t0,t1],并且让t为属于同步时段的某个时间。如果一个忠实提议者在时刻$ t \ in(t0 + 1sec; t1-1sec)$首先进入本地时代(e,1),那么,它提出的超时块必须是从父节点延伸的有效块。

证明: 通过引理6,当时代e的忠实提议者(以下称为u)提出时,没有忠实节点处于时代e或更高的时代,因此在忠实节点视图中不可能存在任何时代e’(e’>e)的“公证”块。并且显然在u提出任一时代块(e)之前,忠实节点视图中不可能有任一公证的时代块。因此,提议的超时块(最新鲜的完全公证的父链的延伸)必须具有比(e,1)更新鲜的序列号。

引理8(同步期间的演变) 设想同步时段[t0,t1]上一个良好的执行。假设一个忠实节点u是时代e的提议者,它首先在$ r \in(t0 + 2sec,t1-2sec)$时进入了时代e。假设u在某个时刻t提出一个epoch-e块,其中r <= t <t1-1sec。 那么到时刻t+1秒:

  • (a) 每个忠实节点都会看到所述提议区块的公证;

  • (b) 每个忠实节点必须仍然处于时代e;

  • (c) u必须提出更多的epoch-e块。

证明: 我们通过归纳证明。假设(e,s)表示所提出的块B的序列号。由基础案例和归纳步骤,声明(c)直接隐含在声明(a)和(b)中。因此,我们专注于为基础案例和归纳步骤证明这两个声明。

基础案例: s<=k. 一旦u第一次进入时代e(r时刻),等待1秒然后提议块(e,1),…,(e,k)。 声明(b)由引理6认定。

我们现在证明声明(a)。 由于事实1和引理6,在时间$ r + \Delta $,所有忠实节点必须处于时期e,并且它们必定已经收到所有在(e,1),…,(e,k)的提议。

为了表明每个忠实节点通过r + 1秒接收到每个块的公证,只需证明当它首先进入本地时代e时,(e,1)处块的父链至少与任何忠实节点的最新公证链一样新鲜。这可以用类似于引理4的方式来论证。

归纳步骤: 假设对于某些s’>=k,所有s<=s’,引理成立。我们现在表明,引理也适用于sx = s’+ 1。假设u在t时刻提议了序列号(e,sx)的块,其中r <= t < t1-1sec。所有的忠实节点通过$ t+\Delta $必定收到提议块。

我们首先证明声明(a)。我们需要讨论所有的忠实节点都会在收到此提案后投票支持。 为了说明这一点,只要认为对于任何诚实的节点i,当i接收到该提议时,它不能在时代e’>e中。

事实2: 对于任何tx <= t + 1sec,对于任何诚实的节点j,必须是节点j在时间tx的最新鲜的完全公证序列比在时间tx-2sec处的最新的完全公证序列更新鲜,或者节点u在tx时没有在epoch-e中且超过2sec。

证明: 此后,假设u在tx时处于时代e且超过2秒;否则,这条声明就无足轻重了。

假设对于某些j,在时间tx-2sec时,其最大完全公证序列结束于(e’,s’)。通过归纳假设,自上次u提出块以来,t不能超过1秒。 因此,必定是e’<= e。

注意,到时间$ tx-2sec + \Delta $时,u必须看到一个以(e’,s’)结尾的完全公证的序列。因此,如果e’= e,u在时间$ tx-2sec+\Delta $时必须提出块(e,s’+ 1),…,(e,s’+ k); 如果e’<e,u在时间tx-2sec + d之前必须提出(e,1),…,(e,k)。由于归纳假设,在另外1秒的时间内,每个忠实节点(包括j)将看到这些提议块的公证(并且通过归纳假设,它必须已经看到该时期的早期块的公证)。

由于上述事实和引理6,在t + 1秒时,没有忠实节点将处于时代e’> e。因此,通过$ t + \Delta $,所有忠实节点必须仍处于时代e; 因此他们将对(e,sx)提案进行投票。请注意,上述证明也直接暗示主张(b)。

回想一下,我们使用n’来表示提议者的数量。

定理4(双重流水线PaLa的活力): 除了在执行选择中k概率可忽略不计之外,以下必须保持:对于任何同步时间[t0,t1]其长度至少为3kn’min,对于任何忠实节点,其在时间t1的输出日志必须长于其在时间t0的输出日志。

证明: 我们首先证明以下声明:

声明1: 设$ \alpha = 3k $。如果一个忠实节点在时间$ t \in [t0,t1- \alpha min] $进入了某个时期e,那么在时间$ t + \alpha min + 2sec $,每个忠实节点要么都在其最新鲜的完全公证链中看到2k个新的公证时期块(epoch-e)(与时间t相比),要么已经进入了时代e + 1或更高。

证明: 直接从诚实协议和事实1可以得出以下:如果一个忠实节点在时代e上保持超过1分钟而在其最新鲜的完全公证链中没有看到新时代块(epoch-e),则该节点必须发送时钟(e + 1)消息。

因此,对于每个$ \alpha min $窗口$ [r,r’] \subseteq(t0 + 3sec,t1-3sec)$, 与r中最慢的忠实节点(就时代而言)相比,所有忠实节点都已推进到更晚的时代,或者他们每个人在时间r’(与时间r相比)在其最新的公证链中看到了2k个新的公证块(epoch-e)。在后一种情况下,忠实节点的最终日志必须在两者之间增长。

在前一种情况下,如果时代e + 1有一个忠实提议者,根据引理8则所有忠实节点的日志将在3秒内增长。否则,攻击者可以阻止诚实节点的输出日志增长最多$ \alpha min $。否则,攻击者可以阻止忠实节点的输出日志增长最多$ \alpha min $。

证明的其余部分来自这样的事实:n’提议者中至少有一个是诚实的,并且提议者轮换是循环的。

备注3: 在上述活跃度定理中,我们证明了忠实节点的输出日志在足够长的同步时间内必须增长(除了可忽略的概率),但我们没有表明它们必须通过忠实块(即忠实节点提出的块)来增长。这是因为在我们当前的方案中,只要作恶者能继续提出(可能是质量差的)块,就可以保留为提议者。在第8节的后面,我们将介绍如何通过一种简单的技术来避免这种缺陷。另请注意,这不是第3节基本PaLa中实现的偏向民主的提议者选举策略问题。

8 双重流水线PaLa的实际考虑

8.1 确保块质量

我们早期的双重流水线PaLa活度定理(定理4)保证了在足够长的同步期间,忠实节点的最终链的增长,但是不保证确定的新块的内容(另见备注3)。特别是,如果新确定的块是由作恶的提议者提出的,他们可以审查某些交易。可以通过在投票期间引入额外检查来解决此问题:如果提案不会遗漏长时间未完成的交易,则共识节点仅对提案进行投票。通过这种方式,试图审查长期交易的恶意提案将无法获得公证。

8.2 为提议者专用基础设施提供的实用优化

如上所述,在高性能部署中,将提议者角色与选民(投票)角色分开并激励提议者节点在计算和带宽资源方面得到更好的配置是有意义的。在这种情况下,我们可以将提议者称为加速器,并将选民称为委员会节点。

特别是,由于实际考虑,为加速器提供更多带宽并让委员会节点通过加速器路由消息是有意义的 - 这样,委员会节点就不需要实现点对点的扩散网络。

这个想法如下。 想象一下,有m个加速器并行运行。 在任何时候,主要加速器负责提议块,收集公证,并将公证发送到所有其他节点(包括委员会节点和其他加速器)。所有加速器,包括主要和备用加速器,在所有节点之间传递时钟消息 - 我们假设委员会节点收到每个时钟消息都会通知每个加速器。注意,只要其中一个加速器是忠实的,那么在同步期间,如果某个忠实节点在时间t观察到一些时钟消息,则所有忠实节点将在$ t + 2\Delta $ 观察到它。

请注意,“强同步时间”假设现在仅适用于时钟消息(因为它们通过所有加速器进行传递),但不适用于其他消息; 然而标准的“同步周期”假设仍然存在(定义1)。因此,需要对协议进行以下更改:当一个时代e加速器进入本地时代e时,不是跳过前1秒,它实际上使用前1秒与所有节点进行协调,它实际上使用前1秒来执行与所有节点的协调,以确保它从每个人那里获得他们在各自的本地时期e开始时看到的最新鲜的完全公证链。

最后,我们还可以使用聚合签名方案,如BLS [6],以便加速器可以压缩收集的多个签名,然后再将它们发送到节点。 这种方法已经在一些现有的工作[4,11]中使用。

9 总结

我们已经描述了PaLa,一种简单的区块链协议,可以任意分区容忍,并且可以抵抗控制不到1/3部分作恶节点的任何攻击者。我们描述了一种用PaLa执行委员会轮换的新技术,以及一种双管道变体,适用于性能要求较高的场景,并且具有稳定性偏好的提议者轮换策略。

PaLa的变体被认为是ThunderCore的主要网络候选者。ThunderCore正在使用Thunderella范式[14]的实际变体构建一个快速、evm兼容的加密货币。在这个范例中,节点委员会在快速路径上执行投票以确认由加速器促成的交易。当快速路径停止运行时,慢速链用于诊断和解决问题。ThunderCore正在考虑采用PaLa的一种变体,以便在大多数情况下可以在快速路径上切换加速器(这样只有在特殊情况下才能回退到慢速链路)。

致谢

我们承认与Bobby Bhattacharjee进行了有益的讨论。 我们非常感谢ThunderCore杰出的工程团队,他们激励我们解决这个问题。 我们感谢Lorenzo Alvisi和Robbert van Renesse的支持。