Web3.py, Nethereum … Quelles alternatives à Web3.js pour un projet Blockchain ?

Futurs
Futurs.io
5 min readOct 18, 2019

--

#BLOCKCHAIN #BACKEND #WEB3JS #WEB3PY #NETHEREUM #DEVELOPPEMENT #INFORMATIQUE

Langage natif du Web, créé dès 1995 par Brendan Eich pour le compte de Netscape Communications Corporation, JavaScript est à ce jour l’un des langages les plus utilisés au monde. Il est facile à prendre en main du fait de sa liberté de syntaxe et qu’il soit non typé. Notamment, il gère automatiquement si une variable est un nombre ou une chaîne de caractère. Web3.js est la plus célèbre bibliothèque pour interagir avec une blockchain de type Ethereum, elle a donc été utilisée dès la naissance de cette solution pour devenir un standard du secteur.

Cependant, après plusieurs projets et quelques années de recul, ce langage présente des limites. Sur la base des expérimentations menées par Futurs.io cet article explore les alternatives à Web3.js, notamment Web3.py qui fonctionne avec Python et Nethereum avec C#.

Préambule : les limites de Javascript

Avant toute chose, il faut savoir qu’une application dite “Blockchain” est plus complexe et a plus de besoins qu’une application Web ordinaire.

Dans ce cadre, l’atout principal de JavaScript est qu’il est non typé. Il n’est pas obligatoire de se soucier du type de la variable, puisque celle-ci est interprétée par le langage lui-même. Le non-typage permet une productivité bien plus rapide et une créativité importante si l’on sait ce que l’on fait.

Cependant, dans les mains de développeurs non avertis, cela peut créer des situations non voulues. De plus, dans le cadre de la blockchain, une erreur a des répercussions plus profondes puisqu’elle impacte directement des fonctions transactionnelles. Pour mémoire, vous pouvez trouver ici un exemple d’erreur qui a séparé le Mainnet d’Ethereum en deux.

Aussi, il n’est pas facile d’appréhender la notion de Scope dans Javascript. Contrairement à d’autres langages, des objets peuvent se télescoper en cas de nommages peu rigoureux. Par exemple, en utilisant une bibliothèque externe il est possible de transformer un « objet » en entier. Cela est un problème de sécurité récurrent. Sa praticité se révèle donc une arme à double tranchant. C’est pour cela que chez Futurs, nous préférons forcer le typage des données pour la plupart des situations. De plus, la résolution des bugs peut être chronophage car les messages d’erreurs sont abscons.

En outre, JavaScript dans sa version actuelle ne se suffit pas à lui-même et pour développer un produit complexe il est souvent nécessaire d’utiliser un grand nombre de bibliothèques ou surcouches telles que TypeScript.

Web3.js : la bibliothèque Javascript de référence dans la blockchain

Dans la blockchain, plusieurs bibliothèques Javascript dominent : Ethers.js, EthJs, Web3.js.

EthJs n’a pas évolué depuis 2017. Ethers.js est régulièrement mis à jour et possède une communauté conséquente avec dix contributeurs et comprend un framework basé, Etherlime. Cependant, elles manquent encore de maturité. C’est la raison pour laquelle les développeurs en JavaScript utilisent aujourd’hui davantage Web3.js lorsqu’ils doivent interagir avec un nœud Ethereum local ou distant. Nous traiterons donc ces autres bibliothèques dans un prochain article.

Actuellement 3 versions de Web3.js coexistent et sont régulièrement mises à jour. Cela oblige à mettre en place une stratégie d’évolution dans le développement d’un projet blockchain. Par exemple, des smart-contracts rédigés en solidity version 0.4.24 sont devenus obsolètes au passage de Web3.js version 0.3 à Web3.js version 1.0.

L’impact sur les temps de développement est important et occasionne du débogage lourd et redondant. Il faut noter que Web3.js n’envoie aucun message d’erreur explicite, ceci force le développeur au débogage pas à pas puisque aucune autre méthode n’est proposée.

Autre effet des évolutions des différentes versions, il peut arriver que la documentation de Web3.js ne soit pas à jour, même si elle demeure globalement compréhensible et efficace.

Aujourd’hui une nouvelle version de Web3.js pourrait apporter des modifications importantes et changer son architecture. Il faut donc prendre en compte lors des développements à venir un risque de surcharge de travail.

Web3.js vs Nethereum

Une alternative à Web3.js est Nethereum.

Nethereum permet d’ajouter une surcouche blockchain à des application en C# sur .NET et .NETCore. Son architecture est similaire à celle de Web3.js cependant Nethereum a été pensé pour les débutants en blockchain, avec des modules tels que la génération de code et des templates de démarrage.

Que ce soit pour Web3.js ou Nethereum les développeurs se doivent de suivre les normes des langages natifs sous-jacents. Nethereum est donc plus contraignant que Web3.js mais plus verbeux. Ainsi tout appel est fortement syntaxique et des phrases se forment en appelant des objets, ce qui facilite la compréhension du code.

Par exemple, avec l’appel suivant :

mainThread.accounts.updateAllUsers(USER_OFFLINE) ;

Il est facile de comprendre ce qu’il se passe, depuis le mainthread tous les accounts sont forcés en mode « OFFLINE ». Un profil non-développeur peut donc comprendre l’aspect fonctionnel inscrit dans les lignes de code.

De plus, aujourd’hui le C# est accessible peu importe l’OS en utilisant .NETCore.

Si votre application est déjà en .NET il n’est pas utile de multiplier les langages, Nethereum embarque toutes les fonctionnalités (voire plus) de Web3.js.

Web3.js vs Web3.py

Web3.py, contrairement à Nethereum, calque fortement Web3.js. Ainsi, la comparaison se ferait au niveau des langages natifs de ces bibliothèques, et des outils qu’ils apportent. Nous vous invitons à lire cet article, que avons précédemment rédigé.

En revanche, le github de Web3.py est beaucoup plus rigoureux, avec une seule version régulièrement mise à jour. Les tests et les exemples présents sont plus solides également.

Web3.py apparaît comme une très bonne alternative pour celles et ceux qui veulent tester et se familiariser avec la blockchain.

Tableau comparatif Web3.js vs Nethereum vs Web3.py — Crédit Futurs.io

Notre vision

En tant que pôle d’innovation reconnu par Gartner, Futurs.io se doit de pouvoir intervenir sur tout type de projets. Voilà pourquoi nous avons eu besoin d’établir une comparaison entre les différentes bibliothèques blockchain présentes sur le marché. Ici nous vous avons présenté deux alternatives au mastodonte Web3.js avec Nethereum et Web3.py. Notre application étant basée sur le Web, nous sommes malgré tout restés sur Web3.js, et nous avons fait cet article dans le but de partager notre expérience avec les autres acteurs de la blockchain. Ce qui est certain à ce stade, c’est que la complexité de la blockchain impose une vigilance accrue sur ces questions et que se reposer sur les standards de marché ne sera pas une garantie de succès.

By Anaïs Crouzet, Guillaume Hoarau, Julien Selaries et Mathieu Weill

--

--

Futurs
Futurs.io

Futurs est l’entité du groupe MALTEM dédiée à l’innovation, à la stratégie numérique et à l’incubation.