> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Оракул

> Как индексная цена собирается из данных площадок, сертифицируется валидаторами и фиксируется в том блоке, который её потребляет.

Intention не использует внешний комитет оракулов. **Оракул — это сам набор валидаторов.** Каждый валидатор строит собственное представление о цене каждого инструмента, подписывает его, а сеть сертифицирует результат в том же событии консенсуса, которое фиксирует транзакции, рассчитываемые по этой цене.

Шага здесь два, и отвечают они на разные вопросы. Агрегация спрашивает, *сколько стоит этот инструмент*, и происходит у каждого валидатора отдельно, вне пути консенсуса. Сертификация спрашивает, *о какой стоимости в этом раунде сеть договорилась*, и происходит внутри консенсуса.

<div className="dg" data-dg="oracle-path">
  <div className="dg-c" style={{aspectRatio:"720 / 316"}}>
    <svg className="dg-w" viewBox="0 0 720 316" aria-hidden="true">
      <path className="dg-wire" d="M 176.00 90.00 L 176.00 101.60" />

      <path className="dg-head" d="M 176.00 108.00 L 171.60 101.60 L 180.40 101.60 Z" />

      <path className="dg-wire" d="M 176.00 152.00 L 176.00 163.60" />

      <path className="dg-head" d="M 176.00 170.00 L 171.60 163.60 L 180.40 163.60 Z" />

      <path className="dg-wire" d="M 550.00 90.00 L 550.00 101.60" />

      <path className="dg-head" d="M 550.00 108.00 L 545.60 101.60 L 554.40 101.60 Z" />

      <path className="dg-wire" d="M 550.00 152.00 L 550.00 163.60" />

      <path className="dg-head" d="M 550.00 170.00 L 545.60 163.60 L 554.40 163.60 Z" />

      <path className="dg-wire dg--blue" d="M 341.00 130.00 L 384.60 130.00" />

      <path className="dg-head dg--blue" d="M 391.00 130.00 L 384.60 134.40 L 384.60 125.60 Z" />

      <path className="dg-wire dg--green" d="M 550.00 222.00 L 550.00 235.60" />

      <path className="dg-head dg--green" d="M 550.00 242.00 L 545.60 235.60 L 554.40 235.60 Z" />
    </svg>

    <div className="dg-band" style={{left:"0.0000%",top:"8.2278%",width:"48.8889%",height:"62.0253%"}}><span className="dg-cap">У каждого валидатора — вне пути консенсуса</span></div>
    <div className="dg-band" style={{left:"52.7778%",top:"8.2278%",width:"47.2222%",height:"62.0253%"}}><span className="dg-cap">Внутри консенсуса</span></div>
    <div className="dg-b" style={{left:"2.2222%",top:"15.8228%",width:"44.4444%",height:"11.3924%"}}><span className="dg-t">Торговые площадки</span></div>
    <div className="dg-b dg--sky" style={{left:"2.2222%",top:"35.4430%",width:"44.4444%",height:"11.3924%"}}><span className="dg-t">Оракульный sidecar</span><span className="dg-s">у каждого валидатора</span></div>
    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"55.0633%",width:"44.4444%",height:"11.3924%"}}><span className="dg-t">Валидатор проверяет и подписывает</span></div>
    <div className="dg-b dg--blue" style={{left:"55.0000%",top:"15.8228%",width:"42.7778%",height:"11.3924%"}}><span className="dg-t">Gossip между валидаторами</span></div>
    <div className="dg-b dg--green" style={{left:"55.0000%",top:"35.4430%",width:"42.7778%",height:"11.3924%"}}><span className="dg-t">Сертификация по эпохам и раундам</span></div>
    <div className="dg-b dg--green" style={{left:"55.0000%",top:"55.0633%",width:"42.7778%",height:"11.3924%"}}><span className="dg-t">Переносятся в блок</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"0.0000%",top:"77.8481%",width:"100.0000%",height:"17.7215%"}}><span className="dg-t">Ядро — маркировочная цена · маржа · ликвидация · расчёт финансирования</span><span className="dg-s">рассчитывает по ценам, зафиксированным в том же событии консенсуса</span></div>
  </div>
</div>

<h2 id="producing-an-index-price">
  Получение индексной цены
</h2>

Каждый валидатор запускает собственный оракульный sidecar, который собирает данные с нескольких торговых площадок и сводит их к одной индексной цене на инструмент. Свёртка намеренно устроена не как простое среднее: среднее сдвигается одним плохим источником без всякого труда.

<div className="dg" data-dg="oracle-aggregate">
  <div className="dg-c" style={{aspectRatio:"720 / 236"}}>
    <svg className="dg-w" viewBox="0 0 720 236" aria-hidden="true">
      <path className="dg-wire" d="M 100.67 84.00 L 114.27 84.00" />

      <path className="dg-head" d="M 120.67 84.00 L 114.27 88.40 L 114.27 79.60 Z" />

      <path className="dg-wire" d="M 225.33 84.00 L 238.93 84.00" />

      <path className="dg-head" d="M 245.33 84.00 L 238.93 88.40 L 238.93 79.60 Z" />

      <path className="dg-wire" d="M 350.00 84.00 L 363.60 84.00" />

      <path className="dg-head" d="M 370.00 84.00 L 363.60 88.40 L 363.60 79.60 Z" />

      <path className="dg-wire" d="M 474.67 84.00 L 488.27 84.00" />

      <path className="dg-head" d="M 494.67 84.00 L 488.27 88.40 L 488.27 79.60 Z" />

      <path className="dg-wire" d="M 599.33 84.00 L 612.93 84.00" />

      <path className="dg-head" d="M 619.33 84.00 L 612.93 88.40 L 612.93 79.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Фильтр</span><span className="dg-s">неконечные и некорректные значения</span></div>
    <div className="dg-b dg--sky" style={{left:"17.3148%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Медиана</span><span className="dg-s">по источникам</span></div>
    <div className="dg-b dg--sky" style={{left:"34.6296%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Зажим</span><span className="dg-s">каждый источник: медиана ± полоса</span></div>
    <div className="dg-b dg--sky" style={{left:"51.9444%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Вес</span><span className="dg-s">по спреду и стабильности</span></div>
    <div className="dg-b dg--sky" style={{left:"69.2593%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Потолок</span><span className="dg-s">по уровню площадки</span></div>
    <div className="dg-b dg--green" style={{left:"86.5741%",top:"12.7119%",width:"13.4259%",height:"45.7627%"}}><span className="dg-t">Индексная цена</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"69.4915%",width:"100.0000%",height:"26.2712%"}}><span className="dg-t">Порядок и есть замысел</span><span className="dg-s">Фильтр идёт первым: одно бесконечное значение, дожившее до медианы или взвешенной суммы, портит всё дальше. Зажим вместо отбрасывания сохраняет каждый источник в счёте, ограничивая, насколько далеко любой из них может утянуть.</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"100.0000%"}}><div className="dg-n">Не простое среднее — среднее легко сдвинуть одним плохим источником</div></div>
  </div>
</div>

**Фильтр.** Неконечные и некорректные значения отбрасываются раньше, чем успеют попасть куда-то дальше. Порядок здесь важен: одно бесконечное значение, дожившее до медианы или взвешенной суммы, портит весь результат.

**Зажим к медиане.** По источникам берётся медиана, а затем каждый источник зажимается в полосу вокруг неё. Полоса задаётся по инструменту и тем уже, чем глубже рынок:

| Класс инструмента         | Полоса вокруг медианы |
| ------------------------- | --------------------- |
| Крупная крипта (BTC, ETH) | 1%                    |
| Стейблкоины               | 0,5%                  |
| Прочие                    | 3%                    |

Источник, котирующий вне своей полосы, не отбрасывается — его подтягивают к краю полосы. Различие существенное: отбрасывание позволяет атакующему сузить выборку, а при зажиме учитываются все источники, но ограничено, насколько далеко любой из них может утянуть результат.

**Вес по качеству, затем потолок.** Зажатые источники сводятся взвешенным средним, а не поровну. Вес растёт с качеством котировки — чем уже спред, тем больше вес — и со стабильностью, которую измеряют сравнением недавнего объёма с более длинным дневным средним: нетипичный всплеск объёма не должен давать площадке лишнего влияния.

Затем веса ограничиваются потолком по уровню источника, чтобы ни одна площадка не могла в одиночку определять результат, как бы хорошо ни выглядели её котировки:

| Уровень           | Потолок веса |
| ----------------- | ------------ |
| Площадки уровня 1 | 0,45         |
| Площадки уровня 2 | 0,35         |

Инструменты, котируемые в разных валютах, приводятся к общей валюте котировки ещё до всего этого, чтобы медиана бралась по сопоставимым числам, а не по смеси номиналов.

<Note>
  Каждая константа здесь — вопрос политики, а не природная постоянная. Полосы отклонения, назначение уровней и потолки весов — это конфигурация, и именно эти рычаги подкручивают, когда меняется поведение площадки или добавляется новый источник.
</Note>

<h2 id="certifying-it">
  Сертификация
</h2>

Индексная цена, которую выдаёт sidecar, — мнение одного валидатора. В то, по чему сеть может вести расчёты, она превращается уже в консенсусе.

Валидатор забирает цену из собственного sidecar и **проверяет её до подписи** — в том числе на свежесть относительно настроенного порога, так что зависший sidecar не отправляет устаревшую цену: он не отправляет ничего. Затем он подписывает данные о цене и рассылает их другим валидаторам через gossip как сообщение сети консенсуса.

Сертифицированные цены собираются по эпохам и раундам и переносятся в предложение блока. Поэтому подписи, фиксирующие транзакции блока, фиксируют и цены, по которым эти транзакции рассчитаны: отдельной оракульной транзакции нет, и нет окна между публикацией цены и её использованием.

**Валидатор не может предложить блок без валидных наблюдений цен за раунд.** Доступность цены — предусловие производства блока, а не входные данные, которые исполнение надеется найти.

<h2 id="index-price-and-mark-price">
  Индексная цена и маркировочная цена
</h2>

Сертифицированная цена — это **индексная цена**, взгляд сети на внешний рынок. Это не та цена, по которой исполняются сделки.

[Ядро](/ru/protocol/architecture/kernel) выводит из неё **маркировочную цену** — сглаженную и ограниченную, чтобы краткий сбой в индексе не обернулся каскадом ликвидаций. Именно маркировочная цена и используется в марже, ликвидации и расчёте финансирования. Взгляд со стороны торговли — см. [Маркировочная цена](/ru/trading/mark-price) и [Индексная цена](/ru/trading/index-price).

<h2 id="what-this-does-and-does-not-guarantee">
  Что это гарантирует и чего не гарантирует
</h2>

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

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

<Warning>
  Цена — самый весомый внешний вход торговой системы. Устойчивость к манипуляциям здесь — вопрос степени, а не бинарное свойство. Что остаётся уязвимым — см. [Раскрытие рисков](/ru/protocol/security/risks).
</Warning>

<h2 id="where-to-go-next">
  Что дальше
</h2>

<CardGroup cols={2}>
  <Card title="IntentionBFT" href="/ru/protocol/architecture/intention-bft">
    Как сертификация вшивается в те же подписи, что фиксируют блок.
  </Card>

  <Card title="Клиринговая палата" href="/ru/protocol/architecture/clearinghouse">
    Что маржа, ликвидация и расчёт финансирования делают с ценой.
  </Card>

  <Card title="Маркировочная цена" href="/ru/trading/mark-price">
    Как индекс превращается в число, которое двигает позиции.
  </Card>

  <Card title="Раскрытие рисков" href="/ru/protocol/security/risks">
    Где остаётся ценовой риск и во что он может обойтись.
  </Card>
</CardGroup>
