7 astuces pratiques pour maîtriser le développement des smart contracts

robot
Création du résumé en cours

Les astuces ingénieuses dans le développement de contrats

Récemment, en étudiant le processus de développement des échanges décentralisés, j'ai consulté le code de certains projets connus et appris beaucoup de points intéressants. En tant que développeur qui essaie pour la première fois de développer des contrats Defi, ces petites astuces sont très utiles pour les débutants qui souhaitent apprendre le développement de contrats.

Voyons ensemble ces astuces ingénieuses, certaines peuvent même être qualifiées de techniques extraordinaires.

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

adresse de déploiement de contrat prévisible

Les adresses obtenues lors du déploiement de contrats semblent aléatoires, car elles sont liées au nonce. Cependant, dans certaines situations, nous devons inférer l'adresse du contrat à partir des informations de transaction, comme déterminer les droits de transaction ou obtenir l'adresse de la piscine.

Une méthode consiste à utiliser CREATE2 pour créer un contrat, en ajoutant le paramètre salt : 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, salt, initcode).

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

Utilisation astucieuse des fonctions de rappel

Dans Solidity, les contrats peuvent s'appeler mutuellement. Un modèle est que A appelle la méthode de B, et B rappelle A dans la méthode appelée, ce qui est utile dans certaines situations.

Par exemple, lorsque vous effectuez un échange en appelant la méthode swap du contrat UniswapV3Pool, elle rappellera swapCallback, en transmettant le Token réellement nécessaire pour cette transaction. L'appelant doit transférer le Token requis pour la transaction dans UniswapV3Pool lors du rappel, au lieu de diviser la méthode swap en deux parties. 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 encombrants.

utiliser des exceptions pour transmettre des informations, utiliser try catch pour réaliser une estimation de transaction

Dans certains contrats, l'estimation des transactions est réalisée en lançant des erreurs spéciales dans la fonction de rappel de transaction, puis en capturant cette erreur et en analysant les informations nécessaires à partir du message d'erreur. Cette méthode semble être un raccourci, mais elle est très pratique, car elle ne nécessite pas de modifier la méthode swap pour estimer les besoins en transactions, ce qui rend la logique plus simple.

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

Résolution des problèmes de précision des grands nombres

Dans les scénarios impliquant des calculs intensifs, comme le calcul des Tokens échangés en fonction du prix actuel et de la liquidité, il est nécessaire d'éviter la perte de précision due aux opérations de division. Une méthode consiste à utiliser une opération de décalage à gauche, comme << FixedPoint96.RESOLUTION, équivalente à multiplier par 2^96. Après le décalage à gauche, effectuer l'opération de division garantit la précision tant qu'il n'y a pas de débordement dans les transactions normales.

Calcul des gains par la méthode Share

Dans le cas où il est nécessaire d'enregistrer les revenus de frais de transaction des fournisseurs de liquidité LP( pour ), il n'est pas possible d'enregistrer les frais pour chaque LP à chaque transaction, car cela consommerait beaucoup de Gas.

Une solution consiste à enregistrer le total des frais de transaction et les frais de transaction à attribuer à chaque fournisseur de liquidité. Lorsque les LP retirent des frais de transaction, les frais extractibles sont calculés en fonction de la liquidité détenue. Cela ressemble au mécanisme par lequel les actionnaires retirent des dividendes.

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

Équilibre d'acquisition d'informations en ligne et hors ligne

Toutes les informations n'ont pas besoin d'être récupérées sur la chaîne. Le stockage sur la chaîne est relativement coûteux, de nombreuses informations peuvent être stockées dans des bases de données traditionnelles, comme les listes de pools de transactions, les informations sur les pools de transactions, etc. Ces données peuvent être synchronisées régulièrement depuis la chaîne, sans avoir besoin d'appeler en temps réel l'interface RPC des services de la chaîne ou des nœuds.

Certains fournisseurs de RPC blockchain proposent des interfaces avancées, permettant d'accéder plus rapidement et de manière plus économique à certaines données. Ces interfaces utilisent généralement la mise en cache pour améliorer les performances et l'efficacité.

Fractionnement des contrats et utilisation des contrats standards

Un projet peut contenir plusieurs contrats réellement déployés. Même s'il n'y a qu'un seul contrat réellement déployé, le code peut être divisé en plusieurs contrats à maintenir par héritage.

De plus, l'utilisation de contrats standard existants, tels que l'ERC721, peut améliorer l'efficacité du développement des contrats. Cela facilite non seulement la gestion, mais permet également d'utiliser des normes établies pour augmenter la vitesse et la sécurité du développement.

résumé

Le développement pratique est le moyen le plus efficace d'apprendre le développement de contrats. Essayer de réaliser une version simplifiée d'un échange décentralisé vous permettra de mieux comprendre l'implémentation du code des projets connus, et vous pourrez également apprendre davantage de points de connaissances issus de projets réels. La pratique, j'en suis sûr, vous sera bénéfique.

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

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
  • 6
  • Reposter
  • Partager
Commentaire
0/400
ServantOfSatoshivip
· 08-12 16:04
Techniques astucieuses, c'est bien ce qu'on appelle des mouvements audacieux.
Voir l'originalRépondre0
mev_me_maybevip
· 08-11 22:32
Les débutants en café ont découvert quel grand secret ? Ce ne sont que des choses déjà entendues.
Voir l'originalRépondre0
CommunityLurkervip
· 08-11 16:39
Débutant est-ce ? Je vous suggère de commencer par un hello world.
Voir l'originalRépondre0
Blockwatcher9000vip
· 08-10 12:50
Dire les choses de manière agréable, c'est une technique, en réalité ce sont toutes sortes d'astuces.
Voir l'originalRépondre0
OnChainDetectivevip
· 08-10 12:46
J'ai étudié le déploiement de create2 depuis longtemps. Cette méthode n'est-elle pas utilisée pour poser des mines... Ceux qui comprennent savent.
Voir l'originalRépondre0
ContractExplorervip
· 08-10 12:42
Découvrir une nouvelle vulnérabilité est le plus excitant, c'est comme courir après une vulnérabilité.
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)