Uniswap V2: swap(). Часть 4
Сегодня мы поговорим про всем известную константу XY = K, а именно, как она работает при свапах и расчете комиссии за свап.
Посмотрите на эти строки в функции свапа:
uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
Uniswap V2 взымает установленные в коде 0.3% за каждый свап, поэтому мы видим цифры 1000 и 3.
Для упрощения объяснения работы константы, давайте для начала представим, что Юнисвап вообще не берет комиссию и напишем небольшую проверку, заменяющую предыдущие две строки:
require(balance0 * balance1 >= reserve0 * reserve1, "K");
Если внимательно присмотреться, К - это не совсем константа, не смотря на то, что в документации и примерах ее всегда называют AMM “constant product formula”, или константа формулы продукта.
Объяснение может быть очень простым: смотрите, когда кто-то переводит токены в пул и изменяет константу К, мы же не хотим его ограничивать, так как сами заинтересованы в обогащении наших поставщиков ликвидности и увеличении пула?
Так и Юнисвап не ограничивает вас от перевода очень больших объемов токенов и изменении К. Когда К становится больше, объем пула становится больше, а это именно то, что хотят поставщики ликвидности.
Теперь вернемся к процентам за перевод.
Мы хотим, чтобы не только К становился больше, мы хотим, чтобы он становился больше как минимум на такое количество, чтобы можно было взымать комиссию!
Глядя на код, мы можем сказать, что сама комиссия берется не по размеру пула, а по объему переводов. И применяется только к количеству токенов, которые поступают в пул, а не тех, что отправляются пользователю!
Например:
1. Мы отправили 1000 токенов_0 и забрали 1000 токенов_1. Нам потребуется заплатить комиссию в 3 токена_0;
2. Мы берем займ 1000 токенов_0 и должны будем вернуть 1000 токенов_0 плюс комиссию в 3 токена_0. Токен_1 здесь вообще не участвует, как можно заметить.
Теперь, глядя на изначальные строки расчета комиссии при свапе, мы понимаем, как они работают. Умножение на 1000 необходимо, так как Solidity не работает с "плавающей точкой" и требуется делать дополнительные умножения для проверки получения этих 0.3% комиссии.
#uniswap #constant #swap #fee
Post #1023
995
- ❤ 4
- 👍 2