flashloan
flashloan, 闪电贷, 是指在无需任何抵押, 一个交易内完成借款,还款的借贷行为。 核心是在一个交易内完成, 正因为在一个交易内完成, 所以才无需抵押, 也正是由于在一个交易内完成,闪电贷使用区块链交易事务的特性,可以检查还款的额度是否>借款+利息, 如果不够, 则交易回滚, 任何数据都被还原, 也就是说, 借给你的资金也同样回滚,因此,没有任何风险。
此外,闪电贷的利息收入非常可观。一个块,也就几秒钟、十几秒钟时间,收取万分之9的利率,而且,一般使用闪电贷的,都是极大的借款量,动辄几千万,上亿美金。
闪电贷是去中心化的一大创新, 不知道是不是 AAVE
首先提出的。 现在很多协议都提供了闪电贷功能,例如:
- 借贷平台,如 AAVE, Compound 也有外挂提供闪电贷的功能; AAVE 闪电贷的默认利率是万分之9;
- uniswap. uniswap 在 swap 时,同样提供闪电贷功能. swap 时, pair 合约先把买到的token发给你, 你可以用这个token去盈利,然后再把卖出的token转入pair中。uniswap不收取额外费用,只是兑换的手续费为千三;
- token. 现在一些token也提供闪电贷的功能, 原理类似。手续费看具体实现。
flashloan 的流程
流程如下:
- 验证参数数据(ValidationLogic.validateFlashloan);
- 计算需要支付的利息,并把 token 转给用户;
- 调用用户合约执行用户的代码;
- 增加利息, 并将连本带利数量的 token 从用户合约转入 (用户有抵押物的情况,也可以选择使用转入贷款)
flashloan 的收益归谁
答案是归所有存款人所有。在借贷结束后,flashloan 更新了存款利率指数,也就意味着所有的存款人获得了利息收入。
_reserves[vars.currentAsset].updateState();
// 计入收益
_reserves[vars.currentAsset].cumulateToLiquidityIndex(
IERC20(vars.currentATokenAddress).totalSupply(),
vars.currentPremium
);
// 更新年化利率
_reserves[vars.currentAsset].updateInterestRates(
vars.currentAsset,
vars.currentATokenAddress,
vars.currentAmountPlusPremium,
0
);
// 将 token 转回来
IERC20(vars.currentAsset).safeTransferFrom(
receiverAddress,
vars.currentATokenAddress,
vars.currentAmountPlusPremium
);
值得注意的是,与 uniswap 闪电贷不同的是, AAVE 的闪电贷时,用户合约执行完成后, token 的转移是在 AAVE 合约中发起,从用户合约转入,而不是让用户将 token 转入 AAVE 合约。