Обновление по refundEth
Uniswap router:
- Такое поведение возможно
- Рекомендуется использовать multicall функцию чтобы в конце вызывать refundEth https://jeiwan.net/posts/public-bug-report-uniswap-swaprouter/
- Продуманные UI роутеров умеют делать refund eth в той же транзакции, а другие частично защищаются через mev:
- Случай 1.
- - свап https://etherscan.io/tx/0x254c6b3cfef1329004df231f8b0533e68e12afda9136a74aee0c37267aaddeed
- - перевод средств валидатору https://etherscan.io/tx/0x04f011370ae8d242f314e7f97e1ce384ccb7b5b6348d344a4ef9e069f67bf474
- - кешбек от валидатора https://etherscan.io/tx/0x95c821b826a86e759417ad4c71868a49d55f0c54cec7f2e42542beb429b3c890
- Случай 2.
- - свап https://etherscan.io/tx/0x68c78fa2a1c708f287a1edba67796f3d8f670877f6ceff7705ce4c32b38911ee
- - юнисвап делает сжигание неиспользованых eth https://etherscan.io/tx/0xee2849c1059236b43aeef4fc1744c020cfb88a17ac0ed5fec776f9156c2f4f14
- - титан валидатор кешбекает большую часть юзеру https://etherscan.io/tx/0x5cb289f9bc7655c869c1ab0b26e68fe19617fa2146fcc013e38186b90b6d7ab0
Okx router:
- Поведение возможно
- Варианта получить кешбек не видно
- Через https://www.dexview.com/ используется okx router который не защищен от "unspent eth not refunded", потому что не использует аналог multicall.
- случай 3.
- - свап1 21340284 блок; тут все нормально https://etherscan.io/tx/0xce5f727ddb5d6d198bc3ca3bb273cc4dd5a8ab03bc66a78d96b94ab82ec6499d
- - свап2 21340284 блок. Отправлено 3eth, использовано 0.63eth и 2.37eth не возвращено пользователю https://etherscan.io/tx/0x1ed0d036c93beb24347dc20489b313db544d57efd72d26a0a38168c3d99409e0 . Используется функция uniswapV3SwapTo вместо аналога multicall с refundEth (есть withdrawDust с тем же функционалом)
- - - Из okx router отправлено 2.36eth в следующем блоке https://etherscan.io/tx/0xde4c3b106ad58b9292e560ea2d8663ce10041779c678c746aab11ba13e86979f ; https://dashboard.tenderly.co/tx/mainnet/0xde4c3b106ad58b9292e560ea2d8663ce10041779c678c746aab11ba13e86979f
- - - - получатель https://etherscan.io/address/0xa6c248384c5ddd934b83d0926d2e2a1ddf008387 дробит на две части сумму и отправляет
- - - - - 1.183eth кому-то https://etherscan.io/tx/0x76d4f58421d160e446dd637631f5a3e8b4ee4c5ca8d66d82064b69a9a982c55d (может быть okx копилка)
- - - - - 1.19eth валидатору https://etherscan.io/tx/0xabef8d5b4a4ed2f1a8fa3b8a64f2c2e2cdf82f15dd4e7570f54d4fe1ef28790d
Выводы:
- Интеграция okx router в dexview подвела.
- Под угрозой плохие интеграции свап роутеров: точно okx на dexview, вероятно bitget/metamask/uniswap.
- Столкнуться можно на аналогах dexview при отправке нативного eth.
- Повлиять на refund от okx через onchain не представляется возможным.
- Okx router имеет закрытый код, интеграция осложняется
- Может оказаться так, что мониторятся pending транзакции и свежие блоки, чтобы выводить "unspent eth" себе из роутеров, потому что в "случай 3" 2.37eth лежали на контракте роутера меньше одного блока и были выведени первой транзакцией в следующем блоке
- Uniswap router частично защищен, правильно было бы в той же транзакции возвращать unspent eth, но когда такого нет, следующими транзакциями средства возвращаются
- Низкая осведомленность о важности refundEth среди делающих интеграции свап роутеров
Благодарности:
- @LunaparkOwner за поиск большинства случаев onchain
- @artjomikas за подсвечивание, что eth валидаторы делают refund из uniswap router.
Post #166
708
InVM - изнутри о Web3 Обнаружен баг, связанный с Uniswap Router v2 и Okx Dex Router свап роутерами на ethereum. Роутеры не возвращают неиспользованные ETH если за время включения транзакции в блок состояние пула поменялось. И выходит так, что отправлен свап на 10eth->Xtoken, а…
- 👍 5
- 🔥 2