
闪电贷主要由借贷方和放贷方两部分构成,放贷方部署放贷合约,借贷方部署借贷合约,通过借贷合约去调用放贷合约实现,大致流程如下图。
这里我们使用aave https://docs.aave.com/developers/guides/flash-loans 的实现来跟踪一下flashloan的过程,代码如下,aave这里没有使用标准的IERC3156实现,但是只需要将POOL.flashLoanSimple带入flashLoan、executeOperation带入onFlashLoan即可,其它流程基本一致。
1 | // SPDX-License-Identifier: MIT |
首先部署在Remix上部署合约,这里用的是Polygon Munbai的测试环境,所以在文档https://docs.aave.com/developers/deployed-contracts/v3-testnet-addresses 中找到aave对应的测试合约地址0xeb7A892BB04A8f836bDEeBbf60897A7Af1Bf5d7F
作为初始参数传入部署合约
从上述的合约代码中可以看到,fn_RequestFlashLoan的入参分别是放贷地址以及借贷数量,同理,在aave的文档中找到usdc的金库地址0xe9DcE89B076BA6107Bb64EF30678efec11939234
作为入参传入,发起借贷
在一切顺利的情况下,fn_RequestFlashLoan中调用POOL.flashLoanSimple发起借贷,在POOL.flashLoanSimple中放款并回调executeOperation
回调到借贷合约的executeOperation中后,执行预定的套利逻辑等一系列操作,然后返回状态通知executeFlashLoanSimple进行判断是否还款。
参考:https://github.com/quiknode-labs/qn-guide-examples/tree/main/ethereum/aave-flash-loan
- Post title:FlashLoan的实现过程
- Post author:langu_xyz
- Create time:2023-04-01 21:00:00
- Post link:https://blog.langu.xyz/FlashLoan的实现过程/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.