Uniswap v2 简单实现闪电贷SwapLoan,超详细源码分析结合例子 [ 2 ]

Uniswap v2 简单实现闪电贷SwapLoan,超详细源码分析结合例子 [ 2 ]

实现过程

利用Uniswap v2 简单实现闪电贷SwapLoan
https://blog.csdn.net/weixin_43458715/article/details/141978935

闪电贷流程概述:
  1. 用户通过调用UniswapV2Pair合约的swap方法,将21 WETH 换成 20000 USDT, 其中 swap会先将 20000 USDT 转给用户
  2. 然后用户可以用这得到的 20000 USDT 换成 326448 USDC,再用这 326448 USDC换成 324 的WETH
  3. 得到 324 WETH后,用户将 21 的 WETH 支付给UniswapV2Pair合约
  4. 最后,swap方法检查是否收到了 21 WETH,收到则完成整个swap操作

1、假设现在有三个交易对

在这里插入图片描述

2、通过此代码给三个交易对添加流动性

在这里插入图片描述
结构如下:
在这里插入图片描述

3、现在有个笨蛋怨种用户用大量USDC换取USDT,而因为流动池太浅,出现了套利机会

在这里插入图片描述

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/28941affb18f454db6b27f554a5840a4.png

4、套利攻击过程为 先用WETH1 换 USDT,再用USDT 换 USDC,最后再用USDC换回WETH2,发现WETH2的数量大于WETH1,套利完成。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.1 这里是传入了amount0Out=20000,意味着套利机器人想转出20000的USDT。

通过UniswapV2Pair合约中的swap函数换取20000的USDT
在这里插入图片描述

4.2 swap函数会将20000 USDT转给机器人合约,后面才去验证用户是否将应支付的的21个 WETH转给weth_usdc_Pair交易对

在这里插入图片描述

4.3 这样bot合约中就有了20000的USDT,并且可以用来套利。swap函数中有个data参数,可用于调用其他函数,在还钱之前。

在这里插入图片描述

4.4 如果输入的data非空,就会调用uniswapV2Call函数,

而Bot合约继承了IUniswapV2Callee,实现uniswapV2Call函数
在这里插入图片描述

4.5 而uniswapV2Call函数调用了flashLoan()合约

在这里插入图片描述

4.6 flashLoan()合约,将Bot合约中的20000 USDT 换成 326448 USDC,然后再将 326448 USDC换回 324 WETH,最后调用transfer方法,将应付的 21 WETH付给weth_usdc_Pair交易对

在这里插入图片描述

4.7 UniswapV2Pair合约中的swap合约会检查库存是否收到的WETH的付款

在这里插入图片描述

4.8 付款成功则完成这次的swap

整个代币转换流程如下:

21 W E T H − > 20000 U S D T 21 WETH -> 20000 USDT 21WETH>20000USDT
20000 U S D T − > 326448 U S D C 20000 USDT -> 326448 USDC 20000USDT>326448USDC
326448 U S D C − > 324 W E T H 326448 USDC -> 324 WETH 326448USDC>324WETH
21 W E T H < 324 W E T H 21WETH < 324 WETH 21WETH<324WETH

套利机器人赚了 324 -21 = 303wei ~~~

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值