Механизм оракулов Chainlink: как связывать смарт-контракты с внешним миром и блокчейном

В области блокчейна оракл-машины — это системы, которые точно поставляют внешние данные реального мира для смарт-контрактов. По сути, оракл-машины выступают важным промежуточным программным обеспечением, заполняющим информационный разрыв между блокчейном и реальным миром, и являются неотъемлемой инфраструктурой, поддерживающей экосистему децентрализованных приложений (DApps).

Что такое оракл-машина: система посредничества информации в блокчейне

При выполнении смарт-контрактов зачастую требуется доступ к внешним данным. Например, при создании деривативного смарт-контракта на нефть на сети Ethereum потребуется данные о объеме торгов нефтью на определённую дату. Однако сам смарт-контракт ограничен средой on-chain и не может напрямую получать оффчейн-информацию. Здесь на помощь приходят оракл-машины.

Конкретно, смарт-контракт описывает запрос нужных данных в виде события (event log). Затем процесс, работающий вне цепочки, следит за этим событием, анализирует его содержимое и через внешние API получает необходимые данные. После этого транзакция с данными транслируется в цепочку, вызывая функцию обратного вызова (callback) смарт-контракта. Таким образом, смарт-контракт получает доступ к надежной внешней информации.

Рыночная позиция Chainlink и токен LINK

В сегменте децентрализованных оракл-машин в блокчейн-индустрии Chainlink занимает доминирующую долю рынка. Проект Chainlink предназначен для безопасной и надежной доставки данных из реального мира в блокчейн. Он создал экосистему, основанную на экономических стимулах, с использованием токена LINK, обеспечивающего взаимовыгодное взаимодействие участников.

Текущие рыночные данные токена LINK (по состоянию на 21 января 2026 года):

  • Текущая цена: $12.25
  • Изменение за 24 часа: -2.14%
  • Объем за 24 часа: $4.32M
  • Рыночная капитализация: $8.68B
  • Доля рынка: 0.38%

Оракл-машина Chainlink активируется при передаче токенов LINK. Этот токен — смарт-контракт на базе ERC677, работающий на сети Ethereum. Функции оракл-машины, основанные на токенах LINK, классифицируются как модель запрос/ответ.

Инновации стандарта ERC677

идея метода transferAndCall

Основная проблема оракл-машин — необходимость оплаты услуг пользователем поставщику (ораклу). Стандартный ERC20-токен обеспечивает только простую передачу, что не позволяет одновременно выполнить оплату и запрос услуги.

Решением стала предложенная Chainlink стандартизация ERC677. Она добавила в ERC20 метод transferAndCall, позволяющий реализовать передачу токенов и запрос услуги в рамках одной транзакции. При вызове transferAndCall проверяется, является ли получатель смарт-контрактом (а не внешним аккаунтом). Если да, автоматически вызывается его метод onTokenTransfer.

Это объединяет оплату и вызов функции, делая бизнес-логику оракл-машины более эффективной.

Многоуровневая проверка безопасности

Перед использованием оракл-сервиса пользователь должен убедиться в его надежности. В Chainlink любой может стать поставщиком оракл-услуг, что повышает прозрачность и проверяемость системы.

Процесс обработки запросов on-chain

Механизм приема запросов в Oracle-контракте

При оплате через transferAndCall и запросе услуги адрес назначения — это контракт оракл-машины. В методе onTokenTransfer этого контракта выполняется несколько проверок:

  • Проверка, что вызов пришел с LINK-контракта (с помощью onlyLINK).
  • Проверка длины переданных данных (_data) на превышение лимита.
  • Проверка, что в _data содержится вызов функции, начинающийся с «oracleRequest».

Если все проверки пройдены, вызывается delegatecall к текущему контракту, фактически — вызов метода oracleRequest.

Генерация и запись requestId

Внутри метода oracleRequest происходит:

  • Создается уникальный requestId, объединяя адрес оракула и nonce, и хешируя их.
  • Проверяется, что такой requestId еще не существует в карте commitment.
  • Записывается в commitment: _payment, _callbackAddress, _callbackFunctionId, expiration, а также вызывается событие OracleRequest с CBOR-данными.

CBOR — это компактный бинарный формат JSON, обеспечивающий эффективную передачу данных.

Механизм ответа оффчейн-нодов

Проверка и выполнение fulfillOracleRequest

Chainlink-нод следит за событием OracleRequest. При его обнаружении он выполняет:

  • Проверку, что вызов пришел от авторизованного узла (onlyAuthorizedNode).
  • Проверку, что requestId есть в commitment и параметры совпадают (isValidRequest).

Если проверки прошли успешно, сумма за запрос (drawableTokens) увеличивается, requestId удаляется из commitment. Затем проверяется, что оставшийся газ достаточен для вызова коллбэка (MINIMUM_CONSUMER_GAS_LIMIT). После этого вызывается callback-функция исходного контракта с полученными данными.

Реализация паттернов callback-функций

Из события OracleRequest можно получить ID функции обратного вызова (например, 6A9705B4) и её сигнатуру. В контракте-обработчике реализуется функция validateChainlinkCallback, которая проверяет, что requestId действительно существует и принадлежит этому ораклу. После успешной проверки генерируется событие ChainlinkFulfilled, и можно обработать ответ, обновляя маппинг цен или другие данные.

Реализация ценовых оракулов

( Интерфейс Aggregator и ценовые фиды

Процесс, описанный выше, — универсальный для любого оракл-сервиса. Для ценовых фидов Chainlink реализует более упрощенную модель.

Для каждого торгового пары (ETH/USD, BTC/USD и т.п.) существует отдельный фид (Aggregator или его прокси AggregatorProxy). В интерфейсе есть стандартные методы:

  • decimals)### — число знаков после запятой (обычно 8 или 18)
  • description() — название пары (например, ETH/USD)
  • version() — версия агрегатора или прокси
  • getRoundData(_roundId) — данные за конкретный раунд
  • latestRoundData() — последние данные

( Лучшие практики использования

Чаще всего контракт просто вызывает latestRoundData)### для получения актуальной цены. Возвращаемые данные включают цену, время, раунд и т.п.

Многие приложения используют цену в долларах США (USD). В этом случае точность обычно 8 знаков, и необходимости учитывать различия в decimals обычно нет. Если у пары другой точности, можно проверить через decimals() и корректировать.

Таким образом, оракл-машина Chainlink — не только посредник данных, но и мощная платформа для реализации сложных финансовых инструментов, таких как ценовые предсказатели, обеспечивая надежную и практическую инфраструктуру для блокчейн-экосистемы.

ETH2,06%
BTC1,96%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
0/400
Нет комментариев
  • Горячее на Gate Fun

    Подробнее
  • РК:$3.41KДержатели:0
    0.00%
  • РК:$3.42KДержатели:1
    0.00%
  • РК:$3.42KДержатели:1
    0.00%
  • РК:$3.41KДержатели:1
    0.00%
  • РК:$3.43KДержатели:2
    0.00%
  • Закрепить