Solana Web3.js version 2.x : une nouvelle expérience de programmation fonctionnelle
La bibliothèque Solana Web3.js, riche en fonctionnalités, a officiellement publié sa version 2.x en novembre de cette année. Par rapport à la version 1.x précédente, la nouvelle version a subi des changements significatifs. Cet article résumera ses principales modifications.
Bien que la version 2.x vient d'être publiée et que son utilisation n'est pas encore répandue, de nombreuses bibliothèques largement utilisées n'ont pas encore été mises à jour, mais comprendre ces changements sera très bénéfique pour les travaux de migration futurs.
Comparaison des versions
Il est indéniable que l'ancienne version est plus simple et directe à utiliser. La version 1.x ne contient qu'un seul paquet @solana/web3.js, toutes les fonctionnalités sont concentrées là-dedans. Elle est basée sur un design orienté objet et encapsule de nombreuses opérations courantes. Par exemple, la classe Connection fournit des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs.
Cependant, cette conception pose également certains problèmes. Bien que les fonctionnalités réellement utilisées par les développeurs ne représentent peut-être qu'une petite partie, l'ensemble de la bibliothèque de code sera téléchargé sur l'appareil de l'utilisateur, et en raison de la taille massive du code de la bibliothèque, cela peut prendre un certain temps.
En comparaison, la version 2.x a divisé l'ancien 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 les implémentations basées sur des classes et adopte davantage une approche basée sur des fonctions individuelles, ce qui est très utile pour l'optimisation lors de la construction de code JavaScript. Le code non utilisé sera supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques de la documentation officielle, les DApps utilisant la nouvelle version obtiennent toutes en moyenne une optimisation de 30 % en taille, et si seules quelques fonctionnalités sont utilisées, le taux d'optimisation peut être encore plus élevé.
Cela impose des exigences plus élevées en matière de qualité de la documentation pour l'équipe Solana, et comment permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires devient un sujet important. Il semble que les noms de paquets aient une bonne sémantique, ce qui permet de comprendre en gros leur utilité rien qu'à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Étant donné qu'il vient d'être publié, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. De plus, 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 manque de descriptions de ces fonctionnalités, ce qui peut rendre certains aspects déroutants pour les développeurs.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut sembler sans importance pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre cette année sur les versions @solana/web3.js 1.95.5 et 1.95.6, un plus grand nombre d'entrées et de dépendances externes augmente considérablement la probabilité d'événements de sécurité. Avec la sortie de la version 2.x, l'équipe de développement de Web3.js a décidé d'utiliser davantage de fonctionnalités natives, supprimant l'introduction de dépendances externes et de Polyfills. Il pourrait y avoir des changements à l'avenir, mais pour l'instant, la version 2.x a éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Mais sa fonctionnalité principale est de créer un émetteur de requêtes en configurant l'adresse de requête RPC, puis d'envoyer divers types de requêtes via celui-ci.
La version 2.x utilise une approche plus fonctionnelle pour réaliser cette fonctionnalité. Par exemple, lors de l'appel de sendAndConfirmTransaction pour envoyer une transaction, une requête HTTPS est automatiquement initiée et une connexion WSS est établie pour s'abonner à l'état de la transaction, retournant le hash de la transaction une fois celle-ci confirmée.
paire de clés
Les parties liées aux clés publiques et privées ont également subi des changements importants. Les deux classes couramment utilisées Keypair et PublicKey dans la version 1.x n'existent plus et ont été remplacées par certaines fonctions.
Par exemple, vous pouvez maintenant utiliser await generateKeyPair() pour générer une paire de clés, au lieu de l'ancienne Keypair.generate(). Il convient de noter que le nouveau generateKeyPair renvoie une Promise, car la nouvelle implémentation utilise autant que possible l'API Web Crypto de JavaScript, en utilisant l'implémentation native Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, ce changement n'est pas inacceptable, car aujourd'hui, à la fin de 2024, les développeurs JavaScript sont déjà très familiers avec les Promises.
envoyer la transaction
Les deux classes Transaction et VersionedTransaction, familières aux utilisateurs 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.
Puisque la classe n'est plus fournie, Web3.js offre 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 qui existait dans la version 1.x.
Il est à noter que les transactions ne sont plus initiées par Connection, mais générées par une fonction unique définie par le fournisseur RPC, puis cette fonction est appelée pour initier la transaction. Par rapport à la version 1.x, la quantité 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 abonnement à WSS RPC. Cette nouvelle méthode dépend fortement de WSS, et je crois que l'application de WSS deviendra de plus en plus répandue à l'avenir, ce qui pose des exigences plus élevées en matière de stabilité des services des fournisseurs RPC.
Réagir
Il convient de mentionner que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui fournit quelques React Hooks, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js démontre pleinement l'engagement de l'équipe Solana envers le développement et l'amélioration continus. Elle offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, ce qui contribue à 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.
19 J'aime
Récompense
19
6
Partager
Commentaire
0/400
CoffeeNFTrader
· 07-18 21:26
Optimisation des performances ? Je me casse, je me casse.
Voir l'originalRépondre0
ShamedApeSeller
· 07-18 19:03
Qu'est-ce que tu regardes ? Je suis encore en train d'utiliser v1.
Voir l'originalRépondre0
MemeCoinSavant
· 07-15 21:50
selon mes modèles statistiques, ce changement de paradigme est basé af ngl
Voir l'originalRépondre0
MEVHunterZhang
· 07-15 21:45
Enfin, j'ai attendu la reconstruction, j'ai attendu longtemps.
Voir l'originalRépondre0
OnlyOnMainnet
· 07-15 21:39
Le patron de sol agit vraiment trop vite, n'est-ce pas ?
Voir l'originalRépondre0
LiquidityNinja
· 07-15 21:35
Fiable ~ Enfin utilisé la programmation fonctionnelle.
Publication de la version 2.x de Solana Web3.js : la refonte de la programmation fonctionnelle apporte des optimisations significatives
Solana Web3.js version 2.x : une nouvelle expérience de programmation fonctionnelle
La bibliothèque Solana Web3.js, riche en fonctionnalités, a officiellement publié sa version 2.x en novembre de cette année. Par rapport à la version 1.x précédente, la nouvelle version a subi des changements significatifs. Cet article résumera ses principales modifications.
Bien que la version 2.x vient d'être publiée et que son utilisation n'est pas encore répandue, de nombreuses bibliothèques largement utilisées n'ont pas encore été mises à jour, mais comprendre ces changements sera très bénéfique pour les travaux de migration futurs.
Comparaison des versions
Il est indéniable que l'ancienne version est plus simple et directe à utiliser. La version 1.x ne contient qu'un seul paquet @solana/web3.js, toutes les fonctionnalités sont concentrées là-dedans. Elle est basée sur un design orienté objet et encapsule de nombreuses opérations courantes. Par exemple, la classe Connection fournit des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs.
Cependant, cette conception pose également certains problèmes. Bien que les fonctionnalités réellement utilisées par les développeurs ne représentent peut-être qu'une petite partie, l'ensemble de la bibliothèque de code sera téléchargé sur l'appareil de l'utilisateur, et en raison de la taille massive du code de la bibliothèque, cela peut prendre un certain temps.
En comparaison, la version 2.x a divisé l'ancien 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 les implémentations basées sur des classes et adopte davantage une approche basée sur des fonctions individuelles, ce qui est très utile pour l'optimisation lors de la construction de code JavaScript. Le code non utilisé sera supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques de la documentation officielle, les DApps utilisant la nouvelle version obtiennent toutes en moyenne une optimisation de 30 % en taille, et si seules quelques fonctionnalités sont utilisées, le taux d'optimisation peut être encore plus élevé.
Cela impose des exigences plus élevées en matière de qualité de la documentation pour l'équipe Solana, et comment permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires devient un sujet important. Il semble que les noms de paquets aient une bonne sémantique, ce qui permet de comprendre en gros leur utilité rien qu'à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Étant donné qu'il vient d'être publié, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. De plus, 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 manque de descriptions de ces fonctionnalités, ce qui peut rendre certains aspects déroutants pour les développeurs.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut sembler sans importance pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre cette année sur les versions @solana/web3.js 1.95.5 et 1.95.6, un plus grand nombre d'entrées et de dépendances externes augmente considérablement la probabilité d'événements de sécurité. Avec la sortie de la version 2.x, l'équipe de développement de Web3.js a décidé d'utiliser davantage de fonctionnalités natives, supprimant l'introduction de dépendances externes et de Polyfills. Il pourrait y avoir des changements à l'avenir, mais pour l'instant, la version 2.x a éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Mais sa fonctionnalité principale est de créer un émetteur de requêtes en configurant l'adresse de requête RPC, puis d'envoyer divers types de requêtes via celui-ci.
La version 2.x utilise une approche plus fonctionnelle pour réaliser cette fonctionnalité. Par exemple, lors de l'appel de sendAndConfirmTransaction pour envoyer une transaction, une requête HTTPS est automatiquement initiée et une connexion WSS est établie pour s'abonner à l'état de la transaction, retournant le hash de la transaction une fois celle-ci confirmée.
paire de clés
Les parties liées aux clés publiques et privées ont également subi des changements importants. Les deux classes couramment utilisées Keypair et PublicKey dans la version 1.x n'existent plus et ont été remplacées par certaines fonctions.
Par exemple, vous pouvez maintenant utiliser await generateKeyPair() pour générer une paire de clés, au lieu de l'ancienne Keypair.generate(). Il convient de noter que le nouveau generateKeyPair renvoie une Promise, car la nouvelle implémentation utilise autant que possible l'API Web Crypto de JavaScript, en utilisant l'implémentation native Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, ce changement n'est pas inacceptable, car aujourd'hui, à la fin de 2024, les développeurs JavaScript sont déjà très familiers avec les Promises.
envoyer la transaction
Les deux classes Transaction et VersionedTransaction, familières aux utilisateurs 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.
Puisque la classe n'est plus fournie, Web3.js offre 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 qui existait dans la version 1.x.
Il est à noter que les transactions ne sont plus initiées par Connection, mais générées par une fonction unique définie par le fournisseur RPC, puis cette fonction est appelée pour initier la transaction. Par rapport à la version 1.x, la quantité 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 abonnement à WSS RPC. Cette nouvelle méthode dépend fortement de WSS, et je crois que l'application de WSS deviendra de plus en plus répandue à l'avenir, ce qui pose des exigences plus élevées en matière de stabilité des services des fournisseurs RPC.
Réagir
Il convient de mentionner que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui fournit quelques React Hooks, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js démontre pleinement l'engagement de l'équipe Solana envers le développement et l'amélioration continus. Elle offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, ce qui contribue à l'adoption et au développement de la plateforme.