Partage de petites astuces pour le développement de contrats
Récemment, en participant à un projet de développement d'une exchange décentralisée, j'ai consulté le code d'un DEX renommé et appris de nombreuses astuces pratiques pour le développement de contrats. En tant que développeur ayant principalement développé des contrats NFT auparavant, c'est ma première tentative de développement de contrats Defi. Je partage ici quelques petites astuces qui pourraient être utiles aux développeurs débutants.
Adresse de contrat prévisible
L'adresse obtenue lors du déploiement d'un contrat semble aléatoire car elle est liée au nonce. Cependant, dans certaines situations, nous devons déduire l'adresse du contrat à partir des informations de la transaction, ce qui est utile pour déterminer les permissions de transaction ou pour obtenir l'adresse du pool.
Une méthode consiste à utiliser CREATE2 pour créer un contrat, en ajoutant un paramètre salt pour rendre l'adresse générée prévisible. La formule de calcul de la nouvelle adresse est :
Nouvelle adresse = hash("0xFF", adresse du créateur, sel, initcode)
Utilisation astucieuse des fonctions de rappel
Les contrats en Solidity peuvent s'appeler mutuellement. Dans certains scénarios, la méthode A appelle B, et B rappelle A dans la méthode appelée, ce modèle est très utile.
Par exemple, lors d'une transaction sur un DEX, la méthode swap du contrat de pool appellera swapCallback, en passant le nombre de tokens requis. L'appelant doit transférer les tokens dans le rappel, au lieu de diviser le swap en plusieurs appels. Cela garantit l'intégrité et la sécurité de la méthode swap.
Transmettre des informations par exception
Dans le code d'un certain DEX, utilisez un try-catch pour envelopper la méthode swap du contrat pool afin de simuler des transactions et d'estimer les tokens nécessaires. Comme il n'y a pas d'échange réel de tokens pendant l'estimation, une erreur sera levée. En lançant une erreur spéciale dans le rappel, puis en capturant et en analysant le message d'erreur, vous pouvez obtenir le résultat estimé.
Cette technique évite de modifier spécifiquement la méthode de swap pour estimer la demande, tout en maintenant une logique simple.
Problèmes de précision dans le traitement des grands nombres
Lorsqu'il s'agit de calculer les prix et la liquidité, pour éviter une perte de précision lors des opérations de division, vous pouvez d'abord décaler à gauche de 96 bits ( ce qui équivaut à multiplier par 2^96) avant d'effectuer le calcul. Ainsi, dans des transactions normales sans débordement, la précision peut être garantie.
Calcul des gains en mode Share
Lors de l'enregistrement des revenus de frais de LP, il n'est pas possible d'enregistrer chaque LP à chaque transaction, car cela consommerait beaucoup de Gas. Une solution consiste à enregistrer les frais totaux et les frais à allouer par unité de liquidité. Lors du retrait des LP, les frais extractibles sont calculés en fonction de la liquidité détenue, similaire aux dividendes d'actions.
Combinaison des données on-chain et off-chain
Toutes les informations ne doivent pas nécessairement être enregistrées sur la blockchain ou récupérées depuis celle-ci. 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 blockchain. Cela peut améliorer les performances et l'efficacité. Bien sûr, les transactions clés doivent toujours être effectuées sur la blockchain.
Fractionnement et réutilisation des contrats
Les grands projets peuvent contenir plusieurs contrats déployés en pratique. Même si un seul contrat est déployé, il peut être divisé en plusieurs contrats pour faciliter la maintenance grâce à l'héritage. En même temps, apprendre à utiliser des contrats standards existants comme ERC721 peut améliorer l'efficacité du développement.
La pratique est le meilleur moyen d'apprendre. En réalisant une version simplifiée d'un DEX, on peut comprendre plus en profondeur l'implémentation du code de certains projets complexes et acquérir davantage de connaissances sur les projets pratiques. J'espère que ces petits conseils seront utiles aux débutants qui souhaitent apprendre le développement de contrats.
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.
20 J'aime
Récompense
20
10
Reposter
Partager
Commentaire
0/400
DiamondHands
· 08-08 22:41
create2 jeton direct
Voir l'originalRépondre0
UnluckyMiner
· 08-07 07:50
Publiez plus de fragments de code
Voir l'originalRépondre0
BridgeJumper
· 08-07 04:50
Copier-coller est aussi un savoir-faire.
Voir l'originalRépondre0
nft_widow
· 08-06 21:36
Un bon article mérite d'être soutenu
Voir l'originalRépondre0
LiquidityWizard
· 08-05 23:03
L'adresse prédictive est très importante.
Voir l'originalRépondre0
ImpermanentLossFan
· 08-05 23:01
Il y a trop peu de caractères, je n'en vois pas assez.
Les sept techniques indispensables pour le développement de contrats DEX à lire absolument pour les Débutants
Partage de petites astuces pour le développement de contrats
Récemment, en participant à un projet de développement d'une exchange décentralisée, j'ai consulté le code d'un DEX renommé et appris de nombreuses astuces pratiques pour le développement de contrats. En tant que développeur ayant principalement développé des contrats NFT auparavant, c'est ma première tentative de développement de contrats Defi. Je partage ici quelques petites astuces qui pourraient être utiles aux développeurs débutants.
Adresse de contrat prévisible
L'adresse obtenue lors du déploiement d'un contrat semble aléatoire car elle est liée au nonce. Cependant, dans certaines situations, nous devons déduire l'adresse du contrat à partir des informations de la transaction, ce qui est utile pour déterminer les permissions de transaction ou pour obtenir l'adresse du pool.
Une méthode consiste à utiliser CREATE2 pour créer un contrat, en ajoutant un paramètre salt pour rendre l'adresse générée prévisible. La formule de calcul de la nouvelle adresse est :
Nouvelle adresse = hash("0xFF", adresse du créateur, sel, initcode)
Utilisation astucieuse des fonctions de rappel
Les contrats en Solidity peuvent s'appeler mutuellement. Dans certains scénarios, la méthode A appelle B, et B rappelle A dans la méthode appelée, ce modèle est très utile.
Par exemple, lors d'une transaction sur un DEX, la méthode swap du contrat de pool appellera swapCallback, en passant le nombre de tokens requis. L'appelant doit transférer les tokens dans le rappel, au lieu de diviser le swap en plusieurs appels. Cela garantit l'intégrité et la sécurité de la méthode swap.
Transmettre des informations par exception
Dans le code d'un certain DEX, utilisez un try-catch pour envelopper la méthode swap du contrat pool afin de simuler des transactions et d'estimer les tokens nécessaires. Comme il n'y a pas d'échange réel de tokens pendant l'estimation, une erreur sera levée. En lançant une erreur spéciale dans le rappel, puis en capturant et en analysant le message d'erreur, vous pouvez obtenir le résultat estimé.
Cette technique évite de modifier spécifiquement la méthode de swap pour estimer la demande, tout en maintenant une logique simple.
Problèmes de précision dans le traitement des grands nombres
Lorsqu'il s'agit de calculer les prix et la liquidité, pour éviter une perte de précision lors des opérations de division, vous pouvez d'abord décaler à gauche de 96 bits ( ce qui équivaut à multiplier par 2^96) avant d'effectuer le calcul. Ainsi, dans des transactions normales sans débordement, la précision peut être garantie.
Calcul des gains en mode Share
Lors de l'enregistrement des revenus de frais de LP, il n'est pas possible d'enregistrer chaque LP à chaque transaction, car cela consommerait beaucoup de Gas. Une solution consiste à enregistrer les frais totaux et les frais à allouer par unité de liquidité. Lors du retrait des LP, les frais extractibles sont calculés en fonction de la liquidité détenue, similaire aux dividendes d'actions.
Combinaison des données on-chain et off-chain
Toutes les informations ne doivent pas nécessairement être enregistrées sur la blockchain ou récupérées depuis celle-ci. 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 blockchain. Cela peut améliorer les performances et l'efficacité. Bien sûr, les transactions clés doivent toujours être effectuées sur la blockchain.
Fractionnement et réutilisation des contrats
Les grands projets peuvent contenir plusieurs contrats déployés en pratique. Même si un seul contrat est déployé, il peut être divisé en plusieurs contrats pour faciliter la maintenance grâce à l'héritage. En même temps, apprendre à utiliser des contrats standards existants comme ERC721 peut améliorer l'efficacité du développement.
La pratique est le meilleur moyen d'apprendre. En réalisant une version simplifiée d'un DEX, on peut comprendre plus en profondeur l'implémentation du code de certains projets complexes et acquérir davantage de connaissances sur les projets pratiques. J'espère que ces petits conseils seront utiles aux débutants qui souhaitent apprendre le développement de contrats.