Перед тем как вы погрузитесь в изучение статьи, обратите внимание на тот факт что всё упомянутое в ней не является финансовой рекомендацией для принятие более взвешенного решения просьба провести свое собственное исследование.
Героем сегодняшнего ресерча является первопроходец со многих точек зрения: это и первый протокол, применивший механизм AMM, ныне принимаемый как отраслевой стандарт; это и проект, раздавший первый крайне щедрый в истории Airdrop, это и наиболее популярный среди пользователей; и, проще говоря, самый успешный протокол в своей нише, это – настоящий “Единорог” децентрализованных финансов. Это, конечно же, Uniswap.
В следующей статье цикла, практической, вы узнаете как именно работать с инструментами Uniswap с целью извлечения прибыли. Особенно подробно будут затронуты методы работы с пулами ликвидности (V2 и V3), методы хеджирования Impermanent Loss, методы отслеживания позиций, будет много расчетов, графиков, визуализаций.
3 октября 2016 года Виталик опубликовал пост на Reddit. В этом тексте он сперва лаконично сформулировал имеющуюся на тот момент проблему неэффективности классического способа поддержания ликвидности, который повсеместно применялся биржевыми площадками — так называемого “биржевого стакана” – книги лимитных ордеров, или как их называют опытные трейдеры “нереализованных объемов”.
Рынки предсказаний – отдельная и емкая тема, которую мы сегодня обойдем стороной, а вот “автоматический маркетмейкер” (Automated Market Maker, AMM) – это безусловно важная деталь для сегодняшнего исследования. Изначально идея AMM принадлежала Алану Лу (Alan Lu) из команды сайдчейна Gnosis, а сама формула, лежащая в ее основе, выглядит как все гениальное просто:
x*y=k,
где x и y – балансы резервов двух торгуемых друг к другу токенов, а k – их “постоянное произведение”, неизменяемый параметр, отвечающий за общий баланс пула.
6 июля 2017 года гигантский немецкий конгломерат Siemens AG совершает историческое действие: компания увольняет 24-летнего выпускника Stony Brook University со степенью бакалавра инженера-механика Хайдена Адамса (Hayden Adams), для которого эта работа была первой с момента выпуска из колледжа.
Этот самый Карл Флореш, на момент написания статьи, уже 4-ый месяц занимает позицию CEO в OP Labs (L2 Optimism – их детище). На тот же момент Карл был на позиции Research в Ethereum Foundation.
Хайден решил послушать своего друга, но так как по его словам он не умел писать код, первые два месяца своей переквалификации он провел в обучении основам Ethereum, Solidity и JavaScript.
Первой же реальной работой, за которую взялся Хайден (и также по совету Карла) стала попытка реализовать предложенную Виталиком идею, то есть построить новую децентрализованную биржу, в основе которой лежит механизм AMM.
Уже в ноябре того же года, Хайден разработал и представил “proof-of-concept”: смарт-контракт (с единственным провайдером ликвидности) и веб-страницу dApp.
Так что же представляла собой первая живая и рабочая версия протокола? Приведем ключевые тезисы из оригинальной документации V1:
Протокол Uniswap состоит из серии обменных смарт-контрактов между ETH и другими ERC20-токенами;
На один ERC20-токен приходится ровно один обменный смарт-контракт и он всегда обеспечивает возможность обмена только на ETH. Если токен еще не имеет контракта, он может быть создан любым желающим с помощью контракта-фабрики (factory contract);
На каждом обменном контракте хранятся резервы как ETH, так и спаренного с ним ERC20-токена. Любой желающий может стать поставщиком ликвидности, то есть пополнить резервы контракта токенами. Ликвидность объединяется для всех поставщиков, а для отслеживания относительного вклада каждого поставщика используется внутренний «токен пула» (”liquidity pool token”, LP). LP-токены чеканятся при поступлении ликвидности в систему и могут быть сожжены в любой момент для изъятия пропорциональной доли резервов из пула;
Торговые контракты для пар ETH-ERC20 представляют собой автоматизированных маркетмейкеров (AMM). Трейдеры могут совершать обмен между ними в любом направлении, тем самым изымая из резерва какое-то количество одного токена и пополняя резерв другого. Поскольку ETH является общей парой для всех ERC20-токенов, он может быть использован в качестве посредника, позволяющего совершать прямые сделки ERC20-ERC20 в рамках одной транзакции на уровне пользователя (“под капотом” совершая сделки ERC20-ETH-ERC20);
Автоматический маркетмейкер (AMM) Uniswap базируется на формуле «постоянного произведения» (”constant product”: xy=k, где x и y – балансы резервов, k – некоторый неизменяемый параметр, отвечающий за общий баланс пула). Именно по этой формуле устанавливается обменный курс токенов на основе относительного размера их резервов, а также величины, на которую входящая сделка изменяет это соотношение. Покупка пользователем X количества ERC20-токенов из пула означает их изъятие взамен на добавление пропорционального количества ETH (Y). При этом, так как их общее математическое произведение (XY=K) должно оставаться неизменным, их обменный курс друг к другу неизбежно меняется.
Чем больший объем резервов используется в конкретной сделке по отношению к общему размеру резервов пула, тем больше будет проскальзывание цены (”price impact”) при соверешнии этой сделки.
При этом “Справедливая цена” токенов поддерживается за счет арбитража. Например, любой пользователь, увидев, что в каком-то пуле Uniswap после какой-то сделки цена ERC20-токена оказалась существенно ниже цены этого же токена на других торговых площадках, может купить эти токены из пула, пополнив его резервы ETH, тем самым увеличивая цену ERC20-токена относительно ETH. Или наоборот, купить токены на другой площадке и продать в Uniswap-пуле, если цена в нем сложилась выше. Таким образом, любые неэффективности ценообразования внутри пулов регулируются децентрализованной активностью трейдеров, зарабатывающих на арбитраже;
Небольшая комиссия поставщика ликвидности (фиксированная для всех пар = 0,30%) изымается из каждой сделки и добавляется к резервам пула. Хотя соотношение резервов ETH-ERC20 постоянно меняется, код следит за тем, чтобы общий совокупный размер резервов увеличивался с каждой сделкой за счет этой комисси. Эти дополнительные резервы являются источником вознаграждения для поставщиков ликвидности: увеличивая общий резерв пула, они увеличивают резерв каждого отдельного LP-токена, то есть то колдичетсво токенов, которые участник получит в момент сжигания своего LP-токены (на выходе из пула). Чем больше поток транзакции (объем торгов), тем больше общий объем комиссий. Чем меньше поставщиков ликвидности, тем большую долю в общем пуле имеет каждый из них.
Здесь надо остановиться на описании важного явления, которое является неизбежным следствием архитектуры пулов Uniswap. Так как провайдеры ликвидности в момент создания LP предоставляют токены в определенной пропорции (50%+50%), а сам пул является динамической системой с точки зрения соотношения резервов внутри пула (но не их “постоянного произведения”), провайдеры берут на себя риск так называемых “непостоянных потерь” (”impermanent loss”, IL). То есть, если с момента создания LP провайдером ликвидности, цена токена А например, выросла по отношению к цене токена B, то количество токенов А в пуле снизилось, а токенов B – увеличилось. И если провайдер хочет изъять ликвидность, то при сжигании своей LP он получает токены в новом соотношении (например, 60%+40%), тем самым “фиксируя” небольшой убыток в сравнении с тем, если бы он просто “держал” эти токены на своем кошельке. Этот убыток может быть “перекрыт” доходностью, которую получил провайдер за время предоставления своих токенов в пул, но это зависит от того, как удачно им был выбран пул и как долго он получал доходность. В редких случаях “непостоянных потерей” вообще удается избежать, если провайдер найдет такой момент выхода из LP, когда соотношение цен токенов в нем вернулось в изначальное значение (проще говоря, когда цены на входе и на выходе из LP равны). Именно поэтому такие потери и называются “непостоянными”, так как теоретически могут быть не понесены. В общем же случае, они всегда присутствуют в той или иной степени, поэтому при выборе пула для предоставления ликвидности провайдеру необходимо грамотно оценивать соотношение прибыли к риску нахождения в пуле, чему будет посвящена отдельная статья этого цикла;
Поскольку Uniswap полностью работает ончейн, цены могут меняться в период между подписанием транзакции и включением ее в блок. Трейдеры могут ограничить колебания цен, указав минимальную сумму покупки для ордеров на продажу или максимальную сумму продажи для ордеров на покупку (то, что мы знаем под понятием “slippage”). По сути, это своего рода лимитный ордер, который автоматически отменяется в случае его неисполнения. Также пользователи могут установить предельные сроки выполнения транзакции, по истечению которых код будет автоматически отменять неисполненные ордера;
Пользователи могут указать адрес получателя, если хотят получить купленные токены не на адрес, с которого совершается сделка.
Подытоживая, можно сказать, что первая рабочая версия Uniswap представляла из себя децентрализованное приложение, которое позволяло любому пользователю выступать в двух ролях.
При этом любой пользователь может выступать в обеих ролях одновременно.
Именно в такой архитектуре протокол просуществовал полтора года, на протяжении которых он оставался самым популярным приложением в DeFi.