Перейти к содержанию

Оракул TWAP

Оракул TWAP выводит взвешенный по времени ориентир из накопительных наблюдений конкретного протокола; арифметические цены v2 и средние тики v3 имеют разные математические, исторические, ликвидностные и манипуляционные границы.

Обновлено

Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.

Краткий ответ

Оракул средней взвешенной по времени цены получает ориентир из накопительных наблюдений за заданный интервал. Универсальной формулы нет. Uniswap v2 накапливает линейную предельную цену пула отдельно для каждого направления, поэтому разности конечных значений дают арифметические TWAP. Uniswap v3 накапливает тик — логарифмическую координату цены, поэтому средний арифметический тик преобразуется в среднюю геометрическую относительную цену.

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

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

Как это работает

  1. Зафиксируйте сеть и блок, фабрику и адрес пула, версию протокола и уровень комиссии, token0 и token1, разрядность, направление базы и котировки, действие потребителя, окно и стоимость под риском.
  2. Определите накопленный объект и единицы: линейный price0Cumulative или price1Cumulative в v2, tickCumulative в v3 либо документированную статистику другого протокола. Не переносите арифметику между реализациями.
  3. Проверьте метки времени конечных точек, положительное прошедшее время, самую старую инициализированную историю, текущий размер наблюдений и правила интерполяции или контрфактического расчета. observationCardinalityNext — целевая емкость, а не уже заполненная история.
  4. Для v2 разделите изменение накопительной цены на прошедшие секунды и нормализуйте формат с фиксированной точкой и разрядность токенов. Рассчитывайте каждое направление отдельно: обратный арифметический TWAP обычно не равен величине, обратной прямому TWAP.
  5. Для v3 вызовите документированный интерфейс наблюдений, разделите изменение накопительного тика на окно, округлите отрицательное нецелое частное к минус бесконечности, как делает OracleLibrary, и преобразуйте средний тик в нормализованную котировку по формуле price = 1.0001^tick.
  6. Измерьте текущую ликвидность в диапазоне, гармоническую и широкодиапазонную ликвидность, уровень комиссии и внешнюю рыночную ликвидность. Проверьте одно- и многоблочные траектории, комиссии, арбитраж, порядок, цензуру, убыток обратной сделки, реорганизации, задержку и извлекаемую у потребителя стоимость.
  7. Сравните TWAP со спотом и независимыми ориентирами по явным границам свежести и отклонения; контролируйте историю, диапазоны ликвидности, обновления пула и состояние сети, а также отработайте нехватку истории, расхождение, паузу, резерв, ликвидацию и восстановление.

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

Разобранные примеры

  • Накопительная цена v2. Если C_start = 1,000,000 price-seconds, C_end = 1,360,000 price-seconds, а elapsed = 3,600 seconds, то TWAP = (1,360,000 - 1,000,000) / 3,600 = 100 quote/base. Конечные точки, направление, масштаб и метки времени являются частью результата.
  • Ловушка обратной величины. Прямая цена равна 100 в течение 900 seconds, затем 400 в течение 900 seconds, поэтому ее арифметический TWAP равен 250. Обратные спотовые цены — 0.01 и 0.0025; их арифметический TWAP равен 0.00625, а его обратная величина — 160, не 250. Усреднение и обращение не перестановочны.
  • Отрицательный средний тик. Пусть tickCumulativeDelta = -39,601 за 3,600 seconds. Знаковое деление Solidity усекает результат до -11 с остатком, но библиотека v3 округляет вниз до meanTick = -12. Относительная геометрическая цена равна 1.0001^-12 = 0.998800779636. Ошибка знака или округления систематически искажает сторону котировки.
  • Разбавление и задержка. Пул находится на уровне 100 в течение 1,740 seconds и на уровне 400 в течение 60 seconds в окне 1,800-second. Арифметический TWAP в стиле v2 равен (100 * 1,740 + 400 * 60) / 1,800 = 110, геометрическое среднее в стиле v3 — 100^(29/30) * 400^(1/30) = 104.7294122821. Оба отличаются от текущего спота 400 и друг от друга; ни одно значение само по себе не задает цену манипуляции или исполнимый объем.

Риски

  • Неверная сеть, фабрика, пул, уровень комиссии, реализация или состояние обновления.
  • Обратное направление базы и котировки либо token0 и token1.
  • Ошибка разрядности токена, масштаба с фиксированной точкой или нормализации котировки.
  • Арифметическая цена v2 и геометрическая цена v3 считаются одной статистикой.
  • Обратный арифметический TWAP считается обратной величиной прямого TWAP.
  • Используются неверные накопительные конечные точки, время, граница окна или текущий блок.
  • Неверно обработаны нулевые, отрицательные, переполненные или специфичные для реализации метки времени.
  • Запрошенная история старше самого старого инициализированного наблюдения.
  • observationCardinalityNext ошибочно считается заполненным observationCardinality.
  • Интерполированное или контрфактическое наблюдение принимается за фактическую сделку.
  • Отрицательный средний тик округляется к нулю, а не к минус бесконечности.
  • Преобразование тика, диапазон целого, переполнение или округление котировки небезопасны.
  • Активная ликвидность в диапазоне или гармоническая ликвидность мала для защищаемого риска.
  • Широкодиапазонная глубина отсутствует, удалена или не учтена при анализе атаки.
  • Ликвидность раздроблена между пулами, уровнями комиссий, сетями или коррелированными площадками.
  • Короткое окно чувствительно к одноблочной, атомарной или кратковременной манипуляции.
  • Длинное окно отстает от настоящей переоценки, потери привязки или миграции ликвидности.
  • Многоблочный производитель, секвенсор, цензура, перегрузка, MEV или реорганизация уменьшают коррекцию или усиливают контроль.
  • TWAP считается свежей справедливой стоимостью или ценой исполнения для любого объема без проверки расхождения и глубины.
  • Риск потребителя превышает стоимость атаки, а резерв, предохранитель, пауза, ликвидация или восстановление небезопасны.

Распространенные заблуждения

  • «TWAP всегда означает арифметическое среднее цен». v3 усредняет тик и поэтому получает среднюю геометрическую относительную цену.
  • «Обратная котировка всегда равна единице, деленной на прямой TWAP». Для отдельно усредненных линейных цен такой симметрии нет.
  • «Длинное окно делает манипуляцию невозможной». Оно заменяет чувствительность к короткому искажению задержкой и остается уязвимым при устойчивом контроле или слабой ликвидности.
  • «Увеличение размера наблюдений сразу создает больше истории». Оно лишь увеличивает будущую емкость; наблюдения должны быть инициализированы позже.
  • «Свежий успешный ответ оракула доказывает справедливую и исполнимую рыночную цену». Успех интерфейса не доказывает экономическую свежесть, глубину, независимость или безопасность риска потребителя.

Похожие темы

Источники

Навигация

Поиск по вики...