Chainlink Data Feeds. Часть 1
Chainlink Data Feeds - это одна из 4 частей сервиса chainlink, позволяющий подключать смарт контракты к сети оракулов, чтобы получить достоверную информацию о цене на криптовалюту, балансы бирж и состояния L2 секвенсеров.
Информации о том, как использовать эти контракты крайне мало, и большинство из них разбирают код, показанный в документации, не раскрывая других подробностей.
В нескольких постах я постараюсь рассказать обо всем, что получилось узнать за эти несколько дней.
Итак, Data Feeds состоят из трех компонентов:
1. Нашего контракта, в котором нам нужно получить некую информацию, например, о цене на какую-либо криптовалюту;
2. Прокси контракт, к которому мы подключаемся, и который в свою очередь подключается к Агрегатору для получения нужно информации;
3. Агрегатор. Именно он получает всю информацию от оракулов.
Мы же, через свой контракт, можем подключаться как к Прокси, так и к самому Агрегатору.
При этом важно понимать, что Агрегаторы порой обновляются и совершенствуются, и некоторые функции могут переставать работать или начать выдавать другие результаты, которых мы в своем контракте не будем ожидать. Именно поэтому в документации рекомендуют подключаться к Прокси.
Далее мы рассмотрим Solidity код подключения.
#chainlink #datafeeds #feeds
Chainlink Data Feeds - это одна из 4 частей сервиса chainlink, позволяющий подключать смарт контракты к сети оракулов, чтобы получить достоверную информацию о цене на криптовалюту, балансы бирж и состояния L2 секвенсеров.
Информации о том, как использовать эти контракты крайне мало, и большинство из них разбирают код, показанный в документации, не раскрывая других подробностей.
В нескольких постах я постараюсь рассказать обо всем, что получилось узнать за эти несколько дней.
Итак, Data Feeds состоят из трех компонентов:
1. Нашего контракта, в котором нам нужно получить некую информацию, например, о цене на какую-либо криптовалюту;
2. Прокси контракт, к которому мы подключаемся, и который в свою очередь подключается к Агрегатору для получения нужно информации;
3. Агрегатор. Именно он получает всю информацию от оракулов.
Мы же, через свой контракт, можем подключаться как к Прокси, так и к самому Агрегатору.
При этом важно понимать, что Агрегаторы порой обновляются и совершенствуются, и некоторые функции могут переставать работать или начать выдавать другие результаты, которых мы в своем контракте не будем ожидать. Именно поэтому в документации рекомендуют подключаться к Прокси.
Далее мы рассмотрим Solidity код подключения.
#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 2
Удобнее всего практиковаться с Data Feeds в Remix IDE в браузере. Конечно, для вашей большей практики деплоя контрактов в различные сети, в том числе в goerly, можно писать и в VS Code или другом редакторе кода, но Remix в данном случае проще.
Лично я сначала пробовал делать в Ремиксе, потом в VS практиковался с интерфейсом и js.
Для начала пойдем простым способом и посетим эту ссылку. Скролим ниже до Solidity кода и нажимаем "Open in Remix".
Мы увидим самый простой пример валидного кода с подключенным уже интерфейсом агрегатора.
ВАЖНО! На данный момент практики с кодом у вас на счету в тестовой сети в кошельке Метамаск уже должны быть некоторые средства, 0.02 Эфира будет самый раз.
Справа в меню (иконки) сначала переходим в раздел Compile и компилируем наш контракт.
Далее идем в раздел Deploy (иконка с эфиром). В поле "Environment" выбираем "Injected Provider - Metamask". Под этим полем, после подключения, должна появиться ваша тестовая сеть, обычным текстом, типа "Goerly network", а в поле "Account" - отобразиться ваш адрес в кошельке. В поле "Contract" проверяем, чтобы был именно наш контракт. И жмем "Deploy".
Возможно, в первые разы у вас будет появляться окошко Метамаска для авторизации. Тут нужно будет все одобрить.
В момент деплоя снова появится окошко Метамаска, где нужно будет одобрить транзакцию и заплатить немного эфира. После этого в консоли Ремикс появится ссылка на ваш контракт в Etherscan, и справа, где вы нажимали кнопку деплоя, можно будет развернуть ваш контракт и попробовать вызвать функцию getLatestPrice().
По сути, это самый простой вариант работы с chainlink.
Далее рассмотрим другие функции, которые можно вызывать с Data Feeds.
#chainlink #datafeeds #feeds
Удобнее всего практиковаться с Data Feeds в Remix IDE в браузере. Конечно, для вашей большей практики деплоя контрактов в различные сети, в том числе в goerly, можно писать и в VS Code или другом редакторе кода, но Remix в данном случае проще.
Лично я сначала пробовал делать в Ремиксе, потом в VS практиковался с интерфейсом и js.
Для начала пойдем простым способом и посетим эту ссылку. Скролим ниже до Solidity кода и нажимаем "Open in Remix".
Мы увидим самый простой пример валидного кода с подключенным уже интерфейсом агрегатора.
ВАЖНО! На данный момент практики с кодом у вас на счету в тестовой сети в кошельке Метамаск уже должны быть некоторые средства, 0.02 Эфира будет самый раз.
Справа в меню (иконки) сначала переходим в раздел Compile и компилируем наш контракт.
Далее идем в раздел Deploy (иконка с эфиром). В поле "Environment" выбираем "Injected Provider - Metamask". Под этим полем, после подключения, должна появиться ваша тестовая сеть, обычным текстом, типа "Goerly network", а в поле "Account" - отобразиться ваш адрес в кошельке. В поле "Contract" проверяем, чтобы был именно наш контракт. И жмем "Deploy".
Возможно, в первые разы у вас будет появляться окошко Метамаска для авторизации. Тут нужно будет все одобрить.
В момент деплоя снова появится окошко Метамаска, где нужно будет одобрить транзакцию и заплатить немного эфира. После этого в консоли Ремикс появится ссылка на ваш контракт в Etherscan, и справа, где вы нажимали кнопку деплоя, можно будет развернуть ваш контракт и попробовать вызвать функцию getLatestPrice().
По сути, это самый простой вариант работы с chainlink.
Далее рассмотрим другие функции, которые можно вызывать с Data Feeds.
#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 3
Теперь пройдемся по функциям, которые можно подключать, используя интерфейс. К счастью, их всего 5 штук.
decimals - возвращает, даже не знаю, как перевести, эти самые decimals. Помните в одном из постов мы разбирали из чего состоит Эфир? Эфир, потом Gwei, потом в самом конце Wei, который равен "0, семнадцать нулей и 1", всего после запятой 18 символов. Так вот эти 18 символов и называются decimals. И в отношении других валют, это количество символов после запятой может быть разным.
description - описание контракта Агрегатора, на который указывает Прокси контракт.
getRoundData - получение данных с определенного раунда.
latestRoundData - получение данных с последнего раунда.
version - версия контракта Агрегатора.
В своем контракте вы можете создать свою функцию, которая внутри будет вызывать одну из функций интерфейса.
Для getRoundData() - все таки потребуется знать id интересующего раунда.
Как я уже писал ранее, вы также можете подключать напрямую контракт Агрегатора, в котором представлено больше возможных для вызова функций. Все можно посмотреть тут.
Эти функции иногда меняются, поэтому перед использованием всегда проверяйте, что они делают.
Далее узнаем, как подключать функции из Агрегатора и как его найти.
#chainlink #datafeeds #feeds
Теперь пройдемся по функциям, которые можно подключать, используя интерфейс. К счастью, их всего 5 штук.
decimals - возвращает, даже не знаю, как перевести, эти самые decimals. Помните в одном из постов мы разбирали из чего состоит Эфир? Эфир, потом Gwei, потом в самом конце Wei, который равен "0, семнадцать нулей и 1", всего после запятой 18 символов. Так вот эти 18 символов и называются decimals. И в отношении других валют, это количество символов после запятой может быть разным.
description - описание контракта Агрегатора, на который указывает Прокси контракт.
getRoundData - получение данных с определенного раунда.
latestRoundData - получение данных с последнего раунда.
version - версия контракта Агрегатора.
В своем контракте вы можете создать свою функцию, которая внутри будет вызывать одну из функций интерфейса.
Для getRoundData() - все таки потребуется знать id интересующего раунда.
Как я уже писал ранее, вы также можете подключать напрямую контракт Агрегатора, в котором представлено больше возможных для вызова функций. Все можно посмотреть тут.
Эти функции иногда меняются, поэтому перед использованием всегда проверяйте, что они делают.
Далее узнаем, как подключать функции из Агрегатора и как его найти.
#chainlink #datafeeds #feeds
👍1
Chainlink Data Feeds. Часть 4
Итак, есть несколько основных блокчейн сетей, к которым вы можете подключаться. В каждом из них есть список конкретных смарт контрактов, из которых мы и получаем основные сведения, типа стоимости ETH/USD.
И когда в Ремиксе была строка в конструкторе
priceFeed = AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);
то тут указывался адрес в тестовой сети goerly для пары ETH/USD.
Вы можете поэкспериментировать с различными контрактами сами. Просто замените адрес контракта в строке в конструкторе.
Однако учтите, что за каждый деплой контракта вы должны будете заплатить.
Все адреса контрактов и сети можно посмотреть тут.
#chainlink #datafeeds #feeds
Итак, есть несколько основных блокчейн сетей, к которым вы можете подключаться. В каждом из них есть список конкретных смарт контрактов, из которых мы и получаем основные сведения, типа стоимости ETH/USD.
И когда в Ремиксе была строка в конструкторе
priceFeed = AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);
то тут указывался адрес в тестовой сети goerly для пары ETH/USD.
Вы можете поэкспериментировать с различными контрактами сами. Просто замените адрес контракта в строке в конструкторе.
Однако учтите, что за каждый деплой контракта вы должны будете заплатить.
Все адреса контрактов и сети можно посмотреть тут.
#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 5
Возможно, вам потребуется узнать Прокси контракт или Агрегатор для данной пары, типа ETH/USD, как это сделать?
1. Прежде всего выбираем интересующий нас контракт Data Feed с парой валюты, представленных в официальной документации chainlink. Ссылку на их список я давал в прошлом посте.
2. Открываем контракт в etherscan.
3. Выбираем вкладку "Contract" и жмем "Read contract".
4. Далее из показанных там функций жмем на "Agregator". Это и будет адрес контракта AccessControlledOffchainAggregator.
5. Если в этом же окне функций спуститься ниже и нажать на "Owner", то вы получите адрес прокси контракта.
#chainlink #datafeeds #feeds
Возможно, вам потребуется узнать Прокси контракт или Агрегатор для данной пары, типа ETH/USD, как это сделать?
1. Прежде всего выбираем интересующий нас контракт Data Feed с парой валюты, представленных в официальной документации chainlink. Ссылку на их список я давал в прошлом посте.
2. Открываем контракт в etherscan.
3. Выбираем вкладку "Contract" и жмем "Read contract".
4. Далее из показанных там функций жмем на "Agregator". Это и будет адрес контракта AccessControlledOffchainAggregator.
5. Если в этом же окне функций спуститься ниже и нажать на "Owner", то вы получите адрес прокси контракта.
#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 6
Если мы хотим подключить контракт Агрегатор (AccessControlledOffchainAggregator) в свой контракт, то это будет чуть сложнее.
В документации написано, что можно использовать Ремикс, но, если честно, это очень странный способ для разработчика. Особенно, когда работаешь в редакторах кода, типа VS Code. Поэтому я опишу другой способ.
1. Прежде всего, способ описанным в предыдущем посте, мы находим Агрегатор контракта, который нам нужен, и во вкладке "Contract" внизу ищем его ABI.
2. Копируем ABI и переходим по данной ссылке. В поле ABI вставляем скопированный код, жмем на кнопку внизу и получаем интерфейс контракта.
3. Сохраняем этот интерфейс в свой контракт.
4. Далее в своем контракте создаем новую переменную объекта.
5. И в конструкторе в эту переменную кладем адрес контракта.
Все, после деплоя можно вызывать функции с Агрегатора.
Пример, как это сделал я, можно найти в файле в моем репозитории на GitHub тут.
P.S. Этот код можно скопировать в Ремикс и потестить там.
#chainlink #datafeeds #feeds
Если мы хотим подключить контракт Агрегатор (AccessControlledOffchainAggregator) в свой контракт, то это будет чуть сложнее.
В документации написано, что можно использовать Ремикс, но, если честно, это очень странный способ для разработчика. Особенно, когда работаешь в редакторах кода, типа VS Code. Поэтому я опишу другой способ.
1. Прежде всего, способ описанным в предыдущем посте, мы находим Агрегатор контракта, который нам нужен, и во вкладке "Contract" внизу ищем его ABI.
2. Копируем ABI и переходим по данной ссылке. В поле ABI вставляем скопированный код, жмем на кнопку внизу и получаем интерфейс контракта.
3. Сохраняем этот интерфейс в свой контракт.
4. Далее в своем контракте создаем новую переменную объекта.
5. И в конструкторе в эту переменную кладем адрес контракта.
Все, после деплоя можно вызывать функции с Агрегатора.
Пример, как это сделал я, можно найти в файле в моем репозитории на GitHub тут.
P.S. Этот код можно скопировать в Ремикс и потестить там.
#chainlink #datafeeds #feeds
Chainlink Data Feeds. Часть 7
Забыл еще сказать одну штуку.
Если вы хотите подключать интерфейсы в своем контракте из редакторов кода, типа VS Code, то можно добавить пакет chainlink в свой проект, выполнив команду в консоли
npm install @chainlink/contracts --save
После этого можно использовать import.
#chainlink #datafeeds #feeds
Забыл еще сказать одну штуку.
Если вы хотите подключать интерфейсы в своем контракте из редакторов кода, типа VS Code, то можно добавить пакет chainlink в свой проект, выполнив команду в консоли
npm install @chainlink/contracts --save
После этого можно использовать import.
#chainlink #datafeeds #feeds