Mise à jour majeure de la version 2.x de Solana Web3.js : programmation fonctionnelle et conception modulaire
La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement publié sa version 2.x en novembre. La nouvelle version présente des changements significatifs par rapport à la version 1.x, cet article résumera ses principales mises à jour.
Bien que la version 2.x vient juste d'être publiée et que son taux d'utilisation soit encore faible, de nombreuses bibliothèques populaires n'ont pas encore migré, mais comprendre ces changements est très utile pour les futures opérations de migration.
Comparaison des versions
La version 1.x est relativement simple à utiliser. Il n'y a qu'un seul package : @solana/web3.js, toutes les fonctionnalités sont concentrées à l'intérieur. La conception basée sur les classes encapsule de nombreuses opérations courantes, comme la classe Connection qui propose des dizaines de méthodes, couvrant presque toutes les fonctionnalités requises par les développeurs.
Cependant, cette conception entraîne é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, et en raison de la taille importante du code de la bibliothèque, cela peut prendre un certain temps.
La version 2.x a adopté une stratégie différente. L'équipe officielle a divisé l'ancien code source en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. En même temps, elle a abandonné l'implémentation basée sur des classes, adoptant davantage des fonctions individuelles. Cette conception favorise l'optimisation lors de la construction du code JavaScript, le code inutilisé étant supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques officielles, l'utilisation de la nouvelle version des DApp permet généralement d'obtenir une optimisation de taille de 30 %. Si seules quelques fonctionnalités sont utilisées, le taux d'optimisation peut être encore plus élevé.
Ce changement impose des exigences plus élevées en matière de qualité de la documentation pour l'équipe Solana. Comment permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires devient une question clé. Il semble que la dénomination de chaque paquet ait une bonne sémantique, permettant d'avoir une idée générale de leur utilisation simplement à partir de leurs noms, 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 été migrés. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. De plus, la nouvelle version tend à utiliser des fonctionnalités intégrées au runtime (comme la génération de paires de clés), mais la documentation sur ces parties est insuffisante, 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. Cette caractéristique peut ne pas sembler très importante pour de nombreux utilisateurs, mais compte tenu de l'attaque de la chaîne d'approvisionnement subie par les versions 1.95.5 et 1.95.6 de @solana/web3.js début décembre 2023, réduire les entrées et dépendances externes peut considérablement diminuer 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, en éliminant l'introduction de dépendances externes et de Polyfills. Bien que des changements puissent survenir à l'avenir, la version 2.x a déjà éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offrait de nombreuses méthodes. Dans la version 2.x, une approche plus fonctionnelle a été adoptée :
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, renvoyant le hash de la transaction une fois la transaction confirmée.
paire de clés
Il y a également de grands changements concernant les parties liées aux clés publiques et privées. 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 convient de noter que le nouveau generateKeyPair renvoie une Promise, et non pas 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 une implémentation native d'Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, pour les développeurs JavaScript familiers avec les Promises, ce changement ne devrait pas être difficile à s'adapter.
envoyer une transaction
Dans la version 2.x, les classes "Transaction" et "VersionedTransaction" ne sont plus présentes.
Les méthodes relatives au System Program fournies dans les anciennes versions ne sont plus disponibles, les méthodes statiques de la classe "SystemProgram" doivent être importées d'ailleurs.
Par exemple, la commande "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 "pipe" couramment utilisée en programmation fonctionnelle. La fonction pipe peut être utilisée pour réaliser la fonctionnalité de transfert de la version 1.x.
On peut voir que les transactions ne sont plus initiées via Connection, mais plutôt 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, le volume de code a augmenté, mais la personnalisation est devenue plus forte.
Les transactions sont initiées via HTTPS RPC, puis confirmées par l'abonnement à WSS RPC pour les résultats des transactions. Cette nouvelle méthode dépend fortement de WSS, et je crois que l'utilisation de WSS sera de plus en plus répandue à l'avenir, ce qui posera également des exigences plus élevées en matière de stabilité de service pour les fournisseurs RPC.
React
Il convient de noter que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui offre des 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 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, 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.
11 J'aime
Récompense
11
4
Reposter
Partager
Commentaire
0/400
OfflineValidator
· Il y a 11h
js a encore été mis à jour. Qui utilise encore 1.x ?
Voir l'originalRépondre0
MoonRocketman
· Il y a 11h
Optimisation de l'orbite terminée Mise à niveau du moteur réussie Préparation pour le deuxième allumage To the moon
Voir l'originalRépondre0
MissedAirdropAgain
· Il y a 11h
Grimpe, pressé d'augmenter, ça ne sert à rien, d'abord préchauffe l'Airdrop 2.0
Voir l'originalRépondre0
WalletDivorcer
· Il y a 11h
J'attends encore les bras de 1.x, je ne veux pas changer de code.
Mise à jour majeure de la version 2.x de Solana Web3.js : la conception modulaire améliore les performances
Mise à jour majeure de la version 2.x de Solana Web3.js : programmation fonctionnelle et conception modulaire
La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement publié sa version 2.x en novembre. La nouvelle version présente des changements significatifs par rapport à la version 1.x, cet article résumera ses principales mises à jour.
Bien que la version 2.x vient juste d'être publiée et que son taux d'utilisation soit encore faible, de nombreuses bibliothèques populaires n'ont pas encore migré, mais comprendre ces changements est très utile pour les futures opérations de migration.
Comparaison des versions
La version 1.x est relativement simple à utiliser. Il n'y a qu'un seul package : @solana/web3.js, toutes les fonctionnalités sont concentrées à l'intérieur. La conception basée sur les classes encapsule de nombreuses opérations courantes, comme la classe Connection qui propose des dizaines de méthodes, couvrant presque toutes les fonctionnalités requises par les développeurs.
Cependant, cette conception entraîne é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, et en raison de la taille importante du code de la bibliothèque, cela peut prendre un certain temps.
La version 2.x a adopté une stratégie différente. L'équipe officielle a divisé l'ancien code source en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. En même temps, elle a abandonné l'implémentation basée sur des classes, adoptant davantage des fonctions individuelles. Cette conception favorise l'optimisation lors de la construction du code JavaScript, le code inutilisé étant supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques officielles, l'utilisation de la nouvelle version des DApp permet généralement d'obtenir une optimisation de taille de 30 %. Si seules quelques fonctionnalités sont utilisées, le taux d'optimisation peut être encore plus élevé.
Ce changement impose des exigences plus élevées en matière de qualité de la documentation pour l'équipe Solana. Comment permettre aux développeurs de trouver rapidement les fonctionnalités nécessaires devient une question clé. Il semble que la dénomination de chaque paquet ait une bonne sémantique, permettant d'avoir une idée générale de leur utilisation simplement à partir de leurs noms, 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 été migrés. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. De plus, la nouvelle version tend à utiliser des fonctionnalités intégrées au runtime (comme la génération de paires de clés), mais la documentation sur ces parties est insuffisante, 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. Cette caractéristique peut ne pas sembler très importante pour de nombreux utilisateurs, mais compte tenu de l'attaque de la chaîne d'approvisionnement subie par les versions 1.95.5 et 1.95.6 de @solana/web3.js début décembre 2023, réduire les entrées et dépendances externes peut considérablement diminuer 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, en éliminant l'introduction de dépendances externes et de Polyfills. Bien que des changements puissent survenir à l'avenir, la version 2.x a déjà éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 1.x, la classe Connection offrait de nombreuses méthodes. Dans la version 2.x, une approche plus fonctionnelle a été adoptée :
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, renvoyant le hash de la transaction une fois la transaction confirmée.
paire de clés
Il y a également de grands changements concernant les parties liées aux clés publiques et privées. 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 convient de noter que le nouveau generateKeyPair renvoie une Promise, et non pas 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 une implémentation native d'Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, pour les développeurs JavaScript familiers avec les Promises, ce changement ne devrait pas être difficile à s'adapter.
envoyer une transaction
Dans la version 2.x, les classes "Transaction" et "VersionedTransaction" ne sont plus présentes.
Les méthodes relatives au System Program fournies dans les anciennes versions ne sont plus disponibles, les méthodes statiques de la classe "SystemProgram" doivent être importées d'ailleurs.
Par exemple, la commande "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 "pipe" couramment utilisée en programmation fonctionnelle. La fonction pipe peut être utilisée pour réaliser la fonctionnalité de transfert de la version 1.x.
On peut voir que les transactions ne sont plus initiées via Connection, mais plutôt 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, le volume de code a augmenté, mais la personnalisation est devenue plus forte.
Les transactions sont initiées via HTTPS RPC, puis confirmées par l'abonnement à WSS RPC pour les résultats des transactions. Cette nouvelle méthode dépend fortement de WSS, et je crois que l'utilisation de WSS sera de plus en plus répandue à l'avenir, ce qui posera également des exigences plus élevées en matière de stabilité de service pour les fournisseurs RPC.
React
Il convient de noter que le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui offre des 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 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, contribuant ainsi à l'adoption et au développement de la plateforme.