TGViewer
Из Solidity в AI и дальше Из Solidity в AI и дальше @solidityset · 2.48K subscribers
Post #1022 935
Uniswap V2: swap(). Часть 3

Продолжаем разбирать функцию свапа и сегодня поговорим о том, как Юнисвап понимает, сколько токенов было послано в пул.

За это отвечают, по сути, всего две строки (176-177):

uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;


Из предыдущих постов мы помним, что  переменные _reserve0 и _reserve1 не обновляются внутри функции. Они отражают баланс контракта до того, как новые токены были добавлены при свапе.

С каждым из двух токенов в паре может случится одна из ситуаций:

1. В пуле произошло чистое увеличение количества определенного токена;
2. В пуле произошло чистое уменьшение количества определенного токена или оно осталось неизменным;

То как код контракта определяет ситуацию,, можно переложить на формулу:

currentContractbalanceX > _reserveX - _amountXOut

или

currentContractBalanceX > previousContractBalanceX - _amountXOut

В случае, если зафиксировано уменьшение, то тернарный оператор возвращает ноль, в противном случае учитывается увеличение количества токенов.

amountXIn = balanceX - (_reserveX - amountXOut)

Также можно указать на то, что в любом случае _reserveX > amountXOut, так как идет проверка на строке 162:

require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');


Несколько примеров:

1. Предположим, что предыдущий баланс был равен 10, amountOut = 0, и currentBalance = 12. Это значит, что было добавлено 2 токена и amountXIn будет равен 2.

2. Или предыдущий баланс равен 10, amountOut = 7, и currentBalance = 3, поэтому amountXIn = 0.

3. Предыдущий баланс был равен 10, amountOut = 7, и currentBalance = 2. В этом случае amountXIn будет также равен 0, а не -1. Пул получает уменьшение на 8 токенов, а amountXIn не может быть негативным числом.

4. Или же предыдущий баланс равен 10, amountOut = 6. Если currentBalance  равен 18, это означает, что пользователь "занял" 6 токенов и вернул 8.


В завершении можно сказать, что amount0In и amount1In отражают чистое увеличение токенов при добавлении в пул, и равняются нулю, если идет уменьшение.

#uniswap #swap
  • ❤ 2
More from @solidityset
  1. Oct 2, 2026Вторая сложность — как доказать, что установилось именно опубликованное. В первом варианте…
  2. Oct 2, 2026Задача с полуоткрытым кодом На днях, в процессе создания одного приложения, столкнулся с и…
  3. Sep 22, 2026Какой язык программирования учить сейчас? На днях в Твиттере увидел небольшой пост о разви…
  4. Sep 18, 2026Интересная модель Jev Буквально пару дней назад в Твиттере многие начали обсуждение новой…
  5. Sep 14, 2026Графы повсюду Если вы также следите за новостями в мире ИИ, то наверняка уже все чаще встр…
  6. Sep 10, 2026GTA6, Cyberleek, блокчейн и безопасность Увидел несколько постов (тут и тут) про Cyberleek…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →