Version 2.x de Solana Web3.js : séparation des fonctionnalités et optimisation des performances
La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement lancé sa version 2.x en novembre. Par rapport à la version 1.x, la nouvelle version a subi des changements significatifs. Cet article résumera les principales modifications.
Bien que la version 2.x vient tout juste d'être publiée et que son utilisation ne soit pas encore répandue, de nombreuses bibliothèques largement utilisées n'ont pas encore été migrées. Cependant, comprendre ces changements sera utile pour les futures opérations de migration.
Comparaison des versions
L'ancienne version est relativement simple à utiliser, ne contenant qu'un seul paquet @solana/web3.js, où toutes les fonctionnalités sont concentrées. Elle est basée sur une conception orientée objet, encapsulant 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. De plus, le grand nombre d'exemples de code fournis dans le livre de cuisine Solana offre également des commodités aux développeurs.
Cependant, ce design entraîne également quelques problèmes. Bien que les fonctionnalités réellement utilisées par les développeurs ne représentent qu'une petite partie, l'ensemble de la base 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 adopte une stratégie différente. L'équipe officielle a divisé l'ancienne base de code en plusieurs modules plus petits, 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 une approche par fonctions. Ce changement favorise l'optimisation lors de la construction du code JavaScript, le code non utilisé 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 du DApp peut permettre une optimisation de taille d'environ 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 est devenu un sujet important. À première vue, les noms de paquets ont une bonne sémantique, ce qui permet de comprendre en gros leur utilisation juste à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Étant donné que la nouvelle version vient d'être publiée, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur 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 à ce sujet est insuffisante, ce qui peut laisser certains développeurs confus.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut être moins important pour de nombreux utilisateurs, mais compte tenu de l'attaque de la chaîne d'approvisionnement survenue début décembre cette année dans les versions @solana/web3.js 1.95.5 et 1.95.6, davantage d'entrées et de dépendances externes augmenteraient 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, éliminant ainsi 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
se connecter
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Sa principale fonction 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 a adopté une approche plus fonctionnelle.
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Lors de l'appel de sendAndConfirmTransaction pour envoyer une transaction, une demande HTTPS est automatiquement initiée et une connexion WSS est établie pour s'abonner à l'état de la transaction. Une fois la transaction confirmée, le hash de la transaction est renvoyé.
paire de clés
Il y a également de grands changements dans la partie liée 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().
La nouvelle méthode generateKeyPair retourne une Promise, car 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 ne devrait pas poser trop de problèmes aux développeurs JavaScript familiers avec les Promises.
envoyer la transaction
Les classes Transaction et VersionedTransaction couramment utilisées dans 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, les méthodes statiques de la classe SystemProgram doivent être importées d'un autre endroit.
Par exemple, la commande transfer doit appeler la fonction getTransferSolInstruction dans @solana-program/system.
Puisque la classe n'est plus fournie, Web3.js propose une forme de pipe couramment utilisée en programmation fonctionnelle. Voici un exemple de mise en œuvre de la fonction de transfert de la version 1.x en utilisant la fonction pipe :
javascript
import { pipe } from "@solana/functional";
import { getTransferSolInstruction } from "@solana/system";
importer {
createSolanaRpc,
sendTransaction,
setTransactionFeePayer,
createTransaction,
appendTransactionInstruction,
} de "@solana/web3.js";
Comparé à la version 1.x, le volume de code a augmenté, mais la personnalisation est plus forte.
Les transactions sont initiées via HTTPS RPC, puis les résultats des transactions sont confirmés par l'abonnement à WSS RPC. La nouvelle méthode dépend davantage de WSS, ce qui impose également des exigences plus élevées en matière de stabilité des services des fournisseurs RPC.
Réagir
Le projet @solana/web3.js comprend également une bibliothèque nommée @solana/react, qui fournit quelques hooks React, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js reflète 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.
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.
18 J'aime
Récompense
18
7
Partager
Commentaire
0/400
BlindBoxVictim
· 07-10 20:02
Quand le premier projet sera terminé, nous en parlerons... Je suis fatigué de regarder.
Voir l'originalRépondre0
ForeverBuyingDips
· 07-10 17:13
Maintenant, il faut encore déménager des briques.
Voir l'originalRépondre0
airdrop_huntress
· 07-10 07:51
La mise à niveau est rapide, mais ce bug peut-il être corrigé ?
Voir l'originalRépondre0
DefiEngineerJack
· 07-10 07:47
*en fait* la modularisation n'est pas triviale... le gain de performance semble prometteur mais montre-moi les benchmarks ser
Voir l'originalRépondre0
GateUser-75ee51e7
· 07-10 07:44
sol, mon frère, c'est encore une grande mise à niveau.
Voir l'originalRépondre0
SelfCustodyIssues
· 07-10 07:41
Quelle optimisation pourrie, il va falloir réécrire le code.
Voir l'originalRépondre0
GlueGuy
· 07-10 07:28
Ah, ça a été mis à jour, allons voir s'il y a beaucoup de pièges.
Publication de la version 2.x de Solana Web3.js : séparation des fonctionnalités et optimisation des performances
Version 2.x de Solana Web3.js : séparation des fonctionnalités et optimisation des performances
La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement lancé sa version 2.x en novembre. Par rapport à la version 1.x, la nouvelle version a subi des changements significatifs. Cet article résumera les principales modifications.
Bien que la version 2.x vient tout juste d'être publiée et que son utilisation ne soit pas encore répandue, de nombreuses bibliothèques largement utilisées n'ont pas encore été migrées. Cependant, comprendre ces changements sera utile pour les futures opérations de migration.
Comparaison des versions
L'ancienne version est relativement simple à utiliser, ne contenant qu'un seul paquet @solana/web3.js, où toutes les fonctionnalités sont concentrées. Elle est basée sur une conception orientée objet, encapsulant 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. De plus, le grand nombre d'exemples de code fournis dans le livre de cuisine Solana offre également des commodités aux développeurs.
Cependant, ce design entraîne également quelques problèmes. Bien que les fonctionnalités réellement utilisées par les développeurs ne représentent qu'une petite partie, l'ensemble de la base 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 adopte une stratégie différente. L'équipe officielle a divisé l'ancienne base de code en plusieurs modules plus petits, 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 une approche par fonctions. Ce changement favorise l'optimisation lors de la construction du code JavaScript, le code non utilisé 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 du DApp peut permettre une optimisation de taille d'environ 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 est devenu un sujet important. À première vue, les noms de paquets ont une bonne sémantique, ce qui permet de comprendre en gros leur utilisation juste à partir de leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.
Étant donné que la nouvelle version vient d'être publiée, de nombreux projets n'ont pas encore migré. Les exemples concernant la version 2.x sur 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 à ce sujet est insuffisante, ce qui peut laisser certains développeurs confus.
Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut être moins important pour de nombreux utilisateurs, mais compte tenu de l'attaque de la chaîne d'approvisionnement survenue début décembre cette année dans les versions @solana/web3.js 1.95.5 et 1.95.6, davantage d'entrées et de dépendances externes augmenteraient 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, éliminant ainsi 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
se connecter
Dans la version 1.x, la classe Connection offre de nombreuses méthodes. Sa principale fonction 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 a adopté une approche plus fonctionnelle.
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Lors de l'appel de sendAndConfirmTransaction pour envoyer une transaction, une demande HTTPS est automatiquement initiée et une connexion WSS est établie pour s'abonner à l'état de la transaction. Une fois la transaction confirmée, le hash de la transaction est renvoyé.
paire de clés
Il y a également de grands changements dans la partie liée 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().
La nouvelle méthode generateKeyPair retourne une Promise, car 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 ne devrait pas poser trop de problèmes aux développeurs JavaScript familiers avec les Promises.
envoyer la transaction
Les classes Transaction et VersionedTransaction couramment utilisées dans 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, les méthodes statiques de la classe SystemProgram doivent être importées d'un autre endroit.
Par exemple, la commande transfer doit appeler la fonction getTransferSolInstruction dans @solana-program/system.
Puisque la classe n'est plus fournie, Web3.js propose une forme de pipe couramment utilisée en programmation fonctionnelle. Voici un exemple de mise en œuvre de la fonction de transfert de la version 1.x en utilisant la fonction pipe :
javascript import { pipe } from "@solana/functional"; import { getTransferSolInstruction } from "@solana/system"; importer { createSolanaRpc, sendTransaction, setTransactionFeePayer, createTransaction, appendTransactionInstruction, } de "@solana/web3.js";
const rpc = createSolanaRpc("");
const transaction = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: recipient, montant, }) ) );
const signature = await sendTransaction(rpc, transaction, [payer]);
Comparé à la version 1.x, le volume de code a augmenté, mais la personnalisation est plus forte.
Les transactions sont initiées via HTTPS RPC, puis les résultats des transactions sont confirmés par l'abonnement à WSS RPC. La nouvelle méthode dépend davantage de WSS, ce qui impose également des exigences plus élevées en matière de stabilité des services des fournisseurs RPC.
Réagir
Le projet @solana/web3.js comprend également une bibliothèque nommée @solana/react, qui fournit quelques hooks React, intégrant des fonctionnalités telles que signIn.
Résumé
La publication de la version 2.x de @solana/web3.js reflète 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.