- Регистрация
- 12.06.2018
- Сообщения
- 1 495
- Благодарностей
- 991
- Баллы
- 113
В мире блокчейна смарт-контракты работают автономно, но у них есть ограничение — они не умеют сами получать данные из внешнего мира. Например, курс биткоина или цену золота. Для этого используются оракулы — специальные сервисы, которые приносят данные «снаружи» и публикуют их в блокчейне.
Chainlink — один из самых популярных децентрализованных оракулов. Его узлы собирают котировки с разных бирж, агрегируют и записывают результат в смарт-контракты. Эти контракты называются Price Feeds и позволяют любому приложению на блокчейне безопасно узнать цену нужного актива.
Как работает Chainlink Price Feed.
- Узлы-оракулы получают цены с разных источников.
- Данные усредняются и публикуются в контракте.
- Любой пользователь или смарт-контракт может вызвать функцию 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
- Доступность в смарт-контрактах
API нельзя дернуть прямо из смарт-контракта (он не может выйти в интернет).
Chainlink приносит данные внутрь блокчейна. - Надёжность и децентрализация
- Один API = единая точка отказа.
- Chainlink собирает данные от множества источников и узлов.
- Защита от манипуляций
- Если контракт полагается на цену из одного API, достаточно сломать или подделать этот API.
- В Chainlink нужно обмануть целую сеть нод + агрегатор, а это практически невозможно.
- Криптографическая проверяемость
Все данные в Price Feed записаны в блокчейн - любая транзакция, расчёт, ликвидация в DeFi имеет прозрачное и верифицируемое основание. - Автоматическое обновление
Фиды обновляются:- по времени (heartbeat),
- при изменении цены больше определённого процента (deviation threshold).
Это гарантирует "свежесть" данных.
Каждый раунд (round) в Chainlink — это новое обновление данных. Его длительность не фиксирована и зависит от двух параметров:
- Deviation Threshold (порог отклонения) — если цена изменилась больше заданного процента (например, 0.5%), запускается новый раунд.
- Heartbeat (интервал обновления) — если цена долго не меняется, то данные всё равно обновляются раз в установленный период (например, каждые 60 секунд, 10 минут или 1 час).
Подводя итог - в отличие от обычных 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’ запрашивает номер последнего раунда и в цикле запрашивает значения по указанному количеству раундов, записывая данные (цена;время) в таблицу.
Спасибо за внимание. Надеюсь, данная информация и примеры помогут в реализации своих проектов.
Вложения
-
12,6 КБ Просмотры: 2
-
1,5 МБ Просмотры: 2