DeFi
March 12
Вводный курс DeFi для всех. Работа с dAPPs через смарт-контракты. Uniswap. Часть VI
У нас есть позиция в пуле пары USDT/USDC и мы хотим её уменьшить ее, изъяв часть ликвидности.
На контракте NonfungiblePositionManager вызовем метод decreaseLiquidity.
- payableAmount - указываем 0. Мы не передаем в транзакции эфир
- tokenId - id нашего финансового NFT позиции. Найти мы его можем также на дашборде в приложении Envelop, либо в транзакции первоначального добавления ликвидности.
- liquidity - допустим, мы хотим вывести 20% нашей ликвидности, тогда вызвав метод positions снова, мы поймем, какой размер нашей текущей ликвидности и применив к этому числу 20%, мы получим то число, которое необходимо передать методу decreaseLiquidity
- amount0Min, amount1Min - минимальное количество одного и другого токена, которое мы должны получить. Укажем 10 - также, с учетом количества знаков после запятой. Это так называемая защита от проскальзывания
- deadline - время, до которого транзакция должна быть выполнена. Берем значение из стороннего сервиса, увеличив текущее значение на 20000.
Подпишем транзакцию нашим кошельком.
Мы пока ещё ничего не вывели на свой кошелёк. Теперь проверим состояние нашей позиции, снова вызвав метод positions. Значение liquidity уменьшилось, а значения tokenOwed0 и tokenOwed1 увеличились. Помним, что эти переменные хранят еще нашу заработанную комиссию.
Теперь вызовем метод collect на контракте менеджера позиций.
- payableAmount - указываем 0. Мы не передаем в транзакции эфир
- tokenId - id нашего финансового NFT позиции. Найти мы его можем также на дашборде в приложении Envelop, либо в транзакции первоначального добавления ликвидности.
- amount0Max, amount1Max - максимальное количество токенов, которое мы хотим получить - укажем большие значения с учетом количества знаков после запятой.
Проверим её. Видим, что протокол вернул нам некоторое количество токенов usdc и usdt.