Futures
Accédez à des centaines de contrats perpétuels
CFD
Or
Une plateforme pour les actifs mondiaux
Options
Hot
Tradez des options classiques de style européen
Compte unifié
Maximiser l'efficacité de votre capital
Trading démo
Introduction au trading futures
Préparez-vous à trader des contrats futurs
Événements futures
Participez aux événements et gagnez
Demo Trading
Utiliser des fonds virtuels pour faire l'expérience du trading sans risque
Lancer
CandyDrop
Collecte des candies pour obtenir des airdrops
Launchpool
Staking rapide, Gagnez de potentiels nouveaux jetons
HODLer Airdrop
Conservez des GT et recevez d'énormes airdrops gratuitement
Pre-IPOs
Accédez à l'intégralité des introductions en bourse mondiales
Points Alpha
Tradez on-chain et gagnez des airdrops
Points Futures
Gagnez des points Futures et réclamez vos récompenses d’airdrop.
Investissement
Simple Earn
Gagner des intérêts avec des jetons inutilisés
Investissement automatique
Auto-invest régulier
Double investissement
Profitez de la volatilité du marché
Staking souple
Gagnez des récompenses grâce au staking flexible
Prêt Crypto
0 Fees
Mettre en gage un crypto pour en emprunter une autre
Centre de prêts
Centre de prêts intégré
Promotions
Centre d'activités
Participez et gagnez des récompenses
Parrainage
20 USDT
Invitez des amis et gagnez des récompenses
Programme d'affiliation
Obtenez des commissions exclusives
Gate Booster
Développez votre influence et gagnez des airdrops
Annoncement
Mises à jour en temps réel
Blog Gate
Articles sur le secteur de la crypto
AI
Gate AI
Votre assistant IA polyvalent pour toutes vos conversations
Gate AI Bot
Utilisez Gate AI directement dans votre application sociale
GateClaw
Gate Blue Lobster, prêt à l’emploi
Gate for AI Agent
Infrastructure IA, Gate MCP, Skills et CLI
Gate Skills Hub
+10K compétences
De la bureautique au trading, une bibliothèque de compétences tout-en-un pour exploiter pleinement l’IA
GateRouter
Choisissez intelligemment parmi plus de 40 modèles d’IA, avec 0 % de frais supplémentaires
Les astuces de développement de contrats apprises en lisant le code d'Uniswap sont bien plus intéressantes que les manuels.
Récemment, en enseignant le développement d'une plateforme d'échange décentralisée, j'ai approfondi la mise en œuvre d'Uniswap V3 et découvert des techniques vraiment ingénieuses. Je n'avais écrit que des contrats NFT simples auparavant, c'était la première fois que je m'attaquais sérieusement au code de contrats DeFi, et j'ai trouvé beaucoup de choses à partager avec ceux qui veulent apprendre Uniswap.
Je vais commencer par ce qui m'a le plus surpris — l'adresse du contrat peut-elle vraiment être prédite ?
En général, l'adresse d'un contrat déployé semble aléatoire, mais Uniswap utilise une méthode astucieuse. Il utilise le paramètre salt lors de la création du contrat avec l'opcode CREATE2, ce qui permet de rendre l'adresse générée prévisible. La méthode spécifique est « pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}()); ». Avec ce code, dès qu'on connaît la paire de tokens et les frais, on peut calculer l'adresse du pool sans déployer réellement le contrat. Cela est très utile pour vérifier les permissions ou localiser rapidement un pool.
La conception des fonctions de rappel (callback) est aussi très ingénieuse.
Dans Uniswap, lorsque vous appelez la méthode swap pour échanger, il y a une fonction swapCallback qui est appelée en retour, transmettant la quantité de tokens nécessaire. Ensuite, vous transférez les tokens dans cette fonction de rappel. Cela permet d'exécuter toute la logique de transaction de manière cohérente, sans devoir la diviser en plusieurs étapes ou utiliser des variables complexes pour la sécurité. En résumé, A appelle B, puis B rappelle A, formant une boucle fermée.
La méthode d'estimation des transactions est aussi très « hacky » — elle utilise une exception pour transmettre des informations.
Puisqu'une estimation ne réalise pas réellement l'échange de tokens, elle va échouer. La solution d'Uniswap consiste à lancer une erreur spéciale dans le callback, puis à la capturer avec try-catch, en analysant le message d'erreur pour en extraire les données nécessaires. Cela peut sembler un peu brutal, mais c'est très pratique, car cela permet d'ajouter une estimation sans modifier la méthode swap.
Une solution pour la précision est aussi très instructive.
Lors du calcul de l'échange de tokens, faire une division directe peut entraîner une perte de précision. Uniswap multiplie d'abord par 2^96 (décalage à gauche de 96 bits), puis divise, et enfin annule ce décalage dans le calcul. Cela garantit une précision suffisante dans le uint256 sans risque de dépassement. Les variables sqrtRatioAX96 et sqrtRatioBX96 illustrent cette approche — cela paraît complexe, mais la logique est claire.
Le calcul des revenus de frais de transaction est aussi très intelligent.
Au lieu d'enregistrer chaque frais pour chaque LP à chaque transaction (ce qui consommerait beaucoup de gas), il est plus efficace de suivre le total des frais accumulés et la part de chaque LP. Lorsqu’un LP retire ses fonds, il multiplie sa liquidité par le total historique des frais par action pour calculer ses gains, comme un dividende basé sur la part. Cette méthode de partage est largement utilisée dans de nombreux projets.
Il est aussi crucial de ne pas tout mettre sur la blockchain.
Les listes de pools, les informations de base, etc., peuvent tout à fait être stockées dans une base de données classique, puis synchronisées périodiquement avec la chaîne. Il n’est pas nécessaire d’appeler en temps réel des interfaces RPC. Beaucoup de fournisseurs de services blockchain proposent aujourd’hui des API avancées pour accéder rapidement et à moindre coût aux données — c’est la même idée.
Enfin, la façon dont le code est organisé.
Un projet complexe divise souvent ses contrats en plusieurs modules pour la maintenance. Uniswap hérite de plusieurs contrats, ce qui facilite la gestion. Il faut aussi exploiter les standards existants, comme utiliser directement OpenZeppelin ERC721 pour gérer les positions, ce qui augmente la productivité et garantit la qualité du code.
Honnêtement, lire des articles ne vaut pas le fait de coder soi-même. En réalisant une version simplifiée d’une plateforme d’échange décentralisée, on comprend vraiment pourquoi Uniswap est conçu ainsi. Le cours WTF-DApp repose sur cette idée, vous guidant étape par étape pour réaliser un projet pratique basé sur Uniswap, ce qui sera sûrement très utile pour votre développement de contrats.