Uniswap V2: swap(). Часть 5
Ну, и заключительная часть про свап функцию, в которой поговорим про обновление резервов.
Если посмотреть на функцию, то можно увидеть, что все действие происходит в другой служебной функции:
_update(balance0, balance1, _reserve0, _reserve1);
Именно она и показана на скрине.
Там есть логика для обновления данных оракула, но этого мы коснемся позже. В данном случае нас интересуют строки 82-83, там обновляются переменные состояния контракта:
reserve0 = uint112(balance0);
reserve1 = uint112(balance1);
При свапе могут возникнуть некоторые проблемы:
1. Параметр amountIn не обязательно может быть оптимальным для свапа и тогда пользователь переплачивает за сам свап;
2. AmountOut не такой гибкий, как мог бы быт, так как он передается в функцию в качестве аргумента. Если amountIn окажется недостаточным по отношению к AmountOut, то транзакция откатится;
Если условия могут получиться, если один пользователь сделает фронтран транзакции другого пользователя и изменит ратио активов в пуле.
P.S. Напомню, что эти несколько постов были написаны, как перевод статьи от RareSkills.
#uniswap #swap
Post #1025
999
- 🔥 4