По своей сути, Юнисвап это обычный пул для токенов, а соответственно тут могла бы быть проблема первого депозитора / минтера, как это представлено в ERC4626. Тем не менее, команда протокола постаралась защитить пул и указала обязательное количество для первого минта:
uint public constant MINIMUM_LIQUIDITY = 10**3;
Вообще, первый минт в пуле происходит интересным способом расчета:
if (_totalSupply == 0) {
liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
mint(address(0), MINIMUM_LIQUIDITY);
}Uniswap V2 берет квадратный корень из произведения количества предоставленных токенов, чтобы рассчитать количество акций LP для минтера.
Казалось бы, можно напечатать произвольное количество токенов для первого LP - они владеют 100% акций, так что какая разница, масштабировать их на 0,01 или 100?
Вот что написано в официальной документации:
Uniswap v2 изначально чеканит доли, равные среднему геометрическому от сумм, ликвидность = sqrt(xy). Эта формула гарантирует, что стоимость доли пула ликвидности в любой момент времени по существу не зависит от соотношения, при котором ликвидность была первоначально внесена... Вышеприведенная формула гарантирует, что доля пула ликвидности никогда не будет стоить меньше, чем среднее геометрическое значение резервов в этом пуле.
P.S. Мне потребовалось некоторое время, чтобы это правильно перевести и еще больше времени, чтобы осмыслить (я не силен в математике и их квадратных корнях...).
Попробуем разобрать на примере.
Давайте представим, что мы не будем рассчитывать сумму при помощи квадратного корня и начнем с 10 токенами 1 и 2 в пуле. После некоторых действий там появится 20 токенов обоих видов.
Как вы думаете, удвоилась ли ликвидность или увеличилась в четыре раза? Ведь если не извлекать квадратный корень, то ликвидность начиналась бы со 100 (10 × 10), а закончилась бы 400 (20 × 20), т.е. фактически увеличилась в 4 раза.
Тем не менее, сначала максимальное количество токенов_1, которое вы могли получить, было (асимптотически) 100, но после роста ликвидности "глубина" ликвидности для этого токена удвоилась, а не увеличилась в четыре раза.
Но какое это имеет значение, если будущие поставщики ликвидности не вычисляют ликвидность с помощью квадратного корня при минте или сжигании?
Мы видели, что и первые "вынуждены" поставлять активы по текущему курсу, и вторые могут выкупать их по текущему курсу - никаких квадратных корней здесь нет.
Ответ кроется в том, как Uniswap собирала бы комиссию с LP, если бы решила это делать однажды.
Возвращаясь к нашему предыдущему примеру, когда пул вырос со 100 токенов0 и 100 токенов1 до 200 каждого, прибыль поставщика ликвидности составляет 100 %, поэтому он должен платить комиссию, пропорциональную этой сумме. Если бы мы измерили размер пула со 100 до 400, то им пришлось бы платить комиссию с четырехкратной прибыли.
Uniswap предпочитает взимать комиссию во время сжигания ликвидности, потому что взимание комиссии во время свопа увеличило бы стоимость газа. А это самая популярная опция!
Тем не менее, нужно отметить, что Uniswap V2 никогда на самом деле не включала комиссии за ликвидность, так что это исключительно теоретический пример.
#uniswap #v2 #mint #fee