Почему вы до сих пор неправильно используете getAmountOut и slippage?Мне часто скидывают паблик/приватные скрипт на ресерч и я
ни разу не увидел правильного использования
getAmountOut. Это особенно актуально сейчас, когда в каждом софте полно мусорных дексов, с нулевыми пулами.
Вот
пример транзакции, где
произошел скам-свап
0.1 $ETH на
26$ стейбла. Я думаю многие понимают откуда берется
amountOutMin (как правило значение получается коллом функции getAmountOut). Основная проблема в том, что кодеры сами придумали что значение должно возращаться только по актуальной стоимости. Хотя это логически невозможно, функция просто возвращает сумму согласно текущей ликвидности.
Если вы захотите обменять
1 $ETH на
2000 $USDT, а ликвидности нет, то при запросе
getAmountOut вам не вернется False, вам просто вернется сумма, к примеру
1000 $USDT и все, дальше большинство софтов сделает обмен и потеряет 1к баксов.
Как реализовать функцию правильно? Одно из решений это сравнивать цену с API
(пример: coingecko). Я думаю с реализацией проблем не возникнет. Слипаж тут нужно накидывать на цену с coingecko и сравнивать цены.
Если вы любите
стабильность и делаете двойные свапы, то можете сравнивать значения
до и
после свапов. Вот вам
пример. Мы сначала узнаем сколько мы получим
токена_2 (пусть будет K) при обмене
N количества
токена_1, затем узнаем сколько мы получим
токена_1(пусть будет X) при обмене
K количества
токена_2. И вот тут только мы накидываем к
X слиппаж и сравниваем
X с начальным количеством
N токена_1.
Я думаю разберетесь, всем DYOR