Thunderella:乐观即时确认的区块链

Thunderella:具有乐观即时确认的区块链

1 引言

状态机复制,也称为原子广播,是一种核心的分布式系统抽象,已研究了三十年。在状态机复制协议中,一组服务器试图就一个不断增长的、线性有序日志达成一致,以满足两个重要性质:(1)一致性,即所有服务器必须对日志有相同的视图;以及(2)活性,即每当客户端提交一笔交易时,该交易会迅速被纳入日志中。在本文中,我们也将状态机复制简称为共识。

状态机复制是复制数据库的一个基本构建模块。十多年来,谷歌和脸书等公司一直部署类Paxos协议[5,24,30]来复制其计算基础设施的重要部分。这些传统部署场景通常规模较小,依赖快速的局域网,且主要关注崩溃故障(而非拜占庭故障)。

在去中心化加密货币的推动下,近年来社区对分布式共识的大规模应用充满期待。有两种部署场景值得关注:(1)无许可环境,任何人都可以自由加入(例如,去中心化加密货币);以及(2)许可的环境,只有经过批准的参与者才能加入(例如,多家银行合作构建分布式账本的联盟区块链)。无论哪种场景,典型的部署都涉及大量由互不信任的个人和组织控制的节点(例如,数千个或更多)。

大致来说,已经考虑了两种广泛类型的协议用于大规模场景,每种都有其自身的缺陷集合:

– 首先,经典风格的协议例如 PBFT [9]和 拜占庭式Paxos [30]在正常情况下可以快速确认交易;但这些协议以复杂著称,导致实现、重新配置和维护相对困难,尤其是在大规模环境中。此外,这些协议通过采用异步(或部分同步)模型来实现“快速确认”,因此本质上最多只能容忍 1/3腐败节点 [15,38]。

– 第二,区块链式协议,以中本聪原始区块链 [19,34,35],为代表,是分布式共识领域的一项新突破:这些协议在概念上简单,并能容忍少数腐败。此外,已有研究展示如何从区块链式共识中移除昂贵的工作量证明[11,26,40],从而解决能源浪费问题。进一步地,不仅区块链的鲁棒性已被实证证明,早期的研究工作[11,40]还从数学上表明,区块链式共识在存在间歇性参与和节点更替的情况下确实实现了某些经典式协议无法达到的鲁棒性特性!然而,已知的区块链式协议存在交易确认速度慢的问题,例如,比特币的中本聪共识有10分钟的区块间隔,且需要多个区块才能以足够的置信度确认一笔交易。早期对区块链式共识进行数学分析的研究工作[35,40]指出,这种缓慢是区块链式协议固有的,因为预期的区块间隔必须设置得足够大,以确保协议的安全性。

一个自然而然的问题是,是否存在某种方式可以同时获得这两个“世界”的优势。遗憾的是,早期的研究[38–40]给出了否定的答案,表明一种称为 “响应性”的快速交易确认的自然概念在面对 1/3(即使是静态的)腐败节点在经典或无许可模型中。本文中,我们提出了一种称为乐观响应性的新概念,使我们能够“绕过”这一下界,从而在实践中大多数情况下实现响应性,同时在最坏情况下仍能容忍少数腐败。在我们的方法中,在乐观情况下(例如,当超级多数是诚实的时),我们可以享有异步协议的快速特性;同时,我们仍然保留同步协议(例如区块链协议)的容错性以及其鲁棒性属性(例如,支持间歇性参与)。更准确地说,我们展示了如何将一条快速且简单的“异步路径”——该路径保证一致性但不保证活性——与一条(较慢的)同步“备用路径”相结合,后者仅在出现问题时才执行。

1.1 Thunderella范式

为了表征我们所说的“快速”或“即时确认”,我们采用了与 Attiya 等人响应性工作中所提出的相同概念[1],并被后续研究者广泛采用[23,38]。当且仅当输入到诚实节点的任何交易在确认时间上仅依赖于实际网络延迟,而不依赖于任何先验已知的网络延迟上界时,该共识协议被称为具有响应性。在本文中,我们使用 δ表示实际网络延迟,并使用Δ表示网络延迟的先验已知上界,其中 Δ可能作为协议的输入提供。

如[38],所示,实现响应性需要我们假设三分之二的参与者是诚实的。(此外,所有已知的具有响应性的协议都非常复杂,因此难以实现。) 为了解决这一问题,我们在此转而考虑一种“乐观响应性”的概念——即仅当某些“良好条件”满足时才要求具备响应性。更准确地说,我们考虑两组条件:

– 最坏情况条件(表示为 W),在此条件下协议提供最坏情况保证,包括一致性和“慢速”确认(例如,W=多数诚实)。

– 乐观情况条件(表示为 O ⊆ W),在此条件下协议还提供响应性确认(例如, O=“超过 3/4的参与者是诚实且在线的,并且某个指定的参与者(“领导者”)是诚实的”)。

我们的主要成果是一种范式,可以将任何在条件W下满足一致性和活性的区块链协议(无论是否许可),转换为一种新协议。该新协议在“本质上”相同的条件 W下(在许多情况下实际上是相同的条件 W)仍满足一致性和活性,并且在条件 O下额外满足乐观响应性。

The idea in a nutshell. 为解释我们的方法,首先考虑以下简单协议:

– 我们有一个指定的实体:领导者,或称为“加速器”。

– 交易被发送给领导者;领导者对交易进行签名(使用递增的序列号),并将已签名的交易发送给由参与者组成的“委员会”。

– 委员会成员对所有由领导者签名的交易进行确认(ack),但每个序列号最多只确认一个交易。

– 如果一笔交易获得了超过委员会3/4成员的签名,则我们将该交易称为已公证的交易。参与者可以直接输出他们最长的、序列号连续的已公证的交易序列;所有这些交易都被确认。

不难看出,该协议在条件 W′=“委员会中有一半是诚实的”下是一致的;此外,在条件 O=“领导者是诚实的,且委员会中有3/4是诚实的”下,该协议满足具有乐观响应性的活性。事实上,在这些乐观条件下,我们仅需2个通信轮次即可确认一笔交易!这种方法极为实用,实际上该协议已在实践中广泛使用——例如 chain.com 就采用非常类似的技术作为其许可区块链(并成功处理了大量交易,实现快速确认)。

然而,这种方法的问题在于,协议在条件 W′ 下无法满足活性(即使是 “慢”活性)。如果领导者作弊(或只是从网络中断开),协议将停止运行。(事实上,在这种情况下 chain.com 只能手动修复问题。)

为了解决这一问题,我们利用底层(慢速)区块链协议,该协议在 W=“大多数诚实参与者”的假设下同时满足一致性和活性。大致而言,如果参与者发现交易未被领导者/委员会确认,则会将有关此情况的某些“证据”发送到底层区块链。随后我们进入一个“冷却期”,在此期间,委员会成员停止对来自领导者的消息进行签名,但仍允许参与者广播他们迄今为止所见到的任何已公证的交易。冷却期的长度以底层区块链上的区块数计算(例如 κ个区块,其中 κ是一个安全参数)。最后,在冷却期结束后,我们可以安全地进入“慢速期”,在此期间,交易仅在底层区块链上得到确认。接下来,我们可以利用区块链更换领导者(如有需要),并开始乐观协议的新纪元。

让我们指出设置冷却期的原因:如果没有冷却期,参与者在进入“慢速模式”前可能会对已确认的交易集合存在分歧,从而导致视图不一致。冷却期使得诚实参与者能够将他们所看到的所有已公证的交易发布到(缓慢的)底层区块链上,从而(缓慢地)使这一交易集合达到一致性;一旦我们在这个一致的视图上达成共识(在冷却期结束时),我们就可以最终完全切换到在区块链上确认新的交易。

Collecting evidence of cheating. 接下来需要解释如何收集领导者(和/或委员会)作弊或仅仅是“不可用”的证据。这其实也很简单:如果某个参与者发现自己的交易未被领导者或委员会确认,他可以将该交易发送到底层区块链。此外,领导者还被要求确认其在区块链上看到的所有交易。

现在,如果参与者在区块链上看到某笔交易在足够长的时间内(以底层区块链上的区块数计算,例如 n个区块内)仍未被公证,他们就知道领导者/委员会必然存在作弊或不可用的情况,因此应进入冷却期。(注意,只要领导者能在底层区块链生成 n个区块之前确认交易,他就不会被“误判”为作弊;并且由于底层区块链的安全性,这些区块无法被过快地创建。)

Selecting the committee. 到目前为止,我们已经构建了一个协议,在条件 W ∩ W′下满足一致性和活性(即假设大多数参与者是诚实的,并且委员会中也有诚实多数),并且在条件 O下还额外满足具有乐观响应性的活性。现在的问题是如何选择委员会。我们考虑两种不同的方法:

– 将所有参与者作为委员会:在许可设置中,最简单的方法是直接将所有参与者用作委员会。在这种情况下,W′= W因此,我们在此条件下自然地具有容错性 W。一种改进通信复杂度的变体方法是从参与者集合中随机抽取一个子集作为委员会(例如,使用 [11]中的方法,该方法额外需要一个随机预言机),并定期更换委员会(以确保自适应安全性)——然而,由此产生的协议只有在腐败节点“缓慢”出现时才是安全的(以确保攻击者没有足够时间在委员会被切换之前腐蚀整个委员会)。如果改为使用可验证随机函数(VRF)和随机预言机在秘密状态下进行抽样(如 [32]中所述),我们还可以确保所得到的协议在带有擦除模型的情况下是自适应安全的,即使存在“即时腐败”。

我们提到,如果使用 Thunderella 构建加密货币,则这些方法也可用于无许可环境:此时我们可以使用(可能是最近利益相关者的)子样本来组成一个委员会。

– 使用“近期矿工”作为委员会: 一种适用于许可和无许可环境的不同方法是将近期区块的矿工作为委员会成员(如[38]中所做的那样)。然而,我们注意到,要依赖这种方法,我们需要确保底层区块链是“公平的”[37],即诚实挖出的区块比例接近诚实参与者比例。这对于中本聪原始区块链并不成立(例如见[17]),但如[37],所示,任何区块链都可以被转化为公平的区块链。如果我们采用这种方法,所得到的协议将在条件 W下保持一致性和活性(即诚实多数),并且在条件 O下满足乐观活性。(同样,这仅在适应性腐败且腐败过程 “缓慢”的情况下提供安全性,因此近期矿工集合能在全部被腐败之前足够快地发生变化。)

无许可Thunderella

例如,如果我们采用第二种方法(将最近的矿工作为委员会成员)应用于中本聪基于工作量证明的区块链,我们将得到以下定理:

定理1 (Thunderella用于无许可环境,非正式表述)。 假设存在一个工作量证明随机预言机。那么,存在一种状态机复制协议,能够在无许可环境中实现一致性以及(非响应式)活性,只要对手在每一轮中所掌握的在线计算能力不超过 1/2 −ε总量,在此其中 ε是一个任意小的常数;此外,对手需要花费较短的时间来自适应地腐蚀节点。进一步地,如果超过 3/4的在线计算能力是诚实且在线的,则该协议在领导者为诚实且在线的任何“纪元”中,经过短暂的非响应式预热期后,能够实现响应性。

许可的 Thunderella

类似的定理也可以在许可环境中成立(例如,在 [40], 提出的“睡眠模型”中,或甚至仅在Dolev‐Strong[14]的“经典”模型中)。

经典模式本质上是现有分布式系统和密码学文献中采用的标准同步模型。在此模型中,所有节点预先生成,并将其身份和公钥作为输入提供给协议;此外,崩溃节点被视为故障节点,并计入腐败预算。在经典的同步网络中,我们证明经典的 Dolev‐Strong 拜占庭协议 [14] 可以扩展以实现 Thunderella 的底层“区块链”。在这种情况下,我们的 Thunderella 范式(使用第一种方法实例化委员会)得出以下非正式定理:

定理2(Thunderella用于许可的经典环境(非正式))。 假设存在公钥基础设施和单向函数。在经典环境中,存在一种状态机复制协议,能够在任意数量的完全自适应的拜占庭式破坏下实现一致性和(非响应式)活性,其中 f< n表示节点总数 n;此外,只要领导者是诚实的,并且⌈(n+f)/2+ 1⌉个节点是诚实的,该协议就能实现响应性。

“睡眠”模型最近由帕斯和石 [40]提出,旨在捕捉大规模许可共识中因 “间歇性参与”而产生的需求。具体而言,睡眠模型实际上受到比特币等无许可去中心化加密货币的启发,其中节点在协议运行期间可能频繁加入和退出,而协议即便对于较晚加入的参与者,或曾经历短暂中断而后重新加入协议的参与者,也应保证一致性和活性。

睡眠模型本质上是“许可的”,因为已批准的协议参与者集合及其公钥事先已知,并作为输入提供给协议。然而,与经典设置不同的是,(1)允许节点为非参与的(即sleeping);(2)睡眠节点不被视为故障;以及(3)协议可能无法预先知道将有多少参与者实际上会出现。相比之下,在经典设置中,非参与的节点被视为已崩溃,并计入腐败预算;此外,经典协议无需为那些已经崩溃但之后重新唤醒并重新加入的节点保证一致性和活性。

在这种睡眠模型中,帕斯和石[40]表明,大致来说,当大多数在线(即非睡眠)节点是诚实的时,我们可以实现共识(有趣的是,与经典同步模型不同,[40]还证明了没有任何状态机复制协议能够容忍超过 1/2的腐败(在在线节点中)。

我们的Thunderella范式(再次使用第一种方法来选择委员会)可以在睡眠模型中通过将睡眠共识协议作为底层区块链来实例化。这在睡眠环境中引出了以下非正式定理(我们假设对手可以自适应地使诚实节点进入睡眠状态)。

定理3(Thunderella用于许可型睡眠环境(非正式))。 假设存在公钥基础设施(PKI)、增强陷门置换和公共参考字符串(CRS)。存在一种状态机复制协议,能够在具有静态腐败的睡眠环境中实现一致性和(非响应式)活性,只要在每一 轮中任意小常数 ε下,有 1/2 −ε比例的在线节点是诚实的;此外,如果有超过 3/4 比例的节点是诚实且在线的,则在领导者为诚实且在线的任何纪元中,该协议在经过一个短暂的非响应式预热期后可实现响应性。

事实上,上述定理也可以扩展到带有擦除的自适应腐败情况,使用自适应安全版本的休眠共识作为Thunderella的底层区块链,前提是存在可验证随机函数和随机预言机(采用来自[32]的方法)。

乐观诚实阈值的下界。 我们进一步证明了我们的3/4的乐观界限是紧致的:任何在最坏情况下仅对诚实多数具有弹性的协议,当超过1/4的参与者可能被腐败时,无法实现乐观响应式。

实际考虑:即时确认和可扩展性。 中本聪的区块链协议的低延迟和可扩展性差通常被视为比特币及其他加密货币的主要瓶颈。

我们的范式为解决这些问题提供了一种非常实用且简单的方法。Thunderella 范式展示了如何在当前运行的区块链基础上构建,以实现交易的 “乐观即时确认”。此外,请注意,在我们的协议中,参与者只需发送交易发送给领导者,由领导者进而领导委员会确认交易。值得注意的是,底层区块链实际上仅在出现问题时才被使用,并且区块在确认之前无需分发到整个网络;因此,Thunderella 还解决了中本聪的区块链协议的可扩展性问题。当然,这两个保证都只是“乐观的”——但可以说,在正常情况下,我们期望有3/4的参与者是诚实的,而领导者可以通过激励(支付报酬)来履行其职责(如果未能履行,则会被踢出)。因此,我们认为我们的方法是一种切实可行的途径,可绕过当今加密货币的主要瓶颈。

比较。 表面上,我们的想法让人联想到经典式协议,例如PBFT和拜占庭 式Paxos。特别是像PBFT这样的协议,其正常路径非常简单,仅包含 O轮次的投票。然而,当正常路径卡住时,PBFT式协议会退回到一种“视图变更”机制,该机制也是响应性的——因此这些协议在最坏情况下只能容忍 1/3个错误,并且由于需要处理异步性而不可避免地变得复杂。(此外,这种方法不适用于无许可环境中的协议)。我们的关键洞察是在最坏情况下退回到一个同步路径,从而让我们能够规避部分同步性的 1/3下界,同时在大多数实际情况下仍保持响应性。此外,由于我们的协议本质上是同步的,因此我们能够受益于同步协议所具有的简单性和鲁棒性(例如区块链)。

有趣的是,Thunderella在快速路径上也比大多数PBFT或类Paxos协议快一个常数因子。PBFT风格的协议即使在正常路径中通常也需要多轮投票(参见 Thunderella恰好只需一轮)——而后续的投票轮次是为了应对可能发生视图变更的情况。尽管可以将正常路径压缩为仅需一轮投票,但这通常要么以牺牲容错性为代价(例如,仅能容忍 1/5个腐败节点),[42]要么需要在正常路径之上再增加一层乐观机制——从而进一步增加了本已复杂的协议的复杂性[29]。

路线图。 在本扩展摘要中,我们仅提供一般 Thunderella 范式的描述及其证明(如上所述为非正式描述),并假设存在一个固定的委员会,其中多数成员是诚实的。关于如何选择委员会的正式处理将留待在线完整版本 [36] 中讨论 (尽管我们在上文已对其进行过非正式描述)。

2 定义

本节提供非正式定义,详细的形式化定义将在在线完整版本 [36] 中给出。

我们采用标准的交互式图灵机(ITM)方法来建模协议执行。协议是指一组交互式图灵机(也称为节点)相互交互的算法。

由环境 Z(1κ)(其中 κ 是安全参数)驱动的协议 Π 的执行,该环境会激活若干节点,将其设为诚实或腐败的节点。诚实节点将严格遵循协议的规定,而腐败的节点则由对手 A控制,该对手读取它们的所有输入/消息,并设置其输出/消息以发送。

协议的执行以轮次进行,每一轮表示一个原子时间步长。此后,我们交替使用轮次和时间这两个术语。在每一轮开始时,诚实且在线的节点从环境 Z接收输入;在每一轮结束时,诚实且在线的节点向环境 Z发送输出。

腐败模型

在标准的分布式系统或密码学文献中,崩溃节点通常被视为故障并计入腐败预算。在本文中,我们描述了一个更通用的模型,在该模型中我们区分崩溃节点(也称为睡眠节点)和腐败节点。一个诚实节点可能会经历短期或长期中断,在此期间无法参与协议。然而,这种崩溃节点并不在对手的控制之下——在这种情况下,我们不将该节点视为腐败节点。非正式地,我们通常将未崩溃的诚实节点集合称为在线。我们同时也认为所有恶意节点都是在线的(因为这会给予对手更大的优势)。

我们强调,不将崩溃节点视为腐败节点的动机在于,这使我们能够证明一个更强大的定理:在委员会中有 α 比例的成员是诚实但不一定在线的情况下(并假设底层区块链是安全的),我们的 Thunderella 范式仍能确保一致性和最坏情况下的活性。特别是正如我们所指出的, α 可以小至委员会中的单个成员——但在这种情况下,实现即时确认的条件会更为严格(即所有委员会成员都必须是诚实且在线的)。在一种更传统的模型中,若将崩溃视为腐败,则我们所有的定理仍然适用——只是“诚实”将等同于“诚实且在线”。

更正式地说,在我们的模型中,环境 Z控制节点的生成、腐败、休眠或唤醒:

– 在协议执行期间的任何时刻,环境 Z都可以生成新节点,而新生成的节点可以是诚实的或恶意的。对手 A完全控制所有恶意节点。

– 在协议执行期间的任何时刻, Z可以向一个诚实(可能处于睡眠状态)的节点发出腐败指令。当这种情况发生时,该节点的内部状态将暴露给 A,并且 A此后将控制该节点。

– 在协议执行期间的任何时刻, Z可以向一个诚实节点发出睡眠指令。当这种情况发生时,该节点立即进入睡眠状态,并停止发送和接收协议消息以及执行任何计算。睡眠类似于经典分布式系统术语中的崩溃故障概念。然而,在本文中,我们将睡眠节点视为诚实节点,而非将其归入故障预算中。

– 在协议执行期间的任何时间, Z可以向一个诚实的休眠节点发出唤醒指令。此时,该节点立即醒来并继续参与协议。当一个诚实的休眠节点醒来时,该节点在休眠期间本应接收的待处理消息以及一些被对抗性插入的消息可能会被传递给该正在醒来的节点。

– 在协议执行期间的任何时间, Z都可以向一个受损节点发出终止指令。此时,该受损节点将从协议执行中移除,并不再被视为在线节点——但请注意,对手 A仍然知晓该节点在被终止前的内部状态。

形式上,我们使用术语online节点来指代以下集合中的节点:(i)诚实且未休眠的节点;或(ii)腐败但尚未被终止的节点。

通信模型

我们假设诚实且在线的节点可以向所有其他诚实且在线的节点发送消息。对手 A负责调度消息传递。 A不能修改诚实节点广播的消息内容,但可以对诚实且在线节点发送的消息进行重新排序和延迟,可能受到稍后定义的最大延迟约束。对手 A可以向部分诚实且在线节点发送消息,但并非全部。接收者不知道发送者的身份。

形式上,我们说 (A, Z) 满足 Δ有界延迟当且仅当 Z输入 Δ到所有诚实节点时它们被创建,并且此外以下条件成立: Δ-有界延迟。假设一个诚实(且在线)的节点在时间 t 发送一条消息,那么在任意轮次 r ≥ t+Δ,所有在轮次 r 在线的诚实节点都将收到该消息,包括那些可能一直处于休眠状态但在轮次 r 刚刚唤醒的节点,以及可能在轮次 r 开始时刚刚生成的节点。

在本文中,我们假设在生成时 Z向所有诚实节点输入最大延迟参数 Δ(如上述Δ‐有界延迟定义中所述)——这意味着协议具有关于网络最大延迟的先验知识。这类似于经典分布式系统文献中的同步通信模型。

2.1 经典、休眠与无许可模型

上述通用模型对节点生成的时间、生成的节点数量以及允许加入协议的节点均未施加任何限制。因此,该通用模型能够描述无许可的执行。

在这个通用模型中,我们还可以通过在经典 和休眠 执行上施加约束 来建模A, Z)。

经典设置是绝大多数分布式系统文献所关注的。在经典执行中,要求A, Z)预先生成所有编号为 1..n的节点;此外,假设诚实节点始终在线(即A, Z)不允许发出休眠 或唤醒指令。这种休眠 模型最初由帕斯和石[40],提出,旨在介于完全无许可和经典的许可模型之间。在休眠执行中,允许的参与者集合预先确定,数量为 1..n;然而,节点可以延迟加入,也可以进入休眠状态并随后再次唤醒。进入休眠的节点不被视为腐败的,当它们唤醒后,我们定义的安全属性(如一致性和活性)必须对其生效。

我们使用术语(n, ρ,Δ)‐无许可环境、(n, ρ,Δ)‐睡眠环境,或(n, f,Δ)‐经典环境来描述我们所关注的执行环境以及(A, Z)所遵循的参数(其中 ρ是腐败比例,而 f是恶意节点的绝对数量)。这些术语的正式定义将在在线完整版本[36]中给出。

2.2 状态机复制

状态机复制在分布式系统文献的30年中一直是一个核心抽象。在状态机复制协议中,一组节点力求随时间就一个不断增长的日志达成一致。我们需要两个关键的安全属性:(1)一致性,即所有诚实节点的日志彼此一致,尽管某些节点的进度可能比其他节点快;(2)活性,即作为输入被诚实节点接收到的交易能够快速地在所有诚实节点的日志中得到确认。现在我们正式定义一个协议实现 “状态机复制”抽象的含义。

语法。 在状态机复制协议中,每轮次内,一个诚实且在线的节点在轮次开始时接收来自 Z的一组交易txs作为输入,并在轮次结束时将迄今为止收集的日志输出到 Z。

安全定义。 设 Tconfirm(κ, n, ρ,Δ, δ) 和 Twarmup(κ, n, ρ,Δ, δ) 为关于安全参数 κ的多项式函数,以及其他视图参数,例如节点数量 n、腐败的比例 ρ、实际的最大网络延迟 δ、由 Z提供给协议作为输入的网络延迟上界Δ等。

定义1(状态机复制协议的安全性)。 我们称一个状态机复制协议 Π关于某个 (A, Z)满足一致性(或(Tconfirm, Twarmup)-活性),当且仅当存在一个可忽略函数 negl(·),使得对于任意 κ ∈ N,在视图 ←EXECΠ(A, Z, κ)的选择上,除以不超过negl(κ)的概率外,均满足一致性(或(Tconfirm, Twarmup) -活性):

一致性: 当且仅当满足以下条件时,一个视图满足一致性:

公共前缀。 假设在视图中,一个诚实节点 i 在时间 t 向 Z 输出日志LOG,且一个诚实节点 j 在时间 t′ 向 Z 输出日志LOG′(i 和 j 可能相同或不同),则必有 LOG ≺ LOG′ 或 LOG′ ≺LOG 成立。此处关系 ≺ 表示“是⋯⋯的前缀”。按照惯例,我们假设对于任意 x, ∅ ≺ x 和 x ≺ x 成立。

自洽性。 假设在视图中,一个节点 i在时间 t和 t′ ≥ t是诚实且在线的,并在时间 t和 t′分别输出日志LOG和LOG′,则有LOG ≺ LOG′。

活性: 一个视图满足(Tconfirm, Twarmup)‐活性,当且仅当以下条件成立:如果在某个轮次 Twarmup< t ≤ |视图| −Tconfirm中,某节点在轮次 t是诚实且在线的,并且从 Z接收到包含交易m的输入集合txs,或在轮次 t将其输出日志中的 Z包含交易 m,则对于任意在时间 t′ ≥ t+ Tconfirm诚实且在线的节点 i,设LOG为节点 i在时间t′的输出,均有m ∈LOG。

直观上,活性意味着输入到诚实节点的交易会在 Tconfirm 时间内被包含在诚实节点的日志中;此外,如果一笔交易出现在某个诚实节点的日志中,那么它将在 Tconfirm 时间内出现在所有诚实节点的日志中。

2.3 抽象区块链协议

区块链协议可被视为实现状态机复制的一种方式。我们现在正式定义协议实现 区块链抽象的含义。在本文中,我们的最终目标是实现状态机复制,而我们利用抽象区块链作为底层构建模块。我们注意到,尽管区块链抽象表面上可能类似于状态机复制,但该抽象实际上使我们能够进一步表达(1)通过链增长形成的大致时间概念;以及(2)公平性属性[37]通过链质量。

语法和安全定义

语法。 一个抽象区块链协议满足以下语法。在每一轮中,每个在本轮诚实且在线的节点在轮次开始时从 Z接收到一组交易txs;并在轮次结束时向 Z输出一条抽象区块链链。一个抽象区块链表示为chain,是以下格式区块的有序序列:

chain:={txsi}i∈[|chain|]

其中每个 txsi 是特定于应用的有效载荷,例如一组交易。

Blockchainnotations. 我们使用符号表示 chain 来表示一个抽象区块链。符号表示 chain[: −] 表示整个链除去末尾的 个区块;chain[:] 表示直到长度为 处的区块为止的整个链;chain[−:] 表示链的末尾 个区块;而 chain[: ] 表示所有长度为 或更长的区块。

此后,我们称链为“视图中的诚实链”,当且仅当该链是某个诚实(且在线)节点在某一视图的某一轮次中对环境 Z的输出。我们使用符号表示 chain t i(view) 来表示节点 i 在视图的第 t轮次中的链——由于上下文明确,我们通常在上述符号表示中省略显式写出视图。

安全定义。 一个区块链协议应满足链增长、链质量和一致性。直观上,链增长要求诚实节点的区块链稳定增长,既不太快也不太慢。链质量要求在任何诚实节点的链中,任意足够长的连续区块窗口内都包含一定比例由诚实节点挖出的区块。一致性要求所有诚实节点的链除了末尾少数几个区块外其余部分均保持一致。我们将在下文对这些安全属性进行形式化定义。

定义 2 (抽象区块链协议的安全性)。 我们称一个区块链协议 Πblockchain关于 某个(A, Z)满足(T, g0, g1)-链增长、(T, μ)-链质量以及 T-一致性,当且仅当存在一个可忽略函数negl(·),使得对于每个 κ ∈ N,在视图 ←EXECΠblockchain(A, Z, κ)的选择上,以下关于视图的条件成立的概率例外不超过negl(κ):

(T,g0, g1)-链增长。 一个视图满足(T, g0, g1)‐链增长,当且仅当以下条件成立:

长度一致性: 如果在轮次 r中某条诚实链的长度为 ,那么在 在轮次 r+Δ 中,所有诚实链的长度必须至少为 。

增长下界: 对于任意 r 和 t,使得 g0(t − r) ≥ T,设链r 且链t分别表示在轮次 r和 t中的两条诚实链,成立 that |chaint| − |chainr| ≥⌊g0(t − r)⌋

增长上界: 对于任意 r 和 t,满足 g1(t − r) ≥ T,设 chainr 和 chaint 分别表示在轮次 r 和 t 中的两条诚实链,有 |chaint| − |chainr| ≤⌊g1(t − r)⌋

(T, L, μ)-链质量。 一个视图满足(T, L, μ)‐链质量,当且仅当以下条件成立:对于 该视图中的任意诚实链 chain,对于 chain 中任意 T个连续区块 chain[j+ 1..j+ T],其中超过 μ比例的区块是由诚实节点在至多 L个区块之前挖出的——这里我们说一个区块 chain[i]“由诚实节点在至多 L个区块之前挖出”,当且仅当存在一个交易集合 txs,使得 txs ⊆chain[i],并且某个诚实节点在其最后一次 输出包含前缀 chain[时,其输入中包含了这些输入交易 txs: i−L](这里如果 i−L< 0,则将其向下取整为 0)。

T-一致性。 一个视图满足 T‐一致性,当且仅当满足以下条件:对于在轮次 r 和 t ≥ r中的任意两条诚实链chainr和chaint,均有 chainr[: −T] ≺ chaint

我们强调,由于 chainr 和 chaint 可能属于同一个节点,上述定义还意味着“未来自一致性”,但 trailing T 区块除外。

活性作为导出属性。 直观上,活性要求如果诚实节点接收到交易 m 作为输入,则 m 会很快出现在诚实链中。更正式地说,我们称区块链协议 Πblockchain 满足 (K, T)‐活性,关于某个 (A, Z),当且仅当存在一个可忽略函数 negl(·),使得 对于每个 κ ∈ N,在视图 ← EXECΠblockchain(A, Z, κ) 的选择上,除了以 negl(κ) 的概率外,以下条件成立:

– 假设在任意轮次 r ≥ t, Z 总是将包含某个 m 的集合输入到每个诚实且在线的节点 i,除非 m ∈chainr i[: −T]。那么,对于视图中长度至少为 + K+ T 的任意诚实链(记为 chain),均有 chain[: +K] 包含 m,其中 表示时间 t 的最短诚实链长度。

区块链协议的活性直接由链增长和链质量决定,如下引理所述。

引理1 (活性)。 假设某个区块链协议 Πblockchain关于正参数 K, g0, g1, K ′, L, μ和 T,满足(K, g0, g1)-链增长、(K′, L, μ)-链质量以及 T-一致性,则该协议满足关于(2K+ 2g1+ K ′+ L, T)-活性,相对于(A, Z)。

证明。 我们忽略发生相关坏事件的可忽略比例的视图。设r′为某个诚实链首次达到长度至少为+ K+ g1+ K ′+ L+ T的最早轮次,并设链∗为在轮次r′中长度至少为+ K+ g1+ K ′+ L+ T的一条诚实链。根据链质量,在窗口链∗ [+ K+ g1+ L+ 1:+ K+ g1+ K ′+ L]中,必然存在一个记为B的诚实区块,使得 Z将B的内容(或其子集)输入到某个诚实节点 i,在轮次 r ≤ r′时其链包含前缀链∗ [:+ K+ g1+ 1]。根据链增长上界,在轮次 t中最长诚实链的长度至多为 + K+ g1,因此B必须在某个满足 t ≤ r ≤ r′的轮次 r之前被输入到某个诚实且在线的节点 i。根据假设,除非链 r i[: −T]已经包含m,否则B必须包含m。根据一致性,链∗和链r i的长度均不得超过 + 2(K+ g1) + K ′+ L+ T。根据一致性,对于任意长度至少为+ 2(K+ g1) + K ′+ L+ T的视图中的诚实链ch,必有链r i[: −T] ≺是ch[:+2的前缀(K+ g1)+ K′+ L],且链 ∗ [: −T] ≺是ch[:+ 2的前缀 (K+ g1)+ K′+ L],因此ch[:+ 2(K+ g1)+ K′+ L]必须包含m。

区块链意味着状态机复制。 对于任意区块链协议 Πblockchain,很容易构造一个 状态机复制协议,其中(1)节点运行一个Πblockchain的实例;(2)诚实节点 将所有新看到的交易相互广播;并且(3)在每一轮中,节点从当前链中移除末尾的 T个区块(其中 T为一致性参数),并将截断链输出给环境 Z[38,40]。

不难看出,所得到的状态机复制协议的一致性直接来源于区块链的一致性;而 活性则来源于
区块链的一致性和活性。上述直观思想在早期工作中已被形式化 [38,40]。

2.4 预备知识:响应性

响应性。 回顾一下,在本文中我们始终假设(A, Z)遵循某个 Δ的 Z ‐有界延迟,即协议事先获知一个网络延迟上界 Δ,并且所有诚实节点的消息都能在Δ轮次内送达。一个状态机复制协议被称为是响应性的,如果其交易确认时间不依赖于网络延迟的先验已知的上界 Δ ,而仅取决于实际网络最大延迟。为了更好地理解我们的结果,我们在下方形式化地定义响应性的概念,并陈述一个已知的下界结果,表明在面对 1/3比例的腐败节点时,实现响应性是不可能的。

在本文的后续部分,我们将展示,如果我们只是乐观地希望在幸运情况下实现响应性,则可以设计出即使在超过 1/3比例节点腐败时仍能保持一致性和活性的协议。在实践中,这意味着我们可以拥有大多数时候具备响应性的协议,即使超过1/3的节点被腐败,协议仍能保证一致性和活性,尽管在遭受攻击时性能会下降。

响应性。 我们为状态机复制协议定义了一个称为响应性的技术概念。直观上,响应性要求除了初始可能存在的(非响应式的)预热期外,此后输入的所有交易感知到的交易确认延迟应独立于网络延迟的先验集合上界 Δ。如早期研究所示[15,38], ,如果腐败节点的比例达到或超过 1/3 ,则响应式状态机复制是不可能实现的(即使在具有静态腐败的许可的经典环境中,且即使假设存在工作量证明预言机)。

定义3(响应式状态机复制 [38])。 假设(A, Z)对某个 Δ满足 Δ-有界延迟。我们称一个状态机复制协议 Π关于(Tconfirm, Twarmup)-响应性,当且仅当Π关于(A, Z)满足(Tconfirm, Twarmup )-活性,并且此外函数Tconfirm不依赖于先验的延迟上界 Δ。

我们说一个协议 Π在(n, f,Δ)‐经典静态环境中满足一致性(或响应性)条件,当且仅当对于每一对概率多项式时间(A, Z)组合而言尊重(n, f,Δ)‐经典执行和静态腐败, Π满足关于(A, Z)的一致性(或响应性)。

我们同样可以定义(n, ρ,Δ)‐休眠、静态环境以及(n, ρ,Δ)‐无许可、静态环境。

定理4 (针对1/3腐败[38]的响应性不可能性)。 对于任意满足 n ≤ 3f的 n和 f,以及关于 κ和 δ的任意多项式Tconfirm,和关于 κ、Δ、 δ的 Twarmup,存在某个关于 κ的多项式函数 Δ,使得在(n, f,Δ)-经典静态环境中,即使假设存在工作量证明预言机,任何状态机复制协议都无法同时实现一致性和(Tconfirm, Twarmup)-响应性。

上述定理的证明由帕斯和石在最近的工作 [38] 中提出,他们修改了Dwork等人 [15] 的经典下界证明,并使其在工作量证明设置下仍然成立。

回想一下,在我们的形式化框架中,许可‐经典被表示为对(A, Z)的约束。这意味着在经典设置中 n ≤ 3f的下界会立即推出在更宽松的设置中的下界,其中(A, Z)无需遵守许可‐经典的约束,只要满足 n ≤ 3f(或等价条件成立)。换句话说,上述不可能性结果也适用于睡眠式和无许可设置(我们将在在线完整版本[36]中推迟给出这些设置下的正式定理陈述)。

有趣的是,在许可设置下,假设存在公钥基础设施(PKI)[9], ,以及在无许可环境下假设采用工作量证明[38](并在其他技术假设下),如何实现针对少于 1/3比例腐败节点的响应式状态机复制也已被研究清楚。

3 具有静态委员会的BasicThunderella协议

我们首先描述基本的Thunderella协议,假设存在一个预先为所有节点所知的静态委员会。关于如何执行委员会重新配置的内容,我们将在在线完整版本[36]中进行讨论。为了概念上的简洁性,我们描述的协议版本中,区块链还会在后台持续收集交易;在实际实现中,进一步优化我们的理论构造并不会太困难,从而使得在乐观条件下区块链无需存储所有交易的额外副本。

如前所述,通常情况下,Thunderella 范式可以通过任何合适的异步协议实例化以作为乐观路径,以及通过任何合适的同步协议实例化以作为回退路径。然而,我们认为一种特别有吸引力的实例化方式是:在乐观路径中使用一种简单的基于投票的协议,而在回退路径中使用区块链。因此,为了具体说明,我们将针对这一特定实例化方案描述 Thunderella。

术语

我们的基本方法假设有三个逻辑实体:

– miners底层区块链Πblockchain的矿工;

– 一个leader领导者;以及

– 一个committee委员会,记为委员会。

为了保持一致性和最坏情况下的活性(即以底层 Πblockchain的速度进行确认),我们需要假设:(1)底层区块链Πblockchain保持安全性(这将根据底层区块链的具体实现方式转化为不同的合规规则);(2)假设委员会中有 α比例的成员保持诚实(但不一定在线),其中 α是一个调节参数,可用于权衡安全性和性能,这一点将在后文说明。值得注意的是,领导者无需被信任来保证一致性和最坏情况下的活性。

具体来说,在我们的描述中,我们通常假设 α= 1/2,但实际上我们的方法可以推广到任何满足 0< α< 1 的选择;并且在适当的情况下,我们会说明如何将方案的参数推广至任意的 α。

为简便起见,在本节中我们首先假设一个静态委员会。在许可设置中,该委员会可以是所有节点的集合。在参与者集合事先未知的无许可设置中,我们可以使用已知技术从底层区块链动态选举委员会[37,38]或由权益持有者担任委员会成员[6,11,32]——但我们将关于委员会选举和重新配置的讨论留到在线完整版本中[36]。尽管本节假设了静态委员会,我们的基本协议支持领导者的重新配置。在下文的描述中,我们重点阐述实现领导者重新配置的机制,而不具体指定采用何种领导者重新选举策略——具体采用何种策略取决于应用场景,因此我们将策略的讨论留到在线完整版本中[36]。

3.1 我们的基本协议概要

我们首先描述我们基本协议背后的基本思路。为了简化,我们将描述集中在单个纪元内发生的情况,其中领导者的身份是共识知识。

乐观快速路径。 乐观快速路径包含一轮投票,用于确认每笔交易(或批次)。领导者在乐观路径中充当协调者,对交易进行排序。它为每个新收到的交易(或批次)打上随时间递增的序列号,并将生成的元组 (seq,tx) 称为公证请求。每当委员会成员收到来自领导者的公证请求 (seq,tx) 时,只要其此前未对序列号 seq 签名过任何元组,便会签署该元组 (seq,tx)。为了保证一致性,每个诚实的委员会成员对每个序列号 seq 最多只能签署一个唯一的元组 (seq,tx)。

每当一个诚实节点观察到一个公证请求(序列号,交易)已收到来自超过 3/4 的委员会成员的投票时,该(序列号,交易)即被视为已公证。尽管任何已公证的交易都可被确认,但只有当对于每一个 s<序列号,元组(s,)都已被输出后,诚实节点才被允许输出该已公证的(序列号,交易)元组。换句话说,输出序列不允许跳过任何序列号(因为交易必须按线性化顺序处理)。此后,我们将具有连续且无跳跃序列号的已公证交易序列称为幸运序列。也就是说,诚实节点总是输出其已观测到的最长幸运序列。

不难看出,只要大多数在线委员会成员是诚实的,乐观快速路径就满足以下性质(下面我们重点讨论 α= 1/2 的具体情况,尽管该论证可以很容易地推广到 α 的任意取值):

– 即使领导者是腐败的且委员会可能不在线,以下agreement属性仍然满足:如果任意两个诚实节点分别输出(seq,tx)和(seq,tx′),则必须有tx = tx′ (除了在视图选择上存在可忽略的概率外)。

– 仅当领导者是诚实且在线,并且此外超过 3/4的委员会成员是诚实且在线时(即,当满足乐观条件时),以下 liveness属性才成立:输入到任何一个诚实节点的每笔交易都将在所有节点的输出日志中出现,且实际轮次为 O(1)——换句话说,当乐观条件成立时,我们不仅实现了活性,而且实际上还实现了responsiveness。

请注意,当乐观条件不满足时,乐观路径的活性无法得到保证。例如,一个腐败的领导者可能针对同一序列号向不同节点提议不同的交易,从而导致没有任何交易能收集到足够的投票以成为公证的交易。此外,如果在线且诚实的委员会成员数量不足,进展也可能受阻。

总结上述情况,如果领导者是诚实且在线的,并且此外超过 3/4 比例的委员会成员是诚实且在线的,则所有节点将在乐观路径下响应性地确认交易。然而,为了使我们的协议完整,我们需要处理领导者腐败(或不在线)的情况,或者委员会中诚实且在线的成员不超过 3/4 的情况——在后一种情况下,我们希望回退到底层区块链所提供的最坏情况保证。下面我们将描述如何实现这种回退。

回退到区块链。 在回退慢速路径中,节点将使用慢速区块链来确认交易。我们协议中最非平凡的部分是如何在乐观路径和回退路径之间进行切换。为此,我们必须回答以下两个问题。

  1. 节点如何决定何时回退到慢路径?

  2. 在做出上述决定后,实现此回退的机制是什么?

何时回退。 其思路是利用底层区块链来收集乐观路径无法正常工作的证据(例如,由于领导者腐败或崩溃,或由于没有足够多的委员会成员诚实且在线)。此类证据必须是鲁棒的,以确保当乐观路径实际正常工作时,对手无法发出虚假警报。

为了概念上的简洁,我们可以想象以下情况:(1)每当诚实节点挖出一个区块时,他们会将到目前为止的整个视图(包括他们所看到的所有未公证的交易和已公证的交易)都纳入该区块中——在实际协议中,存储在区块链中的交易可以轻松地去重和压缩;(2)诚实节点始终互相传播他们的视图,因此如果某个诚实节点在第 r轮次看到了某笔(已公证或未公证的)交易,那么所有诚实节点将在第 r+Δ轮次之前看到该交易。因此,根据底层区块链的活性属性,如果任何诚实节点在第 r轮次观察到某笔(已公证或未公证的)交易,则大约在 εκ个区块的时间内,该交易将出现在区块链中。

现在,我们可以使用以下标准来检测何时乐观路径无法正常工作:

回退条件: 假设 链是某个诚实节点的区块链的稳定前缀。如果某笔未公证的交易 tx出现在区块链[]中,但tx仍未成为包含在链[中的幸运序列的一部分:+ κ]其中 κ是一个安全参数, 则我们认为乐观路径已失败,需要进行回退。

请注意,如果乐观条件成立,那么当领导者的区块链长度约为时,其将已观察到该未公证的交易,且委员会会迅速对该交易进行公证;因此该交易将很快成为每个节点的区块链中所包含的幸运序列的一部分。如果在 κ个区块的时间内仍未发生此情况,则乐观条件必然不再成立。

我们还注意到,使用上述机制,所有诚实节点将决定在彼此相差 Δ轮次内回退。现在我们进入下一个问题:我们依赖什么机制来进行回退?

如何回退。 挑战在于,当诚实节点决定回退时(彼此在 Δ 轮次内),尽管它们的乐观日志互为前缀,但日志长度可能不同。回退期间需要做出的一个决策是,在哪个序列号处结束乐观日志,然后切换到区块链模式——重要的是,为了保持一致性,所有诚实节点必须就该决策达成一致。我们指出,就该决策达成一致实际上需要一个完整的共识实例——与乐观路径中我们对活性采取搁置态度不同,此处的决策必须同时满足一致性和活性。

因此,最自然的想法是依赖底层区块链就该决策达成共识。为此,我们引入了宽限期的概念,作为最终退回到慢速模式前的冷却期。宽限期由 κ 个连续区块组成,其中 κ 是一个安全参数。设链表示诚实节点区块链的稳定部分,并假设 ∗是第一个使得 chain[: ∗]触发上述“回退条件”的区块。那么,宽限期将由区块chain [ ∗+ 1: + κ]组成。非正式地说,宽限期按以下方式使用:

– 设 LOG∗ 为宽限期开始时一个诚实节点的输出日志(因此 LOG∗ 必须是一个幸运序列);

– 设链为该诚实节点链的稳定前缀: 如果链中的宽限期尚未结束,则节点输出以下两者中较长的一个:(1) 日志 ∗;以及 (2) 链中包含的最长幸运序列。请注意,在这种情况下,节点不会输出不属于幸运序列的任何额外交易。

• 否则,如果链上的宽限期已经结束,则节点首先输出链中包含的最长幸运序列;然后按它们在链中被包含的顺序输出链中的每笔其他交易(无论是否已公证)。换句话说,在宽限期结束后,节点开始基于区块链确认交易。

设LOGmax表示在宽限期结束时,包含在一个诚实节点区块链中的最长幸运序列。实际上,在上述机制中,节点在转入区块链模式之前就已就LOGmax达成一致。重要的是,以下非正式声明必须成立:

声明(非正式)。 除非概率可以忽略,否则当节点检测到宽限期开始时, LOGmax的长度必须至少与任何诚实节点的输出日志一样长。

要理解这一点,回想一下,正如前面提到的,所有诚实节点都会持续地将它们的协议视图相互传播;并且诚实节点在它们挖掘的每个区块中始终嵌入其完整的协议视图(在实际协议中,消息可以被压缩)。因此,根据活性,任何诚实节点在宽限期开始时的输出日志将在 κ个区块后出现在区块链中。

启动一个新的乐观纪元。 到目前为止,我们已经从单个纪元的角度描述了我们的协议,在该纪元中领导者是共识知识。然而,每当协议处于慢路径时,我们都希望允许节点尝试重新启动一个乐观纪元,以再次实现快速处理。这一点很容易实现,因为我们的底层区块链始终处于运行和活跃状态!因此,可以简单地依赖底层区块链来执行任何基于策略的决策,以重新启动一个新的纪元。例如,区块链可用于就以下事项达成一致:(1)在哪个区块长度重新启动新的纪元;以及(2)谁将在新纪元中担任领导者。我们的Thunderella框架将此类策略决策交由应用层来指定(例如,这些策略可以通过在底层区块链之上运行的通用智能合约来实现)。

我们在本节其余部分的详细描述中考虑了多个纪元的存在,因此交易序列号会附带时段编号,以避免命名空间冲突。

3.2 协议详细说明

我们现在正式描述具有静态委员会的基本Thunderella协议。我们的描述和证明是模块化的。具体来说,我们首先描述保证一致性所必需的最小协议指令集合(第3.2节)——在实际实现中,应优先对该部分协议进行安全审计。然后,我们描述其他周边机制(例如,如何具体实例化链状态函数以及领导者如何提议交易),这些机制使我们能够进一步实现最坏情况下的活性(第3.2节)和乐观响应性(第3.2节)。

具体区块链参数。 为了具体起见,本节中我们假设一个称为 Πblockchain的区块链协议,该协议实现了(0.05κ, g0, g1= 1 cΔ)‐链增长,其中 g0为正数, c为正常数;实现了(0.05κ,1, μ)‐链质量,其中 μ为正数;实现了 0.05κ‐ 一致性,以及关于任何关于 Πblockchain合规的概率多项式时间(A,Z)所满足的(0.05κ, 0.05κ)‐活性。对于我们在无许可和有许可设置中的后续具体实例化,现有的区块链构造 [19,35,40]在给定上述参数的情况下将满足必要的安全性属性。尽管我们假定了这些具体参数,我们的 Thunderella框架也可以很容易地推广到其他参数。

有用定义。 此后,令 Σ=(Gen,Sign,Vf) 表示一个数字签名方案。

已公证的交易。 我们称元组(e, s,m V)是关于委员会在纪元 e和序列号 s上的一个公证的交易

– 对于每个 (pk σ) ∈ V,pk ∈属于委员会,并且 σ是消息(e, s,m)在公钥 pk下的有效签名——此时我们也称(pk σ)是(e, s,m)的一个有效投票。

– 在 V中存在超过 3/4 · ∣ ∣个来自不同公钥pk的委员会 ∣ ∣投票。

如果(e, s,m V)是一个公证交易,我们也称 V是(e, s,m)的一个有效公证。

备注 1. 注意,上述定义适用于α= 1/2 。对于一般的 α ∈(0, 1],,我们只需将常数 3/4 替换为 1 − α/2 即可。

区块链状态。 我们假设存在一个确定性且可高效计算的函数 Γ,使得给定一条抽象区块链链时,该函数Γ将链划分为多个由过渡期分隔开的纪元。每个纪元是链中的一段连续区块序列,且 f也输出唯一的纪元

每个纪元的编号为 e。不属于任何纪元的一系列连续区块称为过渡块。每个纪元始终包含两个子阶段,先是乐观期,随后是宽限期,每个子阶段至少包含 κ个连续区块,因此每个纪元至少包含 2κ个连续区块(除非到达链的末端)。

形式上,我们称 Γ(κ,·,·) 为链状态函数,当且仅当对于任意链和0 ≤ ≤ |链|, Γ(κ, 链) 输出以下之一:

– 某些 (e,乐观):在这种情况下,我们称链[]是属于纪元 e的乐观区块(相对于 Γ(κ,·,·));

– 某些 (e,grace):在这种情况下,我们称链[]是属于纪元 e的grace区块(相对于 Γ(κ,·,·));

– 或过渡期:在这种情况下,我们称链[]是过渡期区块(相对于Γ(κ,·,·))。

我们说链状态函数 Γ(κ,·,·) 是可容许的,当且仅当对于任意链 :

  1. 对于任意 0 ≤ ≤ ′ ≤ |链|,若链[]属于纪元 e且链[ ′]属于纪元 e′,则 e′ ≥ e;

  2. 对于每个 e:链中对应纪元 e的所有区块必须出现在一个连续的窗口内,并且纪元 e的所有乐观区块必须出现在纪元 e的宽限期块之前;

  3. 对于链中出现的每个纪元 e:链中必须至少包含 κ个属于纪元 e的宽限期块,除非该链在纪元‐e区块处结束。

  4. 对于每条链和每个 0 ≤ ≤ |链|, Γ(κ,链)仅依赖于 链[:],而不依赖于链[+ 1:]。

幸运序列。 对于纪元 e,一个已公证的交易序列 {(ei, si,mi, Vi)}i∈[m]被称为幸运序列,当且仅当对所有 i ∈[m]、 ei= e 和 si= i 成立。

区块链线性化。 给定一个抽象区块链链,我们不会以最自然的方式简单地输出链中的所有交易。相反,我们采用一种称为 linearizeΓ(κ,·,·)(chain) 的算法来进行链线性化。此后,我们通常简写为 linearize(chain),而不显式地标出链状态函数 Γ(κ,·,·)。

我们的链线性化算法 linearize(chain) 定义如下:从左到右扫描该链,并输出以下内容:

  1. 对于遇到的每个纪元链[: ′],其纪元编号为 e,按顺序输出以下内容:

– 首先从链[: ′] 中提取纪元 e 的最大幸运序列交易,并输出 strip(TXs),其中 strip(·) 将在下文定义;

– 如果链[] 不是链的末尾,则令 TXs′ 为链 [: ′] 中未包含在 TXs 内的所有剩余记录,输出 strip(TXs′);

  1. 对于遇到的每个临时链[: ′ ],从链[: ′ ]中提取所有交易 TXs 并输出 strip(TXs)。

上述中,函数 strip(·) 用于从公证交易中剥离签名:对于一个公证交易, strip(e, s, m V) :=(e, s,m);对于一个未公证的交易,我们定义 strip(m) := m。如果 strip(·) 的输入是一系列交易,则对该序列中的每个交易执行相同的操作。

Πthunder:一致性核心协议

附加符号表示。 一个节点的视图包含其从 Z或通过网络接收到的每条消息(包括区块链)。因此,我们说一个公证交易(e, s, m V)存在于某节点的视图中,当且仅当(e, s,m)存在于该节点的视图中,并且每个(pk σ) ∈ V也存在于该节点的视图中(不一定在节点视图中同时出现)。对于唯一的(e, s,m),可以通过选取 V的不同子集来生成多个公证交易——但在我们下文的表述中,我们总是将 V 取为节点视图中针对(e, s,m)的所有有效投票的集合,使得对于某个元组(e, s, m),如果在某节点视图中存在一个公证交易(e, s,m V),则该选择是唯一的。

假设。 尽管未明确指出,但在我们所有的协议中,我们假设每当一个诚实节点在网络上接收到任何消息时,如果该消息尚未被广播过,则该诚实节点会广播该消息。

协议 Πthunder。 下面我们描述由可接受的链状态函数 Γ(κ,·,·)参数化的thunder协议。在我们的方案中,通常省略显式写出链状态函数 Γ(κ,·,·)。

初始化。

• Call (pk,sk) ←Σ.Gen(κ) 生成签名密钥对。将 pk 输出到 Z。

• 等待接收来自 Z的委员会,此后,投票有效性和链的可接受性将相对于该委员会定义。

• 分叉一个 Π区块链 协议的实例,其参数由 ρ, n和 Δ 确定。

公证。 在收到来自 Z 的公证请求 (e, s,m) 时:如果 pk ∈ 委员会且此前未对 (e, s) 生成过签名,则计算 σ:=Σ.签名sk(e, s,m) 并广播 ((e, s,m) σ)。

提议. 每轮次,令链为来自 Πblockchain实例的输出。

令TXs为一个集合,包含(1)每个公证的交易(e, s,m V) 在节点视图中,使得没有公证的交易(e, s,m,)具有 出现在链[: −0.5κ]中;以及(2)每个未公证的交易m在 节点视图中不存在 m 或公证交易(e, s,m,)的情况 出现在链[: −0.5κ]中。

• 提议交易到 Π区块链。

输出. 在每轮次,令链为来自 Πblockchain的输出。

• 如果 链[−0.5κ]是一个属于纪元 e的乐观区块:(a) 令 链[−]为纪元 e在 链 中的起始区块,其中 ≥ 0.5κ。(b) 从节点视图中提取纪元 e的最长幸运序列 TXs。(c) 令 日志:线性化(链[: −(+ 1)])||strip(TXs)。否则,令 日志:=线性化(链[: −0.5κ])。

令 LOG 为之前输出到 Z 的内容:如果 LOG 比 LOG 长,则输出 LOG;否则将 LOG 输出到 Z。

内存池。 从网络或其他消息 Z接收后,记录该元组。

合规执行。 我们称(A, Z)关于 ΠΓ(κ,是合规的 ·,·) thunder iff

– (A, Z) 关于 Πblockchain 是合规的;

– 在 EXECΠΓ(κ,·,·) thunder(A, Z, κ) 支持的每个视图中, Z始终向所有诚实节点输入相同的委员会;

– 在 EXECΠΓ(κ,·,·) thunder(A, Z, κ) 支持的每个视图中,委员会中超过 1/2比例(或一般情况下,超过 α比例)的不同公钥由那些永远保持诚实(但不一定在线)的节点输出。

以下定理表明,对于任何可接受的链状态函数 f, Π f thunder在合规执行下满足一致性。

定理5(一致性)。 设 Γ(κ,·,·)为任意可接受的链状态函数。那么, ΠΓ(κ,·,·) thunder满足第2.2节中定义的一致性,即关于任何关于(κ,·,·)thunder合规的概率多项式时间(A, Z)。

该定理的证明见在线完整版本 [36]

具体链状态函数与最坏情况下的活性。 我们将采用以下链状态函数 Γ pred(κ,·,·),该函数由一个多项式时间布尔谓词pred参数化,此后称之为“下一纪元”函数。本质上,pred的作用是检查某条区块链的前缀,并决定是否要进入更大的纪元。具体而言,对于某个链前缀chain[: i]如果pred(chain[: i], e)为真,则该区块链希望进入纪元 e(如果尚未处于该纪元);如果有多个满足上述条件的 e,则区块链希望进入其中最大的那个纪元。

此时,我们定义链状态函数 Γ,而暂不指定pred。我们将证明,无论具体的pred策略如何,在合规的执行中都能满足最坏情况下的活性。直观上,我们具体的链状态函数非常简单:如果区块链当前处于某个纪元 e,则链将保持在纪元 e,除非发生以下情况之一:

  1. 要么 pred(应用于区块链的前缀)希望进入更大的纪元;或者

  2. 在当前纪元期间,某些交易长时间未被确认。

如果上述情况之一确实发生,则链将平滑过渡到一个过渡期,确保当前纪元至少有 κ个乐观区块 e,随后至少有 κ个宽限期块用于纪元 e。如果区块链处于过渡期且pred希望进入下一个纪元,则我们立即进入下一个纪元。需要注意的是,为了保证一致性和最坏情况下的活性,实际上我们只需要每个纪元至少有 κ个宽限期块(而不一定需要 κ或更多乐观区块)。在此基础上,我们额外要求每个纪元也至少要有 κ个乐观区块——这为新纪元留出一定时间,使得区块链能够拾取可能已过时但本应被确认的交易,从而避免过早退出当前纪元。

更正式地说,对于任何链, Γ pred(κ,链 ·)被归纳定义如下:

– 链[0]:=创世块被视为过渡期区块;

– 如果链[i]是一个过渡期区块,令 e为最大时段编号, 使得 pred(链[: i+ 1], e) = 1成立,但在时段 e中,链[: i]的任何前缀都从未存在过:

• 如果找到这样的纪元 e:那么链[i+1..i+κ]中的所有区块都是纪元 e′ 的乐观区块(并且如果 |链| < i+ κ,那么链[i+ 1:]中的所有区块都是纪元 e′的乐观区块)。

• 否则链[i+ 1]也是一个过渡期区块;

– 如果链[i]是某个纪元 e的第个乐观区块,其中 ≥ κ:

• 如果以下两个条件C1或C2之一成立,则链[i+1..i+κ]均为纪元 e的宽限期块,且链[i+ κ+ 1]为过渡期块(并且如果 |链| ≤ i+κ,则链[i+1:]均为 纪元 e的宽限期块):

C1:某个m或某个公证交易( , , m, )出现在链[: i−0.5κ]中,但linearize(链[: i])不包含m或( , , m),即,若某笔交易在足够长的时间后仍未出现在任何幸运序列中;

C2:存在某个 e′> e,使得pred(链[: i+ 1], e′) = 1,即,若下一纪元策略函数希望切换到比当前更大的纪元。

• 否则链[i+ 1]是纪元 e 的一个乐观区块。

定理6(最坏情况下的活性)。 设 Γ(κ,·,·) := Γ pred(·,·,·)为上述针对任意多项式时间布尔谓词pred定义的链状态函数。令 g0表示底层 Πblockchain的链增长下界参数,并令Tconfirm(κ) := 3κ / g0。对于任何关于Π Γ(κ,·,·) thunder合规的概率多项式时间算法(A, Z),存在一个可忽略函数negl(·),使得对于每个 κ ∈ N,在视图 ←EXECΠ Γ ( κ,·,·) thunder (A, Z, κ)的选择上,除了以negl(κ)的概率之外,以下条件成立:假设 Z在轮次 r向一个诚实节点输入交易m,则在任意轮次 r′ ≥ r+ Tconfirm(κ),所有诚实且在线的节点输出到 Z的日志中都将包含某个( , , m)或m。

上述定理的证明见补充材料。

协调协议 Πella和乐观响应性

我们现在描述完整的协议 ΠΓ(κ,·,·) ella ,该协议在 Πthunder之上明确了基于领导者的协调机制以及下一个纪元函数 pred。然后我们将展示在何种精确的乐观条件下,我们的协议能够实现响应性。

协议描述 Πella。 Πella调用 ΠΓ pred (κ,·,·) thunder其中链状态函数Γ(κ,·,·):= Γ pred(κ,·,·)如第 3.2节所定义。我们将在下方详细说明下一个纪元函数 pred以及 Πella的其余部分。

下一个纪元函数。 策略函数 pred(chain e) 接收一个表示为 chain 的抽象区块链和一个时段编号 e作为输入。如果在 chain 中存在针对时段 e 的公证交易,则输出 1;否则输出 0。

初始化: 派生一个 ΠΓ(κ,·,·) thunder协议实例。

领导者切换: 当输入 leader(e, i) 时:若时段 e 尚未记录领导者,则将 i 记录为时段 e 的领导者,并执行以下操作:如果当前节点是 i:发送一个针对特殊时段开始交易的公证请求(e, s= 1,start),并令 s= 2; 对于从节点 i earlier 收到的每个公证请求 (e, s,m),视同刚刚从 i 收到了 (e, s,m)。

公证: 在收到来自 i 的公证请求 (e, s,m) 时:如果 i 已被记录为纪元 e 的领导者,将公证请求 (e, s, m) 转发至 ΠΓ(κ,·,·) thunder;否则忽略该请求。

Leader: every round: let e be the largest epoch recorded thus far and if current node is recorded as the leader for epoch e:

• 对于视图中的每个 m,若不存在 m或 ( ,,m) 出现在 线性化(链[:−κ]) 中,且此前尚未广播针对 m的公证请求,则广播公证请求 (e, s,m),并令 s:= s+ 1。

其他消息: 在 ΠΓ(κ,·,·) 之间传递所有其他消息

合规执行。 为了保证一致性和最坏情况下的活性,基本上我们只需要与之前的 Π Γ(κ,·,·)thunder 相同的条件。我们称 (A, Z) 关于 Π Γ (κ,·,·)ella 是合规的,当且仅当 (A, Z) 关于 Π Γ(κ,·,·)thunder 是合规的。

幸运时期。 下面我们将准确描述在何种乐观条件下可以实现响应性。粗略地说,每当一个幸运时期开始后,经过短暂的预热时间,我们就可以实现响应性。具体而言,在幸运时期内,该纪元的领导者是在线且诚实的,并且委员会中有超过 3/4 比例或一般情况下 1 − α/2 比例的成员保持诚实和在线。

正式地,给定一个视图,我们说[Tstart , T end]属于对应于纪元 e和领导者 i的幸运时期,当且仅当下列条件成立:

– 在任何轮次 r ≥ Tstart+Δ 中,任何诚实且在线的节点都应已收到 leader(e, i),其中 i 是所有诚实节点在纪元 e 中共同接收的领导者。此外,在 Tstart 之前,没有任何诚实节点从 Z 收到过任何 leader(e′,) 指令,其中 e′ ≥ e。

– 领导者(即节点 i)在任意轮次中都是诚实且在线的 t ∈[Tstart,Tend+ 3Δ];

– 超过 3/4比例(或一般情况下,超过 1 − α/2比例)的委员会成员在任意轮次中都是诚实且在线的,其中如果某个在轮次 r 中诚实且在线的节点早前向 Z 输出了公钥 pk,则我们称该公钥 pk所对应的委员会在轮次 r 中是诚实且在线的。

幸运时期中的乐观响应性。 我们称一个协议 Π关于(A, Z)满足(Twarmup, Topt)‐幸运时期中的乐观响应性,当且仅当在视图 ←的选择上,除以negl(κ)的概率外,EXECΠΓ(κ,·,·) ella(A, Z, κ):对于属于幸运时期的视图中的任意持续时间 [Tstart, Tend],[Tstart+Twarmup, Tend]是视图中的一个 Topt‐响应性时段。

定理7(乐观情况响应性)。 设g0为底层Πblockchain的链增长下界参数。对于每个关于 ΠΓ(κ,·,·) ella合规的概率多项式时间(A, Z), ΠΓ(κ,·,·) ella在幸运时期对 Twarmup= O( κ/g0)和 Topt= 3δ满足(Twarmup, Topt)-乐观响应性,其中 δ为视图中的实际网络最大延迟。

上述定理的证明见在线完整版本 [36]。我们注意到,定理7意味着以下结论:非正式地说,如果在整个执行过程中,委员会中超过 3/4比例的委员会成员保持诚实且在线,并且初始纪元的领导者也保持诚实且在线,那么一旦节点进入初始纪元,在经过短暂的预热期后,我们的协议 Πella将在后续执行过程中实现响应性(假设底层区块链是安全的)。

备注2(领导者重新选举机制)。 在我们之前的方案中,我们未具体说明环境 Z将如何决定何时发出形式为leader(e, i)的领导者切换指令,以使节点开始新的领导者时期。这是一个特定于应用的策略决策。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值