Solana Web3.js 2.x : un nouveau chapitre de la programmation fonctionnelle
La bibliothèque Solana Web3.js a officiellement publié la version 2.x en novembre de cette année. Par rapport à la version 1.x, la nouvelle version a connu des changements significatifs dans sa structure et son mode d'utilisation. Cet article résumera ces principaux changements afin d'aider les développeurs à se préparer à une éventuelle migration future.
Comparaison des versions
La version 1.x est relativement simple à utiliser, nécessitant uniquement un paquet @solana/web3.js pour couvrir toutes les fonctionnalités. Elle est basée sur un design orienté objet, comme la classe Connection, qui offre des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs. Cependant, ce design entraîne également certains problèmes, comme la taille trop importante de la bibliothèque, car même si les développeurs n'utilisent qu'un nombre limité de fonctionnalités, l'ensemble de la bibliothèque sera téléchargé sur l'appareil de l'utilisateur.
La version 2.x adopte une approche différente. L'équipe officielle a divisé la base de code en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, etc. La nouvelle version abandonne l'implémentation basée sur des classes au profit d'une approche fonctionnelle unique, ce qui favorise l'optimisation lors de la construction du code JavaScript. Le code non utilisé sera supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques officielles, les DApps utilisant la nouvelle version peuvent généralement bénéficier d'une optimisation de taille de 30 %, et 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 documentation pour l'équipe de Solana. Comment aider les développeurs à trouver rapidement les fonctionnalités nécessaires est devenu une question clé. Actuellement, la nomination des différents packages présente une bonne sémantique, ce qui permet de déduire leur utilisation à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Cependant, comme la version 2.x vient d'être publiée, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. 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 à ce sujet, ce qui peut laisser certains développeurs perplexes.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut ne pas sembler important pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre 2023 dans les versions @solana/web3.js 1.95.5 et 1.95.6, davantage d'entrées et de dépendances externes augmentent considérablement la probabilité d'événements de sécurité. Avec la sortie de la version 2.x, l'équipe de développement a décidé d'utiliser davantage les fonctionnalités natives, en éliminant les dépendances externes et l'introduction de Polyfills. Actuellement, la version 2.x a éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 2.x, l'implémentation de la connexion a adopté une approche plus fonctionnelle :
javascript
import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Lorsque vous appelez 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. Après la confirmation de la transaction, le hachage de la transaction est renvoyé.
paire de clés
Dans la version 2.x, les anciennes classes Keypair et PublicKey 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 méthode Keypair.generate().
Le nouveau generateKeyPair retourne une Promise, car la nouvelle implémentation tire parti autant que possible de l'API Web Crypto de JavaScript, utilisant une implémentation Ed25519 native. De nombreuses méthodes de l'API Web Crypto sont asynchrones.
envoyer la transaction
La version 2.x n'utilise plus les classes Transaction et VersionedTransaction. Les méthodes liées au System Program n'existent plus non plus et doivent être importées d'autres endroits. Par exemple, l'instruction de transfert nécessite maintenant d'appeler la fonction getTransferSolInstruction dans @solana-program/system.
La nouvelle version propose une forme de pipe couramment utilisée en programmation fonctionnelle. Voici un exemple d'utilisation de la fonction pipe pour implémenter une fonction de transfert :
javascript
import { pipe } from '@solana/functional';
import { getTransferSolInstruction } from '@solana/programs';
const transaction = pipe(
createTransaction({ version: 0 }),
addInstruction(getTransferSolInstruction({
de : senderPublicKey,
à : recipientPublicKey,
montant : lamports,
}))
);
Comparé à la version 1.x, la quantité de code a légèrement augmenté, mais elle offre une personnalisation plus forte.
Support React
Le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui fournit quelques hooks React et intègre 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. La nouvelle version offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, ce qui devrait favoriser l'adoption et le développement de la plateforme.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
12 J'aime
Récompense
12
8
Partager
Commentaire
0/400
JustHereForMemes
· Il y a 12h
Cette voiture roule un peu vite, je n'arrive plus à suivre.
Voir l'originalRépondre0
GweiObserver
· 07-06 13:21
Amélioration des performances yyds
Voir l'originalRépondre0
OPsychology
· 07-06 03:28
On écrit tellement vite, qui n'a jamais écrit quelques lignes de code ?
Voir l'originalRépondre0
ShibaSunglasses
· 07-05 16:48
Enfin optimisé, l'ancien Kuka ne fonctionne pas.
Voir l'originalRépondre0
MetaverseHobo
· 07-05 16:46
Enfin, les informations précieuses sont arrivées.
Voir l'originalRépondre0
GateUser-00be86fc
· 07-05 16:43
La mise à jour de web3.js est vraiment arrivée.
Voir l'originalRépondre0
GameFiCritic
· 07-05 16:40
Je n'arrive plus à suivre la vitesse de développement de sol.
Voir l'originalRépondre0
BlockchainDecoder
· 07-05 16:28
D'un point de vue de l'implémentation fonctionnelle, l'amélioration des performances devrait se situer dans une fourchette de 15 à 20 %.
Publication de Solana Web3.js 2.x : la refonte de la programmation fonctionnelle apporte des améliorations de performance
Solana Web3.js 2.x : un nouveau chapitre de la programmation fonctionnelle
La bibliothèque Solana Web3.js a officiellement publié la version 2.x en novembre de cette année. Par rapport à la version 1.x, la nouvelle version a connu des changements significatifs dans sa structure et son mode d'utilisation. Cet article résumera ces principaux changements afin d'aider les développeurs à se préparer à une éventuelle migration future.
Comparaison des versions
La version 1.x est relativement simple à utiliser, nécessitant uniquement un paquet @solana/web3.js pour couvrir toutes les fonctionnalités. Elle est basée sur un design orienté objet, comme la classe Connection, qui offre des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs. Cependant, ce design entraîne également certains problèmes, comme la taille trop importante de la bibliothèque, car même si les développeurs n'utilisent qu'un nombre limité de fonctionnalités, l'ensemble de la bibliothèque sera téléchargé sur l'appareil de l'utilisateur.
La version 2.x adopte une approche différente. L'équipe officielle a divisé la base de code en plusieurs petits modules, tels que @solana/accounts, @solana/codecs, @solana/rpc, etc. La nouvelle version abandonne l'implémentation basée sur des classes au profit d'une approche fonctionnelle unique, ce qui favorise l'optimisation lors de la construction du code JavaScript. Le code non utilisé sera supprimé et ne sera pas téléchargé sur les appareils des utilisateurs. Selon les statistiques officielles, les DApps utilisant la nouvelle version peuvent généralement bénéficier d'une optimisation de taille de 30 %, et 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 documentation pour l'équipe de Solana. Comment aider les développeurs à trouver rapidement les fonctionnalités nécessaires est devenu une question clé. Actuellement, la nomination des différents packages présente une bonne sémantique, ce qui permet de déduire leur utilisation à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Cependant, comme la version 2.x vient d'être publiée, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur le Solana Cookbook sont également relativement rares. 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 à ce sujet, ce qui peut laisser certains développeurs perplexes.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut ne pas sembler important pour de nombreux utilisateurs, mais à la lumière de l'attaque de la chaîne d'approvisionnement survenue début décembre 2023 dans les versions @solana/web3.js 1.95.5 et 1.95.6, davantage d'entrées et de dépendances externes augmentent considérablement la probabilité d'événements de sécurité. Avec la sortie de la version 2.x, l'équipe de développement a décidé d'utiliser davantage les fonctionnalités natives, en éliminant les dépendances externes et l'introduction de Polyfills. Actuellement, la version 2.x a éliminé toutes les dépendances externes.
Points de changement importants
connexion
Dans la version 2.x, l'implémentation de la connexion a adopté une approche plus fonctionnelle :
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Lorsque vous appelez 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. Après la confirmation de la transaction, le hachage de la transaction est renvoyé.
paire de clés
Dans la version 2.x, les anciennes classes Keypair et PublicKey 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 méthode Keypair.generate().
Le nouveau generateKeyPair retourne une Promise, car la nouvelle implémentation tire parti autant que possible de l'API Web Crypto de JavaScript, utilisant une implémentation Ed25519 native. De nombreuses méthodes de l'API Web Crypto sont asynchrones.
envoyer la transaction
La version 2.x n'utilise plus les classes Transaction et VersionedTransaction. Les méthodes liées au System Program n'existent plus non plus et doivent être importées d'autres endroits. Par exemple, l'instruction de transfert nécessite maintenant d'appeler la fonction getTransferSolInstruction dans @solana-program/system.
La nouvelle version propose une forme de pipe couramment utilisée en programmation fonctionnelle. Voici un exemple d'utilisation de la fonction pipe pour implémenter une fonction de transfert :
javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/programs';
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ de : senderPublicKey, à : recipientPublicKey, montant : lamports, })) );
const signature = await sendAndConfirmTransaction(rpc, transaction, signers);
Comparé à la version 1.x, la quantité de code a légèrement augmenté, mais elle offre une personnalisation plus forte.
Support React
Le projet @solana/web3.js comprend également une bibliothèque appelée @solana/react, qui fournit quelques hooks React et intègre 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. La nouvelle version offre aux développeurs un moyen efficace, flexible et personnalisable d'interagir avec le réseau Solana, ce qui devrait favoriser l'adoption et le développement de la plateforme.