Série DeFi n°1 : Comprendre intuitivement les teneurs de marché automatisés (AMM)

November 14, 2024 17 mins to read
Share

La finance décentralisée (DeFi) a révolutionné le paysage financier en proposant des alternatives ouvertes, transparentes et inclusives aux systèmes centralisés traditionnels. L’une des principales innovations de la DeFi est celle des teneurs de marché automatisés (AMM), qui ont transformé la façon dont les utilisateurs négocient et fournissent des liquidités sur les échanges décentralisés. Dans cet article de blog, nous explorerons le concept des AMM, leur fonctionnement et leur importance dans le monde des échanges décentralisés.

DeFi

1. Les échanges décentralisés et la nécessité des AMM

Les échanges décentralisés (DEX) ont gagné en popularité dans le domaine des crypto-monnaies en raison de leur capacité à faciliter les échanges entre pairs sans avoir recours à des intermédiaires. Contrairement aux échanges centralisés, qui obligent les utilisateurs à déposer des fonds et à faire confiance à une autorité centrale, les DEX permettent aux utilisateurs de conserver le contrôle de leurs actifs et de négocier directement avec d’autres participants.

Cependant, les DEX sont confrontés à des défis pour maintenir la liquidité et offrir des expériences de trading efficaces. Les bourses traditionnelles basées sur un carnet d’ordres exigent que les acheteurs et les vendeurs fassent correspondre leurs ordres, ce qui peut entraîner une fragmentation de la liquidité et des délais d’exécution plus lents. C’est là que les teneurs de marché automatisés (AMM) entrent en jeu.

Les AMM répondent aux défis de liquidité des DEX en utilisant des formules algorithmiques pour déterminer les prix des actifs et faciliter les échanges par rapport aux pools de liquidité. Les fournisseurs de liquidité apportent leurs actifs à ces pools et, en retour, ils perçoivent des commissions en fonction de leur part proportionnelle du pool total. Les AMM éliminent le besoin de carnets d’ordres et permettent un apport continu de liquidités, améliorant ainsi les expériences de trading sur les plateformes décentralisées.

Pour approfondir les échanges décentralisés et leur besoin d’AMM, vous pouvez vous référer aux ressources suivantes :

2. Concevoir des AMM : concepts et composants clés

2.1 Pools de liquidité :

Les AMM s’appuient sur des pools de liquidité, qui sont des réserves de jetons que les utilisateurs contribuent à permettre le trading. Les fournisseurs de liquidité déposent des valeurs égales de deux jetons différents dans le pool pour établir une paire de trading. Par exemple, un pool de liquidité peut être composé de jetons ETH et DAI. Ces fournisseurs de liquidité perçoivent des commissions pour leur contribution à la liquidité du pool et sont récompensés en fonction de leur part proportionnelle du pool total.

DeFi

Illustration du pool de liquidités et des transactions de l’AMM

Pour en savoir plus sur les pools de liquidité et leur rôle dans les AMM, vous pouvez vous référer aux ressources suivantes :

2.2 Algorithmes de détermination des prix :

Les AMM utilisent des formules mathématiques pour déterminer les prix des actifs au sein des pools de liquidité. Le modèle le plus utilisé est le modèle Constant Product Market Maker (CPMM) . Selon ce modèle, le produit des soldes de réserve des deux jetons dans un pool de liquidité reste constant. En d’autres termes, pour une paire de trading avec des réserves x et y, la formule x * y = k est vraie. Cette relation permet à l’algorithme de calculer les prix en fonction de la liquidité disponible dans le pool. Examinons cela en détail dans la section suivante.

3. Mathématiques AMM : Modèle de teneur de marché à produit constant

Examinons l’aspect mathématique du modèle CPMM (Constant Product Market Maker) . Ce modèle constitue la base des AMM populaires comme Uniswap.

3.1 Explication de la formule x * y = k

Dans le modèle Constant Product Market Maker, la relation entre les quantités de deux jetons dans un pool de liquidité est définie par la formule x * y = k. Décomposons la formule :

  • xreprésente la quantité du premier jeton dans le pool.
  • yreprésente la quantité du deuxième jeton dans le pool.
  • kest une valeur constante qui reste la même pour toutes les transactions du pool.

La formule implique que le produit de xet yest toujours égal à k. Par conséquent, lorsque le solde d’un jeton augmente, le solde de l’autre jeton doit diminuer pour maintenir le produit constant. Cette propriété garantit que le prix de chaque jeton s’ajuste en fonction de l’offre et de la demande au sein du pool.

3.2 Comprendre les implications des teneurs de marché à produit constant

Le modèle de teneur de marché à produit constant a plusieurs implications :

  • Impact sur le prix : lorsqu’une transaction a lieu, la quantité d’un jeton dans le pool change, ce qui entraîne une modification du produit constant k. Ce changement entraîne un ajustement du prix du jeton échangé par rapport à l’autre jeton du pool. Plus la transaction est importante, plus l’impact sur le prix est important, car le produit constant doit être maintenu.
  • Fourniture de liquidités : les fournisseurs de liquidités contribuent à hauteur de la même valeur des deux jetons pour établir une paire de trading dans le pool de liquidités. Au fur et à mesure que les traders exécutent des transactions, les fournisseurs de liquidités perçoivent des commissions proportionnelles à leur part du pool total. Cela encourage la fourniture de liquidités et garantit que le pool reste suffisamment financé pour les transactions.

Pour visualiser le modèle Constant Product Market Maker, considérez l’exemple suivant :

Supposons que nous ayons un pool de liquidité avec un jeton A et un jeton B. Initialement, le pool contient 100 jetons de A et 200 jetons de B. Le produit constant kest donc 100 * 200 = 20 000.

Si un trader souhaite échanger 10 jetons de A contre le jeton B, les nouvelles quantités seraient x = 90 (100 initiaux — 10 échangés) et y = 200 + ? (quantité résultante de B). En utilisant la formule x * y = k, nous pouvons résoudre pour y:

90 * y = 20 000 ans = 20 000 / 90 ans ≈ 222,22

En conséquence, le trader recevra environ 222,22 jetons de B pour les 10 jetons de A, ce qui représente l’impact sur le prix causé par la transaction.

Formule du produit constant

Voici un exemple de code dans Solidity :

Pour une explication plus détaillée des algorithmes de détermination des prix dans les AMM, vous pouvez vous référer aux ressources suivantes :

4. Considérations de sécurité pour les AMM

Les développeurs d’AMM doivent donner la priorité à la sécurité pour protéger les fonds des utilisateurs et garantir l’intégrité de leurs échanges décentralisés. En suivant les meilleures pratiques et en mettant en œuvre des mesures de sécurité robustes, les développeurs peuvent minimiser le risque de vulnérabilités et d’attaques potentielles. Dans cette section, nous aborderons les principales considérations de sécurité pour les AMM et fournirons des conseils pour garantir la sécurité des contrats intelligents.

4.1 Bonnes pratiques pour le développement de contrats intelligents

Lors du développement de contrats intelligents pour les AMM, il est essentiel de suivre les meilleures pratiques établies pour réduire le risque de vulnérabilités. Voici quelques considérations de sécurité essentielles :

Validation des entrées :

Assurez une validation appropriée des entrées pour empêcher les utilisateurs malveillants d’exploiter les vulnérabilités. Validez les entrées utilisateur, y compris les montants des jetons, les paramètres d’échange et les arguments de fonction, pour éviter tout comportement inattendu ou toute exploitation potentielle.

Protection contre la réentrée :

Implémentez des protections de réentrée pour empêcher les attaques de réentrée. Utilisez le modèle « Vérifications-Effets-Interactions » et assurez-vous que les appels de contrat externes sont effectués à la fin de la fonction après la mise à jour de l’état du contrat.

Mises à niveau des contrats sécurisés :

Envisagez de mettre en œuvre des modèles de contrat évolutifs, tels que l’utilisation de contrats proxy ou l’utilisation de cadres de mise à niveau des contrats tels que les plugins de mise à niveau d’OpenZeppelin. Cela permet des mises à niveau futures tout en préservant la sécurité et l’intégrité de la logique du contrat.

4.2 Stratégies d’audit et de test

Il est essentiel de réaliser des audits de sécurité et des tests complets pour identifier et atténuer les vulnérabilités potentielles des contrats intelligents AMM. Voici quelques stratégies recommandées :

Audits de sécurité par des tiers :

Faites appel à des sociétés d’audit de sécurité tierces réputées pour effectuer des analyses de code et des évaluations de sécurité approfondies des contrats intelligents. Leur expertise peut aider à identifier les vulnérabilités potentielles et à fournir des recommandations d’amélioration.

Suites de tests :

Utilisez des frameworks de test comme Truffle ou Hardhat pour écrire et exécuter des tests unitaires, des tests d’intégration et des tests fonctionnels. Testez différents scénarios, cas extrêmes et vecteurs d’attaque possibles pour garantir la robustesse et la sécurité de l’implémentation AMM.

Tests de stress :

Effectuez des tests de résistance pour évaluer les performances et la résilience du contrat intelligent AMM sous des charges élevées et des conditions inattendues. Simulez des volumes de transactions importants, des transactions simultanées et des scénarios contradictoires pour identifier les goulots d’étranglement ou les vulnérabilités potentiels.

4.3 Atténuation des risques et gestion des attaques

Les AMM peuvent être la cible de diverses attaques et il est essentiel de mettre en œuvre des mesures pour atténuer ces risques. Voici quelques stratégies pour gérer les attaques courantes :

Attaques de prêts éclair :

Les attaques de type « flash loan » consistent à exploiter l’accès temporaire à un prêt au sein d’une transaction unique pour manipuler les prix ou exploiter les déséquilibres de liquidité. Pour atténuer ce risque, envisagez de mettre en œuvre des prix moyens pondérés dans le temps (TWAP) ou d’autres mécanismes basés sur des oracles pour empêcher toute manipulation soudaine des prix au sein d’une transaction unique.

En tête :

Les attaques de front-running impliquent la manipulation des ordres de transaction pour obtenir un avantage déloyal, en particulier dans les situations où l’attaquant peut profiter des variations de prix causées par ses propres transactions. La mise en œuvre de mécanismes tels que des services de commande de transactions ou des échanges décentralisés qui privilégient un séquençage équitable des transactions peut aider à minimiser l’impact du front-running.

Manipulation des oracles :

Assurez-vous que les oracles utilisés pour récupérer les flux de prix externes ou d’autres données hors chaîne sont fiables et sécurisés. Envisagez d’utiliser des solutions Oracle décentralisées ou réputées pour minimiser le risque d’attaques de manipulation Oracle qui pourraient affecter les déterminations de prix au sein de l’AMM.

5. Concepts avancés et améliorations

Les teneurs de marché automatisés (AMM) ont évolué depuis leur création, ce qui a donné lieu à plusieurs concepts et améliorations avancés qui améliorent leur fonctionnalité et leur facilité d’utilisation au sein de l’écosystème DeFi. Dans cette section, nous explorerons certaines de ces avancées.

5.1 Intégration avec d’autres protocoles DeFi

Les AMM peuvent être intégrés à d’autres protocoles de finance décentralisée (DeFi), ouvrant ainsi de nouvelles possibilités et créant des applications financières plus complexes. Par exemple, l’intégration d’un AMM à des protocoles de prêt et d’emprunt permet aux utilisateurs d’échanger des jetons et d’emprunter ou de prêter des actifs de manière transparente au sein d’une seule plateforme. Cette intégration fournit de la liquidité aux marchés de prêt et d’emprunt, permettant une utilisation efficace du capital et améliorant l’expérience globale de la DeFi.

De plus, l’intégration de l’AMM avec des stratégies de yield farming permet aux utilisateurs d’optimiser leurs rendements en fournissant des liquidités à différents pools tout en gagnant simultanément des récompenses supplémentaires. En combinant les AMM avec d’autres protocoles DeFi, les développeurs peuvent créer des solutions financières innovantes et complètes.

5.2 Solutions de mise à l’échelle de la couche 2

L’un des défis auxquels sont confrontés les AMM sur Ethereum est l’évolutivité et les coûts de transaction élevés dus à la congestion du réseau. Les solutions de mise à l’échelle de couche 2 offrent des solutions potentielles à ces problèmes en déplaçant certaines des exigences de calcul et de stockage hors du réseau Ethereum principal.

Les rollups optimistes et les sidechains sont des solutions de mise à l’échelle de couche 2 populaires qui permettent le calcul hors chaîne tout en garantissant la finalité et la sécurité des transactions sur le réseau principal Ethereum. En utilisant des solutions de mise à l’échelle de couche 2, les AMM peuvent réduire considérablement les coûts de transaction, améliorer la vitesse des transactions et améliorer l’expérience utilisateur.

5.3 Optimisations et techniques d’efficacité du gaz

Les coûts du gaz sur le réseau Ethereum peuvent constituer un obstacle à l’adoption des AMM. Les optimisations et les techniques d’efficacité du gaz permettent d’atténuer ce défi et d’améliorer l’efficacité globale des implémentations AMM.

L’une des techniques d’optimisation consiste à effectuer des échanges groupés, où plusieurs échanges de jetons sont regroupés en une seule transaction, réduisant ainsi le nombre de transactions individuelles et minimisant les coûts de gaz. En exécutant plusieurs échanges en une seule transaction, les utilisateurs peuvent économiser sur les frais de gaz et améliorer l’efficacité de leurs activités de trading.

En outre, la conception de contrats intelligents à faible consommation de gaz peut contribuer à une meilleure utilisation des ressources informatiques. Des techniques telles que la minimisation des opérations de stockage, l’optimisation des structures de données et l’exploitation de mécanismes de mise en cache au niveau du contrat ou du système peuvent contribuer à réduire les coûts de gaz et à améliorer les performances des contrats AMM.

En intégrant ces optimisations et techniques d’efficacité du gaz, les développeurs peuvent améliorer l’efficacité globale et la rentabilité des AMM, les rendant plus accessibles et plus conviviaux.

6. Études de cas et implémentations AMM existantes

6.1 Uniswap :

Une plongée en profondeur dans les contrats intelligents : Uniswap est l’un des AMM les plus populaires et les plus utilisés. Il fonctionne sur la blockchain Ethereum et a joué un rôle important dans le façonnement du paysage DeFi. Pour comprendre les contrats intelligents d’Uniswap, nous explorerons son architecture, ses fonctions clés et ses mécanismes d’échange de jetons.

Architecture d’Uniswap : Uniswap se compose d’une série de contrats intelligents qui fonctionnent ensemble pour faciliter le trading décentralisé. Les contrats clés incluent le contrat Factory, qui déploie des contrats Exchange individuels pour chaque paire de trading, et le contrat Exchange, qui gère les échanges de jetons et gère les pools de liquidité.

Fonctions principales : Le contrat Exchange expose diverses fonctions permettant d’interagir avec les pools de liquidité, telles que l’ajout de liquidité, la suppression de liquidité et l’exécution d’échanges de jetons. La fonction addLiquidity permet aux utilisateurs de déposer des jetons dans le pool de liquidité, tandis que la fonction removeLiquidity permet aux utilisateurs de retirer leur part de liquidité.

Mécanismes d’échange de jetons : la fonctionnalité principale d’Uniswap s’articule autour de l’échange de jetons. La fonction d’échange permet aux utilisateurs d’échanger un jeton contre un autre en spécifiant les jetons d’entrée et de sortie, ainsi que le montant de l’échange souhaité. Uniswap utilise une formule mathématique basée sur le modèle de teneur de marché à produit constant pour déterminer l’exécution de la transaction et ajuster les prix des jetons en conséquence.

Extrait de code :

// Contrat d'usine Uniswap 
contrat UniswapFactory { 
    address[] public exchanges; 
function createExchange(address token) external returns (address) { 
        // Code pour déployer le contrat Exchange et l'ajouter au tableau des échanges 
    } 
} 
// Contrat d'échange Uniswap 
contrat UniswapExchange { 
    function addLiquidity(uint256 minLiquidity, uint256 maxTokens) external payable returns (uint256); 
    function removeLiquidity(uint256 amount, uint256 minTokens) external returns (uint256, uint256); 
    function tokenToTokenSwapInput(uint256 tokensSold, uint256 minTokensBought, uint256 minEthBought, uint256 deadline, address tokenAddress) external returns (uint256); 
}

Links:

6.2 SushiSwap :

Forks et innovations : SushiSwap est un exemple notable d’AMM communautaire qui est né d’un fork d’Uniswap. Cependant, SushiSwap a introduit des fonctionnalités innovantes pour inciter les fournisseurs de liquidités et améliorer les fonctionnalités du protocole.

Caractéristiques de SushiSwap : SushiSwap a introduit deux fonctionnalités principales : le yield farming et la migration de tokens. Le yield farming permet aux utilisateurs de staker leurs tokens de pool de liquidité et de gagner des récompenses supplémentaires sous la forme de tokens SUSHI, le token natif de SushiSwap. La migration de tokens a été une innovation importante grâce à laquelle les fournisseurs de liquidités d’Uniswap ont pu transférer leurs positions vers SushiSwap et participer au nouveau protocole.

Links:

6.3 Équilibreur :

Pools de liquidité personnalisables : Balancer est un autre AMM de premier plan qui propose des pools de liquidité personnalisables, permettant aux fournisseurs de liquidité de créer des portefeuilles avec plusieurs jetons et des pondérations différentes. Cette fonctionnalité permet des stratégies de trading plus complexes et offre une flexibilité supplémentaire par rapport aux AMM traditionnels comme Uniswap.

Fonctionnalité principale de Balancer : Balancer permet aux fournisseurs de liquidité de créer des pools contenant jusqu’à huit jetons différents, chacun avec le poids souhaité. Cette flexibilité permet la création de pools de liquidité divers, tels que ceux avec des poids de jetons égaux ou ceux avec des distributions déséquilibrées. Balancer a également introduit le concept de pools intelligents, qui ajustent dynamiquement les poids des jetons en fonction de facteurs externes ou de règles prédéfinies

Links:

Conclusion:

La création d’un market maker automatisé (AMM) nécessite une solide compréhension des concepts sous-jacents, des modèles mathématiques et des implémentations de contrats intelligents. En explorant les composants clés, les mathématiques techniques derrière les AMM et les étapes de mise en œuvre pratiques, les développeurs peuvent acquérir les connaissances nécessaires pour créer leurs propres échanges décentralisés alimentés par les AMM. N’oubliez pas de donner la priorité à la sécurité, de vous tenir informé des avancées dans le domaine et de tirer parti des études de cas et des ressources existantes pour améliorer vos compétences en matière de développement d’AMM.

Merci de votre lecture ! Suivez-moi pour recevoir de nouveaux articles et soutenir mon travail.

Leave a comment

Your email address will not be published. Required fields are marked *