Comme je l’évoquais dans ce message, je compte bien démarrer la migration de Duniter vers sa version dite « V2S » (Duniter V2 basée sur Substrate).
Je vous propose un plan pour cette migration, basée sur 3 étapes.
Etape 1 : le protocole
C’est l’étape la plus fondamentale, qui consiste à réécrire le protocole Duniter pour être compatible avec Substrate.
Pour quoi faire ? Il s’agit essentiellement d’un travail de définitions, afin de lever toute ambiguïté pour le développement de l’implémentation et donc d’éviter de potentiels bugs. A ce niveau nous prenons de la hauteur, afin de discerner l’essentiel de ce qui relève du détail d’implémentation. On peut parler de spécification.
Ainsi dans le protocole nous ne verrons pas de notions telles que Rust, RocksDB ou autres pallet. Toutefois comme ce protocole vise à permettre une implémentation Substrate, celui-ci va fréquemment en reprendre certaines définitions (ex. : les Storage, Trie, Merkle root, Runtime, …).
Je compte investir le plus gros de mon temps dans cette étape. Vous pouvez bien entendu participer si vous le souhaitez, je compte commiter sur le dépôt documents/rfc et discuter de son évolution dans cette catégorie du forum.
Etape 2 : l’implémentation
C’est le développement proprement dit, qui consiste à matérialiser le protocole en code exécutable via Rust et le framework Substrate.
Il s’agit certainement de l’étape la plus longue et la plus difficile, même si le framework Substrate devrait grandement aider. Dans cette étape seront également codés tous les tests automatisés (unitaires et fonctionnels).
Là, il va falloir trouver des développeurs je ne compte pas vraiment m’investir dans cette tâche, ne serait-ce que par manque de temps. Mais aussi je souhaite passer la main à d’autres individus talentueux et enthousiastes à l’idée de propulser la Ğ1 à un tout autre niveau.
Etape 3 : l’interfaçage
J’ai souhaité distinguer cette étape de la n°2. Il s’agit certes de développement de l’implémentation Duniter V2S, néanmoins cette partie n’est pas dans le protocole.
Il s’agit ici de code d’intégration avec d’autres composants à destination des clients : Cesium, Ğecko, Tikka, Silkaj, WotWizard, Remuniter, ğchange, etc. ; mais aussi de l’outillage pour s’interfacer avec et migrer les monnaies existantes Ğ1 et ĞT.
J’estime cette partie suffisamment volumineuse pour être à part, mais aussi je préfère opérer une séparation avec le cœur afin qu’il soit clair pour les développeurs Duniter que cette partie ne puise pas directement dans le Storage (ce dernier étant optimisé pour l’exécution du protocole, pas pour la lecture des clients), et que la migration des Ğ1 et ĞT est encore un autre sujet.
Un planning ?
Difficile d’en donner un, les contributions étant libres. De mon côté j’ai encore une partie du mois de décembre pour produire le protocole, je ne sais déjà pas si cela sera suffisant. De plus nous allons devoir prendre des décisions de rupture avec le protocole DUBP de Duniter, ce qui génère de l’incertitude planning :
- protocole de production de blocs : BABE ? PoW de Duniter ? Hybride ? Autre ?
- protocole de gouvernance : quel algorithme pour accepter une évolution du protocole ?
- protocole de résolution de forks (finalisation) : GrandPa ? Duniter 3-3 ? Autre ?
- …
J’en omet certainement, je n’ai pas encore tout creusé.
Voilà pour un aperçu de ce qui nous attend pour ces prochains mois j’espère que vous en serez !