Rocket Pool rETH 集成 第6章 EigenLayer 再质押

把 rETH 存进 EigenLayer 做再质押(restaking):再质押原理、AVS 与运营商、StrategyManager 存取流程、收益与额外的罚没风险。

6 分钟阅读
Rocket Pool rETH 集成 第6章 EigenLayer 再质押

Rocket Pool rETH 集成 第 6 章:EigenLayer 再质押(Restake)

最后一个实战项目:把 rETH 存进 EigenLayer再质押(restaking)。再质押让你把”已经在为以太坊提供安全的资产”再次拿去为其它服务(AVS)提供安全,赚取额外收益——代价是额外的罚没风险。这一章讲清原理、流程和风险。


目录


1. 什么是再质押(restaking)

普通质押:你的 ETH 为以太坊主网提供安全,赚质押收益。

再质押(restaking):EigenLayer 让你把”已质押的资产(如 rETH)“再抵押一次,去为其它服务提供安全保证,从而赚额外收益。

这些”其它服务”叫 AVS(Actively Validated Services,主动验证服务)——比如新的预言机网络、数据可用性层、跨链桥、排序器等。它们需要经济安全但又不想从零搭建自己的质押体系,于是”租用”EigenLayer 上再质押资产的安全性。

一句话:再质押 = 让同一份资产的安全性被复用,赚多份收益。


2. 核心角色:质押者、运营商、AVS

质押者(Staker)         运营商(Operator)              AVS
   你                    专业节点                  各种服务
   │ 存 rETH               │ 实际运行 AVS 软件        │ 付费购买安全
   │ 委托(delegate)──────▶ │ ───为多个 AVS 验证──────▶│
   └ 赚收益 ◀──────────────┴────分配奖励─────────────┘
  • 质押者(Staker):你,把 rETH 存进 EigenLayer。
  • 运营商(Operator):专业节点,质押者把验证权**委托(delegate)**给他,由他实际去运行各个 AVS 的验证工作。
  • AVS:购买安全的服务,向运营商和质押者支付奖励。

你作为集成开发者,主要扮演”质押者”:存 rETH、委托给运营商。


3. 收益从哪来

把 rETH 存进 EigenLayer,收益叠加:

① rETH 本身的质押收益(汇率仍在涨,rETH 没离开你名下的策略)
② AVS 支付的再质押奖励(运营商验证 AVS 获得,按比例分给委托的质押者)
③ (历史上)EigenLayer 积分 / EIGEN 代币激励

注意 ①:存进 EigenLayer 的是 rETH 本身,它的汇率收益不受影响(EigenLayer 只是托管,不改变 rETH 的内在增值)。所以再质押是在原有质押收益之上纯叠加额外收益。


4. 存入流程:StrategyManager

EigenLayer 用 Strategy(策略)合约来托管每种再质押资产。rETH 对应一个专门的 rETH Strategy。存入通过 StrategyManager

interface IStrategyManager {
    function depositIntoStrategy(address strategy, address token, uint256 amount) external returns (uint256 shares);
}
  • strategy:rETH 对应的 Strategy 合约地址。
  • token:rETH 地址。
  • amount:存入数量。
  • 返回 shares:你在该策略里的份额(类似 LP 份额,随策略状态换算回 rETH 数量)。

存入前要先 approve rETH 给 StrategyManager。


5. 案例:把 rETH 存进 EigenLayer

1. 你有 100 rETH
2. reth.approve(strategyManager, 100e18)
3. strategyManager.depositIntoStrategy(rethStrategy, rETH, 100e18)
   → 返回 shares(比如 100e18,份额≈数量,取决于策略当前汇率)
4. 你现在在 rETH Strategy 里有了份额,开始:
   - 继续享受 rETH 汇率上涨(①)
   - 委托运营商后,赚 AVS 奖励(②)

你的 100 rETH 现在”一鱼两吃”:既赚以太坊质押收益,又赚 AVS 再质押收益。


6. 委托给运营商

光存入还不够,要委托给一个运营商,你的份额才会被用于为 AVS 提供安全、才能赚 ② 的收益:

interface IDelegationManager {
    function delegateTo(address operator, SignatureWithExpiry memory approverSignatureAndExpiry, bytes32 approverSalt) external;
}
  • 选一个你信任的运营商(看他验证哪些 AVS、历史表现、罚没记录)。
  • delegateTo 把你所有已存策略的份额委托给他(EigenLayer 是”全仓委托”,不是按策略分别委托)。
  • 运营商替你验证 AVS,奖励按规则分配给你。

选运营商是关键决策:他验证的 AVS 越多收益可能越高,但罚没风险也越大(第 8 节)。


7. 提款:两步与等待期

从 EigenLayer 取回 rETH 不是即时的,要走”两步 + 等待期”:

1. queueWithdrawal:发起提款请求(你的份额进入排队)
2. 等待一个 escrow / 冷却期(防止在被罚没前逃跑,保证 AVS 的安全承诺)
3. completeQueuedWithdrawal:等待期过后,真正取回 rETH

为什么要等待期?因为再质押的安全承诺需要时间窗口来执行可能的罚没。如果允许即时提款,作恶者可以先作恶、再立刻跑路。等待期(historically 约 7 天量级)让协议有机会在你跑路前罚没你。

集成时要把这个异步提款 + 等待期设计进你的合约和用户体验里。


8. 额外的罚没风险

再质押的收益不是白来的,对应额外的罚没(slashing)风险

  • 你委托的运营商如果在某个 AVS 上作恶或失职,你的 rETH 份额可能被罚没
  • 这是在以太坊主网质押罚没之外的新增风险层
  • 风险随”运营商验证的 AVS 数量”增加——验证越多 AVS,潜在罚没面越大。

所以再质押的本质是:用承担更多罚没风险,换取更多收益。集成时要:

  • 谨慎选运营商(分散、信誉好、罚没记录干净)。
  • 向用户清晰披露这层额外风险。
  • 不要为了多一点收益把份额委托给验证一大堆高风险 AVS 的运营商。

9. 本章小结

  1. 再质押:用 EigenLayer 把 rETH 的安全性复用给其它服务(AVS),在原质押收益之上叠加 AVS 奖励。
  2. 三角色:质押者(你)→ 委托 → 运营商(跑 AVS)→ 服务 AVS
  3. 收益叠加:① rETH 汇率收益(不受影响)+ ② AVS 再质押奖励 + ③ 代币/积分激励。
  4. 存入用 StrategyManager.depositIntoStrategy(rethStrategy, rETH, amount) 得到 shares;需先 approve。
  5. 必须 delegateTo 运营商份额才生效;EigenLayer 是全仓委托。
  6. 提款是两步 + 等待期(queue → 冷却 → complete),防作恶后逃跑。
  7. 额外的罚没风险随委托运营商验证的 AVS 增多而上升——收益与风险对应。

10. 动手练习

对应课程的 EigenLayer Restake 项目:把 rETH 存进 EigenLayer 并委托。

练习:rETH 再质押全流程

主网分叉,涉及 EigenLayer StrategyManager、DelegationManager、rETH Strategy。

interface IStrategyManager {
    function depositIntoStrategy(address strategy, address token, uint256 amount) external returns (uint256 shares);
    function stakerStrategyShares(address staker, address strategy) external view returns (uint256);
}
interface IDelegationManager {
    function delegateTo(address operator, SignatureWithExpiry memory sig, bytes32 salt) external;
    function isDelegated(address staker) external view returns (bool);
}

思路:

  1. setUp:给合约 deal 一些 rETH(或用 WETH 换)。
  2. 存入reth.approve(strategyManager, amount)depositIntoStrategy(rethStrategy, rETH, amount)。断言返回 shares > 0stakerStrategyShares(this, rethStrategy) > 0
  3. 委托:选一个已注册的运营商地址,调 delegateTo(operator, emptySig, 0)。断言 isDelegated(this) == true
  4. 提款(两步)queueWithdrawal 发起提款 → vm.warp 跳过等待期 → completeQueuedWithdrawal 取回 rETH。断言 rETH 余额恢复。
  5. 验证收益不变:存入前后读 reth.getExchangeRate(),确认 rETH 的汇率收益不受 EigenLayer 托管影响。

注:EigenLayer 接口随版本演进,实际练习以课程仓库提供的接口和地址为准。

运行

forge test --evm-version cancun --fork-url $FORK_URL \
  --match-path test/RethEigenLayer.t.sol -vvv

下一章(第 7 章 附录)总结全课程的风险叠加与最佳实践,并给出进一步学习方向。

💬 评论