本文作者:Patrick McCorry;编译:Cointime Freya
Rollup的诚实方在哪里?
它是一个排序器吗?还是一个执行者?会出现哪些问题?
正如在上一篇文章中所讨论的,在rollup的背景下,去中心化的目标是使一个诚实的一方能够站出来,协助桥梁智能合约,并最终保护rollup免受全能对手的攻击。
在这篇文章中,我们的任务是找到谁可以成为诚实的一方,以及他们如何参与到rollup协议中。
这一切都要从协议代理开始。
- 排序器 → 获取一个有序的交易列表,对数据库执行它们,并向桥接智能合约建议数据库更新。
- 执行者 → 负责接受用户生成的交易,决定最终的执行顺序,并将其传递下去。
正如前一篇文章所述,对于代理来说,一个好的心智模型是把排序器看作是为收集交易而提供的面向用户的服务的前端。由执行者(即服务的后端),来处理和保护所有交易。
排序器是可选的
排序器不是必需的,因为用户可以绕过它们,并通过桥接合约强制命令执行他们的交易。
排序器为交易包含提供了快速路径,可以说这个角色是可选的。
所有rollup必须有一个可用的慢速路径,允许用户绕过所有排序器,直接将他们的交易发送到桥接智能合约进行排序。这被称为强制包含保护措施,只有实际实现了rollup才被认为是安全的。
Rollup与侧链——Rollup和侧链之间的核心区别在于,用户是否可以强制命令交易执行。
强制包含保护措施旨在处理对手试图审查用户交易的最坏情况。如果我们只考虑这种绝对的最坏情况,那么就没有必要让诚实的一方作为排序者参与进来。因此,从最严格的意义上讲,排序器的角色是可选的。
另一方面,如果我们考虑到平均情况,那么诚实的一方作为排序者参与其中是非常可取的:
- 防止或公平提取 MEV;
- 保证包含时间敏感的交易(清算);
- 可靠的用户体验(无交易中断、最新信息等)。
有趣的是,追求去中心化的排序器,可能会对基于用户体验需求的rollup的长期架构和路线图产生重大影响——这是未来文章的主题。
但是,正如这里所讨论的一样,这是完全没有必要的,因为用户可以绕过所有的排序器,并单独命令他们的交易执行。
诚实的执行者
执行者构成了一个rollup的后端,他们的任务是更新链下数据库。
他们的任务包括:
- 获取用户生成的交易的有序列表;
- 针对数据库执行它们;
- 向桥梁智能合约提出新的数据库更新。
考虑到这一点,位于桥梁智能合约和链下数据库之间的执行者,将负责向桥梁智能合约发送有关链下世界的信息。
这让我们需要一个诚实的执行者执行以下属性:
- 有效性 → 有序的和待处理的交易最终将由执行者执行。
- 安全性 → 有令人信服的证据表明对数据库的每个提议更新都是有效的。
有趣的是,根据 rollup是否涉及欺诈证明或有效性证明,它影响到诚实的执行者所执行的规则:
- Optimistic Rollup → 一个诚实的执行者保护安全性和有效性。
- Validity Rollup → 诚实的执行者只保护有效性。
让我们借此机会,从一个诚实的执行者的角度,进一步深入探讨有效性和安全性的话题。
诚实的执行者促进安全
我们需要定义对手攻击系统安全的含义,以及诚实方试图抵御的东西:
对手的目标:说服桥梁智能合约的数据库更新有一个无效的状态转换(即窃取所有资金)。
让我们依次考虑证明的类型:
- 有效性证明 → 密码。加密证明取代了诚实方保护数据库更新完整性的需要。对手需要先破解底层密码,然后才能生成伪造的证明——这可不是一件容易的事。
- 欺诈证明 → 诚实的执行者。当执行者通过桥梁证明数据库更新时,所有其他执行者都有机会审查证明,并可能对其发出质疑。
因此,在评估一个诚实的执行者如何保护安全时,我们只关注欺诈证明的方法。
对手可以对欺诈证明部署两种类型的攻击:
- 破坏安全。诚实的执行者不可用,桥接器已确信更新无效。
- 延迟攻击。故意放弃质押的资金,目的是延迟已执行交易的最终确定性。
欺诈证明机制只是为了保护安全,因为诚实的执行者可以对所有投票赞成它的敌对执行者发出挑战。只要执行者是诚实的,他们就能保证赢得对对手的每次挑战。
对于最先进的挑战游戏设计来说,延迟攻击是一种不幸的副作用。最根本的问题在于,挑战游戏并不能证明认证无效,而是证明一个玩家输掉了游戏。对手可以利用这一限制,将挑战游戏延长到所分配的全部时间(约1周左右),并在之前的挑战游戏结束之前发布新的无效认证。通过重复这两个步骤,它可以阻止诚实认证的最终确定性。
当然,每一个挑战游戏都要求对手放弃质押的资产,所以这是一种代价高昂的攻击。在执行延迟攻击的财务成本和这样做的好处之间存在一个权衡。有一些迹象表明,Arbitrum V3将缓解延迟攻击,但目前还没有公开的设计这样做。
无论如何,延迟攻击代表了有效性而非安全性的攻击,这就引出了我们的下一个话题!
诚实的执行者的有效性
一个诚实的执行者来“收拾残局”并强制执行所有已排序的交易。为此,成功取决于他们在正确时间介入的能力,以及对手如何阻止他们。
同样,我们应该定义对手攻击rollup的有效性意味着什么:
对手的目标:停止执行用户生成的交易
在几乎所有的rollup设计中,目前挑选诚实的执行者的任命协议都依赖于先到先得的原则,这基本上取决于谁可以先发布证明。
先到先得的方法存在微妙的竞赛条件问题,对手可以利用这些问题无限期地阻止诚实方的参与。例如,如果两个或更多的执行者同时提交一个提议的数据库更新,那么对手就可以简单地通过最小的数据库更新来抢先诚实方。
乍一看,一个显而易见的解决方案是就,为诚实的一方和所有各方提供一个专门的时间段来提议数据库更新,并完全消除竞争条件的可能性。专用时间段的有效性取决于诚实方需要多长时间才能获得它。所要抵御的最重要的威胁是对手占据了所有的时间段,并再次延迟了诚实的执行者的参与机会。
另一个需要考虑的方面是数据库的更新内容。我们可以想象一个预约协议,它可以删除并弹出一个未能及时提出数据库更新的执行程序。在这种情况下,我们可能需要阻止对手发布空的数据库更新,并通过拒绝执行它们来有效地停止交易的执行。
一些像Arbitrum这样的项目已经实现了:
- 强制规定每次数据库更新的最小计算量;
- 系统运营商无法篡改的确定性交易费用。
由于执行者必须提出有意义的数据库更新,因此该组合会强制执行最小执行进度。此外,它使对手用“垃圾”填充有序的交易队列的代价很高。
未来的方向
总而言之,我们必须确保:
- 诚实的一方有保证的位置来提议数据库位置;
- 诚实的一方将及时获得一个位置;
- 对于对手来说,用“垃圾”执行填充rollup在经济上是昂贵的。
上述目标提供了一些经验法则,可以帮助设计新的执行人员任命协议,并确保一位诚实的执行者可以在适当的时候站出来。然而,虽然经验法则很好,但目前仍缺乏可用于rollup项目的明确的约定协议。
最重要的是,整个讨论都假设一个执行程序将执行所有工作,以生成单个的数据库更新,并且整个执行程序集不会相互合作。这这很可能是Optimistic Rollups的情况,但并不是ZK Rollup的情况。
附加任务:在 ZK Rollup 中,执行者需要重放所有交易,并产生交易执行正确的有效性证明,这是一个比Optimistic Rollup中的执行者额外的任务。
众所周知,证明生成可以外包并在多个证明者之间并行进行,但是仍然缺乏一个可以公平地分割交易负载、使开放成员的证明者组能够一起工作,并最终聚合所有独立证明的任命协议, 并在链上公布。
例如,一个执行者将证明交易1至1000,下一个执行者将证明交易1,001至2,000。最后,所有的子任务证明都可以聚合/递归地合并成一个证明。
我们已经有了一个可信的第三方,即桥梁智能合约,我们可以利用它将交易段分配给特定的执行者,并在他们未能按时执行任务时追究他们的责任(罚没/驱逐)。因此,我们有了所有可分配的成分,但要利用桥梁的这一额外力量,它仍然是一个大部分未开发的研究和设计空间。
希望有人能提出一个任命协议,在99.9%的情况下,使开放成员的证明者能够协同工作,但在最坏的情况下,使一个诚实的执行者能够强制为所有参与者取得进展。
*本文由CoinTime整理编译,转载请注明来源。
所有评论