Вводный курс DeFi для всех. Работа с dAPPs через смарт-контракты. Uniswap. Часть IV
Добавим ликвидность в существующий пулл, например, в пул пары USDT/USDC с комиссией 0,01%.
Для этого дадим контракту NonfungiblePositionManager протокола разрешение управлять нашими usdt и usdc токенами. Найдём в документации адрес этого контракта в сети Arbitrum.
Находим в эксплорере по адресу контракт USDT. В методах записи находим метод approve.
Указываем адрес распорядителя - адрес контакта NonfungiblePositionManager.
Указываем сумму - 0,5 usdt - 500000 с учётом количества знаков после запятой (значение в публичной переменной decimals у контракта USDT).
Тоже самое делаем на контракте стейблкоина USDC для своего аккаунта.
Далее на контракте пула пары с комиссией 0,01% посмотрим индекс текущего тика - вызовем метод slot0. Видим, что индекс текущего ценового тика 1.
После этого вызываем метод mint на контракте NonfungiblePositionManager.
Передаем ему значения параметров:
- payableAmount - стами 0, мы не передаем в транзакции эфир, не вносим сейчас в пул нативные токены.
- адрес токена USDc - на контракте пула можно посмотреть, какой токен 0, а какой 1.
- адрес токена USDt.
- размер комиссии пула, в который вносим ликвидность. Указываем 100, то есть 0,01%.
- tickLower и tickUpper - границы нашего ценового диапазона. В предыдущем видео мы узнали, как можно определить текущую цену в пуле и границы желаемого ценового диапазона. Поэтому здесь мы сразу укажем значения -7 и 8.
- amount0Desired, amount1Desired - укажем для каждого стейблкоина количество токенов, которые хотим внести - с учетом количества знаков после запятой. 100000 , то есть 0,1 USDt и USDc.
- amount0Min, amount1Min - минимальное количество, которое пул должен принять от нас. Укажем 10 - также, с учетом количества знаков после запятой.
- recipient - получатель позиции - укажем адрес кошелька, которым будем подписывать транзакцию.
- deadline - время, до которого транзакция должна быть выполнена. Указывается в формате Unixtime с точностью до секунд. В описании к видео будет ссылка на конвертер, где можно взять значение текущего момента в формате unixtime.Увеличим текущее значение на 20000.
Подпишем транзакцию нашим кошельком.
Протокол забрал с нашего баланса usdt и usdc. И создал нам финансовое нфт, к которому в протоколе привязана наша позиция в пуле ликвидности.
Посмотрим его в приложении DAO Envelop.
На контракте NonfungiblePositionManager вызовем метод чтения positions. Передадим ему tokenId финансового NFT нашей позиции.
Метод вернул состояние нашей позиции, видим настройки , которые мы сделали при создании позиции.
P.S. Обещанный в видео конвертор: epochconverter.com