Partage de petits conseils pour le développement de contrats
Récemment, en développant un projet d'échange décentralisé, j'ai consulté le code de certains DEX connus et appris de nombreuses techniques intéressantes de développement de contrats. En tant que débutant qui vient juste de plonger dans le développement 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 intelligents.
Adresse du contrat à terme
Les adresses de contrat déployées semblent généralement aléatoires, car elles sont liées au nonce. Cependant, dans certains scénarios, nous devons déduire l'adresse du contrat à partir des informations de la transaction. Cela peut être réalisé en utilisant la méthode CREATE2 pour créer un contrat, en ajoutant un paramètre salt lors de la création du contrat. L'adresse générée de cette manière est prévisible, suivant la logique "nouvelle adresse = hash('0xFF', adresse du créateur, salt, initcode)".
Utiliser des fonctions de rappel
Dans certains cas, il est utile que le contrat A appelle une méthode du contrat B, qui rappelle ensuite A dans la méthode appelée. Par exemple, dans un DEX, lorsque la méthode swap du contrat de la pool de liquidité est appelée, elle rappelle swapCallback en passant la quantité de Token réellement nécessaire. L'appelant doit transférer les Tokens requis dans la pool de liquidité lors du rappel, ce qui garantit l'exécution complète et la sécurité de la méthode swap.
Transmettre des informations par exception
Lors de l'estimation des transactions, il est possible d'encapsuler l'exécution de la méthode swap dans un try-catch. Comme il n'y a pas d'échange réel de Token lors de l'estimation, une erreur sera générée. Il est possible de lancer des erreurs spéciales dans la fonction de rappel, puis de les capturer et d'en extraire les informations nécessaires. Cette méthode évite de modifier spécifiquement la méthode swap pour les besoins d'estimation, rendant la logique plus simple.
Problème de précision du traitement des grands nombres
Lorsqu'il s'agit de calculs de prix et de liquidité, afin d'éviter la perte de précision due à la division, il est possible de décaler les valeurs de 96 bits vers la gauche ( ce qui équivaut à multiplier par 2^96) avant de procéder au calcul. Bien qu'il y ait théoriquement encore une légère perte de précision, cela reste dans une plage acceptable.
Calcul des revenus par le biais du partage
Pour les revenus de frais de transaction des fournisseurs de liquidité, il n'est pas nécessaire d'enregistrer chaque transaction. On peut enregistrer les frais totaux et les frais dus par unité de liquidité. Lors du retrait des LP, le montant pouvant être retiré est calculé en fonction de la liquidité détenue. Cela ressemble au principe des dividendes d'actions.
Combinaison de données on-chain et off-chain
Toutes les informations n'ont pas besoin d'être mises en chaîne ou récupérées de la chaîne. Par exemple, les listes de pools de transactions et d'autres informations peuvent être stockées dans des bases de données traditionnelles et synchronisées régulièrement avec la chaîne. Cela peut améliorer l'efficacité et réduire les coûts. Bien sûr, les transactions clés doivent toujours être effectuées sur la chaîne.
Fractionnement de contrat et utilisation de contrats standard
Les grands projets peuvent être divisés en plusieurs contrats déployés de manière pratique, ou en scindant le code par héritage. Il est également possible d'utiliser des contrats standard existants comme l'ERC721 pour améliorer l'efficacité du développement. Par exemple, utiliser des NFT pour gérer des positions de liquidité.
Pour comprendre en profondeur ces techniques, le meilleur moyen est de développer par vous-même une version simplifiée d'un DEX. En pratique, vous comprendrez plus profondément les différentes approches de conception et vous apprendrez également plus de connaissances pratiques. J'espère que ces partages vous inspireront et vous aideront.
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.
10 J'aime
Récompense
10
2
Partager
Commentaire
0/400
AirdropHustler
· 07-19 11:31
Cette vague de compétences de développement est considérée comme des bénéfices modestes pour le frère du commerce.
7 astuces pratiques pour le développement de smart contracts pour soutenir les projets DEX
Partage de petits conseils pour le développement de contrats
Récemment, en développant un projet d'échange décentralisé, j'ai consulté le code de certains DEX connus et appris de nombreuses techniques intéressantes de développement de contrats. En tant que débutant qui vient juste de plonger dans le développement 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 intelligents.
Adresse du contrat à terme
Les adresses de contrat déployées semblent généralement aléatoires, car elles sont liées au nonce. Cependant, dans certains scénarios, nous devons déduire l'adresse du contrat à partir des informations de la transaction. Cela peut être réalisé en utilisant la méthode CREATE2 pour créer un contrat, en ajoutant un paramètre salt lors de la création du contrat. L'adresse générée de cette manière est prévisible, suivant la logique "nouvelle adresse = hash('0xFF', adresse du créateur, salt, initcode)".
Utiliser des fonctions de rappel
Dans certains cas, il est utile que le contrat A appelle une méthode du contrat B, qui rappelle ensuite A dans la méthode appelée. Par exemple, dans un DEX, lorsque la méthode swap du contrat de la pool de liquidité est appelée, elle rappelle swapCallback en passant la quantité de Token réellement nécessaire. L'appelant doit transférer les Tokens requis dans la pool de liquidité lors du rappel, ce qui garantit l'exécution complète et la sécurité de la méthode swap.
Transmettre des informations par exception
Lors de l'estimation des transactions, il est possible d'encapsuler l'exécution de la méthode swap dans un try-catch. Comme il n'y a pas d'échange réel de Token lors de l'estimation, une erreur sera générée. Il est possible de lancer des erreurs spéciales dans la fonction de rappel, puis de les capturer et d'en extraire les informations nécessaires. Cette méthode évite de modifier spécifiquement la méthode swap pour les besoins d'estimation, rendant la logique plus simple.
Problème de précision du traitement des grands nombres
Lorsqu'il s'agit de calculs de prix et de liquidité, afin d'éviter la perte de précision due à la division, il est possible de décaler les valeurs de 96 bits vers la gauche ( ce qui équivaut à multiplier par 2^96) avant de procéder au calcul. Bien qu'il y ait théoriquement encore une légère perte de précision, cela reste dans une plage acceptable.
Calcul des revenus par le biais du partage
Pour les revenus de frais de transaction des fournisseurs de liquidité, il n'est pas nécessaire d'enregistrer chaque transaction. On peut enregistrer les frais totaux et les frais dus par unité de liquidité. Lors du retrait des LP, le montant pouvant être retiré est calculé en fonction de la liquidité détenue. Cela ressemble au principe des dividendes d'actions.
Combinaison de données on-chain et off-chain
Toutes les informations n'ont pas besoin d'être mises en chaîne ou récupérées de la chaîne. Par exemple, les listes de pools de transactions et d'autres informations peuvent être stockées dans des bases de données traditionnelles et synchronisées régulièrement avec la chaîne. Cela peut améliorer l'efficacité et réduire les coûts. Bien sûr, les transactions clés doivent toujours être effectuées sur la chaîne.
Fractionnement de contrat et utilisation de contrats standard
Les grands projets peuvent être divisés en plusieurs contrats déployés de manière pratique, ou en scindant le code par héritage. Il est également possible d'utiliser des contrats standard existants comme l'ERC721 pour améliorer l'efficacité du développement. Par exemple, utiliser des NFT pour gérer des positions de liquidité.
Pour comprendre en profondeur ces techniques, le meilleur moyen est de développer par vous-même une version simplifiée d'un DEX. En pratique, vous comprendrez plus profondément les différentes approches de conception et vous apprendrez également plus de connaissances pratiques. J'espère que ces partages vous inspireront et vous aideront.