Techniques de développement de contrats apprises à partir du code Uniswap
Récemment, en rédigeant un tutoriel de développement d'échange décentralisé, j'ai consulté le code d'implémentation d'Uniswap V3 et appris de nombreux points précieux. En tant que développeur qui tente pour la première fois de développer des contrats Defi, ces techniques seront très utiles pour les novices qui souhaitent apprendre le développement de contrats.
Adresse de déploiement de contrat prévisible
L'adresse obtenue par le déploiement d'un contrat semble aléatoire, car elle est liée au nonce. Cependant, dans certains cas, nous devons inférer l'adresse du contrat à partir des paires de transactions et des informations connexes. Uniswap utilise la méthode CREATE2 pour créer des contrats, en ajoutant un paramètre salt, ce qui rend l'adresse du contrat générée prévisible. La logique de génération d'adresse est : nouvelle adresse = hash("0xFF", adresse du créateur, salt, initcode).
Utilisation astucieuse des fonctions de rappel
Dans certains scénarios, l'appel et le rappel mutuels entre les contrats sont très utiles. Par exemple, dans la méthode swap d'Uniswap, le swapCallback est rappelé, avec le nombre de tokens requis effectivement transmis. L'appelant doit transférer les tokens nécessaires dans le pool lors du rappel, garantissant ainsi l'intégrité et la sécurité de l'ensemble de la logique de transaction.
Utiliser les exceptions pour transmettre des informations, estimer les transactions avec try catch
Dans le contrat Quoter d'Uniswap, la méthode swap est exécutée à l'aide d'un bloc try catch pour estimer la transaction. En lançant une erreur spéciale dans la fonction de rappel, puis en capturant et en analysant les informations d'erreur, la fonctionnalité d'estimation des transactions est réalisée sans avoir à adapter spécifiquement la méthode swap pour répondre aux besoins d'estimation.
Résoudre le problème de précision des grands nombres
La logique de calcul dans Uniswap utilise fréquemment l'opération de décalage à gauche de 96 bits (équivalente à multiplier par 2^96). Cette méthode assure que les transactions normales ne débordent pas tout en garantissant la précision. Bien qu'il existe théoriquement une très légère perte de précision, elle est acceptable dans les applications pratiques.
Calcul des revenus du mécanisme de partage
Pour enregistrer efficacement les revenus de frais de transaction des LP, Uniswap utilise un système similaire à la répartition des actions. En enregistrant les frais de transaction totaux et les frais de transaction à allouer par unité de liquidité, les LP n'ont qu'à calculer les frais de transaction récupérables en fonction de la liquidité qu'ils détiennent au moment du retrait, ce qui réduit considérablement la consommation de gaz.
Utilisation raisonnable des informations hors chaîne
Étant donné le coût élevé du stockage sur la chaîne, toutes les informations ne doivent pas nécessairement être enregistrées sur la chaîne ou récupérées à partir de la chaîne. Par exemple, la liste des pools de transactions, les informations sur les pools, etc., peuvent être stockées dans une base de données traditionnelle et synchronisées régulièrement avec les données de la chaîne. Cette méthode peut améliorer l'efficacité et réduire les coûts.
Fractionnement des contrats et réutilisation des contrats standard
Un projet peut inclure plusieurs contrats déployés réellement, même si un seul contrat est déployé, il est possible de diviser le code en plusieurs contrats à maintenir par héritage. De plus, l'utilisation de contrats standards existants (comme l'ERC721) peut améliorer l'efficacité du développement et renforcer la fiabilité des contrats.
Conclusion
La pratique est la meilleure méthode d'apprentissage. En essayant de réaliser une version simplifiée d'une bourse décentralisée, on peut comprendre plus profondément la mise en œuvre du code d'Uniswap et acquérir de précieuses expériences de projets réels. Pour les développeurs intéressés par l'apprentissage approfondi du développement de projets Web3 et DeFi, participer à des cours pratiques sera un excellent choix.
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.
12 J'aime
Récompense
12
6
Partager
Commentaire
0/400
GateUser-9ad11037
· Il y a 16h
Débutant entrer dans une position tutoriel齁
Voir l'originalRépondre0
WalletManager
· Il y a 16h
L'audit rigoureux avant le contrat est comme les fondations d'un projet... Apprenez à avancer.
Voir l'originalRépondre0
SmartContractRebel
· Il y a 17h
Le développeur vit sur ses acquis.
Voir l'originalRépondre0
GateUser-a606bf0c
· Il y a 17h
C'est tout ? C'est trop basique, non ?
Voir l'originalRépondre0
BlockchainBouncer
· Il y a 17h
Je ne comprends pas, ça va trop vite.
Voir l'originalRépondre0
GasGuzzler
· Il y a 17h
Même si je le dis dix fois, je ne saurai pas écrire.
Décryptage du code Uniswap : 7 astuces de développement de smart contracts détaillées
Techniques de développement de contrats apprises à partir du code Uniswap
Récemment, en rédigeant un tutoriel de développement d'échange décentralisé, j'ai consulté le code d'implémentation d'Uniswap V3 et appris de nombreux points précieux. En tant que développeur qui tente pour la première fois de développer des contrats Defi, ces techniques seront très utiles pour les novices qui souhaitent apprendre le développement de contrats.
Adresse de déploiement de contrat prévisible
L'adresse obtenue par le déploiement d'un contrat semble aléatoire, car elle est liée au nonce. Cependant, dans certains cas, nous devons inférer l'adresse du contrat à partir des paires de transactions et des informations connexes. Uniswap utilise la méthode CREATE2 pour créer des contrats, en ajoutant un paramètre salt, ce qui rend l'adresse du contrat générée prévisible. La logique de génération d'adresse est : nouvelle adresse = hash("0xFF", adresse du créateur, salt, initcode).
Utilisation astucieuse des fonctions de rappel
Dans certains scénarios, l'appel et le rappel mutuels entre les contrats sont très utiles. Par exemple, dans la méthode swap d'Uniswap, le swapCallback est rappelé, avec le nombre de tokens requis effectivement transmis. L'appelant doit transférer les tokens nécessaires dans le pool lors du rappel, garantissant ainsi l'intégrité et la sécurité de l'ensemble de la logique de transaction.
Utiliser les exceptions pour transmettre des informations, estimer les transactions avec try catch
Dans le contrat Quoter d'Uniswap, la méthode swap est exécutée à l'aide d'un bloc try catch pour estimer la transaction. En lançant une erreur spéciale dans la fonction de rappel, puis en capturant et en analysant les informations d'erreur, la fonctionnalité d'estimation des transactions est réalisée sans avoir à adapter spécifiquement la méthode swap pour répondre aux besoins d'estimation.
Résoudre le problème de précision des grands nombres
La logique de calcul dans Uniswap utilise fréquemment l'opération de décalage à gauche de 96 bits (équivalente à multiplier par 2^96). Cette méthode assure que les transactions normales ne débordent pas tout en garantissant la précision. Bien qu'il existe théoriquement une très légère perte de précision, elle est acceptable dans les applications pratiques.
Calcul des revenus du mécanisme de partage
Pour enregistrer efficacement les revenus de frais de transaction des LP, Uniswap utilise un système similaire à la répartition des actions. En enregistrant les frais de transaction totaux et les frais de transaction à allouer par unité de liquidité, les LP n'ont qu'à calculer les frais de transaction récupérables en fonction de la liquidité qu'ils détiennent au moment du retrait, ce qui réduit considérablement la consommation de gaz.
Utilisation raisonnable des informations hors chaîne
Étant donné le coût élevé du stockage sur la chaîne, toutes les informations ne doivent pas nécessairement être enregistrées sur la chaîne ou récupérées à partir de la chaîne. Par exemple, la liste des pools de transactions, les informations sur les pools, etc., peuvent être stockées dans une base de données traditionnelle et synchronisées régulièrement avec les données de la chaîne. Cette méthode peut améliorer l'efficacité et réduire les coûts.
Fractionnement des contrats et réutilisation des contrats standard
Un projet peut inclure plusieurs contrats déployés réellement, même si un seul contrat est déployé, il est possible de diviser le code en plusieurs contrats à maintenir par héritage. De plus, l'utilisation de contrats standards existants (comme l'ERC721) peut améliorer l'efficacité du développement et renforcer la fiabilité des contrats.
Conclusion
La pratique est la meilleure méthode d'apprentissage. En essayant de réaliser une version simplifiée d'une bourse décentralisée, on peut comprendre plus profondément la mise en œuvre du code d'Uniswap et acquérir de précieuses expériences de projets réels. Pour les développeurs intéressés par l'apprentissage approfondi du développement de projets Web3 et DeFi, participer à des cours pratiques sera un excellent choix.