本文档旨在描述和总结构建在 EigenLayer 上的自主可验证服务 (AVS) 如何与核心 EigenLayer 协议交互。主要介绍了AVS开发者如何使用API来实现操作员的选择加入和退出AVS、操作员持续更新对中间件的承诺、创建操作员集合、提交操作员和利益相关者的奖励以及惩罚恶意行为的操作员等功能。
本文档旨在描述和总结构建在 EigenLayer 之上的 autonomous verifiable services (AVS)如何与核心 EigenLayer 协议交互。目前,本文档解释了 AVS 开发者如何使用 API 来:
在设计 EigenLayer 时,EigenLabs 团队的目标是对构建在其之上的 AVS 的结构做出最小的假设。这个 repo 包含可以扩展、直接使用或作为参考的代码,用于在 EigenLayer 之上构建 AVS。所有的 middleware 合约都是 AVS 特定的,需要由 AVS 团队单独部署,这些团队与由 EigenLabs 部署的 EigenLayer 核心合约进行交互。
StrategyManager
来 permissionlessly 部署 Strategy。分解为 "Tasks":<br/> EigenLayer 假设 AVS 管理由注册 operator 随时间执行的 Tasks。每个 Task 都与 AVS 的 operators 的 stakes 被 "at stake" 的时间段相关联,即可能受到 slashing。Tasks 的示例可以是:
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 天。
Services 只 Slash 客观可归因的行为:<br/> EigenLayer 的构建是为了支持由于链上可检查、客观可归因的行为而导致的 slashing。AVS 应该只在 EigenLayer 中为这种可证明且可归因的行为进行 slashing。预计 operators 会非常犹豫是否选择加入对其他类型的行为进行 slashing 的服务,其他服务甚至可能选择排除那些选择加入服务具有这种 “主观 slashing 条件” 的一个或多个 AVS 的 operators,因为这些 slashing 条件对风险建模提出了重大挑战,并且可能被认为更危险。链上可检查、客观可归因的行为的一些示例:
通过 Eigen token,未来将支持主体间 slashing。
Services 和 EigenLayer 的合约交互:<br/>
假设 services 有两个合约来协调发送到 EigenLayer 的 service 的通信。第一个合约(称为 ServiceManager
)通知 EigenLayer 何时应 slashing、驱逐或监禁 operator,何时提交奖励,设置 AVS 元数据以及管理 UAM(有关 UAM 的更多信息,请参阅[此处][uam-link])。第二个合约是 SlashingRegistryCoordinator
,它调用 EigenLayer 来创建 operator sets 和强制驱逐 operators。AVSs 可以选择偏离此模式,但这将导致更糟糕的开发者和 operator 体验,不建议这样做。
在本节中,我们将解释 EigenLayer 提供的各种 API 接口,这些接口对于 AVS 与 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 通过将 stake 分配给 AVS,然后注册 operator set 来选择加入 AVS。流程如下:
modifyAllocations(..)
, 提供 AVS 的 operator set、Strategies 和要分配的 magnitude。交易成功后,将触发 allocation delay,也就是 stake 变为活动或可 slashing 的时间。Operators 配置此值,并且可以设置为 0。registerForOperatorSets(..)
注册他们分配到的 operator set, 提供实现 IAVSRegistrar
接口的 SlashingRegistryCoordinator
的地址、operator set IDs 和注册所需的任何额外数据。下图说明了上述流程:
<p align="center"> <img src="./images/operator_registration.png" alt="operator registration" width="500"> </p>
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>
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 |
EigenLayer middleware 提供了两个分别用于 slashing 的智能合约,InstantSlasher
和 VetoableSlasher
,其中前者执行 slashing 请求没有任何延迟或否决期,而后者具有延迟和否决期。 建议 AVS 使用由一组不同的中小企业组成的 security council 的 VetoableSlasher
。 这些是很好的训练轮,因为你的 AVS 会成熟,在这些成熟过程中,错误可能来自非恶意的来源,例如软件错误。 排队 slashing 请求是可配置的(例如,无需许可)。 建议在 ServiceManager
上公开一个外部或公共函数,该函数将调用 slashing 合约。
EigenLayer 团队构建了这个 repo 作为一组可重用和可扩展的合约,用于构建在 EigenLayer 之上的 AVS 中,其中包括可以扩展、直接使用或作为构建 EigenLayer 上 AVS 的参考的代码。所有 AVS 特定的合约都可以构建在几个基本合约之上:
AllocationManager
调用的回调,用于注册和注销 operators。checkSignatures
函数所需的签名索引。此外,预计许多 AVS 将需要注册 operators 的 quorum 来签署承诺。有两个合约支持此功能;BLSSignatureChecker
和 ECDSAStakeRegistry
(目前未经审计)支持两种不同的签名方案。
- 原文链接: github.com/Layr-Labs/eig...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!