Analyse de la mise à niveau de Solana Web3.js 2.0 : la conception modulaire améliore la performance et la sécurité

Solana Web3.js version 2.x : mise à jour de la bibliothèque JavaScript riche en fonctionnalités

Solana Web3.js, en tant que bibliothèque JavaScript riche en fonctionnalités, a officiellement publié la version 2.x en novembre de cette année. Par rapport à la version 1.x, la nouvelle version apporte de nombreux changements majeurs. Cet article résumera et analysera ces principaux changements.

Bien que la version 2.x vient d'être publiée et que son utilisation ne soit pas encore élevée, de nombreuses bibliothèques largement utilisées n'ont pas encore migré, mais comprendre ces changements est crucial pour le travail de migration futur.

Comparaison des versions

L'utilisation de la version 1.x est relativement simple. Elle ne contient qu'un seul package : @solana/web3.js, toutes les fonctionnalités y sont centralisées. La conception basée sur des classes encapsule un grand nombre d'opérations courantes, telles que la classe Connection qui propose 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 développeurs n'utilisent généralement qu'une petite partie des fonctionnalités, l'ensemble du code source est 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 approche différente. L'équipe officielle a scindé 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 l'implémentation basée sur des classes et utilise davantage des fonctions uniques. 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 des DApps peut généralement réaliser une optimisation de 30 % de la taille du code ; si seules quelques fonctionnalités sont utilisées, le taux d'optimisation peut être encore plus élevé.

Web3 Nouveaux utilisateurs : Mettez à niveau maintenant @solana/web3.js 2.x pour activer la programmation fonctionnelle

Ce changement impose des exigences plus élevées en matière de qualité de la documentation pour l'équipe Solana. Comment aider les développeurs à trouver rapidement les fonctionnalités dont ils ont besoin est devenu un problème clé. Actuellement, les noms de paquets ont une bonne sémantique, permettant de comprendre approximativement leur utilisation rien qu'à partir de leur nom, ce qui atténue dans une certaine mesure la difficulté de la migration des développeurs.

Cependant, en raison de sa publication récente, de nombreux projets n'ont pas encore effectué la migration. Il y a également relativement peu d'exemples sur la version 2.x dans le Solana Cookbook. 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 détaillées sur ces parties, ce qui laisse certains aspects confus pour les développeurs.

Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Bien que cela ne soit peut-être pas le plus important pour de nombreux utilisateurs, les attaques de la chaîne d'approvisionnement survenues début décembre cette année dans les versions @solana/web3.js 1.95.5 et 1.95.6 montrent que plus 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 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 actuellement éliminé toutes les dépendances externes.

Points de changement importants

connecter

Dans la version 1.x, la classe Connection propose de nombreuses méthodes. Bien que sa principale fonction soit de créer un émetteur de requêtes via la configuration de l'adresse de requête RPC, il permet ensuite d'envoyer diverses requêtes.

La version 2.x utilise une approche plus fonctionnelle pour réaliser cette fonctionnalité :

javascript import { createSolanaRpc } from "@solana/web3.js";

const rpc = createSolanaRpc("");

Lors de l'appel de sendAndConfirmTransaction pour envoyer une transaction, le système initiera automatiquement une requête HTTPS et établira une connexion WSS pour s'abonner à l'état de la transaction. Une fois la transaction confirmée, le hachage de la transaction sera renvoyé.

paire de clés

La partie liée à la clé publique et à la clé privée a également subi des changements majeurs. 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 maintenant utiliser await generateKeyPair() pour générer une paire de clés, au lieu de l'ancienne méthode Keypair.generate().

Il est à noter que le nouveau generateKeyPair renvoie une promesse, 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 l'implémentation native d'Ed25519. De nombreuses méthodes de l'API Web Crypto sont asynchrones. Cependant, ce changement n'est pas inacceptable, en cette fin d'année 2024, les développeurs JavaScript sont déjà très familiers avec les promesses.

envoyer une transaction

Les utilisateurs de la version 1.x devraient être très familiers avec les deux classes Transaction et VersionedTransaction. Dans la version 2.x, ces deux classes n'existent plus.

Les méthodes liées au System Program fournies dans l'ancienne version n'existent plus, donc toutes les méthodes statiques de la classe SystemProgram doivent être importées d'ailleurs.

Par exemple, la commande transfer nécessite maintenant d'appeler la fonction getTransferSolInstruction dans @solana-program/system.

Étant donné que les classes ne sont plus fournies, Web3.js propose une forme de pipe couramment utilisée en programmation fonctionnelle. Voici un exemple d'utilisation de la fonction pipe pour implémenter la fonctionnalité de transfert de la version 1.x :

javascript import { pipe } from '@solana/functional'; import { generateKeyPair } from '@solana/web3.js'; import { getTransferSolInstruction } from '@solana/system-program'; import { createTransaction } from '@solana/transactions';

const transaction = pipe( createTransaction(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: recipient, lamports : montant, })), setRecentBlockhash(blockhash), addSigners([sender]) );

const signature = await rpc.sendAndConfirmTransaction(transaction);

On peut voir que les transactions ne sont plus initiées via Connection, mais plutôt en générant une fonction spécifique à l'aide de notre RPC Provider défini, puis en appelant cette fonction 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 via 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 également des exigences plus élevées en matière de stabilité des services des fournisseurs RPC.

Réagir

Il est intéressant de noter que 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 illustre pleinement 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. Bien que l'utilisation actuelle ne soit pas élevée, avec le temps, je suis convaincu que de plus en plus de projets passeront à cette nouvelle version.

Web3 Débutant Série : Mettez à jour maintenant @solana/web3.js 2.x pour activer la programmation fonctionnelle

SOL3.01%
Voir l'original
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.
  • Récompense
  • 4
  • Partager
Commentaire
0/400
BearMarketSurvivorvip
· 08-03 01:07
Rapport de première ligne : la mise à niveau semble avoir été tirée comme le premier coup de feu dans un nid vide.
Voir l'originalRépondre0
OPsychologyvip
· 08-03 01:05
N'ayez pas hâte de changer tant que la mise à niveau n'est pas encore stable.
Voir l'originalRépondre0
RugResistantvip
· 08-03 01:04
hum, des points chauds de sécurité potentiels détectés... besoin d'un audit approfondi, pour être honnête
Voir l'originalRépondre0
mev_me_maybevip
· 08-03 01:02
Ah, cette Solana s'est mise à la modularité.
Voir l'originalRépondre0
Trader les cryptos partout et à tout moment
qrCode
Scan pour télécharger Gate app
Communauté
Français (Afrique)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)