jin说:被夹子攻击,有人用 22 万 usdc 只换出5272usdt,我来分析一下整个流程

今天群里看到图 1,有人用 22 万 usdc 只换出了 5272usdt.

我来分析一下整个流程。
首先打开链接,发现是区块前 3 笔。说明这肯定是一个 MEV 交易.用户被夹了,那么用户为什么会被夹呢?根本原因是什么呢?可以看图 1,
amountOutMinimum:0 说明用户交易以后,可以接受的最少 usdt 数量是 0。这种交易发在链上,就是给bot 送钱啊。(这边给各位 p 小将一个建议,在 eth 类似的链上,滑点设置需谨慎.)

再来分析黑客是如何做到的(图 234)原文在评论区。

https://etherscan.io/txs?block=22029771 前 3 笔交易。中间是用户的,两边是夹子

mev 交易

https://etherscan.io/tx/0xde5aa0c1521d97a48496f10bb8aff364e490c8fc3a4f5d9d587538f15d80cd36

https://etherscan.io/tx/0x3e72f3ad09d87149ce372e5f35eeb8012fed05f52bef45fb85fdacc0057a943c

用户交易

https://etherscan.io/tx/0xee9fcd2b9996e96b642cb4cda47fc140f98fdaf07ee02657743d4bfcc4670106

夹子操作

  1. 701.46 个 ETH 存入 AAVE
  2. 从 AAVE贷出 1,092,116 个 USDC
  3. 先从univ3 池子闪电贷出 175,813,66USDT
  4. 通过 curve 池子把上面的 usdt 换成 usdc. 17556155个
  5. 加上自己刚才借的 1092116 个一起,还给 univ3 池子. 还了 18648272 个。
  6. 3-5 步相当于 通过18648272个 usdc 交换了175,813,66 usdt。需要特别注意的是,这时候univ3 池子里的 usdt 和 usdc 还有多少呢?

usdc:34695550.244187

usdt:227875.126597

用户操作

因为池子里的 usdc,usdt 已经失衡了

这时候用户交易 220,806.389669usdc,换出了5,272.998058 usdt

用户亏 215534

用户的滑点设置竟然=0

可以看下面的params.amountOutMinimum,0 的话表示交换以后,最少拿到 0 个😳

特别像是自己手写的交换逻辑,应该没有哪个前端这么傻吧…

夹子操作

  1. 从 univ3 池子闪电贷出 18600117 usdc
  2. 通过 curve 把 17303136 usdc 换成 17321265 usdt
  3. 17321265 usdt 还给 univ3

还完剩下 18600117-17303136=1296981 usdc

  1. 继续还 aave 的 1092116 usdc,拿回 701.46 eth(这是自己的本金)
  2. 这时候还剩 204864 usdc(利润),直接换成 105 个 eth
  3. 100 个 ETH 给 MEV,剩下的留给自己

总结

  1. 用户设置 兑换后最少拿到 0 个
  2. mev 先把池子里的 usdt 大部分兑换走,池子里全是 usdc
  3. 用户 usdc 换 usdt
  4. mev 反向操作交换回去.

graph TD;
A[存入 701.46 ETH 到 AAVE] –> B[从 AAVE 贷出 1,092,116 USDC]

subgraph Uniswap v3 操作
    C[从 Uniswap v3 闪电贷 17,581,366 USDT]
    C --> D[通过 Curve 交换 USDT 为 17,556,155 USDC]
    D --> E[加上借来的 1,092,116 USDC 归还 Uniswap v3]
    E --> F[归还 18,648,272 USDC]
    F --> G[总体来说:通过 18,648,272 USDC 换出 17,581,366 USDT]
end

B --> C
G --> H[V3池子USDC/USDT失衡 
USDC:1604万 到 3469万
USDT:1780万 到 22 万
池子里基本上都是 USDC]

H --> I[用户交易 220,806 USDC 换 5,272 USDT]
I --> J[用户亏损 215,534 USDC]

subgraph 夹子操作
    K[从 Uniswap v3 闪电贷 18,600,117 USDC]
    K --> L[通过 Curve 交换 17,303,136 USDC 为 17,321,265 USDT]
    L --> M[归还 17,321,265 USDT 给 Uniswap v3]
    M --> N[剩余 1,296,981 USDC]
end

N --> O[还 AAVE 1,092,116 USDC 取回 701.46 ETH]
O --> P[剩余 204,864 USDC 转换为 105 ETH]
P --> Q[100 ETH 给 MEV,剩余 5 ETH 归自己]

分享给他人

你也许会喜欢

+ There are no comments

Add yours