Только в образовательных целях; не является инвестиционным советом или инвестиционной рекомендацией. Инвестиции могут привести к убыткам.
Краткий ответ
Оракул средней взвешенной по времени цены получает ориентир из накопительных наблюдений за заданный интервал. Универсальной формулы нет. Uniswap v2 накапливает линейную предельную цену пула отдельно для каждого направления, поэтому разности конечных значений дают арифметические TWAP. Uniswap v3 накапливает тик — логарифмическую координату цены, поэтому средний арифметический тик преобразуется в среднюю геометрическую относительную цену.
Результат имеет смысл только после фиксации сети, пула, реализации, уровня комиссии, порядка токенов, направления база/котировка, разрядности, конечных точек, прошедшего времени, заполненной истории и округления. Успешное чтение не доказывает справедливую стоимость или исполнимую глубину. Более длинное окно ослабляет краткий выброс, но увеличивает задержку и не защищает от устойчивой манипуляции, разрывов концентрированной ликвидности, контроля производителя блоков или секвенсора, реорганизаций либо ситуации, когда извлекаемая у потребителя стоимость превышает цену атаки.
Свежесть наблюдений и свежесть рынка различаются. Рассчитанное сейчас среднее может намеренно сохранять старый ценовой режим, а активный пул может оставаться малоликвидным или оторванным от внешнего рынка. Поэтому потребителю нужны проверки истории, ликвидности и расхождения, ограничения для конкретных действий и явно заданный режим деградации или паузы.
Как это работает
- Зафиксируйте сеть и блок, фабрику и адрес пула, версию протокола и уровень комиссии,
token0иtoken1, разрядность, направление базы и котировки, действие потребителя, окно и стоимость под риском. - Определите накопленный объект и единицы: линейный
price0Cumulativeилиprice1Cumulativeв v2,tickCumulativeв v3 либо документированную статистику другого протокола. Не переносите арифметику между реализациями. - Проверьте метки времени конечных точек, положительное прошедшее время, самую старую инициализированную историю, текущий размер наблюдений и правила интерполяции или контрфактического расчета.
observationCardinalityNext— целевая емкость, а не уже заполненная история. - Для v2 разделите изменение накопительной цены на прошедшие секунды и нормализуйте формат с фиксированной точкой и разрядность токенов. Рассчитывайте каждое направление отдельно: обратный арифметический TWAP обычно не равен величине, обратной прямому TWAP.
- Для v3 вызовите документированный интерфейс наблюдений, разделите изменение накопительного тика на окно, округлите отрицательное нецелое частное к минус бесконечности, как делает
OracleLibrary, и преобразуйте средний тик в нормализованную котировку по формулеprice = 1.0001^tick. - Измерьте текущую ликвидность в диапазоне, гармоническую и широкодиапазонную ликвидность, уровень комиссии и внешнюю рыночную ликвидность. Проверьте одно- и многоблочные траектории, комиссии, арбитраж, порядок, цензуру, убыток обратной сделки, реорганизации, задержку и извлекаемую у потребителя стоимость.
- Сравните 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». Для отдельно усредненных линейных цен такой симметрии нет.
- «Длинное окно делает манипуляцию невозможной». Оно заменяет чувствительность к короткому искажению задержкой и остается уязвимым при устойчивом контроле или слабой ликвидности.
- «Увеличение размера наблюдений сразу создает больше истории». Оно лишь увеличивает будущую емкость; наблюдения должны быть инициализированы позже.
- «Свежий успешный ответ оракула доказывает справедливую и исполнимую рыночную цену». Успех интерфейса не доказывает экономическую свежесть, глубину, независимость или безопасность риска потребителя.
Похожие темы
Источники
- Uniswap v2 Core - Uniswap (дата обращения: 2026-08-13)
- Oracles - Uniswap Developers (дата обращения: 2026-08-13)
- Uniswap v3 Core - Uniswap (дата обращения: 2026-08-13)
- Price Oracles - Uniswap Developers (дата обращения: 2026-08-13)
- Oracle.sol - Uniswap v3 Core (дата обращения: 2026-08-13)
- OracleLibrary.sol - Uniswap v3 Periphery (дата обращения: 2026-08-13)
- Uniswap v3 TWAP Oracles in Proof of Stake - Uniswap Labs (дата обращения: 2026-08-13)
- SC03:2026 Price Oracle Manipulation - OWASP Smart Contract Security (дата обращения: 2026-08-13)