这篇文章为开发者和审计师提供了将应用与 EigenLayer 集成时的关键注意事项。它详细介绍了 EigenLayer v0.2.5 (M2) 的复杂性、潜在问题,包括原生再质押、提款延迟、操作员与委托机制,以及与信标链的交互细节,旨在帮助理解系统工作原理和避免集成风险。

Eigenlayer 是一个复杂的系统,在集成时需要考虑其边缘情况。接下来,我们将介绍集成中的特殊之处和注意事项,以帮助开发者和审计人员理解可能出现的问题及其原因。
EigenLayer 在过去几个月中一直处于热议的焦点,因为它使通过 PoS 担保的服务(如 L2、桥、预言机,统称为 Actively Validated Services (AVS))能够轻松地启动其 cryptoeconomic security。
它通过允许将原生 ETH 或 LST 存入系统来实现这一点。一旦完成,用户可以选择将其质押委托给他们信任的Operators,以参与 AVS 的一个子集。Operators必须经过 AVS 的白名单认证。如果操作员因 AVS 获得 $AVS(AVS 的代币)奖励,部分奖励可以分配给委托人。相反,如果操作员在 AVS 上行为不端,委托的质押可能会被 Slashing。
尽管该协议看起来很有前景,但它是一个复杂的系统,在与 EigenLayer 集成时需要考虑其边缘情况和细节。在本文中,我们将尝试涵盖尽可能多的集成特殊之处,以帮助开发者和审计人员理解可能出现的问题及其原因。
本文适用于 EigenLayer v0.2.5 (M2),而非第一个主网版本 M1。如果你不熟悉 EigenLayer 及其架构,请首先阅读架构概述部分。
原生再质押者必须等待信标链(Beacon Chain)纳入才能进行再质押
原生再质押涉及在信标链上激活验证者。因此,扮演podOwner角色的集成方必须考虑到这一延迟,并实现验证者激活的验证功能(verifyWithdrawalCredentials())。此外,集成方必须注意,份额仅在验证者的凭证激活后才会铸造。
取消委托和提款延迟
取消委托和提款的路径几乎相同。实际上,取消委托可以看作是完全提款并清除委托人映射。在这两种情况下,请求都会进入一个有延迟的队列。在此延迟之后,质押者可以选择提取金额,或将其委托给当前设置的委托人。集成方必须意识到这一延迟,并在其实现中加以考虑。原生再质押注意事项:如果在延迟之后,质押者想提取他们的 ETH,他们还需要将其从信标链中提取,否则从 EigenLayer 的提款将失败。
来自 {{code}}DelayedWithdrawalRouter{{code}} 的成熟提款可以由任何人认领
在原生再质押的背景下,为了退出共识层奖励和发送到 {{code}}EigenPod{{code}} 的其他 ETH 金额(执行层奖励、赠予等),ETH 必须经过延迟提款过程。负责此过程的提款队列 {{code}}DelayedWithdrawalRouter{{code}} 允许任何人代表 {{code}}podOwner{{code}} 认领成熟的提款。
由于此功能(?),实现podOwner的集成方必须能够正确核算其合约可能未预期在专用函数调用之外收到的任何 ETH 金额。此外,实现podOwner的集成方应该能够认领这些提款,并且必须能够接收 ETH。
建议的费用接收方不能是 {{code}}EigenPod{{code}}
如果验证者是区块的coinbase,接收执行层奖励不会触发任何receive()或fallback()函数。因此,EigenPod将不会知道新的奖励,并且nonBeaconChainETHBalanceWei将不会增加,导致奖励被锁定在 pod 中。为避免这种情况,验证者应将suggested_fee_recipient设置为可以管理执行层奖励的合约,请参阅这篇文章。
一些未来考虑:Slashing
Slashing 尚未实施,所以我们不要对它将如何详细工作进行创新。但当它存在时,集成的关键部分将是正确核算存入的价值,考虑到 Slashing 可能会发生。目前,集成方必须拥有一个足够灵活的代码库,以适应未来的 Slashing。
如果你是从 M1 开始开发的,还有最后一件事
存款概述
有两条路径可以存款到 EigenLayer:


委托概述
默认情况下,份额不会被委托。当进行委托时,质押者选择加入的所有策略中的所有份额都会被委托。这是全有或全无。有两种方式可以启用委托:
取消委托和提款不能是即时的,因为 AVS 可能需要时间来惩罚(Slashing)行为不端的 Operator。三方可以发起取消委托:质押者、质押者的 Operator 以及质押者 Operator 设置的delegationApprover地址。在后两种情况下,这被称为强制取消委托。
当发起取消委托时,所有份额都将从质押者的份额中移除,并放入提款队列。份额将从操作员的账户中移除,并且质押者的委托映射将被清除。经过足够长的时间后,如果质押者在此期间没有重新委托,他们可以最终确定提款并取回其份额,或者重新委托给他们当前的 Operator,或者将他们的份额兑换成代币。
提款概述
我们需要区分 EigenLayer 的提款和信标链的提款。
信标链完全提款
首先,验证者必须在信标链上发送完全提款请求消息,并等待证明可用。然后,podOwner可以在EigenPod上使用证明数据调用verifyAndProcessWithdrawal()。这将验证信标链在 EigenLayer 上的提款,并使该金额可用于从 EigenLayer 提款。请注意,如果金额大于原始质押(32ETH),超额部分将放入DelayedWithdrawalRouter。podOwner被设置为延迟提款的接收方。剩余的质押将需要由DelegationManager的completeQueuedWithdrawal()处理。
信标链部分提款
与信标链完全提款类似,验证者必须在信标链上发送部分提款请求消息。然后podOwner必须在 pod 上调用verifyAndProcessWithdrawal(),资金将通过DelayedWithdrawalRouter退出。podOwner被设置为延迟提款的接收方。
EigenLayer 提款
从 EigenLayer 提款意味着用 deposited 的信标链 ETH 或 LST 赎回份额。要赎回他们的份额,质押者可以:
请注意,有两种不同的提款队列:
Slashing
AVS Slashing:Slashing 机制和Slasher合约尚未实现。我们可以预期在最终确定提款时会有一个额外的步骤,其中Slasher将对从故障操作员取消委托/提取的金额收取费用。
ChainSecurity 自 2017 年以来一直致力于智能合约安全。我们的客户包括蓝筹 DeFi 协议、有前景的 Web3 项目、中央银行和大型组织。
阅读我们已发布的审计报告。
预约通话以讨论审计前景。
- 原文链接: chainsecurity.com/blog/e...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!