37.6 ETH ($78К) заработал бот-сендвичер при арбитражной атаке на Curve Finance
Теория по бот-сендвич атакам:
- бот мониторит мемпул в поиске транзакции на которой «жертва» выставила большое проскальзывание в процентном отношении
- бот в том же блоке совершает сделку с этим же активом, но платит майнерам мзду, чтобы его транзакция прошла первее «жертвы»
- проведя первоначальную сделку - цена существенно изменяется в худшую сторону, а «жертва» совершает обмен по невыгодному курсу
- бот продает актив обратно и остается с прибылью.
Берт Миллер из flashbots препарировал новую стратегию бота-сендвичера:
https://twitter.com/bertcmiller/status/1527757146716348416
Curve Finance - dex для обмена стейблов.
Ничего не подозревавший юзер попытался обменять $13.4M USDT на USDC на 1inch и забыв откорректировать проскальзывание на уровне 0.1% получил убыток при размене в размере $110К.
https://etherscan.io/tx/0x29afdc352692a037a80d871fce20dd7515b70313860a63220c57529022ab22c7
Как это стало возможным?
В пулах Curve гигантские суммы активов, поэтому разбалансировать их непросто и требуется большое количество капитала.
Первично бот положил в AAVE $5М собственного капитала, затем:
https://etherscan.io/tx/0xada54289d2a5556b2aa8f6ca26317a0649397fff8babd7a5bb6f6270815c8a8e
1 Взял flashloan в $260М в WETH
2 Положил WETH в AAVE
3 Взял займ на $145M DAI
4 Поменял $145m DAI на ~$144.5m USDC, вызвав разбалансировку цены USDC на Curve
5 Положил USDC в Maker - наминтил 144.5M DAI
6 Вернул DAI в AAVE оставшись с долгом в $500к
Вот почему ему нужно было иметь свой капитал авансом, чтобы принять временный убыток в $500К DAI. Основной целью было повышение цены USDC относительно USDT, чтобы жертва при обмене 13М USDT получила меньше USDC.
1inch разбил обмен $13.5M USDT между Curve, Balancer и Uniswap.
5.4M USDT на пуле Curve обменялись с потерей $110К на $5.28M USDC.
После того, как обмен жертвы был завершен бот действовал в обратном порядке:
1 Взял flashloan в $258М в WETH
2 Положил WETH в AAVE
3 Взял займ на $144.5M USDC
4 Поменял $144.5m USDC на ~$145m DAI
5 Убыток в $500К из первой части схемы был ликвидирован.
6 Использовали Maker для возврата из $144.5m DAI в $144.5m USDC
7 Депозитили $144.5m USDC в Aave, чтобы выплатить долг.
8 Вывели 134К WETH из AAVE, выплатили ссуду в Balancer в размере 131К WETH.
После этого у бота осталось ~$78k в DAI, их обменяли на 39.6 ETH, оплатив мзду майнерам из пула в размере 2 ETH.
Бот смог извлечь существенную прибыль за счет ошибки «жертвы», при этом в моменте был риск остаться с долгом в размере $500К DAI.