作者 | Ed felten
Arbitrum Rollup 是一个链外协议,由链上 Ethereum 合约管理。一个 dapp 开发者有一组用 Solidity 编写的合约,开发者将这些合约编译成 Arbitrum 虚拟机(VM),在 Arbitrum Rollup 上运行。你希望它们能快速运行。
Rollup 的基础知识
让我们从基础知识开始。你的虚拟机的状态被组织成一个 Merkle 树,所以可以计算出虚拟机状态的加密哈希。在协议中的任何一点,虚拟机的某个状态都是完全确认的和最终的。它的哈希值存储在链上。
协议的参与者可以做出一个可争论的断言(DA),该断言声称,从某个状态哈希开始,在一些技术前提条件下,虚拟机可以执行指定数量的计算步骤,从而得到指定的新状态哈希,并且在计算过程中虚拟机进行指定的支付和发出指定的日志事件。DA 可能是有效的(即真实的)或无效的。做出 DA 的一方将被要求对 DA 的有效性进行押金。(更多关于赌注和它们如何工作的内容将在下面介绍。)
如上图所示,一个可争议的断言创建了一个逻辑决策点,协议最终要解决这个问题。如果 DA 有效,系统将进入右上角的新状态,有一个新的状态哈希,并有 DA 中指定的副作用(支付和日志)。或者在另一个分支上,DA 无效,它被拒绝,状态不变。
旧的 Arbitrum 协议
最初的 Arbitrum 协议每次处理一个可争论的断言。某个当事方会提出一个 DA,然后会有一个质疑期,在此期间任何人都可以对 DA 提出质疑。如果没有人提出质疑,则确认 DA;否则将运行争议协议,取消 DA (为安全起见,以防提出者和质疑者合谋 " 烹制 " 争议结果)。
这很简单,但有两个缺点。首先,由于一次只能有一个诉讼请求,虚拟机的进展速度将受到限制。本质上,在每个挑战期内都必须停止进展。第二,恶意方可以通过故意挑战为该虚拟机制作的所有 DA 来冻结该虚拟机。这将使攻击者付出一系列的赌注,但如果他们愿意付出这个代价,他们可以至少在某些情况下长时间地保持进度。
新的和改进的
我在这篇文章中介绍的新的 Arbitrum Rollup 协议解决了上述两个缺点。多个 DA 可以被 " 管道化 ",这样一个虚拟机的进度就像验证节点可以模拟虚拟机的计算一样快。其次,正如我们在下面会看到的那样,一个 恶意 行为者不能减慢进度,他们只能暂时延迟链上对结果的认可,而这些结果对诚实的各方来说已经是 " 不可信的最终结果 "。
那是怎么做到的呢?让我们来挖掘一下新协议 ......
每个状态最多可以有一个 DA 跟随它。如果一个 DA 没有跟随状态,那么任何人都可以创建一个跟随它的 DA,创建一个新的分支点。结果将是一棵可能的未来树。
这个树状图表示了未来的多种可能性
stake
协议的另一个重要部分是 staking。任何人都可以放一个 stake 在树上的一个方格上。通过在一个方格上 staking,你是在断言这个方格最终会被协议所确认。换句话说,你是在断言你已经在从当前状态到你所 staking 的方格的路径上的每一个 DA 采取了正确的分支。如果你错了,你可以预期失去你的 stake 资产。
staking 的行动不能被撤销。你可以将你的 stake 向右移动--在每个分支点选择向上或向下--但你不能向左移动,因为这相当于撤销你之前做出的 stake 承诺。
做出可争论断言的一方需要在该 DA 的 "DA 有效 " 继承人上 staking。通常情况下,他们可以通过将现有的赌注移动到右边,将其放在所需的继承方格上来满足这一要求。在极少数情况下,如果他们不能做到这一点,他们可以在所需的方格上放置一个额外的 stake。但要注意的是,他们就会在两条不一致的道路上 staking,这样他们最终至少要失去两个 stakes 中的一个--自相矛盾可不是明智之举)。)
关于赌注还有一个细节:如果你所赌的方块被确认并成为公认的历史,你可以选择收回你的赌注。这意味着,如果你是正确的,你可以将你的赌注保留在原地,等待系统 " 赶上 " 你,然后你就可以收回你的赌注。
在这一点上,你可能会担心,可能性的树状图会变得非常大,而且‘枝繁叶茂’。这在实践中是不可能发生的,因为这需要多方对相互不一致的结果进行押注。他们中只有一个人可以是正确的,而其他人都会失去他们的利益。更有可能的是,这棵 " 树 " 实际上是一个有效的 DA 链,一个接一个,而且所有的赌注都在同一个结果上。
staking 期限
我们需要系统在时间过长之前,对每个可争议断言做出决定。所以,当一个 DA 被添加到链上,创建一个分支点时,会有一个 deadline 与该 DA 相关联。这个 deadline 在未来足够远,如果大家选择这样做的话,就有时间检查这个 DA 是否有效,并在链上得到一个交易来押注这个 DA 的结果。如果有人想承诺支持或反对该 DA 的有效性的赌注,他们必须在截止日期之前这样做。(在截止日期后,仍然可以引入利害关系,但他们不参与决定支持或反对该 DA。) 一旦到了最后期限,所有与决定该诉讼请求有关的利害关系都将被告知。
争议
如果 Alice 和 Bob 分别位于不同的位置,那么有两种情况之一是真的。要么是有一条从其中一个到另一个的向右移动的路径--这意味着他们的主张是一致的--要么就没有这样的路径。如果没有一条向右移动的路径连接 Alice 和 Bob 的方块,那么他们一定是在某些事情上有分歧。他们之间总会有一个独特的争议点--一个独特的 DA,对于这个 DA,他们中的一个人以这个 DA 有效为赌注,而另一个人则以它无效为赌注。
每当双方发生争议时,系统可以启动双方之间的交互式争议解决协议。我没有篇幅在这里描述争议解决协议--我只想说,这是一个类似于我们在其他 Arbitrum 文件中描述的二段式互动协议。
争议解决协议的结果是,有一方将被认定为不正确。该方将丧失其利 益 。赌注将被从其所在的 链 上抹去。其中一部分将交给争端中的另一方,其余的将被 销 毁。
多个纠纷可以同时进行,但每个赌注者一次最多只能参与一个纠纷。因为输家的赌注会被抹去,所以每次纠纷都会减少系统中的分歧量。输掉赌注的当事人如果愿意可以重新赌注,但新的赌注将无法影响赌注期限已经过去的 DA。这样做的效果是,在一个 DA 的赌注期限过后,争端将逐步消除关于如何处理该 DA 的任何分歧。
确认结果
当一个 DA 的下注截止日期过后,所有剩余的及时(下注截止日期前)下注都在该 DA 的同一分支上,系统可以确认该 DA 的结果。该 DA 被接受或拒绝,当前状态移动到该 DA 右侧的相应方格。
如果 DA 被确认为有效,例如如支付,就会在链上生效。虚拟机的状态就是这样向前移动的。
在一般情况下,当事人会诚实地行事,因为他们不想因为押注在虚假的索赔上而失去自己的赌注。只有有效的 DA 才会被断言,在一个单一的链条上,没有人会在任何 DA 的无效分支上押注。在这种情况下,每一个 DA 都可以在其押注期限到期后立即得到确认。
为什么它是 去信任的
Arbitrum Rollup 的一个重要属性是它是 去 信任的--一个诚实的一方可以迫使虚拟机表现正确并取得进步。要知道为什么,想象一下,Alice 总是在每个 DA 上押在真实的分支上,如果树曾经空了,她就会断言 DA。
因为 Alice 是在真实的树状图上 staking,所以她会赢得她所陷入的每一场纠纷。如果其他人不同意 Alice 的观点,他们要么(a)在与第三方的无关纠纷中失去自己的股权,要么(b)最终与 Alice 发生纠纷,并将股权输给她。无论哪种情况,所有与 Alice 意见相左的人最终都会失去自己的股权。只有与 Alice 意见一致的 stake 才会存活,所以 Alice 在树上的路径最终将是唯一一条有及时 stake 的路径--而 Alice 的路径将被确认。
因为这种方式的系统是不可信的,如果 Alice 被押在一个方块上,并且她知道通往那个方块的路径是真实的,那么 Alice 就可以确定自己所在的方块最终会被确认。对于 Alice 来说,那条路径就如同最终的一样。
即使你没有被押在一条路上,如果你看到有好几个人被押在这条路上,而且你相信这些人中至少有一个人是诚实的,那么你可以肯定那条路最终会被确认--就你而言,那条路就是最终的路。
去 信任最终性的好处
为什么说结果的去信任性是有价值的?经典的例子来自于之前对其他 rollup 协议的讨论。假设一个虚拟机要向 Alice 进行支付。支付事件是在诚实的路径上,但要在链上确认支付发生的方块,还需要一段时间。
去 信任性的结果就是给 Alice 提供了一个马上拿到钱的方法。如果 Bob 有立即支付的钱,他可以马上把钱给 Alice,作为交换,Alice 把未来尚未确认的付款转让给 Bob (加上支付给 Bob 的最低费用)。Bob 只有在他能确定付款会真正发生的情况下才会想这么做。Bob 可以通过押注诚实的结果来确定这一点--那么他就会对付款最终会发生充满信任的信心。不仅仅是 Bob 能做到这一点,任何有资金的人都可以借给他。任何有资金的人都可以用同样的方式把资金借给 Alice 和其他像她一样的人。这些人可以通过提供更低的费用来相互竞争,促使 Alice 马上获得资金的成本降低。
关键的一点是,这种市场机制的可行性取决于 去 信任的结果。如果 " 每个人 " 都已经知道这件事最终会被确认,那么一件事在链上确认的延迟就不会有那么多不便。
不仅对于支付是如此,对于虚拟机做的其他事情也是如此。如果虚拟机要发出一个日志项,宣布某件事情已经发生,那么去信任的结果意味着任何人都可以肯定地行动,该日志项将在链上得到确认。
延迟攻击
因为这个系统是有 去 信任性的,所以坏人不能强行制造错误的结果。他们可以尝试做的是减缓进展。这样做需要他们牺牲利害关系,如果利害关系的金额很大,那么代价就会很高。
让我们想象一下,有人有动机发动延迟攻击,而且他们愿意牺牲利害关系。他们能造成的最坏的损失是什么?
首先要注意的是,坏人无法阻止诚实的当事人继续建立出诚实的路径。而且他们也无法阻止诚实方在最终确认诚实分支的过程中获得去信任的信心。
攻击者能做的就是在假分支上 staking,以延迟诚实路径的链上确认。他们每放一个 stake,就会对诚实方多产生一次纠纷,在这种情况下,诚实方就会拿走攻击者的一大块 stake。一旦攻击者的所有 stake 都被拿下,链上进度将继续进行。
如果攻击者将多个赌注放在虚假的结果上呢?那么这些赌注就必须在纠纷中逐一拿下。如果有多人押注在诚实的结果上,这些人都可以对攻击者进入纠纷,同时努力拿下攻击者的赌注。而且注意,大家都会很清楚发生了什么事,很多人都会想参与进来,押注在真实的结果上,这样他们就可以加入到利用纠纷抢夺攻击者股权的喂养狂潮中。如果有 K 人在诚实的一方下注,那么攻击者将花费 K 个赌注来购买一个争端期的延迟。如果攻击者下更多的赌注,那很可能会吸引更多的老实人赌注。这对攻击者来说是个不好的动态。
优化
可以进行各种优化,以减少操作协议所需的链上记账量,降低链上气体成本,并使针对延迟攻击者的有益喂养狂潮更容易上演。我不会在这里钻研这些优化,这篇文章已经够长了。
前进的道路
我们正在 Offchain 实验室构建这个协议。预计这个 Arbitrum Rollup 协议将很快被推送到我们的开源代码库中。
Ed felten 作者
李翰博 翻译
李翰博 编辑
内容仅供参考 不作为投资建议 风险自担
版权所有 未经允许 严禁转载
☟☟☟
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:分享区块链领域专业、前沿、有趣的内容
评论0条