7 conseils pratiques pour le développement de contrats intelligents afin de soutenir les projets DEX

Résumé des astuces de développement de contrats

Récemment, en développant une bourse décentralisée, j'ai consulté l'implémentation du code d'un DEX connu et j'ai appris de nombreuses techniques pratiques de développement de contrats. En tant que novice qui vient juste 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 amis qui souhaitent apprendre le développement de contrats.

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

Adresse de contrat prévisible

Les adresses de contrat déployées semblent généralement aléatoires et sont difficiles à prédire. Cependant, dans certaines situations, nous devons déduire l'adresse du contrat à partir des informations sur les paires de transaction, par exemple pour juger des droits de transaction ou obtenir l'adresse de la piscine.

Cela peut être réalisé en créant un contrat en utilisant la méthode CREATE2. La démarche consiste à ajouter un paramètre salt lors de la création du contrat :

solidité pool = address(new UniswapV3Pool{salt: keccak256(abi.encode(token0, token1, fee))}());

L'adresse du contrat créée de cette manière est prévisible, la logique de génération est :

Nouvelle adresse = hash("0xFF", adresse du créateur, sel, initcode)

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

Utiliser des fonctions de rappel

Dans certains cas, l'appel mutuel entre contrats est très utile. Par exemple, A appelle la méthode de B, et B appelle A dans la méthode appelée.

Prenons l'exemple d'une transaction, lorsque la méthode swap du contrat de pool est appelée, elle rappellera swapCallback, en passant la quantité réelle de tokens requise calculée. L'appelant doit transférer les tokens dans le contrat de pool lors du rappel, ce qui garantit l'exécution complète et la sécurité de la méthode swap, sans enregistrement fastidieux de variables.

Transmission d'informations par exception

Lors de l'estimation des transactions, nous devons simuler la méthode swap sans échanger réellement de Token. Nous pouvons lancer une erreur spéciale dans la fonction de rappel de la transaction, puis capturer cette erreur et en extraire 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 spécifiquement la méthode de swap pour estimer les transactions, la logique est plus simple.

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

La grande numération résout le problème de précision

Lorsqu'il s'agit de calculer les prix et la liquidité, pour éviter la perte de précision due aux opérations de division, on peut utiliser l'opération de décalage à gauche, ( équivaut à multiplier par 2^96).

Par exemple:

solidité numerator1 = FullMath.mulDiv(liquidity << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96);

Cela permet de garantir la précision sans débordement lors des transactions normales. Bien qu'il y ait encore une légère perte de précision en théorie, elle est désormais acceptable.

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

Pour éviter d'enregistrer des frais pour tous les LP à chaque transaction, il est possible d'utiliser la méthode Share.

Il suffit d'enregistrer le total des frais de transaction et les frais de transaction à attribuer à chaque liquidité. Lors du retrait des LP, les frais de transaction pouvant être retirés sont calculés en fonction de la liquidité détenue, similaire à un dividende d'actions.

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

Utilisation raisonnable des données hors chaîne

Toutes les informations ne nécessitent pas d'être mises sur la chaîne ou récupérées de la chaîne. Par exemple, la liste des pools de transactions et les informations de base peuvent être stockées dans une base de données ordinaire et synchronisées régulièrement.

Certaines interfaces RPC avancées offrent également des méthodes d'acquisition de données optimisées par le cache, ce qui peut améliorer les performances et l'efficacité.

Fractionnement et réutilisation des contrats

Les grands projets peuvent être divisés en plusieurs contrats déployés en pratique, ou divisés en plusieurs contrats à maintenir par héritage.

En même temps, des contrats standards existants tels que ERC721 peuvent être réutilisés, ce qui améliore l'efficacité du développement. Par exemple:

solidité contrat NonfungiblePositionManager est INonfungiblePositionManager, PeripheryImmutableState, PoolInitializer, GestionDeLiquidité, PeripheryValidation, Multicall, ERC721Permit, PeripheryPayments, NFTDescriptor { // ... }

Étudier l'implémentation du code de projets excellents et essayer de développer par soi-même peut vous donner une compréhension plus approfondie des échanges décentralisés. J'espère que ces petites astuces vous aideront dans le développement de vos contrats!

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

UNI-5.78%
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
LayerZeroEnjoyervip
· 08-01 16:48
BTC sont tous explosés et vous étudiez encore le defi ?
Voir l'originalRépondre0
degenwhisperervip
· 08-01 00:26
Copier directement le code de uni
Voir l'originalRépondre0
GateUser-40edb63bvip
· 07-29 21:17
Ce crochet de smart contracts est vraiment avancé.
Voir l'originalRépondre0
PoetryOnChainvip
· 07-29 21:03
En fait, c'est juste copier 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)