Techniques de développement de smart contracts apprises à partir du code Uniswap
Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai consulté l'implémentation du code d'Uniswap V3 et appris de nombreuses techniques intéressantes pour le développement de smart contracts. En tant que développeur tentant pour la première fois de créer un contrat DeFi, ces techniques seront très utiles pour les nouveaux venus souhaitant apprendre le développement de contrats.
Adresses de contrat prévisibles
En général, 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 équivalentes de la transaction, par exemple pour évaluer les autorisations de transaction ou obtenir l'adresse de la piscine.
Uniswap utilise la méthode CREATE2 pour créer des contrats, ajoutant un paramètre salt pour rendre l'adresse prévisible. La logique de génération de nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode). Cette méthode permet de calculer à l'avance l'adresse du contrat.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Les calculs de grands nombres résolvent les problèmes de précision
Uniswap implique de nombreux calculs, tels que le calcul du nombre de tokens échangés en fonction du prix et de la liquidité. Pour éviter la perte de précision lors des opérations de division, le processus de calcul utilise souvent l'opération << FixedPoint96.RESOLUTION, qui correspond à un décalage à gauche de 96 bits, équivalent à multiplier par 2^96.
Déplacez à gauche puis effectuez la division, ce qui garantit la précision sans débordement dans les transactions normales. Bien qu'il y ait théoriquement une légère perte de précision, elle est désormais acceptable.
Calcul des revenus par le biais du partage
Uniswap doit enregistrer les revenus de frais des fournisseurs de liquidité LP). Il est évident qu'il n'est pas possible d'enregistrer les frais pour chaque LP à chaque transaction, ce qui consommerait beaucoup de Gas.
La solution consiste à enregistrer le total des frais de transaction et les frais à attribuer par unité de liquidité. Lors du retrait des LP, les frais récupérables sont calculés en fonction de la liquidité détenue, similaire aux dividendes d'actions.
Distinction entre les informations on-chain et off-chain
Le stockage on-chain est relativement coûteux, toutes les informations n'ont pas besoin d'être sur la chaîne ou récupérées depuis la chaîne. Par exemple, de nombreuses interfaces appelées par le front-end d'Uniswap sont des interfaces Web2 traditionnelles.
La liste des pools de transactions, les informations, etc. peuvent être stockées dans une base de données classique, synchronisées régulièrement depuis la chaîne. Il n'est pas nécessaire d'appeler en temps réel l'interface RPC pour obtenir des données connexes. Bien sûr, les transactions clés se déroulent toujours sur la chaîne.
Division des contrats et réutilisation des contrats standards
Un projet peut contenir plusieurs contrats réellement déployés. Même si un seul contrat est déployé, le code peut être divisé en plusieurs contrats à maintenir par héritage.
Le contrat NonfungiblePositionManager de Uniswap hérite de plusieurs contrats. Le ERC721Permit utilise directement le contrat ERC721 d'OpenZeppelin, ce qui facilite la gestion des positions via les NFT et améliore l'efficacité du développement.
Résumé
Développer par soi-même est plus efficace que de simplement lire des articles. Essayer de réaliser une version simplifiée d'une plateforme d'échange décentralisée permet de mieux comprendre l'implémentation du code d'Uniswap et d'apprendre des points de connaissance issus de projets réels.
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.
21 J'aime
Récompense
21
7
Partager
Commentaire
0/400
PoolJumper
· 07-28 02:11
Zéro infrastructure à faire quelques-uns
Voir l'originalRépondre0
OldLeekConfession
· 07-27 04:18
Tu es déjà impressionnant si tu peux me faire comprendre...
Voir l'originalRépondre0
OnchainGossiper
· 07-27 03:51
Conseils pour pratiquer sur le terrain~
Voir l'originalRépondre0
BagHolderTillRetire
· 07-25 17:02
Enfin trouvé une issue pour sortir de ma situation piégée.
Analyse des 7 grandes techniques de développement de contrats Uniswap pour améliorer l'efficacité des projets de Finance décentralisée
Techniques de développement de smart contracts apprises à partir du code Uniswap
Récemment, en rédigeant un tutoriel sur le développement d'échanges décentralisés, j'ai consulté l'implémentation du code d'Uniswap V3 et appris de nombreuses techniques intéressantes pour le développement de smart contracts. En tant que développeur tentant pour la première fois de créer un contrat DeFi, ces techniques seront très utiles pour les nouveaux venus souhaitant apprendre le développement de contrats.
Adresses de contrat prévisibles
En général, 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 équivalentes de la transaction, par exemple pour évaluer les autorisations de transaction ou obtenir l'adresse de la piscine.
Uniswap utilise la méthode CREATE2 pour créer des contrats, ajoutant un paramètre salt pour rendre l'adresse prévisible. La logique de génération de nouvelle adresse est : hash("0xFF", adresse du créateur, salt, initcode). Cette méthode permet de calculer à l'avance l'adresse du contrat.
https://img-cdn.gateio.im/webp-social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a.webp(
Les calculs de grands nombres résolvent les problèmes de précision
Uniswap implique de nombreux calculs, tels que le calcul du nombre de tokens échangés en fonction du prix et de la liquidité. Pour éviter la perte de précision lors des opérations de division, le processus de calcul utilise souvent l'opération << FixedPoint96.RESOLUTION, qui correspond à un décalage à gauche de 96 bits, équivalent à multiplier par 2^96.
Déplacez à gauche puis effectuez la division, ce qui garantit la précision sans débordement dans les transactions normales. Bien qu'il y ait théoriquement une légère perte de précision, elle est désormais acceptable.
Calcul des revenus par le biais du partage
Uniswap doit enregistrer les revenus de frais des fournisseurs de liquidité LP). Il est évident qu'il n'est pas possible d'enregistrer les frais pour chaque LP à chaque transaction, ce qui consommerait beaucoup de Gas.
La solution consiste à enregistrer le total des frais de transaction et les frais à attribuer par unité de liquidité. Lors du retrait des LP, les frais récupérables sont calculés en fonction de la liquidité détenue, similaire aux dividendes d'actions.
Distinction entre les informations on-chain et off-chain
Le stockage on-chain est relativement coûteux, toutes les informations n'ont pas besoin d'être sur la chaîne ou récupérées depuis la chaîne. Par exemple, de nombreuses interfaces appelées par le front-end d'Uniswap sont des interfaces Web2 traditionnelles.
La liste des pools de transactions, les informations, etc. peuvent être stockées dans une base de données classique, synchronisées régulièrement depuis la chaîne. Il n'est pas nécessaire d'appeler en temps réel l'interface RPC pour obtenir des données connexes. Bien sûr, les transactions clés se déroulent toujours sur la chaîne.
Division des contrats et réutilisation des contrats standards
Un projet peut contenir plusieurs contrats réellement déployés. Même si un seul contrat est déployé, le code peut être divisé en plusieurs contrats à maintenir par héritage.
Le contrat NonfungiblePositionManager de Uniswap hérite de plusieurs contrats. Le ERC721Permit utilise directement le contrat ERC721 d'OpenZeppelin, ce qui facilite la gestion des positions via les NFT et améliore l'efficacité du développement.
Résumé
Développer par soi-même est plus efficace que de simplement lire des articles. Essayer de réaliser une version simplifiée d'une plateforme d'échange décentralisée permet de mieux comprendre l'implémentation du code d'Uniswap et d'apprendre des points de connaissance issus de projets réels.