中间件指南链接:构建 AVS 合约快速入门指南

  • Layr-Labs
  • 发布于 2025-03-08 10:16
  • 阅读 23

本文档旨在描述和总结构建在 EigenLayer 上的自主可验证服务 (AVS) 如何与核心 EigenLayer 协议交互。主要介绍了AVS开发者如何使用API来实现操作员的选择加入和退出AVS、操作员持续更新对中间件的承诺、创建操作员集合、提交操作员和利益相关者的奖励以及惩罚恶意行为的操作员等功能。

目的

本文档旨在描述和总结构建在 EigenLayer 之上的 autonomous verifiable services (AVS)如何与核心 EigenLayer 协议交互。目前,本文档解释了 AVS 开发者如何使用 API 来:

  • 使 operators 能够选择加入 AVS,
  • 使 operators 能够选择退出(提取 stake)AVS,
  • 使 operators 能够持续更新他们对 middlewares 的承诺,
  • 使 AVSs 能够创建 operator sets,
  • 使 AVSs 能够为 operators 和 stakers 提交奖励,以及
  • 使 AVSs 能够因为恶意行为 slashing operators。

介绍

在设计 EigenLayer 时,EigenLabs 团队的目标是对构建在其之上的 AVS 的结构做出最小的假设。这个 repo 包含可以扩展、直接使用或作为参考的代码,用于在 EigenLayer 之上构建 AVS。所有的 middleware 合约都是 AVS 特定的,需要由 AVS 团队单独部署,这些团队与由 EigenLabs 部署的 EigenLayer 核心合约进行交互。

重要术语

  • Tasks - EigenLayer 中的 Task 是 operators 在服务 AVS 时承诺执行的最小工作单元。这些 Tasks 可能与 AVS 中的一个或多个 operator sets 相关联。
  • Strategies - EigenLayer 中的 Strategy 是一种持有 staker 存款的合约,即它控制一个或多个可以 restaked 的资产。EigenLayer 的 Strategy 设计是灵活和开放的,这意味着任何人都可以使用核心合约中的 StrategyManager 来 permissionlessly 部署 Strategy。
  • Operator Sets - EigenLayer 中的 operator set 是一种区分 AVS 中不同类别 operators 的方式。Operators 可以根据他们执行的 Tasks、支持的 Strategies、他们收到的奖励或 operators 受到的 slashing 条件进行分隔。AVS 可以创建两种类型的 operator sets,total delegated stake 和 unique stake。有关不同类型的 operator sets 的更多信息,请参阅[此][operator-set-guide-link]博客文章。

关键设计考虑

  1. 分解为 "Tasks":<br/> EigenLayer 假设 AVS 管理由注册 operator 随时间执行的 Tasks。每个 Task 都与 AVS 的 operators 的 stakes 被 "at stake" 的时间段相关联,即可能受到 slashing。Tasks 的示例可以是:

    • 在 EigenDA 的上下文中托管和提供 “DataStore”
    • 为桥接服务发布另一个区块链的状态根
  2. Stake 在有限的时间内 "At Stake" 在 Tasks 上:<br/> 假设每个 Task (最终)都会解决。每个 operator 将他们在 EigenLayer 中的 stake “at stake” 在他们执行的 Tasks 上。为了“释放” stake (例如,以便 operator 可以提取他们的资金),这些 Tasks 最终需要解决。建议在 AVS 合约中为每个 Task 指定一个预定义的持续时间,但不是必须的。作为指导,EigenLabs 团队认为 Task 的持续时间应与 operator 保持资金 “at stake” 可接受的最长合理持续时间保持一致。AVS 构建者应该认识到延长 Task 的持续时间可能会对 EigenLayer 的 stakers 产生显著的负面外部性,并且可能阻止 operators 选择加入服务他们的应用程序(以便他们可以吸引更多的 delegated stake)。在撰写本文时,DEALLOCATION_DELAY 是 stake 从 AVS 中 deallocated 所需的时间,为 14 天。

  3. Services 只 Slash 客观可归因的行为:<br/> EigenLayer 的构建是为了支持由于链上可检查、客观可归因的行为而导致的 slashing。AVS 应该只在 EigenLayer 中为这种可证明且可归因的行为进行 slashing。预计 operators 会非常犹豫是否选择加入对其他类型的行为进行 slashing 的服务,其他服务甚至可能选择排除那些选择加入服务具有这种 “主观 slashing 条件” 的一个或多个 AVS 的 operators,因为这些 slashing 条件对风险建模提出了重大挑战,并且可能被认为更危险。链上可检查、客观可归因的行为的一些示例:

    • 在以太坊中 double-signing 一个区块,但不是 inactivity leak;
    • EigenDA 中的 proofs-of-custody,但不是节点停止服务数据;
    • 轻节点桥接 AVS 中的节点签署来自另一个链的无效区块。

    通过 Eigen token,未来将支持主体间 slashing。

  4. Services 和 EigenLayer 的合约交互:<br/> 假设 services 有两个合约来协调发送到 EigenLayer 的 service 的通信。第一个合约(称为 ServiceManager)通知 EigenLayer 何时应 slashing、驱逐或监禁 operator,何时提交奖励,设置 AVS 元数据以及管理 UAM(有关 UAM 的更多信息,请参阅[此处][uam-link])。第二个合约是 SlashingRegistryCoordinator,它调用 EigenLayer 来创建 operator sets 和强制驱逐 operators。AVSs 可以选择偏离此模式,但这将导致更糟糕的开发者和 operator 体验,不建议这样做。

与 EigenLayer 合约的集成:

在本节中,我们将解释 EigenLayer 提供的各种 API 接口,这些接口对于 AVS 与 EigenLayer 集成至关重要。

Operator 注册到 EigenLayer 协议

在 operators 注册到 AVS 之前,他们必须注册到 EigenLayer 协议,并且可能会积累一些 stake(AVSs 可以选择不设置最小 stake)。为此,operators 必须与 DelegationManager 交互,调用 registerAsOperator(..),提供用作 delegation approver 的地址(可以批准 stakers 委托给 operator 的地址。如果设置为零地址,任何 staker 都可以委托给 operator),一个 allocation delay(他们的 stake 变为活动状态所需的时间)和一个元数据 URI。注册后,stakers 可以通过调用 DelegationManager 上的 delegateTo(..) 将他们的 stake 委托给 operator。

Operator 注册到 AVS

Operator 通过将 stake 分配给 AVS,然后注册 operator set 来选择加入 AVS。流程如下:

  1. Operator 调用 modifyAllocations(..), 提供 AVS 的 operator set、Strategies 和要分配的 magnitude。交易成功后,将触发 allocation delay,也就是 stake 变为活动或可 slashing 的时间。Operators 配置此值,并且可以设置为 0。
  2. Allocation delay 经过后,operator 可以通过调用 registerForOperatorSets(..) 注册他们分配到的 operator set, 提供实现 IAVSRegistrar 接口的 SlashingRegistryCoordinator 的地址、operator set IDs 和注册所需的任何额外数据。

下图说明了上述流程:

<p align="center"> <img src="./images/operator_registration.png" alt="operator registration" width="500"> </p>

Operator 从 AVS 注销

Operators 通过调用 deregisterFromOperatorSets(..),提供要注销的 operator set IDs 和 AVS 的 SlashingRegistryCoordinatorAddress,从而通过 AllocationManager 注销。 请注意,stake 将在 DEALLOCATION_DELAY 通过之前保持可 slashing 状态,该状态在协议中设置为 14 天。 14 天后,operator 的状态将更新为 DEREGISTERED

<p align="center"> <img src="./images/operator_deregistration.png" alt="operator deregistration" width="400" height="800"> </p>

Stake 更新

EigenLayer 具有 lazy stake 状态模型,这意味着当 operators 分配或取消分配、stakers 存入或提取以及当 operator 被 slashing 时,更新不会自动传播到 StakeRegistry middleware 合约中。这些更新必须通过调用 updateOperatorsForQuorum(..) 并传入要更新的 operator 地址和 operator set IDs 来手动推送。这些状态更新对于 AVS 的功能至关重要,例如,在将奖励分配给 operators 之前,必须知道已分配的 stake 量。EigenLabs 提供了一种称为 [AVS-Sync][avs-sync-link] 的服务来抽象这个过程。这个过程可能很昂贵,AVSs 在他们的奖励计划中考虑这一点非常重要。

用户访问管理

用户访问管理 (UAM) 是 EigenLayer 中的协议级别功能,用于增强密钥管理和模块化智能合约设计。UAM 旨在通过分离 ServiceManager 的职责来简化 AVS 架构。下表详细说明了 AVS 合约和帐户的推荐 UAM 访问模式。ServiceManager 应该公开一个具有适当访问控制的接口,以调用 PermissionsController 合约来管理 UAM。有关更多详细信息,请参阅 UAM [ELIP][uam-elip-link]。 合约 / 帐户 职责
InstantSlasher / VetoableSlasher 通过调用 AllocationManager 来处理 slashing
SlashingRegistryCoordinator 通过调用 AllocationManager 来处理 operator set 创建和强制 operator 注销
AVS 控制的帐户(例如,EOA 或多重签名) AllocationManager 上设置 AVS 注册表和 AVS 元数据 URI
StakeRegistry AllocationManager 上为 operator sets 添加和删除 Strategies

Slashing

EigenLayer middleware 提供了两个分别用于 slashing 的智能合约,InstantSlasherVetoableSlasher,其中前者执行 slashing 请求没有任何延迟或否决期,而后者具有延迟和否决期。 建议 AVS 使用由一组不同的中小企业组成的 security council 的 VetoableSlasher。 这些是很好的训练轮,因为你的 AVS 会成熟,在这些成熟过程中,错误可能来自非恶意的来源,例如软件错误。 排队 slashing 请求是可配置的(例如,无需许可)。 建议在 ServiceManager 上公开一个外部或公共函数,该函数将调用 slashing 合约。

构建 AVS 合约的快速入门指南:

EigenLayer 团队构建了这个 repo 作为一组可重用和可扩展的合约,用于构建在 EigenLayer 之上的 AVS 中,其中包括可以扩展、直接使用或作为构建 EigenLayer 上 AVS 的参考的代码。所有 AVS 特定的合约都可以构建在几个基本合约之上:

  • SlashingRegistryCoordinator 处理 operator sets 的创建和 operators 的强制注销。它还具有 AllocationManager 调用的回调,用于注册和注销 operators。
  • StakeRegistry 跟踪 operator 在给定 operator set 中的 “weight”,跨 operator sets 的所有 Strategies、stake 更新和历史记录以及每个 operator set 中 Strategies 的管理。
  • IndexRegistry 维护 operator set 中 operators 的排序列表,显示 operator 更新、operator set 更新和历史更新。
  • BLSApkRegistry 跟踪具有注册/注销和分配/取消分配更新的 operator sets 的聚合 BLS 密钥。此注册中心还提供 EVM 地址和 BLS 身份之间的映射。
  • SocketRegistry 显示在 operator 注册时设置的可选 operator 元数据,例如,operators 可以在socket 数据中设置他们的 HTTP URL。
  • OperatorStateRetriever 通过组合对上述注册中心合约的调用来显示丰富的 operator 状态。这包括检索 operator 在所有 sets 中的状态(例如,他们在 set 中的相对 stake)、set 的所有 operators 的列表及其 stake 以及检索 BLS 和 ECDSA 签名验证合约上 checkSignatures 函数所需的签名索引。

此外,预计许多 AVS 将需要注册 operators 的 quorum 来签署承诺。有两个合约支持此功能;BLSSignatureCheckerECDSAStakeRegistry(目前未经审计)支持两种不同的签名方案。

  • 原文链接: github.com/Layr-Labs/eig...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Layr-Labs
Layr-Labs
江湖只有他的大名,没有他的介绍。