Skip to main content
尚未公开。 请联系我们以获取抢先体验。

场景

一位用户在 Aave V3(Base)上持有一笔以 WETH 为抵押的 USDC 借款,并想把同样的仓位改到 Morpho Blue 上 —— 比方说为了获取更好的利率。手动完成这件事意味着要在提取抵押品之前先找到资金来偿还 Aave,而这正是闪电贷所解决的先有鸡还是先有蛋的难题。 该 flow 并发借入两笔闪电贷,并在同一笔交易内解绑两者:
  • **闪电贷 #1(Aave V3,USDC)**在 Morpho 借款存在之前偿还 Aave 债务。
  • **闪电贷 #2(Balancer V2,WETH)**在 Aave 抵押品被释放之前供应 Morpho 抵押品。
Morpho 借款的额度恰好为 principal + Aave fee,因此它以零残余结清闪电贷 #1;从 Aave 释放出的 WETH 结清闪电贷 #2(Balancer V2 不收费)。

本配方演示了什么

  • flashloan materialiser 从两个不同的提供方为两个 flow 输入提供来源。
  • lifi.flashloanRepay 结清每一条 leg,通过 leg 键关联到它所偿还的输入。
  • 跨协议穿引收据句柄:aave.repaylifi.zap 提取 → morphoBlue.supplyCollateral / morphoBlue.borrow
  • 一个安全的 sweepTo:Aave aToken 抵押品被完全解绑(提取为 WETH),因此代理上不会留下任何不可转移的东西。(与保留 aToken 仓位的 flow 形成对比 —— 参见 sweepTo 注意事项。)

完整示例

改编自 composer-sdk-examples 仓库中的 aaveToMorphoDebtMigration.ts。另有两个将目标债务通过一次交换进行路由的变体 —— ...WithSwap...WithSwapExactOut —— 都建立在相同的形态之上。

需要留意什么

  • Inputs。 三个资源输入:用户的抵押品(directDeposit)加上两个来自不同提供方的 flashloan 来源输入。
  • 为什么用两个提供方。 Aave V3 供应用于偿还的 USDC;Balancer V2 供应 WETH 抵押品(且不收费,因此它这条 leg 仅由提取出的本金结清)。
  • 给 Morpho 借款定额度。 principal + debtFlashloanFee,这样 borrowed 资源就以零剩余结清 USDC leg。
  • 偿还是强制性的。 两笔闪电贷都必须在 flow 内通过 lifi.flashloanRepay 偿还,否则模拟会回滚。
  • 这里的 sweepTo 是安全的,因为 Aave aToken 被完全提取为 WETH —— 代理上不残留任何被绑定的抵押品收据。当一个 flow 保留 aToken 仓位时,请省略笼统的 sweepTo,只转移零散代币(参见注意事项)。