Rocket Pool rETH 集成 第 6 章:EigenLayer 再质押(Restake)
最后一个实战项目:把 rETH 存进 EigenLayer 做再质押(restaking)。再质押让你把”已经在为以太坊提供安全的资产”再次拿去为其它服务(AVS)提供安全,赚取额外收益——代价是额外的罚没风险。这一章讲清原理、流程和风险。
目录
- 1. 什么是再质押(restaking)
- 2. 核心角色:质押者、运营商、AVS
- 3. 收益从哪来
- 4. 存入流程:StrategyManager
- 5. 案例:把 rETH 存进 EigenLayer
- 6. 委托给运营商
- 7. 提款:两步与等待期
- 8. 额外的罚没风险
- 9. 本章小结
- 10. 动手练习
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. 本章小结
- 再质押:用 EigenLayer 把 rETH 的安全性复用给其它服务(AVS),在原质押收益之上叠加 AVS 奖励。
- 三角色:质押者(你)→ 委托 → 运营商(跑 AVS)→ 服务 AVS。
- 收益叠加:① rETH 汇率收益(不受影响)+ ② AVS 再质押奖励 + ③ 代币/积分激励。
- 存入用
StrategyManager.depositIntoStrategy(rethStrategy, rETH, amount)得到 shares;需先 approve。 - 必须
delegateTo运营商份额才生效;EigenLayer 是全仓委托。 - 提款是两步 + 等待期(queue → 冷却 → complete),防作恶后逃跑。
- 额外的罚没风险随委托运营商验证的 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);
}
思路:
setUp:给合约deal一些 rETH(或用 WETH 换)。- 存入:
reth.approve(strategyManager, amount)→depositIntoStrategy(rethStrategy, rETH, amount)。断言返回shares > 0且stakerStrategyShares(this, rethStrategy) > 0。 - 委托:选一个已注册的运营商地址,调
delegateTo(operator, emptySig, 0)。断言isDelegated(this) == true。 - 提款(两步):
queueWithdrawal发起提款 →vm.warp跳过等待期 →completeQueuedWithdrawal取回 rETH。断言 rETH 余额恢复。 - 验证收益不变:存入前后读
reth.getExchangeRate(),确认 rETH 的汇率收益不受 EigenLayer 托管影响。
注:EigenLayer 接口随版本演进,实际练习以课程仓库提供的接口和地址为准。
运行
forge test --evm-version cancun --fork-url $FORK_URL \
--match-path test/RethEigenLayer.t.sol -vvv
下一章(第 7 章 附录)总结全课程的风险叠加与最佳实践,并给出进一步学习方向。