smoldot est une ré-implémentation du client substrate, dont le développement a commencé très récemment, mais qui promet rien de moins que la possibilité d’avoir un light node embarqué dans le navigateur !!
Historique
J’avais entendu parler de ce projet de parity (l’entreprise qui développe substrate) il y a plusieurs mois à l’une des conférences de leur évènement sub0 2021: https://sub0.substrate.io/ (j’ai d’ailleurs 2 collègues de boulot qui sont intervenus dans 2 autres conférences), mais je ne l’avais encore jamais testé.
Lorsque @vit a relancé la question du p2p et du multi-nœud lors de notre réunion mensuelle, ça m’a rappelé ce projet et j’en ai parlé, car je pense que ce serait de très loin « the best solution ».
Test
Je me suis motivé à tester smoldot hier soir, j’ai eu 2 problèmes et donc ouvert 2 issues, et j’ai été agréablement surpris aujourd’hui de constater que l’un des développeurs de smoldot m’a déjà répondu et a déjà réalisé une PR qui corrige l’un des 2 problèmes (le plus bloquant, l’autre étant contournable).
J’ai testé sa PR ce soir et ça fonctionne, j’arrive à synchroniser un light node smoldot avec Duniter-v2s, à connnecter polkadotjs à mon light node smoldot, et même à soumettre des transactions, qui sont alors bien transmises à Duniter-v2s et inscrites en blockchain.
Toutefois, ça ne fonctionne que si je lance smoldot pendant la 1er epoch, si je lance smoldot plus tard, les transactions soumises ne sont jamais inscrites en blockchain.
Il faut savoir que smoldot est un projet récent, et pas encore utilisé en production, mais les développeurs avancent très vite et il est déjà quasiment pleinement fonctionnel, j’ai l’impression qu’il manque surtout de la stabilisation.
Je suis certain que smoldot (du moins la partie light node, la seule qui m’intéresse) sera stable d’ici que l’on migre la Ğ1, j’aimerais donc que nous l’utilisions, ce qui à de nombreuses implications, principalement positives mais pas que.
substrate-connect
Actuellement en tout cas, le développement de smoldot est principalement orienté pour répondre aux besoins de substrate-connect, une extension web qui permet d’avoir un light node smoldot embarqué dans son navigateur.
Attention, substrate-connect ne peut pas fonctionner avec Duniter-v2s en l’état, il faudrait y ajouter nos blockchains avec nos chain spec lorsqu’elles seront lancées, on pourrait peut-être le faire, mais je pense que ce ne serait pas une bonne idée.
je pense qu’il est préférable qui nous développions notre propre extension Ğ1-connect, en se basant sur le code de substrate-connect ainsi que de polkadotls extension, je vais créer un sujet dédié la dessus pour m’expliquer et donner plus de détails.
smoldot js
Smoldot propose directement un paquet npm, qui contient du js qui wrappe smoldot compilé en wasm.
C’est ce paquet npm qui est utilisé par substrate-connect, et dans ma vision c’est ce paquet npm qu’on utiliserait dans notre extension g1-connect (enfin au début notre propre fork de ce paquet pour gérer les instabilités mais ce serait temporaire).
Pour mes tests, ne sachant pas encore développer une extension web, j’ai utilisé le paquet npm de smoldot enfin de mon fork), dans un mini serveur websocket en nodejs.
Contraintes pour la compatibilité entre Duniter-v2s et smoldot.
Si l’on souhaite pouvoir utiliser smoldot, cela implique quelques contraintes sur duniter-v2s :
-
On ne pourra pas créer nos propres externalités, sauf à les intégrer dans smoldot, mais ça peut être refusé, et je ne vais pas maintenir un fork de smoldot sur le long-terme, donc si jamais on à besoin d’externalités supplémentaires il faudra expliquer aux développeurs de smoldot notre besoin et prier pour qu’ils acceptent de l’adresser, ou qu’il nous suggère une autre solution sans externalité custom.
-
On pourra développer des méthodes RPC custom, mais elles ne seront pas disponibles via l’API RPC de smoldot, ce qui n’est pas forcément gênant selon le besoin et le cas d’usage, mais il faut garder cette limitation à l’esprit.
-
On ne pourra pas modifier la partie réseau de notre mécanisme de consensus, en effet la partie réseau est gérée par le Client et non par le runtime, or smoldot ne gère que le consensus BABE/GRANDPA pour le moment (Je simplifie, ils gèrent aussi AURA mais ce n’est pas utilisable en prod pour une blockchain primaire comme la nôtre).
-
Et peut-être d’autres limitations que je n’ai pas encore réalisé.
Je pense que ça vaut le coup malgré ces limitations, qui ne me semble pas bloquantes dans la vision que j’ai pour le moment.
Je pense que le plus important sera de maintenir une bonne communication avec les développeurs de smoldot, et de leur exposer sincèrement nos besoins. s’ils comprennent nos besoins je pense qu’ils accepteront à minima que l’on contribue à smoldot pour y ajouter ce dont on a besoin (voir peut -être de l’implémenter eux-mêmes).
Avantages
Un light node tel que smoldot permet à l’utilisateur final de ne pas avoir à faire confiance à un nœud extérieur installé sur un ordinateur auquel il n’a pas accès.
Le light node local va se charger de vérifier les merkel proof de toutes les données, et va lui-même gérer toute la couche p2p via libp2p.
Les clients/wallet et autres applications qui se baseront sur smoldot (via l’extension g1-connect pour les app web) n’auront pas besoin de gérer du multi-nœud ni de vérifier les données, smoldot le fera pour eux.
Dans les cas ou smoldot (où l’extension g1-connect) n’est pas installé, l’application pourra fallback dans un mode naïf ou elle fait confiance à un endpoint RPC d’un nœud distant, avec un message d’avertissement invitant à installer smoldot (où l’extension en contexte web) pour plus de sécurité.
L’application pourra également choisir de forcer l’installation de smoldot (où de l’extension en contexte web), où se contenter de bloquer uniquement certaines fonctionnalités critiques.
Si l’extension g1-connect gère aussi les clés privées (et donc les signatures de transaction) comme le fait l’extension polkadotjs, on pourrait de nouveau avoir un Cesium complet en site web, et ça ne poserait alors aucun problème de sécurité.
Bref, il faut vraiment qu’on prenne un temps pour parler de tout ça avec les dev des wallet, cc @kimamila @poka @vit et @Moul