Создайте свое приложение для взаимодействия с Compound Finance

DeFi стал чрезвычайно популярным вариантом использования экосистемы Ethereum. На момент написания в протоколах DeFi заблокировано более 1 миллиарда долларов. Перспектива замены существующих финансовых продуктов открытыми децентрализованными альтернативами до сих пор оказалась очень популярной.

Что делает большинство этих платформ DeFi замечательными, так это их простота использования для разработчиков. Благодаря своей природе с открытым исходным кодом, они понятны и могут использоваться любым, кто хочет узнать, как это сделать.

Одним из крупнейших является Compound Finance с фиксированной стоимостью около 115 миллионов долларов. Кто угодно может добавить активы в свой протокол и начать зарабатывать на этом проценты, но как работает этот процесс?

Как работает комплексное финансирование?

В настоящее время соединение работает на девяти рынках: BAT, DAI, ETH, REP, SAI, USDC, USDT, WBTC, ZRX. Это цифровые активы, на которые вы можете получать проценты.

Давайте возьмем DAI в качестве примера. После того, как вы предоставите протоколу DAI, это значение будет заблокировано до тех пор, пока вы не решите отозвать его. Тем не менее, пока он существует, вы соглашаетесь с тем, что протокол может предоставить эту стоимость взаймы, таким образом зарабатывая весь процент от банка. Думайте об этом как о сберегательном счете.

Оказавшись там, вы можете в любой момент проверить, сколько там DAI, какова текущая процентная ставка, заимствовать другие активы и т. Д.

Давайте перейдем к техническим

Как выглядит этот процесс поставки с технической точки зрения?

Протокол использует контракты, соответствующие стандарту ERC20, для каждого из поддерживаемых рынков. Они называются cTokens. У каждого из них есть внешняя функция: mint, куда отправляется предоставленное значение. Эта функция получает предоставленное значение, вычисляет эквивалентное количество cToken в зависимости от обменного курса и обменивает их на предоставленное значение.

Например, если обменный курс составляет 1: 1, то предоставление одного ETH приведет к тому, что отправитель получит один cETH.

Противоположностью mint является функция с именем redeem. Когда пользователь хочет снять свое заблокированное значение, вызов redeem с желаемым количеством токенов cETH вернет эквивалентное значение ETH в зависимости от текущего обменного курса.

Примечание. Существует также redeemUnderlying функция, которая использует в качестве входных данных единицы базового актива вместо единиц cToken.

Написание кода

Предварительное условие: это пошаговое руководство предполагает базовое понимание смарт-контрактов JavaScript, Web3 и Ethereum.

Мы собираемся предоставить и обменять ETH на Compound Finance, выполнив следующие действия:

  1. Загрузите контракт cETH.
  2. Предоставьте ETH, позвонив mint, заблокировав ETH и получив токены cETH.
  3. Прочтите наш баланс cETH.
  4. Прочтите наш заблокированный баланс ETH.
  5. Получите наш ETH из протокола, предоставив cETH.

Шаг 1. Загрузка контракта cETH

Каждый токен-контракт имеет свой адрес в каждой сети. ABI для контрактов cToken публично доступны по адресу https://compound.finance/docs/abi/ ‹network› / ‹cToken›.

В нашем сценарии с использованием cETH и тестовой сети Kovan наш URL-адрес выглядит следующим образом: https://compound.finance/docs/abi/kovan/cETH.

Адреса для каждого контракта в каждой сети можно найти в официальной документации Compound.

Используя web3, мы инициализируем наш экземпляр контракта следующим образом:

const cEthInstance = new web3.eth.Contract(cEthABI, addr);

Шаг 2: поставка ETH

На рисунке 1 показано, насколько просто mint cTokens с помощью send функции web3:

На этом этапе наш ETH начнет приносить проценты в зависимости от текущей процентной ставки (которая также может быть рассчитана с помощью математической формулы).

Шаг 3. Прочтите наш баланс cETH

Поскольку контракты cToken совместимы с ERC20, они предоставляют функцию под названием balanceOf. Мы можем проверить баланс нашего cETH, вызвав это и передав ему адрес нашей учетной записи:

let b = await cEthInstance.methods.balanceOf(account).call();

Шаг 4. Прочтите заблокированный баланс ETH

Контракты cToken также предоставляют функцию balanceOfUnderlying, которая возвращает стоимость базового актива учетной записи с использованием принадлежащих им cToken и текущего обменного курса:

let u = await cEthInstance.methods.balanceOfUnderlying(account).call();

Шаг 5: выкупите наш ETH из протокола

Используя значение u из шага 4 как redeemAmount на рисунке 2, мы можем вызвать redeemUnderlying, чтобы выкупить наш эфир:

В качестве альтернативы мы можем использовать redeem вместо redeemUnderlying и передать значение b из шага 3 как redeemAmount.

Заключение

Поскольку DeFi становится более простым в использовании и принятым многими, изучение того, как взаимодействовать с этими протоколами, является ценным инструментом в наборе инструментов любого разработчика.

Если вас интересует разработка блокчейнов, я пишу учебные пособия, пошаговые руководства, подсказки и советы о том, как начать работу и создать портфолио. Ознакомьтесь с некоторыми из этих ресурсов: