Analyse des 7 grandes techniques de développement de contrats Uniswap pour améliorer l'efficacité des projets de Finance décentralisée

robot
Création du résumé en cours

Techniques de développement de smart contracts apprises à partir du code Uniswap

Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai consulté l'implémentation du code d'Uniswap V3 et appris de nombreuses techniques intéressantes pour le développement de smart contracts. En tant que développeur tentant pour la première fois de créer un contrat DeFi, ces techniques seront très utiles pour les nouveaux venus souhaitant apprendre le développement de contrats.

Web3 Débutant Série : Astuces de développement de contrats que j'ai apprises du code Uniswap

Adresses de contrat prévisibles

En général, l'adresse obtenue lors du déploiement d'un contrat semble aléatoire, car elle est liée au nonce. Cependant, dans certaines situations, nous devons déduire l'adresse du contrat à partir des informations équivalentes de la transaction, par exemple pour évaluer les autorisations de transaction ou obtenir l'adresse de la piscine.

Uniswap utilise la méthode CREATE2 pour créer des contrats, ajoutant un paramètre salt pour rendre l'adresse prévisible. La logique de génération de nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode). Cette méthode permet de calculer à l'avance l'adresse du contrat.

![Web3 Nouveaux Débutants : Astuces de développement de contrats que j'ai apprises du code Uniswap](https://img-cdn.gateio.im/webp-social/moments-0aaa61a4d43aba7fdeddbc55e3665305.webp01

Utilisation astucieuse des fonctions de rappel

Dans Solidity, les contrats peuvent s'appeler mutuellement. Dans certains scénarios, la méthode A appelle B, et B rappelle A dans la méthode appelée, ce modèle est très utile.

Par exemple, lors de l'échange avec la méthode swap d'Uniswap, le swapCallback sera appelé avec le nombre réel de tokens requis. L'appelant doit transférer les tokens dans le rappel, et non pas diviser le swap en deux appels. Cela garantit l'exécution complète de la méthode swap sans nécessiter un enregistrement fastidieux des variables pour garantir la sécurité.

Utiliser des exceptions pour transmettre des informations, estimer les transactions avec try-catch

Dans le contrat Quoter de Uniswap, la méthode swap de UniswapV3Pool a été encapsulée dans un try-catch. Cela est fait pour simuler un swap afin d'estimer la quantité de Token nécessaire, mais l'estimation ne réalise pas réellement l'échange de Token, donc une erreur sera générée.

Uniswap lance une erreur spéciale dans le rappel de transaction, puis capture cette erreur et en extrait les informations nécessaires. Cette méthode évite de modifier la méthode swap pour estimer la demande, rendant la logique plus concise.

![Web3 Nouveaux venus : Les petites astuces de développement de contrats que j'ai apprises du code Uniswap])https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(

Les calculs de grands nombres résolvent les problèmes de précision

Uniswap implique de nombreux calculs, tels que le calcul du nombre de tokens échangés en fonction du prix et de la liquidité. Pour éviter la perte de précision lors des opérations de division, le processus de calcul utilise souvent l'opération << FixedPoint96.RESOLUTION, qui correspond à un décalage à gauche de 96 bits, équivalent à multiplier par 2^96.

Déplacez à gauche puis effectuez la division, ce qui garantit la précision sans débordement dans les transactions normales. Bien qu'il y ait théoriquement une légère perte de précision, elle est désormais acceptable.

Calcul des revenus par le biais du partage

Uniswap doit enregistrer les revenus de frais des fournisseurs de liquidité LP). Il est évident qu'il n'est pas possible d'enregistrer les frais pour chaque LP à chaque transaction, ce qui consommerait beaucoup de Gas.

La solution consiste à enregistrer le total des frais de transaction et les frais à attribuer par unité de liquidité. Lors du retrait des LP, les frais récupérables sont calculés en fonction de la liquidité détenue, similaire aux dividendes d'actions.

Web3 Nouveaux arrivants série : les petites astuces de développement de contrats que j'ai apprises du code Uniswap

Distinction entre les informations on-chain et off-chain

Le stockage on-chain est relativement coûteux, toutes les informations n'ont pas besoin d'être sur la chaîne ou récupérées depuis la chaîne. Par exemple, de nombreuses interfaces appelées par le front-end d'Uniswap sont des interfaces Web2 traditionnelles.

La liste des pools de transactions, les informations, etc. peuvent être stockées dans une base de données classique, synchronisées régulièrement depuis la chaîne. Il n'est pas nécessaire d'appeler en temps réel l'interface RPC pour obtenir des données connexes. Bien sûr, les transactions clés se déroulent toujours sur la chaîne.

Division des contrats et réutilisation des contrats standards

Un projet peut contenir plusieurs contrats réellement déployés. Même si un seul contrat est déployé, le code peut être divisé en plusieurs contrats à maintenir par héritage.

Le contrat NonfungiblePositionManager de Uniswap hérite de plusieurs contrats. Le ERC721Permit utilise directement le contrat ERC721 d'OpenZeppelin, ce qui facilite la gestion des positions via les NFT et améliore l'efficacité du développement.

Résumé

Développer par soi-même est plus efficace que de simplement lire des articles. Essayer de réaliser une version simplifiée d'une plateforme d'échange décentralisée permet de mieux comprendre l'implémentation du code d'Uniswap et d'apprendre des points de connaissance issus de projets réels.

Web3 Nouveaux venus : Astuces de développement de contrats que j'ai apprises à partir du code Uniswap

UNI5.55%
DEFI16.9%
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • 7
  • Partager
Commentaire
0/400
PoolJumpervip
· 07-28 02:11
Zéro infrastructure à faire quelques-uns
Voir l'originalRépondre0
OldLeekConfessionvip
· 07-27 04:18
Tu es déjà impressionnant si tu peux me faire comprendre...
Voir l'originalRépondre0
OnchainGossipervip
· 07-27 03:51
Conseils pour pratiquer sur le terrain~
Voir l'originalRépondre0
BagHolderTillRetirevip
· 07-25 17:02
Enfin trouvé une issue pour sortir de ma situation piégée.
Voir l'originalRépondre0
PanicSeller69vip
· 07-25 17:00
V3 a encore quelque chose ! Allez !
Voir l'originalRépondre0
degenonymousvip
· 07-25 16:58
C'est l'évangile des codeurs.
Voir l'originalRépondre0
AirdropDreamBreakervip
· 07-25 16:56
Il vaut mieux voler le code que de le développer.
Voir l'originalRépondre0
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)