7 conseils de développement de contrats Uniswap : améliorer l'efficacité et la sécurité des projets de Finance décentralisée

robot
Création du résumé en cours

Techniques de développement de contrats : précieuses expériences tirées du code d'Uniswap

Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai appris de nombreuses techniques de développement de contrats en étudiant le code de la mise en œuvre d'Uniswap V3. En tant que novice qui vient juste de se plonger dans le développement de contrats Defi, ces petites astuces m'ont beaucoup inspiré et je suis sûr qu'elles aideront également d'autres novices qui souhaitent apprendre le développement de contrats.

Web3 Série pour débutants : les astuces de développement de contrats que j'ai apprises du code d'Uniswap

Adresse de déploiement de contrat prévisible

L'adresse d'un contrat déployé semble généralement aléatoire et difficile à prédire. Cependant, dans certains cas, nous devons déduire l'adresse du contrat à partir des paires de trading et des informations connexes, comme pour déterminer les droits de transaction ou obtenir l'adresse d'une pool, etc.

Uniswap utilise la méthode CREATE2 pour créer des contrats, en ajoutant un paramètre "salt" qui rend l'adresse du contrat créée prévisible. La logique de génération de la nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode). Cette méthode est très pratique dans de nombreux cas.

Web3 Débutant Série : Les petites astuces de développement de contrat que j'ai apprises du code Uniswap

Bien utiliser les fonctions de rappel

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

Par exemple, dans la méthode swap d'Uniswap, le contrat UniswapV3Pool appelle la fonction swapCallback, en passant le Token réellement nécessaire pour la transaction. L'appelant doit transférer le Token requis dans le UniswapV3Pool lors de l'appel de retour, au lieu de décomposer la méthode swap. Cela garantit la sécurité de la méthode swap et son exécution complète, sans avoir besoin de tenir des enregistrements de variables compliqués.

Utiliser des exceptions pour transmettre des informations, implémenter une estimation de transaction avec try catch

Dans le contrat Quoter d'Uniswap, la méthode swap de UniswapV3Pool est exécutée dans un bloc try catch. Cela permet de simuler un swap afin d'estimer les tokens nécessaires pour la transaction. Lors de l'estimation, il n'y a pas d'échange réel de tokens, donc une erreur se produit. Uniswap lance une erreur spéciale dans la fonction de rappel, puis capture cette erreur et en extrait les informations nécessaires.

Cette méthode semble être un raccourci, mais elle est très pratique. Il n'est pas nécessaire de modifier la méthode swap pour estimer la demande de trading, la logique est plus simple.

Web3 Débutant Série : Les astuces de développement de contrat que j'ai apprises du code Uniswap

La grande numération résout les problèmes de précision

Le code Uniswap implique de nombreuses logiques de calcul, telles que le calcul des tokens échangés en fonction du prix actuel 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", c'est-à-dire un décalage à gauche de 96 bits, ce qui équivaut à multiplier par 2^96. Après le décalage à gauche, une division est effectuée, garantissant la précision dans le cadre d'échanges normaux sans dépassement.

Bien qu'il y ait encore une légère perte de précision en théorie, elle est maintenant acceptable.

Calcul des bénéfices par méthode de 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, cela consommerait une énorme quantité de Gas.

La structure Position d'Uniswap contient feeGrowthInside0LastX128 et feeGrowthInside1LastX128, qui enregistrent les frais dus à chaque liquidité lors du dernier retrait de frais pour chaque position.

Il suffit d'enregistrer les frais totaux et les frais à allouer à chaque liquidité. Lors du retrait des LP, les frais récupérables sont calculés en fonction de la liquidité détenue. C'est similaire à détenir des actions d'une entreprise, lors du retrait des bénéfices, il suffit de connaître les gains par action historiques et les bénéfices du dernier retrait.

![Série pour débutants Web3 : Les petites astuces de développement de contrats que j'ai apprises du code Uniswap])https://img-cdn.gateio.im/webp-social/moments-45e66af69435e6d4412ae506e77ab893.webp(

Les informations non essentielles n'ont pas besoin d'être enregistrées sur la chaîne

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

La liste des pools de trading, les informations, etc. peuvent être stockées dans une base de données classique, certaines devant être synchronisées régulièrement depuis la chaîne. Il n'est pas nécessaire d'appeler en temps réel l'interface RPC des services de la chaîne ou des nœuds pour obtenir les données pertinentes.

Bien sûr, les transactions clés doivent se faire sur la chaîne.

Division des contrats et utilisation des contrats standard

Un projet peut contenir plusieurs contrats déployés en réalité. Même s'il n'y a qu'un seul déploiement réel, il peut être divisé en plusieurs contrats à travers l'héritage pour une maintenance.

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

Conclusion

Pratiquer le développement d'une version simplifiée d'une bourse décentralisée vous permettra de mieux comprendre la mise en œuvre du code d'Uniswap et d'apprendre davantage de points de connaissance issus de projets réels. Lire de nombreux articles ne vaut pas l'expérience pratique, j'espère que ces conseils seront utiles aux débutants souhaitant apprendre le développement de contrats.

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

UNI-1.29%
DEFI1.2%
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
  • 10
  • Reposter
  • Partager
Commentaire
0/400
GasGuzzlervip
· 07-18 21:18
Ne joue pas si profondément avec les Débutants.
Voir l'originalRépondre0
LowCapGemHuntervip
· 07-17 14:17
Voici des astuces indispensables pour les développeurs expérimentés.
Voir l'originalRépondre0
SmartMoneyWalletvip
· 07-15 22:24
Les transactions off-chain ne peuvent échapper à mes yeux.
Voir l'originalRépondre0
WalletDetectivevip
· 07-15 22:24
v3 est si simple ? Après avoir regardé, je réalise que je ne comprends rien.
Voir l'originalRépondre0
gas_guzzlervip
· 07-15 22:21
Encore en train de couper les coupons avec ses compétences.
Voir l'originalRépondre0
AllInDaddyvip
· 07-15 21:55
Le code de V3 est vraiment solide.
Voir l'originalRépondre0
SleepyValidatorvip
· 07-15 21:55
Parler aussi en détail, il vaudrait mieux se plonger dans le code source soi-même.
Voir l'originalRépondre0
  • Épingler
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)