Sept techniques pour maîtriser le développement de smart contracts

Partage d'astuces et de réflexions sur le développement de contrats

Récemment, lors de ma participation à un projet de tutoriel sur le développement d'une bourse décentralisée, j'ai appris de nombreuses techniques de développement de contrats précieux en étudiant la mise en œuvre du code d'Uniswap V3. En tant que débutant qui vient à peine de découvrir le développement de contrats Defi, ces techniques m'ont beaucoup inspiré et je suis sûr qu'elles seront également utiles à d'autres débutants qui souhaitent apprendre le développement de contrats.

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

Adresse de contrat prévisible

En général, le déploiement d'un contrat donne une adresse aléatoire, mais dans certains cas, nous avons besoin de pouvoir prédire l'adresse du contrat. Uniswap utilise la méthode CREATE2 pour créer des contrats, en ajoutant un paramètre salt, ce qui permet de prédire l'adresse du contrat créé. Cela est très utile dans des scénarios tels que la vérification des droits de transaction ou l'obtention d'adresses de pool.

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

Utilisation astucieuse des fonctions de rappel

Dans certaines situations, l'appel mutuel entre contrats est très utile. Par exemple, dans Uniswap, lorsque la méthode swap du contrat UniswapV3Pool est appelée, elle rappelle swapCallback, en passant le nombre de Token réellement requis calculé. L'appelant doit transférer les Token dans UniswapV3Pool lors du rappel, ce qui garantit l'exécution complète et la sécurité de la méthode swap.

Transmettre des informations par des exceptions

Dans le contrat Quoter d'Uniswap, la méthode swap de UniswapV3Pool est exécutée à l'intérieur d'un bloc try-catch. Cela permet de simuler un swap pour estimer les tokens nécessaires à la transaction, en capturant des erreurs spécifiques et en analysant les messages d'erreur pour obtenir les données requises. Cette méthode évite de modifier spécifiquement la méthode swap pour les estimations de transaction, rendant la logique plus concise.

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

Garantir la précision des calculs de grands nombres

Uniswap implique un grand nombre de calculs. Pour éviter la perte de précision lors des opérations de division, il est courant d'utiliser un décalage à gauche de 96 bits, ( équivalent à une multiplication par 2^96). Cela permet de garantir la précision des calculs tant que les transactions normales ne débordent pas. Bien qu'il puisse encore y avoir une légère perte de précision sur le plan théorique, elle est jugée acceptable.

Calcul des bénéfices par la méthode de partage

Pour éviter de consommer une grande quantité de Gas en enregistrant les frais de transaction pour chaque LP à chaque fois, Uniswap a adopté un système similaire aux dividendes d'actions. Il suffit d'enregistrer les frais totaux et les frais à répartir par unité de liquidité, et lors du retrait des LP, les frais dus peuvent être calculés en fonction de la liquidité détenue.

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

Combinaison de données on-chain et off-chain

Toutes les informations ne doivent pas être récupérées sur 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 ordinaire et synchronisées régulièrement avec la chaîne. Les transactions clés se déroulent sur la chaîne, tandis que les informations non essentielles peuvent être obtenues de manière plus efficace pour améliorer les performances et l'efficacité.

Division de contrat et réutilisation de contrat standard

Les grands projets contiennent généralement plusieurs contrats déployés en pratique. Même si un seul contrat est déployé, il peut être maintenu en le divisant en plusieurs contrats par héritage. En même temps, l'utilisation de contrats standards existants ( tels que ERC721) peut améliorer l'efficacité du développement et simplifier la gestion.

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

La pratique est le meilleur moyen d'apprendre. En réalisant par vous-même une version simplifiée d'une bourse décentralisée, vous pourrez non seulement comprendre plus en profondeur l'implémentation du code d'Uniswap, mais aussi acquérir davantage de connaissances sur des projets pratiques. J'espère que ces partages d'expérience vous seront utiles dans votre parcours de développement de contrats.

UNI2.6%
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
LiquidityOraclevip
· 08-02 23:11
Une autre introduction à la炒冷饭
Voir l'originalRépondre0
WhaleWatchervip
· 08-02 19:29
C'est un peu difficile à comprendre, quelqu'un peut-il expliquer le create2 ?
Voir l'originalRépondre0
RetailTherapistvip
· 07-31 02:40
Envoyer ça, c'est même pas mieux que de créer un dex pour se faire prendre pour des cons.
Voir l'originalRépondre0
gas_guzzlervip
· 07-31 02:40
Prédire l'Adresse cette astuce m'a fait rire, Sainte Mère uniswap
Voir l'originalRépondre0
DeFiGraylingvip
· 07-31 02:35
Sans voix, encore une formation qui piège les Débutants...
Voir l'originalRépondre0
DEXRobinHoodvip
· 07-31 02:35
Le père du DOGE a raison ! Passer sa vie en prison n'est pas un rêve !
Voir l'originalRépondre0
NightAirdroppervip
· 07-31 02:34
Parler pendant un long moment n'est pas aussi agréable que d'utiliser des Prêts Flash~
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)