Partage de petites astuces sur le développement de contrats
Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai consulté le code de certains projets connus et appris de nombreuses techniques intéressantes de développement de contrats. En tant que débutant qui essaie pour la première fois de développer des contrats Defi, ces techniques m'ont beaucoup inspiré et je suis sûr qu'elles seront également utiles à d'autres amis souhaitant apprendre le développement de contrats.
Adresse de contrat prévisible
L'adresse d'un contrat déployé semble généralement aléatoire car elle est liée au nonce. Cependant, dans certaines situations, nous devons inférer l'adresse du contrat à partir des informations de transaction correspondantes, ce qui est très utile pour déterminer les autorisations de transaction ou pour obtenir l'adresse du pool.
Une méthode consiste à créer un contrat en utilisant la méthode CREATE2, en rendant l'adresse générée prévisible en ajoutant un paramètre salt. La logique de génération de la nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode).
Utiliser astucieusement les fonctions de rappel
Dans certains scénarios, il est très utile que le contrat A appelle une méthode du contrat B, puis que B rappelle une méthode de A.
Par exemple, lors d'une transaction, la méthode swap du contrat de pool appellera swapCallback, en passant le nombre de tokens requis. L'appelant transférera les tokens dans le pool lors de l'appel de retour, ce qui garantit la sécurité et l'intégrité de la méthode swap, sans avoir besoin d'enregistrements de variables compliqués.
Transmettre des informations par exception
Lors de la simulation de transactions pour estimer les Tokens nécessaires, il est possible de lancer une erreur spéciale dans la fonction de rappel, puis de capturer cette erreur et d'en extraire les informations requises. Cela évite d'avoir à modifier spécialement la méthode de swap pour estimer les besoins, rendant la logique plus simple.
Résolution des problèmes de précision des grands nombres
Dans les scénarios impliquant des calculs, afin d'éviter la perte de précision lors des opérations de division, il est possible de décaler à gauche de 96 bits ( équivalent à multiplier par 2^96), puis de procéder à l'opération de division. Cela garantit la précision sans débordement.
Calcul des bénéfices par la méthode Share
Dans les cas où il est nécessaire d'enregistrer les revenus des frais de LP, il n'est pas possible d'enregistrer chaque LP à chaque transaction, car cela consommerait une quantité importante de Gas. On peut adopter un système similaire aux dividendes d'actions, en n'enregistrant que les frais totaux et les frais à attribuer par unité de liquidité, puis en calculant lors du retrait des LP en fonction de la liquidité détenue.
Informations auxiliaires de stockage hors chaîne
Toutes les informations n'ont pas besoin d'être enregistrées sur la chaîne ou d'être récupérées depuis la chaîne. Certaines données non critiques, telles que la liste des pools de transactions et les informations sur les pools, peuvent être stockées dans une base de données ordinaire et synchronisées régulièrement avec la chaîne. Cela peut améliorer les performances et l'efficacité.
Division de contrat et réutilisation de contrat standard
Les grands projets peuvent diviser les contrats en plusieurs parties ou les diviser et les maintenir par héritage. Ils peuvent également réutiliser des contrats standards tels que ERC721, ce qui améliore l'efficacité du développement.
Développez vous-même une version simplifiée d'une plateforme d'échange décentralisée pour mieux comprendre l'application de ces techniques. J'espère que ces partages seront utiles à tous.
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.
19 J'aime
Récompense
19
7
Partager
Commentaire
0/400
HappyMinerUncle
· 08-04 03:00
C'est trop compliqué, n'est-ce pas ? Tous les mineurs, préparez-vous aux pièges.
Voir l'originalRépondre0
SadMoneyMeow
· 08-03 20:33
Ce type de contrat est vraiment trop luxueux...
Voir l'originalRépondre0
SandwichTrader
· 08-01 04:28
Une nouvelle vague qui est mauvaise mais ne fait pas de rug pull.
Voir l'originalRépondre0
LayerZeroHero
· 08-01 03:29
Il est conseillé de tester directement avec dapptools, tester avec du gas est plus fiable.
Voir l'originalRépondre0
hodl_therapist
· 08-01 03:21
Êtes-vous sûr que tout cela est de la dernière technologie ?... Ça a l'air un peu vieux.
Voir l'originalRépondre0
NewPumpamentals
· 08-01 03:11
le niveau de sel n'est pas encore atteint, mon vieux.
7 astuces pratiques pour le développement de contrats intelligents pour soutenir les projets DeFi
Partage de petites astuces sur le développement de contrats
Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai consulté le code de certains projets connus et appris de nombreuses techniques intéressantes de développement de contrats. En tant que débutant qui essaie pour la première fois de développer des contrats Defi, ces techniques m'ont beaucoup inspiré et je suis sûr qu'elles seront également utiles à d'autres amis souhaitant apprendre le développement de contrats.
Adresse de contrat prévisible
L'adresse d'un contrat déployé semble généralement aléatoire car elle est liée au nonce. Cependant, dans certaines situations, nous devons inférer l'adresse du contrat à partir des informations de transaction correspondantes, ce qui est très utile pour déterminer les autorisations de transaction ou pour obtenir l'adresse du pool.
Une méthode consiste à créer un contrat en utilisant la méthode CREATE2, en rendant l'adresse générée prévisible en ajoutant un paramètre salt. La logique de génération de la nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode).
Utiliser astucieusement les fonctions de rappel
Dans certains scénarios, il est très utile que le contrat A appelle une méthode du contrat B, puis que B rappelle une méthode de A.
Par exemple, lors d'une transaction, la méthode swap du contrat de pool appellera swapCallback, en passant le nombre de tokens requis. L'appelant transférera les tokens dans le pool lors de l'appel de retour, ce qui garantit la sécurité et l'intégrité de la méthode swap, sans avoir besoin d'enregistrements de variables compliqués.
Transmettre des informations par exception
Lors de la simulation de transactions pour estimer les Tokens nécessaires, il est possible de lancer une erreur spéciale dans la fonction de rappel, puis de capturer cette erreur et d'en extraire les informations requises. Cela évite d'avoir à modifier spécialement la méthode de swap pour estimer les besoins, rendant la logique plus simple.
Résolution des problèmes de précision des grands nombres
Dans les scénarios impliquant des calculs, afin d'éviter la perte de précision lors des opérations de division, il est possible de décaler à gauche de 96 bits ( équivalent à multiplier par 2^96), puis de procéder à l'opération de division. Cela garantit la précision sans débordement.
Calcul des bénéfices par la méthode Share
Dans les cas où il est nécessaire d'enregistrer les revenus des frais de LP, il n'est pas possible d'enregistrer chaque LP à chaque transaction, car cela consommerait une quantité importante de Gas. On peut adopter un système similaire aux dividendes d'actions, en n'enregistrant que les frais totaux et les frais à attribuer par unité de liquidité, puis en calculant lors du retrait des LP en fonction de la liquidité détenue.
Informations auxiliaires de stockage hors chaîne
Toutes les informations n'ont pas besoin d'être enregistrées sur la chaîne ou d'être récupérées depuis la chaîne. Certaines données non critiques, telles que la liste des pools de transactions et les informations sur les pools, peuvent être stockées dans une base de données ordinaire et synchronisées régulièrement avec la chaîne. Cela peut améliorer les performances et l'efficacité.
Division de contrat et réutilisation de contrat standard
Les grands projets peuvent diviser les contrats en plusieurs parties ou les diviser et les maintenir par héritage. Ils peuvent également réutiliser des contrats standards tels que ERC721, ce qui améliore l'efficacité du développement.
Développez vous-même une version simplifiée d'une plateforme d'échange décentralisée pour mieux comprendre l'application de ces techniques. J'espère que ces partages seront utiles à tous.