Skip to content

Latest commit

 

History

History
38 lines (21 loc) · 4.55 KB

twap.md

File metadata and controls

38 lines (21 loc) · 4.55 KB

Uniswap TWAP vs oracle

Автор: Павел Найданов 🕵️‍♂️

Оракул или ценовой оракул - это инструмент для просмотра стоимости активов. Оракул агрегирует off-chain данные с нескольких источников и решает проблему безопасной поставки данных внутрь блокчейн сети. Использовать такие данные могут децентрализованные биржи, landing протоколы и другие DApp. Сами данные могут быть разными: средняя стоимость актива, балансы адресов, прогнозы и тому подобное.

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

Поэтому UniswapV2 предложил разработчикам смарт-контрактов альтернативу оракулам в виде TWAP для создания безопасных и децентрализованных приложений.

Опр! TWAP(Time-Weighted Average Price) - это средневзвешенная стоимость актива за определенный промежуток времени. Стоимость вычисляется путем фиксации стоимости на определенных интервалах времени и вычисления простой средней стоимости актива без учета объема операций(продажи или покупки актива).

Важно! Речь идет именно о средневзвешенной стоимости актива. Если использовать стоимость последнего обмена или стоимость предстоящего обмена на Uniswap велика вероятность того, что стоимость актива в моменте может сильно отличаться от средней стоимости. Плюс такой стоимостью достаточно легко манипулировать. Необходимо просто совершить обмен на сумму, которая будет значительно влиять на пул ликвидности.

Как TWAP работает?

Uniswap считает и сохраняет cumulative price в конце блока. Cumulative price - средняя стоимость актива в каждую секунду за всю историю жизни контракта пары на Uniswap. Ниже на схеме разобрано, как посчитать cumulative price.

Cumulative price считается по формуле:

priceCumulative = lastPriceCumulative + currentPrice * timeElapsed

lastPriceCumulative - cumulative price прошлого блока currentPrice - средняя стоимость актива в рамках текущего блока timeElapsed - время между окончанием прошлого блока и началом текущего

Дальше, такой cumulative price может использоваться сторонними контрактами для отслеживания средневзвешенной по времени стоимости актива за любой временной интервал. Ниже на схеме изображено, как считается сам TWAP.

Это довольно просто. От cumulative price конечного блока отнимается cumulative price начального блока и делиться на разницу timestamp этих блоков.

С примером использования Uniswap TWAP можно ознакомиться тут.

Links

  1. Uniswap docs