Les protocoles DeFi · 6 min · démo interactive
Uniswap et les AMM : la formule x·y=k en direct
Un AMM remplace les acheteurs et les vendeurs par une réserve et une multiplication. Déplace le curseur, exécute l'échange et suis le point sur la courbe.
L’idée en une phrase
Un AMM est un programme qui détient deux jetons et fixe leur prix tout seul, d'après les quantités qu'il a en réserve.
AMM signifie automated market maker, teneur de marché automatique. Sur une bourse classique, ton ordre rencontre celui d'une autre personne. Ici, tu échanges directement avec un smart contract. La règle la plus connue tient en une ligne : le produit des deux réserves, x·y, doit rester égal à une constante k.
La démo
Sans JavaScript, voici le calcul avec un pool fictif de 100 ETH et 300 000 USDC, soit un prix de départ illustratif de 3 000 USDC par ETH. Tu vends 10 ETH avec 0,3 % de frais. Tu reçois 300 000 × 9,97 / (100 + 9,97) = 27 198,33 USDC, soit 2 719,83 USDC par ETH. Le pool passe à 110 ETH et 272 801,67 USDC, et son prix à 2 480,02 USDC.
Pourquoi ça compte
Tu veux échanger des ETH contre un token ERC-20 à 3 h du matin, sans compte ni intermédiaire. Personne n'a besoin d'être en ligne en face de toi. Il suffit qu'un pool contienne ces deux jetons. Le contrat calcule ce que tu reçois, encaisse ce que tu envoies et te paie dans la même transaction.
Cette conception répond à une contrainte d'Ethereum. Un carnet d'ordres sur la chaîne demande une écriture payante pour chaque ordre placé, modifié ou annulé. Le coût en gas rend ce modèle pénible pour les teneurs de marché. Un AMM ne stocke que deux nombres et les met à jour à chaque échange. Uniswap, lancé en novembre 2018, a popularisé cette approche.
Le code
Voici le moteur de la démo. Change frais à 0 pour vérifier que k ne bouge plus du tout, ou double les réserves pour voir l'échange coûter moins cher.
Clique sur Lancer pour exécuter ce code dans ton navigateur.
Ce qui se passe vraiment
La courbe contient toutes les paires de réserves autorisées par le pool. Le point « Avant » indique l'état actuel. Pose le curseur sur 10 ETH et le point « Après » glisse vers la droite : il y a plus d'ETH dans le pool, moins d'USDC. La pente de la courbe à cet endroit donne le prix, y/x.
Le mécanisme est simple. Si tu ajoutes dx à x, y doit diminuer juste assez pour que le produit reste k. Sans frais, le pool te verse dy = y·dx / (x + dx). Avec des frais de 0,3 %, seule la part dx·0,997 entre dans le calcul : dy = y·dx·0,997 / (x + dx·0,997). C'est exactement la formule du contrat Uniswap v2, écrite avec les entiers 997 et 1000.
Trois chiffres méritent ton attention :
- Le prix du pool avant et ton prix moyen diffèrent. Tu paies toute la portion de courbe parcourue, pas son point de départ. Pour 10 ETH, tu reçois 2 719,83 USDC par ETH alors que le pool affichait 3 000. Ce glissement est détaillé dans l'article sur le slippage.
- Le prix du pool après est encore plus bas : 2 480,02 USDC. Ton échange a déplacé le marché de ce pool. Si le prix pratiqué ailleurs reste à 3 000, un arbitragiste rachètera ces ETH bon marché et ramènera le pool vers ce niveau.
- k monte légèrement. Les frais restent dans les réserves, ce qui fait passer k de 30 000 000 à environ 30 008 184. Ce surplus revient aux fournisseurs de liquidité.
La courbe ne touche jamais les axes. Quand une réserve s'approche de zéro, le prix tend vers l'infini : un pool ne peut donc pas être entièrement vidé par des échanges, il devient seulement de plus en plus cher. Essaie la vente à 50 ETH : tu ne récupères qu'environ 99 800 USDC, pas 150 000.
La démo simplifie deux points. Elle calcule en nombres décimaux, alors qu'un contrat travaille en entiers et arrondit toujours en faveur du pool. Et elle ignore le gas de la transaction.
Dans la vraie vie
Le pool ne connaît aucun prix extérieur. Il suit le marché uniquement parce que des arbitragistes corrigent ses écarts avec les autres places, en empochant la différence. Cette correction a un coût pour les fournisseurs de liquidité, qui déposent les deux jetons et reçoivent en échange une part du pool. Ce coût porte un nom : la perte impermanente.
Le modèle x·y=k a des variantes. Uniswap v3, lancé en mai 2021, permet de concentrer la liquidité sur une plage de prix, ce qui réduit l'impact pour une même somme déposée mais demande une gestion active. Curve utilise une courbe plus plate autour de la parité, adaptée aux paires de stablecoins. Les pools se distinguent aussi par leur niveau de frais : 0,3 % n'est pas universel.
Un AMM a un défaut structurel : sa liquidité se répartit sur tous les prix possibles, de zéro à l'infini. La plus grande partie du capital d'un pool x·y=k dort donc loin du prix actuel. C'est la raison d'être de la liquidité concentrée.
Ce qui peut mal tourner
- Faux jeton. N'importe qui peut créer un pool avec un token portant le nom d'un projet connu. Le nom ne prouve rien : seule l'adresse du contrat identifie un jeton.
- Retrait de la liquidité. Le créateur d'un pool peut retirer ses dépôts d'un coup. Les détenteurs du jeton n'ont alors plus de contrepartie, c'est le « rug pull ».
- Attaque sandwich. Ton échange est visible avant son exécution. Un robot peut acheter juste avant toi et revendre juste après, dans la limite de ta tolérance de prix.
- Jeton piégé. Un contrat de token peut autoriser l'achat et bloquer la vente pour tout le monde sauf son créateur. L'AMM exécute ce que le jeton permet, sans le juger.
- Prix du pool utilisé comme référence. Un protocole qui lit le prix instantané d'un pool peut être trompé : un gros échange le déplace le temps d'une transaction. C'est pourquoi on passe par un oracle robuste.
Teste-toi
Contenu éducatif. Pas un conseil en investissement. Les crypto-actifs comportent un risque de perte en capital. Pour la démarche éditoriale, voir à propos. Mise à jour : 31 octobre 2026.