Rejoignez-Nous sur

Bibliothèques JavaScript Ethereum pour le développement Dapp: web3.js vs ethers.js

0*PyKfZvZttbJbwNWg

News

Bibliothèques JavaScript Ethereum pour le développement Dapp: web3.js vs ethers.js

Un guide technique sur les différences entre Web3.js et Ethers.js, les deux bibliothèques JavaScript les plus populaires pour interagir avec la blockchain Ethereum et développer des dapps.

ConsenSys

Web3.js et ethers.js sont des bibliothèques JavaScript qui permettent aux développeurs d'interagir avec la blockchain Ethereum. Ce sont toutes les deux d'excellentes bibliothèques – l'une ou l'autre bibliothèque répondra probablement aux besoins de la plupart des développeurs Ethereum. Cet article est une comparaison de web3.js et ethers.js, en se concentrant sur leurs similitudes et différences, afin que vous puissiez mieux comprendre les nuances des bibliothèques. Il est écrit dans le but d'éduquer les développeurs comprendre les compromis entre les deux bibliothèques pour pouvoir décider quelle bibliothèque utiliser pour leur cas d'utilisation particulier. Cet article comprend des ressources qui peuvent être utiles pour ceux qui sont nouveaux dans le développement ou la programmation de blockchain en général.

TL; DR: Les deux bibliothèques fonctionnent. Pour votre cas d'utilisation, une bibliothèque peut être meilleure pour vous.

Web3.js a une communauté d'utilisateurs et de mainteneurs associés à la Fondation Ethereum. Il a une bonne référence API. Il existe depuis 2015 et a été largement utilisé par de nombreux projets. De ce fait, la bibliothèque a été le «go-to» dans de nombreux tutoriels «Build Your First dApp».

Ethers.js est excellent car il s'agit d'une petite bibliothèque compacte, avec un grand nombre de cas de test. Il a une bonne documentation de «mise en route», la rendant accessible aux nouveaux utilisateurs. «Simple» et «intuitif» sont des mots qui sont souvent utilisés par les développeurs pour décrire leur expérience avec ethers.js et la bibliothèque a gagné en popularité au cours des deux dernières années, vu l'augmentation des téléchargements et de l'utilisation par les projets.

La bibliothèque web3.js est une bibliothèque JavaScript open source (GNU Lesser General Public License version 3) construite par la Fondation Ethereum, et elle comprend des fonctions pour communiquer avec un nœud Ethereum via la notation d'objet JavaScript – Appel de procédure distante (JSON-RPC) protocole. En d'autres termes, c'est une bibliothèque JavaScript qui permet à un développeur d'interagir avec la blockchain Ethereum. Web3.js est actuellement sur la version 1.2.9, qui est la version référencée dans cet article. Web3.js est composé de quatre modules.

En JavaScript, un module est un code qui a des fonctionnalités spécifiques dans un programme plus grand. Les modules doivent être autonomes, de sorte que si vous supprimez un module d'une bibliothèque, d'un programme ou d'une application, la bibliothèque, le programme ou l'application globale ne doivent pas cesser de fonctionner. Pour ceux qui connaissent python ou java, vous connaissez peut-être les «classes», qui sont analogues aux modules. Pour ceux qui découvrent JavaScript, FreeCodeCamp a un grande explication des modules JavaScript.

Web3.js a une classe principale appelée web3. La majeure partie des fonctionnalités de la bibliothèque se trouvent dans cette classe. Les cinq modules supplémentaires qui composent web3js sont:

  1. web3-eth

Le module web3-eth contient des fonctions qui permettent à un utilisateur de web3.js d'interagir avec la blockchain Ethereum. Plus précisément, ces fonctions peuvent interagir avec des contrats intelligents, des comptes appartenant à des tiers, des nœuds, des blocs extraits et des transactions. Trois exemples illustratifs sont présentés ci-dessous:

  • web3.eth.getBalance vous permet d'obtenir le solde ETH d'une adresse à un bloc donné

Le module web3-shh vous permet d'interagir avec le protocole Whisper. Chuchotement est un protocole de messagerie, conçu pour diffuser des messages facilement et pour une communication asynchrone de bas niveau. Deux exemples illustratifs sont présentés ci-dessous:

  • web3.shh.post publie un message chuchoté sur le réseau

Le module web3-bzz vous permet d'interagir avec Swarm. Essaim est une plateforme de stockage décentralisé et un service de distribution de contenu – il peut servir de lieu de stockage de fichiers comme des images ou des vidéos pour votre application décentralisée (dapp). Deux exemples illustratifs sont présentés ci-dessous:

  • web3.bzz.upload vous permet de télécharger des fichiers et des dossiers vers Swarm

Le module web3-net vous permet d'interagir avec les propriétés réseau d'un nœud Ethereum. L'utilisation de web3-net vous permettra de trouver des informations sur le nœud, le .net suivant le protocole sur lequel vous souhaitez obtenir des informations (désigné ici par un *, représentant le choix de web.eth.net, web3.shh. net ou web3.bzz.net). Deux exemples illustratifs sont présentés ci-dessous:

  • web3. *. net.getID renvoie l'ID réseau

Le module web3-utils vous fournit des fonctions utilitaires que vous pouvez utiliser dans un dapp Ethereum ainsi qu'avec d'autres modules web3.js. Une fonction utilitaire est une fonction réutilisable pour faciliter l'écriture de code, ce qui est courant en JavaScript et dans d'autres langages de programmation (voir JavaScript: le guide définitif, 6e édition par Dave Flanagan pour une description des fonctions utilitaires existant dans la bibliothèque JQuery de JavaScript). Web3-utils comprend des fonctions utilitaires qui convertissent les nombres, vérifient si une valeur remplit une certaine condition et recherchent les jeux de données. Trois exemples illustratifs sont présentés ci-dessous:

  • web3.utils.toWei convertit Ether en Wei

Ethers.js est une bibliothèque JavaScript qui permet aux développeurs d'interagir avec la blockchain Ethereum. La bibliothèque comprend des fonctions utilitaires en JavaScript et TypeScript, et possède toutes les capacités d'un portefeuille Ethereum. Ethers.js est actuellement sur la version 5.0.3. Ethers.js a été créé par Ethers et est open source via la licence MIT.

Similaire à web3.js, ethers.js possède quatre modules qui composent l'interface de programmation d'application (API).

  1. Ethers.provider

Ethers.provider vous permet d'abstraire une connexion à la blockchain Ethereum. Il peut être utilisé pour émettre des requêtes et envoyer des transactions signées qui changeront l'état de la blockchain. Voici trois exemples illustratifs:

  • ethers.providers.InfuraProvider vous permet de vous connecter au réseau hébergé Infura de nœuds Ethereum

Une note: web3.js a également des fournisseurs à cet effet – et ils sont dans le module de base web3. Ethers.js et web3.js sont organisés assez différemment, il n'y a donc pas toujours de mappage clair de module à module, même si la fonctionnalité des deux bibliothèques est très similaire.

Ethers.contract vous permet de déployer et d'interagir avec des contrats intelligents. Plus précisément, les fonctions de ce module vous permettent d'écouter les événements émis par un contrat intelligent, d'appeler les fonctions fournies par un contrat intelligent, d'obtenir des informations sur les contrats intelligents et de déployer des contrats intelligents. Voici deux exemples illustratifs:

Ethers.utils fournit des fonctions utilitaires pour formater les données et traiter les entrées utilisateur. Ethers.utils fonctionne comme web3-utils et facilite la création d'applications décentralisées. Voici trois exemples:

  • ethers.utils.getContractAddress récupère une adresse de contrat intelligent de la transaction utilisée pour déployer le contrat intelligent

Ethers.wallet fournit des fonctionnalités différentes des autres modules dont nous avons discuté jusqu'à présent. Ethers.wallet vous permet de vous connecter à un portefeuille existant (une adresse Ethereum), de créer un nouveau portefeuille et de signer des transactions. Trois exemples:

  • ethers.wallet.createRandom va créer un nouveau compte aléatoire.

Web3.js a un package similaire dans le module web3.eth appelé web3.eth.accounts. Cependant, dans la documentation de ce package, il est indiqué: «Ce package n'a PAS été audité et peut être potentiellement dangereux. Prenez des précautions pour effacer correctement la mémoire, stocker les clés privées en toute sécurité et tester correctement la fonctionnalité de réception et d'envoi de transactions avant de l'utiliser en production! »

Tout d'abord, si vous créez une application passe-partout ou que vous terminez un didacticiel, utilisez ce que ce passe-partout ou ce didacticiel recommande, que ce soit web3.js ou ethers.js. Cela vous rendra la vie plus facile et plus fluide avec le tutoriel. Veillez à utiliser la version de web3.js ou ethers.js spécifiée dans le didacticiel. Il existe de nombreux didacticiels qui n'ont pas été mis à jour, alors ne supposez pas que vous pouvez utiliser la version la plus récente de la bibliothèque, sauf si le didacticiel le précise.

Si vous construisez une application à partir de zéro et déterminez quelle bibliothèque vous souhaitez utiliser, nous avons adapté un processus d'évaluation de logiciel qu'Andres Canal a utilisé dans son article « Utilisation de Quill, js pour créer un éditeur WYSIWYG pour votre site Web "Pour évaluer l'éditeur de texte à utiliser.

Voici une série de neuf questions que vous, le lecteur, devriez vous poser dans le cadre de la détermination de la bibliothèque qui vous convient le mieux, avec un certain contexte et des informations pour vous aider à y répondre.

1. Quelle est l'importance de la popularité de la bibliothèque?

Pour utiliser la définition du canal d'Andres:

«Un projet populaire sur Github signifie exactement ce que vous attendez de lui. À savoir qu'il y a beaucoup de gens qui le questionnent, le contribuent et le soutiennent. Cette activité a tendance à déboucher sur des logiciels plus fiables. Vous pouvez vérifier la popularité de n'importe quel projet en examinant le nombre d'étoiles dont il dispose, le nombre de problèmes ouverts, le nombre de demandes d'extraction en attente et le nombre de contributeurs qui ont travaillé sur le projet. »

Web3.js compte près de 8 800 étoiles au moment de la rédaction de ce blog, tandis que ethers.js en compte près de 1 500. Web3.js est utilisé par 51 300 référentiels sur GitHub, contre 18 500 pour ethers.js. Web3.js existe depuis plus longtemps, ce qui est l'une des raisons pour lesquelles web3.js est la bibliothèque la plus populaire.

2. Quelle est l'importance de la maintenance de la bibliothèque?

Nous voulons utiliser des bibliothèques qui sont mises à jour fréquemment, afin que les bogues soient éliminés et que de nouvelles fonctionnalités soient ajoutées. Bien que ce ne soit pas parfait, regarder un mois (ou deux) de validations, des problèmes fermés, des problèmes actifs et le nombre de responsables sur cette période peut donner une idée des forces et des faiblesses d'un projet open source. Cela révèle également des modèles de maintenance, donnant un aperçu à l'utilisateur d'une bibliothèque lorsque les mises à jour et les correctifs de bogues sont généralement traités, qui peuvent être utilisés comme mesure proxy pour la maintenance de la bibliothèque. Regardez le pouls mensuel des bibliothèques ( web3.js / ethers.js) sur GitHub pour voir les statistiques.

Le nombre de validations et de problèmes résolus par le responsable unique d'ethers.js, Richard Moore, est impressionnant et il devrait être applaudi. Web3.js compte 12 responsables et trois personnes ont réalisé la quasi-totalité de ces validations. Il n'y a pas de gagnant clair ici, mais en choisissant la bibliothèque, être au courant de ces statistiques peut vous aider à déterminer ce qui compte le plus pour vous en termes de maintenance et à prioriser la bibliothèque qui répond à vos besoins.

3. Qui est responsable du développement de la bibliothèque et combien de projets l'utilisent?

Web3.js est un projet du Fondation Ethereum, qui est une organisation à but non lucratif dédiée à la recherche et à l'organisation du développement au niveau du protocole. Ethers.js a été créé pour créer "Une bibliothèque complète, simple et minuscule – elle remplace web3 et ethereum.js". Développé par Richard Moore, ethers.js est alimenté par son travail dans la création et la maintenance de la bibliothèque.

Bien que certains projets aient déclaré publiquement quelle bibliothèque ils utilisent, nous avons estimé que l'affichage des données nous permettrait de montrer que les deux sont très populaires. Vérifiez web3.js et le ethers.js des graphiques de dépendances pour explorer la bibliothèque utilisée par les projets de confiance ou, s'ils utilisent / prennent en charge les deux bibliothèques.

4. Dans quelle mesure est-il important que la bibliothèque ait des tests?

Si les tests pré-écrits sont importants pour votre projet, ethers.js a toujours été le gagnant. Au moment de la rédaction, Ethers.js avait auparavant clairement documentation de leurs tests sur leur Github pour la version 3.0, mais cette documentation n'a pas encore été mise à jour avec la version 5.0. Web3.js manque de documentation de test comparable. Si la documentation de test est mise à jour dans les semaines à venir, ethers.js maintiendra sa position comme ayant de meilleurs tests et une meilleure documentation de test. Le jury est absent à ce jour car il semble que la suite de tests ethers.js n'ait pas encore été mise à jour.

5. Quelle est l'importance du nombre de téléchargements de la bibliothèque?

Étant donné que web3.js existe depuis plus longtemps, il contient plus de téléchargements ( 14 703 432 au 20 mai) que ethers.js ( 8 500 336 au 20 mai), mais quand on regarde les téléchargements hebdomadaires, ethers.js ( 184 798 au 20 mai) a dépassé web3.js ( 175 661 au 20 mai) en téléchargement et est actuellement la bibliothèque la plus fréquemment téléchargée. Ethers.js a plus de téléchargements sur la période la plus récente, mais web3.js a plus de téléchargements dans l'ensemble.

6. Quelle est l'importance des performances Web?

Si les performances Web sont très importantes pour vous, l'hypothèse est que ethers.js est la bibliothèque la plus performante. La bibliothèque ethers.js prétend être de 284 ko non compressée, tandis que sur NPM, il est répertorié à 3,5 Mo déballés. Web3.js qui est au moins un ordre de grandeur plus grand, à 10,6 Mo déballés. Étant donné que ethers.js est plus petit que web3.js, la ligne de pensée est que pour une application utilisant ethers.js, le temps de chargement sera plus rapide que la même application qui utiliserait web3.js à la place. En effet, quelle que soit la bibliothèque utilisée, elle aura été chargée avec d'autres actifs faisant partie de l'application Web. Nous n'avons pas testé le temps de chargement d'applications identiques qui sont identiques à l'exception de l'utilisation de web3.js ou ethers.js, alors prenez ce point avec un certain scepticisme. Si ces Mo supplémentaires font une différence dans votre application, ethers.js est la plus petite bibliothèque.

7. Quelle est l'importance de la qualité de la documentation?

La qualité de la documentation est une mesure subjective, mais une façon de mesurer la qualité de la documentation est de la lire et de voir à quel point la documentation est facilement compréhensible. Idéalement, la documentation est écrite de sorte qu'un nouvel utilisateur puisse comprendre comment utiliser la bibliothèque. La documentation doit également être organisée pour permettre à un utilisateur plus aguerri de trouver rapidement ce qu'il recherche.

Web3.js a une vaste Référence API c'est incroyablement utile. C'est la partie la plus solide de la documentation. Le matériel «Mise en route» est court. Un utilisateur expérimenté appréciera probablement cela, mais il y a un manque de matériel pour le nouvel utilisateur de web3.js.

Ethers.js comprend une section «Mise en route», ainsi qu'une référence API étendue. Ceux-ci sont incroyablement utiles et donnent à ethers.js un avantage par rapport à web3.js, en particulier en ce qui concerne les nouveaux développeurs de l'écosystème Ethereum. Il existe des sections incomplètes dans la documentation d'ethers.js, qui n'est pas conviviale (certaines parties du Section Bases d'Ethereum et le «Cookbook» historiquement génial d'exemples de code courants qu'un développeur utiliserait n'est pas encore à jour dans 5.0 – vous devez revenir à la documentation de la version 4.0 pour trouver cette section incroyablement utile). Ethers.js fournit également des informations claires sur les avantages de l'utilisation d'ethers.js.

Aucune bibliothèque n'a une documentation parfaite, donc si la documentation est importante pour vous, passez un peu de temps à l'explorer pour déterminer s'il y a suffisamment d'informations pour vous permettre d'implémenter la fonctionnalité que vous espérez construire.

8. Quelle est l'importance de l'utilisation globale de la bibliothèque?

Alors que web3.js existe depuis plus longtemps et a donc plus de téléchargements et d'étoiles GitHub, ethers.js gagne en popularité. En fin de compte, c'est à vous de déterminer quels aspects de chaque bibliothèque sont les plus importants pour votre cas d'utilisation.

9. Quelle est l'importance de la licence?

Selon votre spécifique cas d'utilisation, la licence du logiciel open source peut vous intéresser. Web3.js possède une licence LGPLv3 (comme indiqué sur NPM, mais pas sur leur référentiel GitHub) et ethers.js possède une licence MIT (comme indiqué sur leur référentiel GitHub). Plus de détails sur les licences peuvent être trouvés en contactant un expert juridique à ce sujet. Cependant, Slava Todavchich fournit une lecture divertissante sur le sujet dans l'article " Comprendre les licences de logiciels libres et open source. "

Comme nous l'avons mentionné au début, les deux bibliothèques sont capables de faire le travail. Ethers.js a gagné en popularité au cours des deux dernières années, avec une augmentation des téléchargements et de l'utilisation par les projets. Web3.js a toujours été la norme, et possède toujours beaucoup de partages de développeurs.

Restez à l'écoute pour la partie II où nous publierons un tutoriel de suivi pour vous montrer comment vous connecter à l'API Infura et envoyer une traduction en utilisant web3.js et ethers.js. Un grand merci à Thomas Hay, Akua Nti et Sean Brennan pour leurs nombreuses contributions à ce guide.

Pour plus de didacticiels Web3, consultez le Blog Infura, Académie ConsenSys, et notre Procédures pas à pas de développement de la blockchain.



Traduction de l’article de ConsenSys : Article Original

BlockBlog

Le Meilleur de l'Actualité Blockchain Francophone & Internationale | News, Guides, Avis & Tutoriels pour s'informer et démarrer facilement avec Bitcoin, les Crypto-Monnaies et le Blockchain. En Savoir Plus sur L'Équipe BlockBlog

Commenter cet Article

Commenter cet Article

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus dans News

Les Plus Populaires

Acheter des Bitcoin

Acheter des Alt-Coins

Sécuriser vos Cryptos

Vêtements et Produits Dérivés

Top