本文档描述了Relay Monitor(RM)的设计,旨在监控MEV-Boost生态系统中Relay的行为和性能。RM通过收集公开数据以及从Proposer处获取的信息,来检测Relay的故障类型(包括Bid故障和Payload故障),并计算Relay的评分卡,以便Relay Mux软件可以根据这些评分来决定使用哪个Relay。同时讨论了如何处理故障,以及隐私问题。
感谢 @metachris, @bertcmiller 和 @thegostep 对此设计的有益讨论
本文档假定读者了解 mev-boost
的总体架构。
你需要熟悉 builder-specs
:https://github.com/ethereum/builder-specs
以下是一些相关的图表,均来自 github 上的 flashbots/mev-boost
仓库:
在最初版本的 mev-boost
(https://boost.flashbots.net)中,存在一个受信任的角色,它将提议者与构建者连接起来,称为 relay(中继)。
中继有一系列职责,包括验证构建者是否提供符合提议者偏好的良好区块(例如,区块的 gas 限制),并促进拍卖,以便提议者可以有效地分配区块空间。
虽然这个角色是受信任的,但它是无需许可的,因此任何人都可以运行中继,并且由提议者配置 "relay mux(中继多路复用)" 软件(例如 https://github.com/flashbots/mev-boost),并选择中继来连接到他们感兴趣的构建者,以便在每次拍卖期间合作。
为了减轻拜占庭中继可能滥用此角色,flashbots 提出了 "relay monitor(中继监控器)":https://github.com/flashbots/mev-boost/issues/142
本文档将该 issue 中的想法提炼为具体的规范。
中继监控器 (RM) 使用公开可用的数据来形成对其所监控的中继集合的 behavior(行为) 和 performance(性能) 的视图。这包括中继多路复用器的 "opt-in(选择加入)" 设置,该设置将每个提议者对网络的看法转发给 RM。这样做极大地提高了中继监控器理解中继(以及提议者)对每个提议所做事情的能力。
behavior(行为) 是指中继为确保以太坊协议的安全性和活跃性而必须承担的一系列责任。mev-boost 生态系统的用户承担中继和/或构建者未能履行这些责任的风险,RM 的一个重要作用是确保中继履行其部分要求。
performance(性能) 是指与中继在系统环境中工作情况相关的延迟和吞吐量等指标。
首先,我们描述 RM 监视的故障类型,以及 RM 为每个中继使用并从每个提议者接收的相应数据。mev-boost
流程的高层结构是一个 commit-reveal(提交-揭示)方案,首先提供一组 bids(竞标),这些竞标提交给给定的 payload(payload)(API 序列图中的 getHeader
),然后提议者通过签署包含竞标中提交的数据的区块,以具有约束力的方式选择一个 bid。然后,中继应发布相应的 payload(payload)(序列图中的 getPayload
)。
请注意,没有任何东西可以阻止中继在 API 的一次调用中提供一个 bid,而在随后的调用中提供另一个(可能更有价值的)bid。这使得监控过程复杂化,因为除非提议者共享,否则 RM 不会知道提议者有什么看法。此故障 - "auction integrity(拍卖完整性)" - 为了完整起见而列出,但应被视为要检测的 "advanced(高级)" 故障类别,并且如果有疑问,仅应在假设中继具有最佳意图的情况下分配故障。
我们现在可以查看 commit-reveal 方案的每个阶段可能出现的故障:
number
错误(注意:RM 应对非规范分叉上的竞标保持容忍)考虑到其对网络安全的核心作用,我建议在任何性能监控之前实施行为监控。
TODO(待办事项):更详细地充实这些内容
一些需要注意的指标:
我们可以简单地从为每个中继观察到的上述故障数量制表开始。下游使用者可以使用故障数据来评估中继风险,或形成 "reputation(声誉)" 分数等。
这意味着中继监控器会维护一个按 "chain coordinate(链坐标)" 排序并按中继(公钥)索引的故障类型映射。
例如:
{
"0xdeadbeefcafe": { // 中继公钥
"malformed-bid": [\
(slot, parent-hash, proposer-pubkey)\
, (slot1, parent-hash1, proposer-pubkey1)\
], // 故障列表以及它们发生的 'when(时间)',按故障类型组织
..., // 此处的其他故障
"unavailable-payload": [], // 未观察到此中继的可用性故障
}
}
注意:此 schema 只是一个示例,用于说明,很可能会发生变化
中继监控器还需要持久化所有提取的事件,以便可以根据需要重新导出对中继性能的任何给定评估。请注意,输入数据使用作者的签名进行身份验证(例如,BuilderBid
上的 signature
),并且这与规范链一起将能够验证任何 RM 输出的真实性。如果存在某种服务来捕获所有区块数据(即使是规范链之外的数据),你也可以独立验证任何中继监控器提出的任何声明。
每种故障类型的要求都会产生一个依赖关系图,该图建议 RM 具有以下高级功能,这些功能组织为一系列并发的、长时间运行的 "tasks(任务)":
任何中继多路复用器软件都应在执行对任何连接的中继的例行调用时,将 SignedValidatorRegistration
的副本发送给任何连接的中继监控器。
RM 按公钥存储这些偏好(并且需要一个验证者索引映射)。
requires(需要):更改 mev-boost
软件以将验证者偏好以及中继上传到已配置的中继监控器
并查看下面关于它是用户可配置的说明
对于共识链的每个 slot 和执行链的每个 head,中继监控器从每个中继提取该链上计划的提议者的出价。
RM 可以验证该 bid 没有以下故障:
应存储 bids,并按中继公钥和执行区块哈希编制索引,以供以后分析
此处有一个选项,具体取决于提议者希望与中继监控器共享多少数据:他们可以将 SignedBlindedBeaconBlock
和 SignedBuilderBid
(我们将其称为 "bid acceptance data(竞标接受数据)")在调用 relay(s) 的 getPayload
时一起调用中继监控器。请注意,提议者可能出于隐私原因或避免将数据发送到其他端点的资源开销而希望跳过此步骤。
如果 RM 从未收到提议者的竞标接受数据,他们仍然可以监视规范链以获取任何到达的区块,并查看他们是否具有一些匹配的竞标(使用链上区块中的执行区块哈希),如果需要,可以使用 value
来打破僵局。这降低了 RM 的整体准确性,但支持较小的 staker(与资源充足的池相比),因此我认为这是一个值得支持的用例。
如果 RM 收到了竞标接受数据,则可以在调用适当的中继以获取相应的 execution payload 之后完成剩余的验证:
奖励:如果 RM 与以太坊网络的其他部分建立了良好的对等连接,则它可以传播完整的 SignedBeaconBlock
。
requires(需要):允许将中继监控器数据收集配置为可配置的(如果在默认情况下以及将其发送给谁/不发送给谁,则下游 convo)
requires(需要):mev-boost
软件随同从 relay(s) 调用以获取 execution payload 一起将 bid 和已签名区块发送到 RM。
本节暂时保持不透明,并且对这种类型故障的检测将被视为某些未来工作范围的一部分。
这将归结为确保对于观察到的数据集,提议者看到的内容与中继提供的内容之间没有不一致之处。
在运行上述数据收集和故障处理的同时,RM 会像上面给出的示例一样,持续计算每个中继的 "scorecard(记分卡)"。此 "rating(评级)" API 可以在调用者通过此 API 请求时,在任何时间点提供此 "scorecard(记分卡)" 的当前快照。
此数据的主要使用者是中继多路复用器软件,该软件可以使用它来制定有关使用哪些中继的策略决策。
requires(需要):mev-boost
软件应能够为一组中继监控器调用 "rating(评级)" API,并处理生成的数据
问:如何处理多个中继监控器 - 只是将它们全部合并在一起(?)
问:指出我们希望如何处理 "relay monitor(中继监控器)" 欺诈 - 首先,让我们假设 RM 是受信任的,甚至比中继更受信任
我建议在任何中继多路复用器软件中都内置 "default profile(默认配置文件)",该配置文件编码了一种给定的策略,以防止最有害的故障。但这可能会成为 mev-boost
软件的可配置部分。
默认故障检测算法是:
如果在过去的 N
个 slot 中,中继出现任何类型的 M
个故障,则中继多路复用器应在接下来的 2**N
个 slot 中停止使用该中继
注意:确切的配置文件尚待讨论,因此,如果你看到更好的东西,请告诉我!
requires(需要):mev-boost
软件应每 epoch 调用一次 rating API,并将故障数据处理为任何附加中继的策略决策
requires(需要):mev-boost
软件需要知道 epoch 何时开始,或者至少知道 epoch 的持续时间(如果不是在 epoch 开始时,则可以在 epoch 中的某个时刻进行查询)
问:我们可以改进为在任何提议之前进行调用,但是这样 mev-boost
需要比目前拥有的更多的关于链的上下文 - 我们对此有何看法?
客户端软件中存在后备路径,因此我们可以安全地将这些策略决策限定到中继多路复用器软件,并且上游客户端软件将在网络安全性和活跃性方面发挥作用。
例如,中继多路复用器软件可能会根据最近的故障暂时识别给定提议没有中继,在这种情况下,提议者软件将使用本地路径构建区块,而不是通过 mev-boost 生态系统启用的远程路径。
pubkey
但具有不同的中继端点,并且它们提供不同的数据?还希望看到提议者的看法,并且如果需要,可以为不良提议者建立声誉,但这绝对不在目前的范围内
从简单的东西开始更容易,并将一些工作推给使用者。
公开聚合指标比聚合然后对中继声誉发表看法更中立
中继监控器的这种设计,尤其是 mev-boost
软件将有关验证者的信息上传到 RM 的部分,对验证者的隐私保护得不是很好。我认为这种权衡因将数据发送到 RM 的 opt-in(选择加入)性质而得到缓解,并且考虑到其解决的风险的严重性是合适的。此功能的未来迭代可以开始合并会模糊信息流的构造,以支持更好的隐私。
- 原文链接: hackmd.io/@ralexstokes/S...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!