7 techniques de développement de contrats pour vous aider à devenir un expert DEX

robot
Création du résumé en cours

Les astuces et techniques du développement de contrats

Récemment, en apprenant le développement d'échanges décentralisés, j'ai découvert quelques techniques intéressantes pour le développement de contrats. Ces techniques proviennent de l'étude du code d'un DEX bien connu et devraient être très utiles pour les débutants qui souhaitent se lancer dans le développement de contrats intelligents.

Web3 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 et difficiles à prédire. Cependant, dans certains cas, nous devons déduire l'adresse du contrat à partir des informations sur les paires de transactions, ce qui est utile pour évaluer les autorisations de transaction ou obtenir l'adresse d'un pool.

Il est possible de créer un contrat en utilisant la méthode CREATE2 en ajoutant le paramètre salt, ce qui rend l'adresse générée prévisible. La logique de calcul de la nouvelle adresse est la suivante : hash("0xFF", adresse du créateur, salt, initcode).

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

Utilisation astucieuse des fonctions de rappel

Dans certains scénarios, il est utile que le contrat A appelle une méthode du contrat B, puis que B rappelle une méthode d'A. Par exemple, lors d'une transaction, le contrat de pool rappellera swapCallback, en passant le nombre de tokens réellement nécessaires, et l'appelant transférera les tokens dans le rappel. Cela garantit l'intégrité et la sécurité de l'ensemble de la logique de transaction.

Passer des informations par des exceptions

Lors de l'estimation d'une transaction, vous pouvez envelopper l'exécution de la méthode swap dans un try-catch. Comme l'estimation ne produit pas réellement d'échange de Token, cela générera une erreur. Vous pouvez lancer une erreur spéciale dans le rappel, puis la capturer et extraire les données nécessaires à partir du message d'erreur. Cela permet d'éviter de modifier la méthode swap spécifiquement pour les besoins d'estimation, rendant la logique plus simple.

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

Résoudre le problème de précision des grands nombres

Lorsqu'il s'agit de calculs de prix et de liquidité, pour éviter la perte de précision due à l'opération de division, il est possible de décaler à gauche de 96 bits (, ce qui équivaut à multiplier par 2^96) avant d'effectuer le calcul. Cela permet de garantir la précision sans débordement. Bien qu'il y ait théoriquement une perte de précision au niveau de la plus petite unité, celle-ci est acceptable en pratique.

Calcul des gains en mode Share

Lors de l'enregistrement des revenus des frais de LP, il n'est pas nécessaire d'enregistrer chaque LP à chaque transaction, car cela consommerait beaucoup de Gas. Il suffit d'enregistrer les frais totaux et les frais dus pour chaque unité de liquidité, et lors du retrait par le LP, le montant pouvant être retiré est calculé en fonction de la liquidité détenue. C'est similaire au principe des dividendes d'actions.

Web3 Nouveaux venus : les petits trucs de développement de contrats que j'ai appris du code Uniswap

Stockage de données hors chaîne

Toutes les informations n'ont pas besoin d'être mises sur la chaîne ou d'en être extraites. La liste des pools de transactions, les informations sur les pools, etc. peuvent être stockées dans une base de données traditionnelle, en étant synchronisées régulièrement avec la chaîne. Cela peut améliorer l'efficacité d'accès et réduire les coûts. Bien sûr, les transactions clés doivent toujours être effectuées sur la chaîne.

Fractionnement et réutilisation des contrats

Un projet peut être divisé en plusieurs contrats déployés réellement, ou le code peut être séparé en plusieurs contrats à travers l'héritage. Il est également important d'utiliser les contrats standards existants, tels que ERC721, pour améliorer l'efficacité du développement.

Regarder trop de théories ne vaut pas mieux que de pratiquer soi-même. Essayer de réaliser un DEX simplifié vous permettra de mieux comprendre les différentes techniques de développement de contrats. J'espère que ces petits conseils vous aideront dans votre parcours de développement de contrats intelligents.

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

UNI-5.24%
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
  • 8
  • Partager
Commentaire
0/400
CryptoGoldminevip
· Il y a 12h
Les contrats sont essentiels, la stabilité est nécessaire pour avoir un ROI.
Voir l'originalRépondre0
DecentralizedEldervip
· Il y a 13h
Je suis toujours bloqué sur l'apprentissage de Solidity.
Voir l'originalRépondre0
OnchainDetectivevip
· Il y a 13h
Vraiment bien, d'abord le code puis l'élan !
Voir l'originalRépondre0
HalfBuddhaMoneyvip
· Il y a 13h
Avec ces quelques astuces, il est impératif de profiter des opportunités sur les DEX.
Voir l'originalRépondre0
GasFeeVictimvip
· Il y a 13h
Apprendre juste une Adresse de prévision, c'est suffisant.
Voir l'originalRépondre0
0xSleepDeprivedvip
· Il y a 13h
Développeurs à lire absolument !! C'est !!!
Voir l'originalRépondre0
StrawberryIcevip
· Il y a 13h
Débutant, considère les points de base.
Voir l'originalRépondre0
LightningPacketLossvip
· Il y a 13h
Encore un Débutant demande comment commencer.
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)