Rocket Pool rETH 集成 第 3 章:Aave 闪电贷杠杆
第一个实战项目:用 Aave 闪电贷 + rETH 抵押构建杠杆质押策略。核心想法是借力放大 rETH 敞口,从而放大质押收益。这一章讲清杠杆原理、如何用一笔闪电贷高效开仓、以及最关键的清算风险。
目录
- 1. 杠杆质押的动机
- 2. 朴素循环杠杆
- 3. 案例:循环杠杆的倍数
- 4. 用一笔闪电贷高效开仓
- 5. Aave 的关键概念:LTV 与健康因子
- 6. 案例:健康因子计算
- 7. 杠杆质押的收益与风险
- 8. 平仓(去杠杆)
- 9. 本章小结
- 10. 动手练习
1. 杠杆质押的动机
rETH 持续产生质押收益(约 3~5% 年化,体现在汇率上升)。如果你坚信 rETH 会稳定升值,可以用杠杆放大这份收益:
借更多 ETH 去买更多 rETH,赚更多质押收益,只要”质押收益率 > 借贷利率”,杠杆就是正收益。
杠杆质押 = 用 rETH 作抵押借 ETH,再把借来的 ETH 换成更多 rETH,如此循环。
2. 朴素循环杠杆
最直接的做法是手动循环:
1. 用初始 ETH 买入 rETH
2. 把 rETH 存进 Aave 作抵押
3. 用抵押借出 ETH(不超过 LTV 上限)
4. 用借来的 ETH 再买 rETH
5. 回到第 2 步,重复 N 次
每循环一次,你的 rETH 敞口就增加一点,但每次能借的越来越少(受 LTV 限制),最终收敛到一个杠杆倍数。
缺点:要发很多笔交易,gas 高、操作繁琐。下面用闪电贷一笔搞定。
3. 案例:循环杠杆的倍数
设 Aave 对 rETH 的 LTV = 80%(每 1 美元抵押能借 0.8 美元)。初始投入 100 ETH 等值的 rETH:
第 0 轮:抵押 100,借 80,买 80 rETH
第 1 轮:抵押 +80,借 64,买 64
第 2 轮:抵押 +64,借 51.2,买 51.2
...
总敞口 = 100 + 80 + 64 + 51.2 + ... = 100 / (1 - 0.8) = 500
最大杠杆 = 1 / (1 - LTV) = 1 / 0.2 = 5 倍。也就是初始 100 ETH,最终能持有约 500 ETH 等值的 rETH(借了约 400 ETH)。实际会留安全边际,不顶满 LTV。
4. 用一笔闪电贷高效开仓
闪电贷让你一笔交易直接开到目标杠杆,不用循环:
目标:初始 100 ETH,开到 500 ETH 敞口(借 400)
步骤(在一笔交易里):
1. Aave 闪电贷借出 400 ETH
2. 把 (100 自有 + 400 借来) = 500 ETH 全换成 rETH
3. 把 500 rETH 全部存进 Aave 作抵押
4. 从 Aave 借出 400 ETH
5. 用借来的 400 ETH 归还闪电贷(+ 闪电贷手续费)
结果一步到位:你抵押了 500 rETH、负债 400 ETH、净敞口仍是初始的 100,但 rETH 头寸放大了 5 倍。Aave 的闪电贷(flashLoan / flashLoanSimple)就是为这种”原子化复杂仓位操作”设计的。
注意闪电贷手续费(Aave V3 约 0.05%)和两次 swap 的滑点都会吃掉一点收益,要算进成本。
5. Aave 的关键概念:LTV 与健康因子
借贷必须理解两个核心指标:
- LTV(Loan-To-Value,贷款价值比):抵押品最多能借出的比例。rETH 的 LTV 比如 80%。
- 清算阈值(Liquidation Threshold):略高于 LTV(比如 82.5%),当负债/抵押超过它就会被清算。
- 健康因子(Health Factor, HF):
HF = (抵押品价值 × 清算阈值) / 负债价值
HF > 1:安全。HF < 1:会被清算(清算人替你还债、低价拿走你的抵押品,你损失清算罚金)。
杠杆越高,HF 越接近 1,越危险。
6. 案例:健康因子计算
接第 4 节:抵押 500 rETH(设此刻 1 rETH = 1.1 ETH,则抵押价值 = 550 ETH),负债 400 ETH,rETH 清算阈值 82.5%:
HF = (550 × 0.825) / 400 = 453.75 / 400 = 1.134
HF = 1.134 > 1,安全,但不算很高。风险点:
- 如果 rETH 相对 ETH 贬值(二级市场脱锚或 slashing),抵押价值下降,HF 跌向 1。
- 例如 rETH/ETH 跌 12%,抵押价值变
550 × 0.88 ≈ 484,HF =484×0.825/400 ≈ 0.998 < 1→ 被清算!
所以杠杆质押最大的风险是 rETH 相对 ETH 的脱锚(而非 ETH 本身涨跌,因为抵押和负债都以 ETH 计价,两者大体同向)。
7. 杠杆质押的收益与风险
收益来源:放大的 rETH 质押收益 − 借 ETH 的利息 − 成本。
净年化 ≈ 杠杆倍数 × rETH质押收益率 − (杠杆倍数-1) × ETH借贷利率
例:5 倍杠杆、rETH 收益 4%、借 ETH 利率 2%:
净 ≈ 5 × 4% − 4 × 2% = 20% − 8% = 12% 年化(理论值,未计成本)
风险:
- rETH/ETH 脱锚 → 被清算(最大风险,见第 6 节)。
- 借贷利率上升 → 利差收窄甚至为负。
- 清算罚金 → 被清算时额外损失。
- 杠杆放大一切:收益放大,亏损也放大。
8. 平仓(去杠杆)
平仓也用闪电贷一笔完成:
1. 闪电贷借出 400 ETH
2. 用这 400 ETH 还清 Aave 负债
3. 取回全部 500 rETH 抵押
4. 卖出部分 rETH 换回 400 ETH(+闪电贷费)还闪电贷
5. 剩下的 rETH/ETH 就是你的本金 + 净收益
和开仓对称:开仓”借→买→押→借→还”,平仓”借→还债→赎押→卖→还闪电贷”。
9. 本章小结
- 杠杆质押:用 rETH 抵押借 ETH、再买更多 rETH,放大质押收益(只要质押收益率 > 借贷利率)。
- 朴素循环杠杆最大倍数 =
1/(1-LTV),但要多笔交易;闪电贷一笔原子化开仓。 - 闪电贷开仓:借 ETH → 全换 rETH → 抵押 → 借 ETH → 还闪电贷。
- 关键指标:LTV、清算阈值、健康因子 HF = 抵押×清算阈值/负债;HF<1 被清算。
- 最大风险是 rETH/ETH 脱锚(抵押贬值 → HF 跌破 1 → 清算),而非 ETH 涨跌。
- 平仓用闪电贷对称操作;杠杆放大收益也放大亏损。
10. 动手练习
对应课程的 Aave Flash Leverage 项目:用闪电贷开杠杆 rETH 仓。
练习:实现 rETH 杠杆开仓合约
主网分叉,涉及 Aave V3 Pool、rETH、WETH、一个 rETH/WETH 的 swap 通道(Balancer/Uniswap)。
interface IAavePool {
function flashLoanSimple(address receiver, address asset, uint256 amount, bytes calldata params, uint16 referralCode) external;
function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
function borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf) external;
function getUserAccountData(address user) external view returns (uint256 totalCollateralBase, uint256 totalDebtBase, uint256 availableBorrowsBase, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor);
}
思路:
- 开仓函数
leverage(uint initialEth, uint flashAmount):- 拉入用户的初始 ETH/WETH。
- 调
flashLoanSimple(this, WETH, flashAmount, params, 0)。
executeOperation(Aave 闪电贷回调):- 把 (初始 + 借来的) WETH 全换成 rETH(走 Balancer/Uniswap)。
supply(rETH, 全部, this, 0)抵押。borrow(WETH, flashAmount + premium, 2, 0, this)借出还款额。- approve 给 Aave Pool 以归还闪电贷(Aave 会自动 pull)。
- 验证:
getUserAccountData(this)读出 HF,断言healthFactor > 1e18(安全);抵押的 rETH 敞口约等于initial × 杠杆倍数。
进阶
- 实现对称的 平仓
deleverage(第 8 节流程)。 - 加一个安全检查:开仓后若 HF 低于某阈值(如 1.05e18)则 revert,避免开出危险仓位。
运行
forge test --evm-version cancun --fork-url $FORK_URL \
--match-path test/RethAaveLeverage.t.sol -vvv
下一章(第 4 章 Balancer / Aura 流动性):把 rETH 存进 Balancer 池做 LP,再质押到 Aura 赚取叠加激励。