分布式系统

Typhon 的 Chimera 链

介绍 Typhon 项目中的 Chimera 链技术,实现异构区块链间的原子交易。

Typhon 的 Chimera 链

Chimera 链泛化了共享排序器。它们使用基于异构 Paxos 的共识来简化具有重叠信任模型的链之间的跨链原子交易。

异构信任

Typhon 排序引擎(Anoma 生态系统的一部分)将支持一种新的跨链原子提交技术:Chimera 链。Chimera 链将使链上交易对处理跨多个重叠(但不一定相同 )实例的信息的应用更快、更容易、更强大。Chimera 链基于异构 Paxos,代表了我们为在早期博客文章中引入的决定执行哪种异构共识挑战提出的解决方案

跨链原子交易

如同宇宙生态系统 ,Anoma 被设计为支持异构信任假设。独立的链(称为实例 )运行具有不同信任模型的独立状态机 。例如,一条链的信任模型可能是基于权益证明 :状态机跟踪一个权益代币,而共识需要由足够大的权益部分支持的法定人数支持 。其他信任模型可能使用权威证明甚至工作量证明来定义法定人数。

虽然大多数区块链共识软件,包括 CometBFT,都忽略了这种异构信任,但我们的软件不是。当 Anoma 验证者参与多条链时,他们明确意识到跨链机会。相同的软件处理过程可用于按需添加甚至启动新的实例。

异构普罗托斯

跨链原子交易是多链、跨信任域世界中一个常见且困难的问题。

例子:火车与酒店问题

考虑一个经典例子 (我们也在之前的博客文章中讨论过):用户只有在能够同时购买目的地酒店房间的情况下才想购买火车票。他们希望这两个交易原子性地执行。如果他们购买了其中一个,而另一个变得不可用,用户会感到失望

解决这个问题的方法有很多,具体取决于酒店和火车如何管理它们的预订系统。例如,如果两者都使用相同的账本/数据库/区块链,那么一个原子交易可以尝试预订两者,并且要么成功要么失败。

共享排序器

原则上,火车和酒店甚至可以使用独立的账本,以及完全不同的状态机,只要预订火车和酒店房间的交易被同时放入两个账本,或者都不放入。更具体地说,这个想法是安排一个原子的捆绑交易:每个账本一个。所有交易一起安排,或者都不安排。各种设置允许不同的账本使用相同的系统来排序它们的交易,例如 Espresso 的共享排序器 。

共享有效性序列

为了解决我们的火车和酒店问题,除了包含或排除其交易是否属于原子包的两种账本之外,我们确实需要 一个 额外的元素。如果火车座位不可用,导致火车交易失败,我们需要确保酒店交易也失败。同样,如果酒店房间不可用,火车交易也必须失败。这种跨账本通信的“一位”成功或失败形式,正是 Umbra Research 称为的共享有效性序列 。

在之前的博客文章中,我们讨论了参与者重叠如何实现一个能够泛化拜占庭化 paxos 的共识协议,我们可以用它来原子性地在多条链上提交事务包。当这些链恰好具有完全相同的信任假设时,这看起来很像一个共享排序器 ,但异构 paxos 可以在它们的信任假设显著不同的情况下工作。

讨论的一个挑战是" 决定执行哪种异构共识 "。根据共识参与者如何重叠,链 A 可能与链 B 进行原子提交,链 B 可能与链 C 进行原子提交,但链 A 可能无法与链 C 进行原子提交。当这种情况发生时,我们需要决定每个资源对哪些链可用:如果两个不兼容的原子包竞争同一个资源,我们可能会得到不一致的状态。

基础链

我们称每个定义其自身验证者的链为 基础链 。技术上,基础链是一个 复制状态机 ,它定义了允许更新状态机的 多数组 集合。通常,交易以 可序列化 的方式更新每条链的状态。

当我们说状态存储在 基础链上 时,我们指的是它位于一个分区中,该分区不能受跨链原子提交中交易的影响。基础链上的状态是普通区块链状态,不受其他链的影响。提交到基础链的交易会更新基础链上的状态,就像任何其他区块链或复制状态机一样。通常,我们假设每条链的多数组定义都在基础链上,这与 CometBFT 和大多数权益证明或授权证明设计一致。

Chimera 状态分区

基础链分区是每个区块链状态机维护的众多分区之一。每笔交易只能在一个分区内部更新。这类似于数据库分片 ,有时用于可扩展性。然而,在我们的案例中,这些分区的目的与权限和跨链交易有关。

请注意,尽管事务只能在单个分区中写入数据,但它们可以从任何分区中读取最近的数据(在有限数量的提交内)。这就是为什么我们倾向于将这些分区视为一个状态机的一部分,而不是独立的状态机。换句话说,跨分区通信非常容易,并且可以提供强大的保证。

我们这里关心的分区(除了定义了仲裁的基分区之外),是*混沌*分区。混沌分区存储的数据可以与其他链原子更新。在我们的酒店/火车/飞机示例中,酒店链可能有一个分区用于状态,该状态可以与火车链原子更新,还有一个分区用于状态,该状态可以与飞机链原子更新。关键在于,这防止了酒店+火车事务与酒店+飞机事务冲突:它们被分别调度。火车和酒店链同样有混沌分区:

原子束

每笔交易都会更新一个分区,而每个分区中交易的顺序由链的共识机制决定。

Chimera 分区使用异构 Paxos 进行共识。这使得它们本地 Chimera 分区的状态保持与基础分区一样安全和活跃,但允许与其他链的 Chimera 分区进行原子 _事务_捆绑。我们支持跨任意数量链的原子捆绑,但为简化起见,这里始终使用 2 条链进行讨论

原子捆绑是作者将一组交易组合在一起,以便它们要么全部提交,要么全部不提交。这是异构 Paxos 提供的原子性保证 。当基础链具有完全相同的信任假设时, Chimera 链本质上就是一个共享排序器 。异构 Paxos 使 Chimera 链更加通用:链的共识参与者之间的重叠越多,原子性保证就越强。

例如,一个原子包可能包括预订酒店房间和预订火车票的交易。相关状态必须存储在每个链的相关奇美拉分区上

原子跨链通信

当一个数据包跨链调度时,所有参与链上所有链的参与者都可以看到(并同意)所有相关分区中交易的顺序。这意味着他们都可以维护和更新所有相关分区的副本。

因此,原子捆绑包为链上交易启用了一项新功能:跨链原子通信。在交易执行过程中(在排序决定之后),捆绑包内的交易可以向同一捆绑包内的其他交易发送消息并获取响应。这种通信在任何意义上都不是机器之间的通信:每个副本都维护并更新所有相关分区的副本,因此每个副本都可以在本地运行所有交易及其之间的任何消息

例如,酒店交易可以检查是否有房间可用(在酒店的"可预订火车"分区),然后将检查结果通知火车交易,火车交易同样检查是否有火车座位可用。每方只有在听到对方的反馈后,才会决定是否预订。

原子通信与例如 IBC 非常不同。所有通信都在运行状态机的每个副本内部进行。没有中继器、线路上的消息或共识轮次。一个交易甚至可以发送消息给另一个交易,并原子性地接收响应。

这种通信比在共享有效性排序中发现的单比特成功或失败通信更强大:它允许任意消息。原则上, 共享排序器可以集成类似的捆绑内通信。这可能是一个未来合作的富有成果的领域。

Chimera 链和 Chimera 状态机

终于,我们定义了我们的 Chimera 链。每条 Chimera 链的状态由一组分区组成:每个基础链各一个。Chimera 链的交易实际上是更新状态的原子包。Chimera 的“状态机”包括每个基础链为其 Chimera 分区定义的状态机的副本,并且这些副本能够在包内发送和接收消息(作为系统调用)。我们可以有跨越任意数量链的 Chimera 链(只要它们满足异构 Paxos 的条件),但在这里的讨论中,我们始终使用 2 条链,以简化说明。

Chimera 链上的交易保留着读取同一基础链上其他分区近期状态的能力。这使得,例如酒店能够轻松地将酒店房间的预订控制从一个 Chimera 链转移到另一个 Chimera 链。持有房间控制权的分区需要在状态中记录他们放弃控制,并指定哪个分区可以接管控制权。在稍后的交易中,目标分区读取该指定信息,并接管控制权。

区块链表示

每个区块链是一个仅追加的日志,按完全顺序追加交易批次(区块)。每条基础链都是其自身的独立区块链。每条 chimera 链也是区块链。区块包含原子化的交易束。方便的是,每条链中的交易可以引用共享基础链的先前交易的结果。这是“从另一个状态分区读取”的区块链表示

原子性

正如我们在之前的博客文章中讨论的,《异构 Paxos》保证了基础链在满足我们称之为原子性条件的完整性条件(一组可接受的故障)下,会就选择用于混沌链的区块达成一致。与每条链的无分叉保证一样,原子性条件也是关于攻击者需要腐蚀哪些共识参与者才能造成损害。简而言之,基础链的共识参与者之间的重叠越多,原子性保证就越强。如果所有基础链都使用相同的仲裁组(相同的共识参与者),那么原子性保证与每条链的无分叉保证完全一样,混沌链实际上就是一个共享排序器 。

这使得 Chimera 链有点像桥梁:它们在特定假设下允许跨链操作,而这个假设与基础链操作不同(并且通常较弱)。与传统可信桥梁设计相比,有 2 个主要区别:

  • 原子性条件自然源于基础链共识参与者之间的重叠,而非某个外部的"桥梁提供者"。
  • 即使原子性条件未满足,混沌分区仍保留其基础链的保证:状态不会丢失、冻结或损坏。唯一的不同在于,混沌交易可能对其他基础链提交到其混沌链视图中的交易持有错误视图。

当原子性条件不满足时

可以将异构 Paxos 视为每条基础链运行自己的共识协议,以决定将哪些区块提交到混沌链,并附加保证:当原子性条件满足时,它们会达成一致。

当原子性条件不满足时,每条基础链仍然会为其所见的 chimera 链决定一个区块的规范链(前提是基础链没有分叉)。不同之处在于,不同的基础链可能无法达成一致。例如,假设提出了两个冲突的酒店+飞机交易:一个是 Alice 想预订最后一间酒店房间和最后一个飞机座位,另一个是 Bob 想预订最后一间酒店房间和最后一个飞机座位。如果原子性条件不满足,酒店可能认为 Alice 成功了,为 Alice 预订了酒店房间,而飞机可能认为 Bob 成功了,为 Bob 预订了飞机座位。

与桥梁故障不同,原子性故障本身不能破坏酒店或航班预订系统。酒店和航班仍能在其自身事务中执行其预订政策(例如,谁被允许预订哪种类型的房间,或每个座位最多 1 人)。

与多阶段提交故障不同,只要另一条链的故障假设仍然成立,一条链上的任何数量的故障都不会冻结另一条链上的资源,甚至不会强制超时。如果酒店将房间控制权交给酒店+航班混合链,而航班预订系统崩溃(例如 51%攻击),那么这个酒店房间不会卡住:酒店仍然可以更新它,甚至可以将其移回基础链,就像正常一样。

从状态分区和交易的角度来看,如果一个混血链(比如红色和蓝色)的2条基础链不满足原子性条件,它们可能会各自维护对另一条链所选择的交易的错误视图,并因此导致另一条链的状态分区状态出现错误。虽然这种对另一条链的状态分区的视图在形式上不是链状态的一部分,但在计算原子捆绑内的任何原子通信时却是必要的。

权益证明原子性条件

对于采用直接基于权益证明共识的链,原子性条件同样直接。在这些链中,持有超过2/3权益的任何一组共识参与者都构成一个法定人数。如果对手方腐蚀了持有其至少1/3权益的共识参与者,基础链可能会分叉。

对于这些链,chimera 链只需要要求存在超过 2/3 的权益持有者重叠即可。(具体来说,每个权益持有者的重叠是其在每个链上持有的权益比例的最小值,总重叠是所有权益持有者重叠的总和。)如果权益持有者重叠为 2/3 + x,那么原子性条件是:一个对手必须控制具有 x 重叠的共识参与者才能破坏原子性。自然地,当权益持有者重叠为 1 时,原子性条件与无分叉要求相同。

来自 Cosmos 生态系统的证据表明,许多链应该能够支持 Chimera 链

Anoma 资源和分区

当原子性条件不满足时,每条基础链仍然会为其所见的 chimera 链决定一个区块的规范链(前提是基础链没有分叉)。不同之处在于,不同的基础链可能无法达成一致。例如,假设提出了两个冲突的酒店+飞机交易:一个是 Alice 想预订最后一间酒店房间和最后一个飞机座位,另一个是 Bob 想预订最后一间酒店房间和最后一个飞机座位。如果原子性条件不满足,酒店可能认为 Alice 成功了,为 Alice 预订了酒店房间,而飞机可能认为 Bob 成功了,为 Bob 预订了飞机座位。

与桥梁故障不同,原子性故障本身不能破坏酒店或航班预订系统。酒店和航班仍能在其自身事务中执行其预订政策(例如,谁被允许预订哪种类型的房间,或每个座位最多 1 人)。

与多阶段提交故障不同,只要另一条链的故障假设仍然成立,一条链上的任何数量的故障都不会冻结另一条链上的资源,甚至不会强制超时。如果酒店将房间控制权交给酒店+航班混合链,而航班预订系统崩溃(例如 51%攻击),那么这个酒店房间不会卡住:酒店仍然可以更新它,甚至可以将其移回基础链,就像正常一样。

从状态分区和交易的角度来看,如果一个混血链(比如红色和蓝色)的2条基础链不满足原子性条件,它们可能会各自维护对另一条链所选择的交易的错误视图,并因此导致另一条链的状态分区状态出现错误。虽然这种对另一条链的状态分区的视图在形式上不是链状态的一部分,但在计算原子捆绑内的任何原子通信时却是必要的。

未来方向

到目前为止,我们讨论过的 Chimera Chains 使用异构 Paxos 设置,其中 Chimera 分区保留了基础链的所有常规保证/故障假设。例如,在酒店+火车分区中的酒店房间,在完全相同的情况下,仍然可以预订并遵守酒店不变量,就像基础分区上的酒店房间一样。

然而,使用其他保证机制也可以构建类似混沌链的链。例如,一条链可以建立一些使用比基础链更大的投票组的类似混沌链分区, 牺牲部分活性以换取安全性 。该分区中的状态更有可能被冻结(较小的对手可以阻止更新),但不太可能分叉(需要较大的对手来提交两个冲突的交易)。这样的分区还会为类似混沌链(提交原子数据包)提供机会,可以与更多基础链结合,因为更大的投票组会增加重叠。

在极端情况下,只要它们愿意创建使用足够大投票组的类似混沌链分区,我们总可以为任意一组链之间的跨链原子提交建立一条类似混沌链。例如,分区的投票组可以是每个基础链的一个投票组的并集。与跨基础链的多阶段提交相比,这样的类似混沌链将具有相似的活性保证,但可能具有更好的延迟。

在这些奇异的链上进行编程将充满挑战。我们需要向程序员明确说明,当他们在不同分区之间转移状态控制时,他们将获得哪些保证,以及会失去哪些保证。

结论

Chimera 链是一种在多个链具有足够的验证者重叠时进行快速且原子跨链交易的新方法。它们提供了一个极其通用和灵活的编程模型,仅需在每个基础链的状态机中添加少量内容,即可在原子包内进行跨交易消息传递。

Chimera 链旨在“让简单的事情变得简单。”当一组链之间存在大量重叠时,进行跨链交易应该是快速且容易的,而有了 Chimera 链,就会是这样。