Solana Web3.js 2.x Version : séparation des fonctionnalités et optimisation des performances
La bibliothèque JavaScript riche en fonctionnalités Solana Web3.js a publié sa version 2.x en novembre de cette année. Cette nouvelle version a connu des changements significatifs par rapport à la version 1.x, et cet article résumera ses principales modifications.
Bien que la version 2.x soit sortie récemment et que son utilisation ne soit pas encore élevée, de nombreuses bibliothèques largement utilisées n'ont pas encore effectué la transition, mais comprendre ces changements est très utile pour les travaux de migration futurs.
Comparaison des versions
L'ancienne version est relativement simple à utiliser, il suffit d'un paquet @solana/web3.js qui contient tout. Elle est basée sur un design orienté objet et encapsule de nombreuses opérations courantes. Par exemple, la classe Connection offre des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs.
Cependant, ce type de conception pose également certains problèmes. Même si les développeurs n'utilisent qu'une petite partie des fonctionnalités, l'ensemble de la bibliothèque de code sera téléchargé sur l'appareil de l'utilisateur, ce qui, en raison de la taille importante du code de la bibliothèque, peut entraîner un certain temps de chargement.
La version 2.x adopte une stratégie différente. L'équipe officielle a divisé l'ancienne base de code en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. En même temps, la nouvelle version abandonne l'implémentation basée sur des classes et adopte davantage une approche basée sur des fonctions uniques. Ce design favorise l'optimisation lors de la construction du code JavaScript, le code inutilisé sera supprimé et ne sera pas téléchargé sur l'appareil de l'utilisateur. Selon les statistiques du document officiel, l'utilisation de la nouvelle version des DApps peut généralement réaliser environ 30 % d'optimisation en taille, et si seules une très petite partie des fonctionnalités est utilisée, le taux d'optimisation peut être encore plus élevé.
Ce changement a également posé des défis pour le travail de documentation de l'équipe Solana, la manière de permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires est devenue un problème important. Actuellement, les noms de paquet ont une bonne sémantique, ce qui permet de comprendre en gros leur utilisation rien qu'à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Cependant, en raison de sa récente publication, de nombreux projets n'ont pas encore effectué la migration. Il y a également peu d'exemples concernant la version 2.x sur Solana Cookbook. La nouvelle version a tendance à utiliser des fonctionnalités intégrées au runtime (comme la génération de paires de clés), mais la documentation est insuffisante sur ces parties, ce qui peut laisser les développeurs dans la confusion.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut ne pas être aussi important pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre de cette année dans les versions @solana/web3.js 1.95.5 et 1.95.6, un plus grand nombre d'entrées externes et de dépendances augmenterait considérablement la probabilité d'événements de sécurité. Avec la publication de la version 2.x, l'équipe de développement de Web3.js a décidé d'utiliser davantage de fonctionnalités natives, en abandonnant les dépendances externes et l'introduction de Polyfills. Bien que des changements puissent survenir à l'avenir, la version 2.x a actuellement éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Sa fonction principale est de créer un expéditeur de requêtes en configurant l'adresse de requête RPC, puis d'envoyer diverses requêtes à travers celui-ci.
La version 2.x utilise une approche plus fonctionnelle pour implémenter cette fonctionnalité. Par exemple, lorsque vous appelez sendAndConfirmTransaction pour envoyer une transaction, une requête HTTPS est automatiquement lancée et une connexion WSS est établie, s'abonnant à l'état de la transaction, et retourne le hash de la transaction une fois celle-ci confirmée.
paire de clés
La partie liée à la clé publique et à la clé privée a également connu des changements importants. Les classes Keypair et PublicKey, couramment utilisées dans la version 1.x, n'existent plus et ont été remplacées par certaines fonctions.
Par exemple, vous pouvez utiliser await generateKeyPair() pour générer une paire de clés, au lieu de l'ancienne Keypair.generate(). Il est important de noter que le nouveau generateKeyPair retourne une promesse, et non directement une paire de clés. Cela est dû au fait que la nouvelle implémentation utilise autant que possible l'API Web Crypto de JavaScript, en utilisant l'implémentation native d'Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, ce changement n'est pas difficile à accepter, car à la fin de l'année 2024, les développeurs JavaScript sont déjà très familiers avec les promesses.
envoyer la transaction
Les classes Transaction et VersionedTransaction de la version 1.x n'existent plus dans la version 2.x.
Les méthodes liées au System Program fournies dans l'ancienne version ne sont plus disponibles, donc toutes les méthodes statiques de la classe SystemProgram doivent être importées d'autres endroits. Par exemple, l'instruction transfer nécessite d'appeler la fonction getTransferSolInstruction dans @solana-program/system.
Étant donné que la classe n'est plus fournie, Web3.js propose une forme de pipe couramment utilisée en programmation fonctionnelle. Les développeurs peuvent utiliser la fonction pipe pour réaliser la fonctionnalité de transfert de la version 1.x.
Il convient de noter que les transactions ne sont plus initiées via Connection, mais plutôt en générant une fonction unique à l'aide d'un RPC Provider défini par le développeur, puis en appelant cette fonction pour initier la transaction. Par rapport à la version 1.x, le volume de code a légèrement augmenté, mais la personnalisation est devenue plus forte.
Les transactions sont initiées via HTTPS RPC, puis confirmées par l'abonnement à WSS RPC. On peut ressentir que cette nouvelle méthode dépend fortement de WSS, et je crois que l'application de WSS sera de plus en plus répandue à l'avenir, ce qui impose des exigences plus élevées en matière de stabilité des services des fournisseurs de RPC.
React
Il convient de mentionner que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui offre quelques hooks React, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js illustre l'engagement de l'équipe Solana envers l'évolution et l'amélioration continues. Elle offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, contribuant ainsi à l'adoption et au développement de la plateforme.
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.
8 J'aime
Récompense
8
4
Partager
Commentaire
0/400
SignatureVerifier
· Il y a 20h
smh... une autre publication précipitée nécessitant un audit de sécurité approfondi
Voir l'originalRépondre0
BearMarketSurvivor
· Il y a 20h
Plus la performance est optimisée, plus il y a de pigeons.
Voir l'originalRépondre0
AlwaysAnon
· Il y a 20h
Oh là là, enfin une mise à jour!
Voir l'originalRépondre0
DefiPlaybook
· Il y a 20h
Selon la courbe de hausse du TVL, la performance après l'optimisation de l'architecture modulaire 2.x a augmenté de 27,8 %.
Mise à niveau majeure de la version 2.x de Solana Web3.js : séparation des fonctionnalités et optimisation des performances
Solana Web3.js 2.x Version : séparation des fonctionnalités et optimisation des performances
La bibliothèque JavaScript riche en fonctionnalités Solana Web3.js a publié sa version 2.x en novembre de cette année. Cette nouvelle version a connu des changements significatifs par rapport à la version 1.x, et cet article résumera ses principales modifications.
Bien que la version 2.x soit sortie récemment et que son utilisation ne soit pas encore élevée, de nombreuses bibliothèques largement utilisées n'ont pas encore effectué la transition, mais comprendre ces changements est très utile pour les travaux de migration futurs.
Comparaison des versions
L'ancienne version est relativement simple à utiliser, il suffit d'un paquet @solana/web3.js qui contient tout. Elle est basée sur un design orienté objet et encapsule de nombreuses opérations courantes. Par exemple, la classe Connection offre des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs.
Cependant, ce type de conception pose également certains problèmes. Même si les développeurs n'utilisent qu'une petite partie des fonctionnalités, l'ensemble de la bibliothèque de code sera téléchargé sur l'appareil de l'utilisateur, ce qui, en raison de la taille importante du code de la bibliothèque, peut entraîner un certain temps de chargement.
La version 2.x adopte une stratégie différente. L'équipe officielle a divisé l'ancienne base de code en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. En même temps, la nouvelle version abandonne l'implémentation basée sur des classes et adopte davantage une approche basée sur des fonctions uniques. Ce design favorise l'optimisation lors de la construction du code JavaScript, le code inutilisé sera supprimé et ne sera pas téléchargé sur l'appareil de l'utilisateur. Selon les statistiques du document officiel, l'utilisation de la nouvelle version des DApps peut généralement réaliser environ 30 % d'optimisation en taille, et si seules une très petite partie des fonctionnalités est utilisée, le taux d'optimisation peut être encore plus élevé.
Ce changement a également posé des défis pour le travail de documentation de l'équipe Solana, la manière de permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires est devenue un problème important. Actuellement, les noms de paquet ont une bonne sémantique, ce qui permet de comprendre en gros leur utilisation rien qu'à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Cependant, en raison de sa récente publication, de nombreux projets n'ont pas encore effectué la migration. Il y a également peu d'exemples concernant la version 2.x sur Solana Cookbook. La nouvelle version a tendance à utiliser des fonctionnalités intégrées au runtime (comme la génération de paires de clés), mais la documentation est insuffisante sur ces parties, ce qui peut laisser les développeurs dans la confusion.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut ne pas être aussi important pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre de cette année dans les versions @solana/web3.js 1.95.5 et 1.95.6, un plus grand nombre d'entrées externes et de dépendances augmenterait considérablement la probabilité d'événements de sécurité. Avec la publication de la version 2.x, l'équipe de développement de Web3.js a décidé d'utiliser davantage de fonctionnalités natives, en abandonnant les dépendances externes et l'introduction de Polyfills. Bien que des changements puissent survenir à l'avenir, la version 2.x a actuellement éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Sa fonction principale est de créer un expéditeur de requêtes en configurant l'adresse de requête RPC, puis d'envoyer diverses requêtes à travers celui-ci.
La version 2.x utilise une approche plus fonctionnelle pour implémenter cette fonctionnalité. Par exemple, lorsque vous appelez sendAndConfirmTransaction pour envoyer une transaction, une requête HTTPS est automatiquement lancée et une connexion WSS est établie, s'abonnant à l'état de la transaction, et retourne le hash de la transaction une fois celle-ci confirmée.
paire de clés
La partie liée à la clé publique et à la clé privée a également connu des changements importants. Les classes Keypair et PublicKey, couramment utilisées dans la version 1.x, n'existent plus et ont été remplacées par certaines fonctions.
Par exemple, vous pouvez utiliser await generateKeyPair() pour générer une paire de clés, au lieu de l'ancienne Keypair.generate(). Il est important de noter que le nouveau generateKeyPair retourne une promesse, et non directement une paire de clés. Cela est dû au fait que la nouvelle implémentation utilise autant que possible l'API Web Crypto de JavaScript, en utilisant l'implémentation native d'Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, ce changement n'est pas difficile à accepter, car à la fin de l'année 2024, les développeurs JavaScript sont déjà très familiers avec les promesses.
envoyer la transaction
Les classes Transaction et VersionedTransaction de la version 1.x n'existent plus dans la version 2.x.
Les méthodes liées au System Program fournies dans l'ancienne version ne sont plus disponibles, donc toutes les méthodes statiques de la classe SystemProgram doivent être importées d'autres endroits. Par exemple, l'instruction transfer nécessite d'appeler la fonction getTransferSolInstruction dans @solana-program/system.
Étant donné que la classe n'est plus fournie, Web3.js propose une forme de pipe couramment utilisée en programmation fonctionnelle. Les développeurs peuvent utiliser la fonction pipe pour réaliser la fonctionnalité de transfert de la version 1.x.
Il convient de noter que les transactions ne sont plus initiées via Connection, mais plutôt en générant une fonction unique à l'aide d'un RPC Provider défini par le développeur, puis en appelant cette fonction pour initier la transaction. Par rapport à la version 1.x, le volume de code a légèrement augmenté, mais la personnalisation est devenue plus forte.
Les transactions sont initiées via HTTPS RPC, puis confirmées par l'abonnement à WSS RPC. On peut ressentir que cette nouvelle méthode dépend fortement de WSS, et je crois que l'application de WSS sera de plus en plus répandue à l'avenir, ce qui impose des exigences plus élevées en matière de stabilité des services des fournisseurs de RPC.
React
Il convient de mentionner que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui offre quelques hooks React, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js illustre l'engagement de l'équipe Solana envers l'évolution et l'amélioration continues. Elle offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, contribuant ainsi à l'adoption et au développement de la plateforme.