Lancement majeur de la version 2.x de Solana Web3.js, la conception modulaire améliore considérablement les performances.

Solana Web3.js 2.x version : mise à jour majeure de la bibliothèque JavaScript puissante

La bibliothèque JavaScript riche en fonctionnalités, Solana Web3.js, a officiellement lancé sa version 2.x en novembre de cette année. Par rapport à la version 1.x, la nouvelle version apporte des changements significatifs. Cet article présentera un aperçu de ses principales modifications.

Bien que la version 2.x vient 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, il est sans aucun doute bénéfique de comprendre ces changements à l'avance pour se préparer aux futures mises à niveau.

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

Comparaison des versions

Il est indéniable que l'ancienne version était plus simple et directe à utiliser. La version 1.x nécessitait seulement un package @solana/web3.js qui contenait toutes les fonctionnalités, encapsulant un grand nombre d'opérations courantes avec une conception orientée objet. Par exemple, la classe Connection propose des dizaines de méthodes, couvrant presque toutes les fonctionnalités nécessaires aux développeurs.

Cependant, cette conception apporte également certains problèmes. Bien que les fonctionnalités réellement utilisées par les développeurs ne soient qu'une petite partie de l'ensemble, l'ensemble du code source sera téléchargé sur l'appareil de l'utilisateur, ce qui pourrait entraîner un temps de chargement prolongé.

En comparaison, la version 2.x adopte une approche de conception modulaire. L'équipe officielle a divisé l'ancienne base de 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 adopte plutôt un mode de fonction unique, ce qui aide à optimiser le code JavaScript lors de la construction. Le code inutilisé sera supprimé et ne sera pas téléchargé sur les appareils des utilisateurs.

Selon la documentation officielle, l'utilisation de la nouvelle version de DApp permet généralement d'optimiser d'environ 30 % la taille du code. 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. Aider les développeurs à localiser rapidement les fonctionnalités nécessaires devient un enjeu clé. Il semble actuellement que la sémantique des noms de paquets soit bonne, permettant de comprendre en gros leur utilisation simplement par leur nom, ce qui réduit dans une certaine mesure la difficulté de migration pour les développeurs.

Cependant, comme la nouvelle version vient d'être publiée, de nombreux projets n'ont pas encore migré. 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 pertinentes, ce qui pourrait rendre certains développeurs confus.

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 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 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 les 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

connexion

Dans la version 1.x, Connection offre de nombreuses méthodes. Mais sa fonctionnalité principale est de créer un émetteur de requêtes en configurant l'adresse de requête RPC, puis d'envoyer diverses requêtes par son intermédiaire.

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

javascript import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';

const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });

const { sendAndConfirmTransaction } = rpc;

Dans ce code, lorsque nous appelons sendAndConfirmTransaction pour envoyer une transaction, une requête HTTPS est automatiquement initiée et une connexion WSS est établie, s'abonnant à l'état de la transaction, et le hachage de la transaction est renvoyé une fois que la transaction est confirmée.

paire de clés

Les parties liées à la clé publique et à la clé privée ont é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 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, plutôt que de renvoyer directement une 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, 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 difficile à accepter, en cette fin d'année 2023, les développeurs JavaScript sont déjà très familiers avec les Promises.

envoyer la 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 ne sont plus disponibles, donc toutes les méthodes statiques de la classe SystemProgram doivent être importées d'autres sources.

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 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/functional'; import { getTransferSolInstruction } from '@solana/system-program'; importer { addSignatureToTransaction, createTransaction, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } de '@solana/transactions';

const transaction = pipe( createTransaction(), addSignatureToTransaction(getTransferSolInstruction({})), );

const signedTransaction = signTransaction(transaction, [signer]); const signature = getSignatureFromSignedTransaction(signedTransaction); const message = getTransactionMessage(signedTransaction);

const txid = await sendAndConfirmTransaction({ signedTransaction });

On peut voir que les transactions ne sont plus initiées via Connection, mais qu'elles sont générées par un fonction spécifique définie par notre RPC Provider, puis cette fonction est 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 via l'abonnement WSS RPC. On peut sentir que cette nouvelle méthode dépend beaucoup de WSS, et je crois que l'application de WSS deviendra 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 RPC.

Réagir

Il convient de mentionner 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 reflète pleinement 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.

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

SOL4.97%
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
  • 8
  • Partager
Commentaire
0/400
SchrodingerWalletvip
· Il y a 1h
Attendez que les pros s'engagent d'abord.
Voir l'originalRépondre0
AirdropFatiguevip
· Il y a 11h
Hé, le déplacement ou non n'a pas beaucoup d'impact.
Voir l'originalRépondre0
DegenGamblervip
· 08-06 03:11
Enfin monté à 2.0~ juste pour le spectacle
Voir l'originalRépondre0
ser_we_are_ngmivip
· 08-06 01:10
À quoi bon faire une mise à niveau ? On peut très bien utiliser la version 1.x.
Voir l'originalRépondre0
LayerHoppervip
· 08-06 01:10
Il aurait dû être mis à jour plus tôt.
Voir l'originalRépondre0
PumpAnalystvip
· 08-06 00:55
D'un point de vue technique, cette mise à jour semble suspecte. Je ne recommande pas aux vieux pigeons de se précipiter pour mettre à niveau.
Voir l'originalRépondre0
NotAFinancialAdvicevip
· 08-06 00:52
Cette mise à niveau est purement une corvée.
Voir l'originalRépondre0
BearMarketBardvip
· 08-06 00:42
Il semble qu'ils viennent pour récolter.
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)