Aller au contenu

Oracle TWAP

Un oracle TWAP calcule une référence pondérée dans le temps à partir d’observations cumulées propres au protocole ; prix arithmétiques v2 et ticks moyens v3 diffèrent par leurs mathématiques et leurs limites.

Mis à jour

À des fins éducatives uniquement ; ne constitue ni un conseil en investissement ni une recommandation d’investissement. Les investissements peuvent entraîner des pertes.

Réponse directe

Un oracle de prix moyen pondéré dans le temps calcule une référence à partir d’observations cumulées sur un intervalle défini. Il n’existe pas de formule universelle. Uniswap v2 cumule le prix marginal linéaire du pool dans chaque sens ; les différences entre extrémités produisent donc des TWAP arithmétiques. Uniswap v3 cumule le tick, coordonnée logarithmique du prix ; le tick moyen arithmétique correspond ainsi à un prix relatif moyen géométrique.

Le résultat n’a de sens qu’après avoir fixé blockchain, pool, implémentation, niveau de frais, ordre des tokens, sens base/cotation, décimales, extrémités, durée, historique rempli et arrondi. Une lecture réussie ne prouve ni juste valeur ni profondeur exécutable. Une fenêtre plus longue dilue une brève distorsion mais accroît le retard et n’empêche ni manipulation prolongée, ni lacunes de liquidité concentrée, ni contrôle du proposant ou séquenceur, ni reorg, ni consommateur dont la valeur extractible dépasse le coût de manipulation.

Fraîcheur des observations et fraîcheur du marché sont distinctes. Une moyenne calculée maintenant peut conserver un ancien régime ; un pool actif peut rester peu liquide ou détaché des marchés externes. Le consommateur doit donc contrôler historique, liquidité et divergence, imposer des limites par action et définir un fonctionnement dégradé ou suspendu.

Fonctionnement

  1. Fixer blockchain et bloc, factory et adresse du pool, version et niveau de frais, token0 et token1, décimales, sens base/cotation, action, fenêtre et valeur exposée.
  2. Identifier l’objet cumulé et ses unités : price0Cumulative ou price1Cumulative linéaire v2, tickCumulative v3 ou autre statistique documentée. Ne pas transposer l’arithmétique.
  3. Vérifier horodatages, durée positive, plus ancien historique initialisé, cardinalité actuelle et règles contrefactuelles. observationCardinalityNext est une capacité cible, pas un historique déjà rempli.
  4. En v2, diviser la variation du prix cumulatif par les secondes et normaliser virgule fixe et décimales. Calculer chaque sens séparément ; le TWAP arithmétique inverse n’est généralement pas le réciproque du direct.
  5. En v3, appeler l’interface documentée, diviser la variation du tick par la fenêtre, arrondir un quotient négatif non exact vers moins l’infini comme OracleLibrary, puis convertir par price = 1.0001^tick.
  6. Mesurer liquidité in-range, harmonique, wide-range, par niveau et externe. Tester chemins sur un et plusieurs blocs, frais, arbitrage, ordonnancement, censure, perte de débouclage, reorg, retard et valeur extractible.
  7. Comparer TWAP, spot et références indépendantes sous des limites explicites ; surveiller historique, liquidité, upgrades et blockchain, puis tester historique insuffisant, divergence, pause, repli, liquidation et reprise.

Uniswap v2 conserve deux cumuls directionnels. Uniswap v3 stocke ses observations dans un tampon circulaire et peut interpoler ou construire un cumul courant contrefactuel. Ces extrémités sont une arithmétique valide, non la preuve d’une transaction à cet instant. Accroître la cardinalité réserve de l’espace futur sans remplir le passé.

Exemples détaillés

  • Prix cumulatif v2. Si C_start = 1,000,000 price-seconds, C_end = 1,360,000 price-seconds et elapsed = 3,600 seconds, alors TWAP = (1,360,000 - 1,000,000) / 3,600 = 100 quote/base. Extrémités, sens, échelle et horodatages font partie du résultat.
  • Piège du réciproque. Le prix direct vaut 100 pendant 900 seconds et 400 pendant 900 seconds, donc TWAP 250. Les spots inverses sont 0.01 et 0.0025, avec TWAP 0.00625, dont le réciproque est 160, pas 250. Moyenne et inversion ne commutent pas.
  • Tick moyen négatif. Soit tickCumulativeDelta = -39,601 sur 3,600 seconds. La division signée Solidity tronque à -11, mais l’auxiliaire v3 arrondit à meanTick = -12. Le prix géométrique relatif vaut 1.0001^-12 = 0.998800779636. Une erreur de signe ou d’arrondi biaise la cotation.
  • Dilution et retard. Le pool reste à 100 pendant 1,740 seconds et à 400 pendant 60 seconds dans une fenêtre de 1,800-second. TWAP arithmétique v2 : (100 * 1,740 + 400 * 60) / 1,800 = 110 ; moyenne géométrique v3 : 100^(29/30) * 400^(1/30) = 104.7294122821. Tous deux diffèrent du spot 400 ; aucun ne donne seul coût ou taille exécutable.

Risques

  • Blockchain, factory, pool, frais, implémentation ou upgrade incorrects.
  • Sens base/cotation ou token0/token1 inversé.
  • Décimales, virgule fixe ou normalisation erronées.
  • Prix arithmétique v2 et géométrique v3 confondus.
  • TWAP inverse calculé comme réciproque du direct.
  • Mauvaises extrémités, durée, fenêtre ou bloc courant.
  • Arithmétique temporelle nulle, négative ou spécifique mal gérée.
  • Historique demandé antérieur à la plus vieille observation initialisée.
  • observationCardinalityNext confondue avec observationCardinality remplie.
  • Observations interpolées ou contrefactuelles prises pour des trades.
  • Tick négatif arrondi vers zéro plutôt que moins l’infini.
  • Conversion, plage entière, overflow ou arrondi dangereux.
  • Liquidité active ou harmonique insuffisante pour l’exposition.
  • Profondeur wide-range absente, retirée ou ignorée.
  • Liquidité fragmentée entre pools, niveaux, blockchains ou marchés.
  • Fenêtre courte sensible à une manipulation atomique ou transitoire.
  • Fenêtre longue retardant revalorisation, depeg ou migration.
  • Proposant multibloc, séquenceur, censure, MEV ou reorg accroissent le contrôle.
  • TWAP pris pour juste valeur récente ou prix exécutable sans contrôle.
  • Exposition supérieure au coût de manipulation et reprise dangereuse.

Idées reçues

  • « TWAP signifie toujours moyenne arithmétique des prix. » v3 moyenne les ticks et produit un prix relatif moyen géométrique.
  • « La cotation inverse vaut toujours un divisé par le TWAP direct. » Cette symétrie ne vaut pas pour des prix linéaires moyennés séparément.
  • « Une fenêtre plus longue rend toute manipulation impossible. » Elle échange sensibilité brève contre retard et reste influençable par un contrôle prolongé.
  • « Augmenter la cardinalité crée immédiatement plus d’historique. » Cela accroît seulement la capacité future ; les observations doivent ensuite être initialisées.
  • « Une lecture récente prouve une juste valeur exécutable. » Le succès de l’interface ne prouve ni fraîcheur économique, ni profondeur, ni exposition sûre.

Sujets connexes

Sources

Navigation

Rechercher dans le wiki...