7 grandes astuces de développement de contrats : apprendre des pratiques DeFi à partir du code DEX

Astuces de développement de contrats : expériences apprises du code d'Uniswap

Récemment, en participant à un projet de tutoriel sur le développement d'un échange décentralisé, j'ai consulté l'implémentation du code d'un DEX connu et j'ai appris de nombreux points intéressants. En tant que débutant qui n'avait auparavant développé que des contrats NFT simples, cette tentative de développer un contrat DeFi m'a été très bénéfique. Ci-dessous, je vais partager quelques astuces pratiques qui, je suis sûr, seront très utiles pour les débutants souhaitant 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 Uniswap

Adresse de contrat prévisible

Les adresses des contrats déployés semblent généralement aléatoires, car elles sont liées au nonce. Cependant, dans certains cas, nous devons déduire l'adresse du contrat à partir des informations sur les transactions, par exemple pour déterminer les droits de transaction ou obtenir l'adresse du pool.

Une méthode de mise en œuvre consiste à utiliser CREATE2 pour créer un contrat. En ajoutant un paramètre salt, l'adresse du contrat généré devient prévisible. La logique de génération de la nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode).

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

Utiliser habilement les fonctions de rappel

Dans Solidity, les contrats peuvent s'appeler mutuellement. Un scénario courant est que A appelle la méthode de B, et B rappelle A dans la méthode appelée. Cela peut être très utile dans certaines situations.

Par exemple, dans un certain DEX, lorsque vous appelez la méthode swap du contrat de pool pour effectuer une transaction, elle rappellera swapCallback, en passant le montant de jetons réellement nécessaire pour cette transaction. L'appelant doit transférer les jetons requis dans le contrat de pool lors du rappel, plutôt que de diviser la méthode swap. Cela garantit la sécurité de la méthode swap et l'exécution complète, sans avoir besoin d'enregistrements de variables compliqués.

Utiliser des exceptions pour transmettre des informations, réaliser une estimation de transaction avec try-catch

Dans certaines situations, nous devons simuler la méthode swap pour estimer la quantité de jetons requise pour la transaction, mais lors de l'estimation, nous ne procéderons pas réellement à l'échange des jetons, ce qui entraînera une erreur. Une manière astucieuse de traiter cela est de lancer une erreur spéciale dans la fonction de rappel de la transaction, puis de capturer cette erreur et d'extraire les informations nécessaires à partir du message d'erreur.

Cette méthode semble quelque peu astucieuse, mais elle est très pratique. Elle évite de modifier la méthode swap pour estimer la demande de transactions, rendant la logique plus simple.

Série pour débutants Web3 : Les petits conseils de développement de contrats que j'ai appris du code Uniswap

Résoudre les problèmes de précision avec de grands nombres

Dans les scénarios impliquant le calcul des prix et de la liquidité, nous devons éviter la perte de précision causée par les opérations de division. Une technique courante consiste à décaler à gauche de 96 bits (équivalent à multiplier par 2^96), puis à effectuer l'opération de division. Cela permet de garantir la précision sans débordement lors des transactions normales.

Bien qu'il y ait théoriquement une légère perte de précision, il s'agit généralement d'une perte de la plus petite unité, ce qui est acceptable.

Calcul des bénéfices par Share

Pour les scénarios nécessitant l'enregistrement des revenus de frais de transaction des fournisseurs de liquidité (LP), nous ne pouvons pas enregistrer les frais pour chaque LP à chaque transaction, car cela consommerait beaucoup de gas. Une méthode efficace consiste à enregistrer les frais totaux et les frais à attribuer par unité de liquidité.

Lors de l'extraction des frais de LP, il suffit de calculer les frais pouvant être extraits en fonction de la liquidité détenue. Cela ressemble à la façon dont les actionnaires calculent les bénéfices pouvant être extraits actuellement en fonction des bénéfices historiques par action de l'entreprise et des bénéfices lors de la dernière extraction.

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

Utilisation raisonnable des données hors chaîne

Le stockage sur la chaîne est relativement coûteux et toutes les informations n'ont pas besoin d'être sur la chaîne ou d'être récupérées depuis la chaîne. Par exemple, la liste des pools de transactions, les informations sur les pools, etc. peuvent être stockées dans une base de données traditionnelle et synchronisées régulièrement depuis la chaîne.

De nombreux fournisseurs de RPC blockchain proposent également des interfaces avancées qui permettent d'accéder plus rapidement et économiquement à certaines données. Ces interfaces utilisent généralement le caching pour améliorer les performances et l'efficacité.

Apprendre à diviser les contrats et à utiliser les contrats standards

Un projet peut contenir plusieurs contrats déployés en réalité. Même si un seul contrat est déployé, nous pouvons maintenir le code en le divisant en plusieurs contrats par le biais de l'héritage.

De plus, l'utilisation de contrats standards existants (comme l'ERC721) peut améliorer l'efficacité du développement. Par exemple, un contrat ERC721 peut être utilisé pour gérer des positions de liquidité, ce qui est à la fois pratique et permet d'améliorer l'efficacité du développement.

Résumé

La pratique est la meilleure méthode d'apprentissage. Essayer de réaliser une version simplifiée d'une bourse décentralisée peut vous aider à comprendre plus en profondeur la mise en œuvre du code DEX et à acquérir davantage de connaissances pratiques sur les projets. Que vous soyez intéressé par le développement de projets Web3 ou DeFi, vous impliquer personnellement sera une expérience d'apprentissage précieuse.

Série pour débutants Web3 : Petits conseils de développement de contrats que j'ai appris du code Uniswap

DEFI-5.49%
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
  • 5
  • Reposter
  • Partager
Commentaire
0/400
StablecoinEnjoyervip
· 08-09 08:07
Pas étonnant que DEX soit compréhensible, create2 est vraiment génial~
Voir l'originalRépondre0
OnchainArchaeologistvip
· 08-09 07:19
Adresse prédiction ce domaine doit encore compter sur create2
Voir l'originalRépondre0
Layer2Observervip
· 08-09 07:17
Techniquement, CREATE2 est effectivement élégant, mais il présente des risques de sécurité.
Voir l'originalRépondre0
WenMoon42vip
· 08-09 07:08
Il y a beaucoup de subtilités dans Create2.
Voir l'originalRépondre0
DegenMcsleeplessvip
· 08-09 06:58
Héhé, ça fait déjà deux ans que je veille sur le BTC~

Selon ta personnalité, voici mon commentaire:

Ne fais pas semblant, copie de Uni.
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)