Есть такая компания Uniswap, которая разработала одноименный протокол для обмена одного крипто-токена на другой.
Суть в том, что у нее есть грантовая программа https://unigrants.org/ , куда я попробовал недавно податься. Идея для проекта была в реализации на Go их умного роутера для оптимального обмена токенов, который сейчас на TypeScript.
Ответ пришел довольно быстро, в течение пары недель. Сказали, что пока в приоритете поддержание текущего SDK, что логично, поэтому дать грант не могут.
Еще у них есть так называемые Wish List Grants, которые представляют собой список хотелок по доработкам или контенту. Сюда тоже подался на обновление Getting Started Guide с туториалом по обмену токенами, который писал какое-то время назад. Посмотрим, что ответят.
В целом, возможностей много 🚀
Суть в том, что у нее есть грантовая программа https://unigrants.org/ , куда я попробовал недавно податься. Идея для проекта была в реализации на Go их умного роутера для оптимального обмена токенов, который сейчас на TypeScript.
Ответ пришел довольно быстро, в течение пары недель. Сказали, что пока в приоритете поддержание текущего SDK, что логично, поэтому дать грант не могут.
Еще у них есть так называемые Wish List Grants, которые представляют собой список хотелок по доработкам или контенту. Сюда тоже подался на обновление Getting Started Guide с туториалом по обмену токенами, который писал какое-то время назад. Посмотрим, что ответят.
В целом, возможностей много 🚀
🔥5
Вообще, мне супер нравится идея, лежащая в основе Uniswap V2 (в V3 немного посложнее, но базовая идея та же), которая позволяет построить рыночный механизм без “стакана”, присущего централизованным биржам.
Предположим, у нас есть токены A в количестве x и токены B в количестве y (пул).
Uniswap просто поддерживает их произведение в пуле постоянным: x*y=k
Предположим, в пуле 10 токенов A и 100 токенов B. 10*100=1000
Перед покупкой:
Спотовая цена (spot price) токена A = 100/10=10 (один токен A стоит 10 токенов B).
Покупка:
Допустим, мы покупаем один A за B, “вытаскивая” его из пула. В пуле останутся 9 A. Соответственно, чтобы сохранить равновесие, нужно положить в пул (1000/9-100)=11,111 токенов B. То есть цена покупки одного A составила 11,1111 B.
После покупки:
Стоимость A становится 111,1111/9=12,34
То есть цена A вырастает, делая менее привлекательной его покупку, но зато более привлекательной покупку B, чем и начинают пользоваться другие участники рынка, поддерживая равновесие – баланс цены.
Если хотите разобраться глубже, то рекомендую классную книгу по тому, как работает Uniswap https://uniswapv3book.com
Предположим, у нас есть токены A в количестве x и токены B в количестве y (пул).
Uniswap просто поддерживает их произведение в пуле постоянным: x*y=k
Предположим, в пуле 10 токенов A и 100 токенов B. 10*100=1000
Перед покупкой:
Спотовая цена (spot price) токена A = 100/10=10 (один токен A стоит 10 токенов B).
Покупка:
Допустим, мы покупаем один A за B, “вытаскивая” его из пула. В пуле останутся 9 A. Соответственно, чтобы сохранить равновесие, нужно положить в пул (1000/9-100)=11,111 токенов B. То есть цена покупки одного A составила 11,1111 B.
После покупки:
Стоимость A становится 111,1111/9=12,34
То есть цена A вырастает, делая менее привлекательной его покупку, но зато более привлекательной покупку B, чем и начинают пользоваться другие участники рынка, поддерживая равновесие – баланс цены.
Если хотите разобраться глубже, то рекомендую классную книгу по тому, как работает Uniswap https://uniswapv3book.com
❤3👍1
Не совсем по теме Web3, просто впечатлило. Сделал несколько кодерских экспериментов с чат-ботом ChatGPT, который умеет генерировать программный код по человеческому запросу.
Я впечатлен! Набрав пару предложений, можно сгенерировать код хорошего качества, например, для доступа к БД (на фото запрос и результат в коде), тем самым сэкономить уйму времени.
Однозначно буду использовать ChatGPT для прототипирования, когда нужно поиграться с кодом “в песочнице”, посмотреть как работает, прежде чем добавлять код в основной проект.
Описал эксперимент на Хабре. Спойлер: пока ИИ не сможет заменить программистов (в ближайшем будущем тоже).
Upd. Статья отлично залетела , 35 000 просмотров на 20.12!
Я впечатлен! Набрав пару предложений, можно сгенерировать код хорошего качества, например, для доступа к БД (на фото запрос и результат в коде), тем самым сэкономить уйму времени.
Однозначно буду использовать ChatGPT для прототипирования, когда нужно поиграться с кодом “в песочнице”, посмотреть как работает, прежде чем добавлять код в основной проект.
Описал эксперимент на Хабре. Спойлер: пока ИИ не сможет заменить программистов (в ближайшем будущем тоже).
Upd. Статья отлично залетела , 35 000 просмотров на 20.12!
👍8🔥1
Прошлую неделю разбирался в Uniswap с точки зрения разработчика.
Лирическое отступление.После коллапса крупной криптобиржи FTX все больше говорят о том, что за децентрализованными прозрачными системами будущее. Uniswap – это децентрализованная биржа (DEX), которая позволяет обменивать один токен на другой, а инвесторам – зарабатывать, предоставляя ликвидность для обменов .
Чтобы в общих чертах понять, как работает механизм обмена (swap), мне хорошо помог юнисваповский AlphaRouter, который выдает оптимальные пути (route) обмена.
С точки зрения программиста, AlphaRouter работает просто: указываем параметры: сколько менять, какой входной/выходной токен, на какой кошелек отправляем, и тип сделки – EXACT_INPUT означает, что фиксируется входящий объем. Роутер функцией route выдает оптимальный, как он думает, путь обмена, который потом отправляется транзакцией в блокчейн, на смарт-контракт роутера, который и выполняет обмен.
Лирическое отступление.
Чтобы в общих чертах понять, как работает механизм обмена (swap), мне хорошо помог юнисваповский AlphaRouter, который выдает оптимальные пути (route) обмена.
С точки зрения программиста, AlphaRouter работает просто: указываем параметры: сколько менять, какой входной/выходной токен, на какой кошелек отправляем, и тип сделки – EXACT_INPUT означает, что фиксируется входящий объем. Роутер функцией route выдает оптимальный, как он думает, путь обмена, который потом отправляется транзакцией в блокчейн, на смарт-контракт роутера, который и выполняет обмен.
👍3
Я пользовался и особо не разбирался, что под капотом. А вот когда распечатал путь обмена 100 WETH на USDT (то есть кладем в пул ровно 100 WETH и вытаскиваем из пула сколько_получится USDT), то многое стало понятно.
В первом куске кода (картинка 1) сумма 100 WETH будет обмениваться единым целым (splits=1), и только в один обмен (swaps=1) (параметры maxSplits, maxSwapsPerPath). В результате роутер использует только один пул WETH-USDT напрямую. В результате мы получили 119 692,70 USDT (картинка 2).
Во втором куске кода (картинка 3) ограничений по maxSplits, maxSwapsPerPath нет. Результат на картинке 4. Роутер посчитал оптимальным разделить 100 WETH на 3 части (splits). 2 и 3 пути (routes) используют промежуточные токены USDC и DAI для обмена. В in, out можно видеть, сколько в каждом свопе (субсвопе?) передается WETH и сколько получается USDT (скрин 3). В итоге, в результате обмена пользователь получил 119 912,22 USDT (на 219 USDT больше, чем в примере 1).
В первом куске кода (картинка 1) сумма 100 WETH будет обмениваться единым целым (splits=1), и только в один обмен (swaps=1) (параметры maxSplits, maxSwapsPerPath). В результате роутер использует только один пул WETH-USDT напрямую. В результате мы получили 119 692,70 USDT (картинка 2).
Во втором куске кода (картинка 3) ограничений по maxSplits, maxSwapsPerPath нет. Результат на картинке 4. Роутер посчитал оптимальным разделить 100 WETH на 3 части (splits). 2 и 3 пути (routes) используют промежуточные токены USDC и DAI для обмена. В in, out можно видеть, сколько в каждом свопе (субсвопе?) передается WETH и сколько получается USDT (скрин 3). В итоге, в результате обмена пользователь получил 119 912,22 USDT (на 219 USDT больше, чем в примере 1).
👍5
Видно, как происходит исчерпание токена USDT в пуле WETH-USDT, и выгоднее становится работать через промежуточные токены, пулы WETH-USDC и WETH-DAI (poolAddrs – это адреса смарт-контрактов пулов, по которым можно открыть их в etherscan).
Для простоты я ограничил обмен только V2 пулами, которые дают худший курс обмена. V3 пулы работают более эффективно, но это тема отдельной, большой, статьи, которую планирую запилить на Хабр.
Ставьте лайки, пишите обратную связь, репост как всегда приветствуется.
UPD 21.12. Рабочий исходный код положил в Гитхаб.
Для простоты я ограничил обмен только V2 пулами, которые дают худший курс обмена. V3 пулы работают более эффективно, но это тема отдельной, большой, статьи, которую планирую запилить на Хабр.
Ставьте лайки, пишите обратную связь, репост как всегда приветствуется.
UPD 21.12. Рабочий исходный код положил в Гитхаб.
🔥1