Работа с блокчейн-оракулами: Chainlink Price Feeds на практике.

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 495
Благодарностей
991
Баллы
113
datafeed.png


В мире блокчейна смарт-контракты работают автономно, но у них есть ограничение — они не умеют сами получать данные из внешнего мира. Например, курс биткоина или цену золота. Для этого используются оракулы — специальные сервисы, которые приносят данные «снаружи» и публикуют их в блокчейне.
Chainlink — один из самых популярных децентрализованных оракулов. Его узлы собирают котировки с разных бирж, агрегируют и записывают результат в смарт-контракты. Эти контракты называются Price Feeds и позволяют любому приложению на блокчейне безопасно узнать цену нужного актива.

Как работает Chainlink Price Feed.
  1. Узлы-оракулы получают цены с разных источников.
  2. Данные усредняются и публикуются в контракте.
  3. Любой пользователь или смарт-контракт может вызвать функцию latestRoundData() и получить:
    • цену (answer),
    • время обновления (updatedAt),
    • идентификатор раунда (roundId).
Где найти контракты.
Актуальные адреса Price Feed контрактов для Ethereum, Polygon, BNB Chain и других сетей доступны на сайте Chainlink:
https://data.chain.link/feeds
https://docs.chain.link/data-feeds/price-feeds/addresses

Контракты vs API.

API-запрос

Получать данные «для себя» (в приложении, бэкенде, отчёте).
Данные легко подделать, если кто-то контролирует источник или посредника.

Chainlink Oracle
Данные записаны в смарт-контракт в блокчейне.
DeFi-приложения могут использовать их с одинаковой гарантией.
Никто (ни пользователь, ни разработчик) не может подсунуть поддельный курс.
Данные децентрализованы: приходят от десятков независимых нод - агрегируются - публикуются в Price Feed.

Преимущества Chainlink перед API
  1. Доступность в смарт-контрактах
    API нельзя дернуть прямо из смарт-контракта (он не может выйти в интернет).
    Chainlink приносит данные внутрь блокчейна.
  2. Надёжность и децентрализация
    • Один API = единая точка отказа.
    • Chainlink собирает данные от множества источников и узлов.
  3. Защита от манипуляций
    • Если контракт полагается на цену из одного API, достаточно сломать или подделать этот API.
    • В Chainlink нужно обмануть целую сеть нод + агрегатор, а это практически невозможно.
  4. Криптографическая проверяемость
    Все данные в Price Feed записаны в блокчейн - любая транзакция, расчёт, ликвидация в DeFi имеет прозрачное и верифицируемое основание.
  5. Автоматическое обновление
    Фиды обновляются:
    • по времени (heartbeat),
    • при изменении цены больше определённого процента (deviation threshold).
      Это гарантирует "свежесть" данных.
Heartbeat и Deviation Threshold.
Каждый раунд (round) в Chainlink — это новое обновление данных. Его длительность не фиксирована и зависит от двух параметров:
  • Deviation Threshold (порог отклонения) — если цена изменилась больше заданного процента (например, 0.5%), запускается новый раунд.
  • Heartbeat (интервал обновления) — если цена долго не меняется, то данные всё равно обновляются раз в установленный период (например, каждые 60 секунд, 10 минут или 1 час).
Таким образом, для популярных пар (ETH/USD, BTC/USD) данные обновляются чаще (раз в минуту или при сильных скачках), а для менее востребованных активов обновления могут быть раз в 30 минут или только при изменениях.

Подводя итог - в отличие от обычных API-запросов, данные из Chainlink Price Feeds попадают прямо в блокчейн, где они децентрализованно агрегированы, защищены от подделки и доступны любому смарт-контракту. Такой способ гарантирует прозрачность и надёжность курсов — критически важные качества для DeFi и любых автоматизированных систем, работающих с деньгами.

В качестве примера в шаблоне реализованы методы получения данных из блокчейна на базе библиотеки Nethereum.
Для начала необходимо указать json RPC сервер. Список таких серверов можно найти на сайте https://chainlist.org/. Будем использовать Ethereum Mainnet, т.к. это самая популярная сеть и для неё реализовано больше всего контрактов (но это неточно). В любом случае это будет только чтение данных из контракта и никаких транзакций требующих оплаты не понадобится. Однако у chainlist.org есть существенный минус – адреса серверов, публикуемые там, являются публичными со всеми вытекающими из этого последствиями, т.е. работать они могут нестабильно или вообще не работать. Поэтому рекомендую зарегистрировать аккаунт на одном из следующих сервисов – Alchemy / QuickNode / Infura и получить там приватный эндпоинт. Лимит бесплатного аккаунта вполне подходит для работы с небольшой нагрузкой по количеству запросов.

В переменной ‘priceFeedContract’ указываем адрес контракта необходимой пары (где найти эти контракты см. выше).

Первый пример работы - кубик ‘get current price’ отдаёт самую последнюю цену.
Второй пример – кубик ‘get price history’ запрашивает номер последнего раунда и в цикле запрашивает значения по указанному количеству раундов, записывая данные (цена;время) в таблицу.

Спасибо за внимание. Надеюсь, данная информация и примеры помогут в реализации своих проектов.
 

Вложения

Кто просматривает тему: (Всего: 2, Пользователи: 1, Гости: 1)