Oracles : pourquoi la DeFi dépend des prix externes

Oracles push et pull, TWAP, manipulation de prix : comprendre d'où viennent les prix utilisés par la DeFi et ce que vous devez vérifier.

DeFi · Intermédiaire · 8 min de lecture · Publié le

L’essentiel

Le problème de l'oracle

Un smart contract est un programme qui s'exécute sur la blockchain de façon déterministe : tous les nœuds du réseau doivent obtenir exactement le même résultat. Pour cette raison, un contrat ne peut pas aller lui-même chercher une information sur Internet, comme le cours de l'ETH sur une plateforme d'échange. Deux nœuds qui interrogeraient un site à deux instants différents n'obtiendraient pas la même réponse.

Pourtant, la plupart des applications DeFi ont besoin de prix :

  • Un protocole de prêt doit savoir si la garantie d'un emprunteur couvre encore sa dette, et le liquider sinon.
  • Un stablecoin garanti par des cryptos doit évaluer ses garanties.
  • Une plateforme de contrats perpétuels doit calculer les gains, les pertes et les liquidations.

Un oracle est le mécanisme qui publie sur la blockchain une donnée venue de l'extérieur, le plus souvent un prix. C'est ce qu'on appelle le « problème de l'oracle » : la sécurité d'un protocole ne peut pas être meilleure que celle de la donnée qu'il reçoit. Vous pouvez avoir un contrat audité sans aucune faille ; si on lui donne un faux prix, il agira correctement sur une information fausse.

Les grandes familles d'oracles

Les oracles push : le prix est publié en continu

Dans le modèle push, un réseau d'opérateurs publie régulièrement le prix sur la blockchain, que quelqu'un en ait besoin ou non. Les contrats n'ont plus qu'à lire la dernière valeur enregistrée.

Chainlink Data Feeds en est l'illustration la plus connue. Selon sa documentation :

  • plusieurs opérateurs de nœuds indépendants fournissent des données, qui sont agrégées puis publiées on-chain ;
  • une mise à jour est déclenchée quand le prix s'écarte au-delà d'un seuil défini (deviation threshold) ;
  • ou quand un délai maximal s'est écoulé sans mise à jour (heartbeat), même si le prix a peu bougé.

Conséquence : entre deux mises à jour, le prix lu par le contrat peut légèrement différer du marché. C'est un choix de conception, car chaque publication coûte des frais de gas.

Les oracles pull : le prix est apporté à la demande

Dans le modèle pull, le prix est signé hors chaîne à haute fréquence, et n'est écrit sur la blockchain que lorsqu'une application en a besoin. C'est généralement l'utilisateur ou l'application qui inclut la mise à jour dans sa transaction et en paie le coût.

La documentation de Pyth Network explique que les oracles pull ne mettent à jour le prix on-chain que lorsqu'il est demandé, que n'importe qui peut soumettre une mise à jour (le contrat vérifie qu'elle est authentique), et que ce modèle permet une fréquence bien plus élevée : Pyth indique des mises à jour toutes les 400 millisecondes hors chaîne.

ModèleQui publie le prixPoint d'attention
PushLe réseau d'oracles, en continuPrix potentiellement en retard entre deux mises à jour
PullL'utilisateur ou l'app, à la demandeL'application doit bien exiger un prix récent

Aucun modèle n'est supérieur en soi. Ce qui compte, c'est la façon dont le protocole l'intègre.

Les oracles on-chain : le TWAP

Une troisième approche consiste à lire le prix directement dans une pool de DEX. Lire le prix instantané d'une pool est dangereux : un acteur peut le déplacer fortement avec un gros swap, parfois financé par un prêt éclair (flash loan, un prêt emprunté et remboursé dans la même transaction).

D'où le TWAP (time-weighted average price), le prix moyen pondéré par le temps. La documentation d'Uniswap explique que les pools v3 enregistrent un historique d'observations, et qu'en comparant deux observations on obtient un prix moyen sur la période choisie. Pour fausser un TWAP sur une longue fenêtre, il faut maintenir un prix artificiel pendant longtemps, ce qui coûte beaucoup plus cher qu'un seul swap.

Limites : un TWAP est en retard par construction (il reflète le passé), et il reste manipulable si la pool est peu liquide ou si la fenêtre est courte.

Comment un oracle peut échouer

Les risques se classent en quelques catégories :

  • Prix périmé (stale) : l'oracle n'a pas été mis à jour depuis longtemps. La documentation de Chainlink recommande aux développeurs de vérifier l'horodatage (updatedAt) pour s'assurer que la valeur est assez récente.
  • Volatilité extrême : le prix sort des bornes raisonnables prévues. Chainlink conseille aussi de surveiller les valeurs minimales et maximales.
  • Panne d'infrastructure : retards ou indisponibilité des nœuds, ou du séquenceur sur un layer 2. Pour ce dernier cas, Chainlink propose des flux indiquant si le séquenceur fonctionne, afin de laisser un délai de grâce et d'éviter des liquidations en masse.
  • Manipulation de la source : si l'oracle agrège des marchés peu liquides, il suffit de manipuler ces marchés pour tromper l'oracle, même si l'oracle lui-même fonctionne parfaitement.

Ce dernier cas est le plus instructif.

Exemple concret : Mango Markets, octobre 2022

Mango Markets était une plateforme d'échange décentralisée sur Solana proposant notamment des contrats perpétuels. Selon la CFTC, l'autorité américaine des marchés dérivés, voici ce qui s'est passé le 11 octobre 2022 :

  1. Un trader a ouvert, via deux comptes, des positions à levier sur des contrats MNGO/USDC, MNGO étant le token de gouvernance de la plateforme.
  2. Il a ensuite acheté rapidement de grandes quantités de MNGO sur trois plateformes d'échange qui alimentaient l'oracle de prix utilisé par Mango Markets.
  3. D'après l'oracle, le prix du MNGO a été multiplié par plus de 13 en l'espace de 30 minutes.
  4. La valeur de ses positions ayant artificiellement gonflé, il s'en est servi comme garantie pour emprunter et retirer plus de 110 millions de dollars d'actifs de la plateforme.

La CFTC indique qu'environ 67 millions de dollars ont ensuite été restitués. Dans son communiqué de janvier 2023, elle présente ce dossier comme sa première action concernant un schéma qualifié de « manipulation d'oracle ». Il s'agit des allégations de l'autorité, formulées dans le cadre de sa procédure.

Ce qu'il faut retenir techniquement : l'oracle a bien transmis le prix des marchés qu'il observait. Le problème venait du fait que ces marchés étaient suffisamment peu liquides pour être déplacés par un seul acteur, et que le protocole acceptait ce token comme garantie pour emprunter d'autres actifs.

Ce que vous pouvez vérifier en tant qu'utilisateur

Vous n'écrivez pas les contrats, mais vous choisissez où déposer vos fonds. Avant d'utiliser un protocole de prêt, de perps ou un stablecoin :

  • Quelle source de prix ? La documentation doit indiquer quel oracle est utilisé pour chaque actif (réseau d'oracles, pull, TWAP, prix interne).
  • Quelle liquidité derrière ? Un actif peu échangé est plus facile à manipuler. Méfiez-vous des marchés où un petit token sert de garantie avec de gros plafonds d'emprunt.
  • Y a-t-il des garde-fous ? Plafonds de dépôt ou d'emprunt par actif, bornes de prix, vérification de fraîcheur, délai de grâce en cas de panne du séquenceur.
  • Quel prix pour les liquidations ? Sur les perps, le prix de marque (souvent issu d'un oracle) peut différer du dernier prix échangé. Sachez lequel déclenche votre liquidation.
  • Historique d'incidents : le protocole a-t-il déjà subi une manipulation d'oracle, et qu'a-t-il changé ensuite ?
  • Audits : les rapports mentionnent-ils l'intégration des oracles ?

Les erreurs à éviter

  • Supposer que le prix affiché est celui du contrat. L'interface peut montrer un prix de marché alors que le contrat utilise un prix d'oracle légèrement différent.
  • Emprunter au ras du seuil de liquidation. Un décalage de quelques secondes ou un pic ponctuel suffisent à déclencher une liquidation. Gardez une marge.
  • Déposer dans un marché exotique pour le rendement. Les marchés isolés sur des tokens peu liquides concentrent le risque de manipulation.
  • Ignorer les pannes de layer 2. Pendant une interruption du séquenceur, vous ne pouvez parfois pas ajuster votre position alors que les prix bougent.
  • Croire qu'un audit couvre tout. Un contrat sans bug peut être vidé si son oracle lit un marché manipulable.

Ce guide est une information générale et ne constitue ni un conseil en investissement, ni un conseil juridique ou fiscal.

À retenir

  • Une blockchain ne peut pas lire seule un prix externe : les oracles le lui transmettent, et la sécurité de la DeFi en dépend.
  • Les oracles push publient en continu selon un seuil d'écart ou un délai maximal ; les oracles pull apportent le prix à la demande, dans la transaction.
  • Le TWAP lisse les manipulations ponctuelles en moyennant le prix sur une période, au prix d'un certain retard.
  • Mango Markets (octobre 2022) montre qu'un oracle fidèle peut transmettre un prix manipulé si ses marchés sources sont peu liquides.
  • Avant de déposer, vérifiez la source de prix, la liquidité des actifs acceptés, les garde-fous et votre marge avant liquidation.

Sources

Comparer les services liés à ce sujet