Publication de Solana Web3.js 2.x : conception modulaire améliorant la performance et la sécurité

Version 2.x de Solana Web3.js : fonctionnalités améliorées et performances optimisées

La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement lancé sa version 2.x en novembre de cette année. Cette nouvelle version présente des changements significatifs par rapport à la version 1.x, et cet article résumera ses principaux changements.

Bien que la version 2.x vient d'être publiée et que son utilisation soit encore faible, de nombreuses bibliothèques largement utilisées n'ont pas encore migré, comprendre ces changements sera utile pour les futures migrations.

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

Comparaison des versions

La version 1.x est assez simple à utiliser, avec un seul package : @solana/web3.js, toutes les fonctionnalités sont centralisées. Elle est basée sur un design orienté objet et encapsule de nombreuses opérations courantes. Par exemple, la classe Connection propose 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. Bien que les fonctionnalités réellement utilisées par les développeurs ne représentent qu'une petite partie, l'ensemble de la bibliothèque de code doit être téléchargé sur l'appareil de l'utilisateur, et en raison de la grande quantité de code, cela peut entraîner un certain temps de chargement.

En comparaison, la version 2.x a divisé l'ancienne base de code en plusieurs petits modules, comme @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, etc. En même temps, la nouvelle version a abandonné l'implémentation basée sur des classes, adoptant davantage une approche par fonctions uniques. Ce design 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. Les statistiques de la documentation officielle montrent que les DApps utilisant la nouvelle version peuvent généralement obtenir 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 pose de nouveaux défis à l'équipe de documentation de Solana, notamment comment permettre aux développeurs de trouver rapidement les fonctionnalités dont ils ont besoin. Cependant, il semble que les noms des différents packages aient une bonne sémantique, ce qui permet de comprendre en gros leur utilisation juste à partir de leurs noms, ce qui réduit en quelque sorte 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 effectué la migration. Il y a également peu d'exemples concernant la version 2.x sur le Solana Cookbook. 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 confondre les développeurs.

Une autre caractéristique importante de la version 2.x est l'absence de dépendances. Cela peut sembler peu important pour de nombreux utilisateurs, mais vu l'attaque de la chaîne d'approvisionnement qui a eu lieu début décembre cette année sur 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 de Web3.js a décidé d'utiliser davantage de fonctionnalités natives, en supprimant les dépendances externes et l'introduction 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

connexion

Dans la version 1.x, Connection offre de nombreuses méthodes. Mais sa fonction principale est de créer un expéditeur de requêtes en configurant l'adresse RPC, puis d'envoyer diverses requêtes à travers celui-ci.

La version 2.x utilise une approche plus fonctionnelle pour sa mise en œuvre :

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, et le hachage de la transaction est renvoyé après confirmation.

paire de clés

Il y a également des changements majeurs concernant les 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 maintenant utiliser await generateKeyPair() pour générer une paire de clés, alors qu'auparavant, c'était directement via Keypair.generate().

Il est à noter que le nouveau generateKeyPair renvoie une promesse, plutôt que de renvoyer directement la paire de clés. Cela est dû au fait que la nouvelle implémentation tire parti autant que possible de l'API Web Crypto de JavaScript, 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 à la fin de l'année 2024, les développeurs JavaScript sont déjà très familiers avec les promesses.

envoyer la transaction

Les classes Transaction et VersionedTransaction de la version 1.x n'existent plus dans la version 2.x.

Les méthodes relatives au System Program fournies dans les anciennes versions n'existent plus, donc les méthodes statiques de la classe SystemProgram doivent être importées d'ailleurs.

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

En raison de la suppression de la classe, Web3.js propose une forme pipe couramment utilisée dans la programmation fonctionnelle. Voici un exemple de mise en œuvre de la fonction de transfert de la version 1.x à l'aide de la fonction pipe :

javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana-program/system";

const transaction = pipe( createTransaction({ version: 0 }), addInstruction( getTransferSolInstruction({ fromPublicKey, toPublicKey, lamports, }) ) );

On peut voir que les transactions ne sont plus initiées par Connection, mais par un fournisseur RPC que nous avons défini, générant une fonction unique qui est ensuite appelée pour initier la transaction. Par rapport à la version 1.x, la quantité de code a augmenté, mais la personnalisation est devenue plus forte.

Les transactions sont initiées via HTTPS RPC, puis confirmées par la souscription à WSS RPC. On peut sentir que 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 impose effectivement des exigences plus élevées en matière de stabilité des services des fournisseurs de RPC.

React

Il convient de mentionner que le projet @solana/web3.js comprend également une bibliothèque appelé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 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 cette plateforme.

Série pour débutants Web3 : Mettez à niveau @solana/web3.js 2.x maintenant pour activer la programmation fonctionnelle

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
  • 10
  • Partager
Commentaire
0/400
failed_dev_successful_apevip
· Il y a 17h
2.0 est vraiment génial, enfin je l'attendais.
Voir l'originalRépondre0
GateUser-44a00d6cvip
· 07-20 05:07
Je m'en vais, je m'en vais, j'ai enfin attendu la mise à niveau.
Voir l'originalRépondre0
digital_archaeologistvip
· 07-20 03:59
Ça revient, c'est pas mal !
Voir l'originalRépondre0
nft_widowvip
· 07-19 21:58
Cette vague vient encore perturber mon état d'esprit, n'est-ce pas ?
Voir l'originalRépondre0
BrokenDAOvip
· 07-17 17:49
La mise à niveau est géniale, mais qui osera sauter en premier ?
Voir l'originalRépondre0
MetaverseVagabondvip
· 07-17 17:47
C'est stable, maintenant écrire du code est agréable.
Voir l'originalRépondre0
NonFungibleDegenvip
· 07-17 17:42
haussier af sur solana tbh... v2 va l'envoyer ser
Voir l'originalRépondre0
GasFeeNightmarevip
· 07-17 17:39
Je suis encore en train de surveiller l'évolution du gas de sol à cette heure tardive... Quand cela pourra-t-il descendre à 1 gwei ?
Voir l'originalRépondre0
consensus_failurevip
· 07-17 17:37
tps qui ne peut pas être verrouillé
Voir l'originalRépondre0
BlockImpostervip
· 07-17 17:25
Hacker off-chain avancé
Voir l'originalRépondre0
Afficher plus
  • Épingler
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)