EigenPod Slashing 发布 - 信标链ETH变更

本文介绍了Beacon Chain ETH的Slashing Release,重点在于EigenPod相关的变更。主要包括share accounting方式的改变、EigenPod结构的变更(Checkpoint struct definition),以及 pre-release migration、完全slash和完成遗留提现等边缘情况的处理方式。

Slashing Release - 信标链 ETH 更改

份额计算变更

份额计算正在发生变化。当一个 EigenPod 的 checkpoint 完成时,一个负的余额差额将不再减少你的份额。

相反,你的新余额和旧余额的比例将累积到你的 “信标链罚没因子” 中,这是一个单调递减的值,EigenPodManager 使用它来跟踪 pod 的份额实际对应的资产数量( 代码链接):

/**
 * @notice 返回一个 pod 所有者在更新他们的 pod 余额时所经历的比例余额减少的历史总和。
 */
function beaconChainSlashingFactor(
  address staker
) external view returns (uint64);

例如,假设你的 EigenPod 拥有价值 32 ETH 的原生 ETH 份额。如果你的验证者累积了 16 ETH 的罚没,并且这在 checkpoint 中被报告,则 EigenPodManager 将:

  • 使你的 stakerDepositShares 等于 32 ETH
  • 将实际支持 pod 的资产计算为 WAD 的比例 ( 16 ETH * (WAD/32 ETH) == 0.5 WAD)
  • 将其乘以你现有的信标链罚没因子。由于默认情况下这是 WAD,因此你的新信标链罚没因子将是 WAD * (0.5 WAD / WAD) == 0.5 WAD

如果你随后使用 32 ETH 重新抵押一个新的验证者,则 EigenPodManager 会将你的 stakerDepositShares 增加到 64 ETH。然而,DelegationManager 委托给你的运营商(或允许你排队提款)的数量部分基于你的信标链罚没因子。在这种情况下,可委托/可提取的数量将为 48 ETH,等于支持你的 pod 的实际资产。

你需要知道的是:

  • EigenPodManager.stakerDepositShares 将不再返回负值
  • 如果你的 pod 报告余额减少,stakerDepositShares 不会减少。相反,EigenPodManager.beaconChainSlashingFactor(staker) 将被更新以反映这一点
    • 注意,“余额减少” 专门指你的验证者余额和你 pod 的原生 ETH 余额之和 严格小于 你上次完成 checkpoint 时的余额。这应该只发生在你遭受非活动惩罚或在信标链上被罚没时。
  • 你可以使用 DelegationManager.getWithdrawableShares 计算信标链 ETH 策略的实际可委托/可提取的份额:
/**
 * @notice 给定一个 staker 和一组 strategies,返回他们可以加入提款队列的份额和相应的 depositShares。
 * 该值取决于 staker 被委托给哪个 operator。
 * 返回的份额数量是 staker 将收到的 Strategy 份额的实际数量(取决于每个 strategy 的底层 shares 到 token 的比率)。
 */
function getWithdrawableShares(
  address staker,
  IStrategy[] memory strategies
) external view returns (uint256[] memory withdrawableShares, uint256[] memory depositShares);

EigenPod 变更

为了适应上述的计算变更,EigenPods 将会有一些小的变更:

Checkpoint 结构体定义

Checkpoint 结构体定义正在变更,以适应一个新的 “previous balance” 计算,用于更新你的信标链罚没因子:

struct Checkpoint {
  bytes32 beaconBlockRoot;
  uint24 proofsRemaining;
  uint64 podBalanceGwei;
  int64 balanceDeltasGwei;
  uint64 prevBeaconBalanceGwei;
}

请注意,balanceDeltasGwei 现在是一个 int64 (从 int128 降下来),并且有一个新的字段 prevBeaconBalanceGwei,用于跟踪在 checkpoint 中证明的每个验证者的先前验证者余额的总和。

Checkpoint 最终确认

当最终确认一个 checkpoint 时,它不再从状态中删除。 当前的行为是删除 currentCheckpointcurrentCheckpointTimestamp,并将它们都设置回零 ( 链接)。

从 slashing release 开始,只会删除 currentCheckpointTimestamp ( 链接)。这与上述更改无关,但可以在启动新的 checkpoint 时节省 gas - 因为 checkpoint 的存储槽不再需要从 0 初始化。

预发布迁移

为了适应 EigenPods 的更改,我们将在 slashing release 之前进行一次简短的 “迁移”。目前对该迁移的计划大致如下:

  • 在主网上线 slashing release 前约 1-2 小时,EigenPod.startCheckpoint 方法将对所有 EigenPods 暂停。
  • 我们将运行一个脚本来 完成所有 EigenPods任何未完成的 checkpoints
  • 当 slashing release 执行时,EigenPod.startCheckpoint 将被取消暂停,正常操作可以恢复。

极端情况

完全罚没

你的信标链罚没因子从 1 WAD (1e18) 开始,并随着你的 pod 通过 checkpoints 报告余额减少而降低。

如果在任何时候你的信标链罚没因子达到 0,DelegationManager 将无法处理你 pod 的余额增加、取消委托或提款。 本质上,你的 pod 将被锁定 - 因为尝试添加新的验证者、取消委托或排队提款将导致 revert

但是,只有在 所有 你的 pod 的验证者都被罚没到 0,并且 你的 EigenPod 中没有 ETH 余额的极端情况下,才会发生这种 “完全罚没” 的情况。

完成遗留的提款

如果在 slashing release 时你有负的 stakerDepositShares 你将无法完成 checkpoint 或向你的 pod 添加新的验证者。请参阅相关的检查和解释

为了解决这种情况,你需要使用 receiveAsTokens == false 完成 DelegationManager 中任何现有的提款。

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

0 条评论

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