Aave闪电贷回调如何还款? 图 1
Aave闪电贷回调如何还款? · 图 1

Aave闪电贷的核心约束不是“无需抵押”,而是借出、业务操作和结算必须在同一笔交易内完成。接收合约任何一步失败,整条调用链回滚;但失败交易仍会消耗已执行的Gas。

flashLoanSimple的实际调用顺序

开发者调用Pool.flashLoanSimple,传入receiverAddress、asset、amount、params和referralCode。Pool把单一资产转给receiver,随后调用IFlashLoanSimpleReceiver.executeOperation。回调参数包含asset、amount、premium、initiator与自定义params。

接收合约在回调中完成套利、抵押品置换或其他逻辑,最后保证自己持有amount + premium,并批准Pool拉取这笔金额。executeOperation返回true后,Pool执行结算;余额或allowance不足都会让交易回滚。

两个接口怎样选择

能力flashLoanSimpleflashLoan
资产数量单一资产多资产数组
回调接口SimpleReceiverFlashLoanReceiver
未归还转债务不支持可按interestRateModes选择
参数复杂度较低更高

flashLoan的interestRateModes为0时要求归还;选择债务模式时,onBehalfOf仍需满足抵押、借贷能力和信用委托等条件。它不是“还不上就自动贷款”的无条件回退。

premium不能写死

Pool接口暴露当前闪电贷premium相关读取,治理和市场版本可能改变参数。接收合约应使用回调给出的premium计算应还额,前端展示则在发起前读取当前配置并注明网络与Pool地址。

四类常见回滚

第一,receiver没有实现正确接口或回调返回false;第二,业务swap得到的资产不足;第三,approve对象不是实际Pool或授权额小于amount + premium;第四,多资产数组长度、rate mode或onBehalfOf条件错误。排查时先解码revert data,再看回调日志和余额变化,不要仅提高gas limit。

接收合约的安全边界

executeOperation应只接受可信Pool调用,并核对initiator是否符合业务预期。params来自发起方,不能直接作为任意外部调用目标。套利合约还要限制可调用代币、路由、最小产出和最终利润,防止攻击者借用公开入口让合约承担premium或执行恶意approve。

回调中给路由器的临时授权最好在业务结束后收紧,长期留存的无限授权会超出一次闪电贷的原子安全边界。

借贷清算规则可结合Aave清算比例,交易revert见自定义错误解码,流动性池价格读取可参考Uniswap v3价格换算