État d'avancement de Duniter-v2s

Ce sujet sert à faire le point sur l’avancement de l’implémentation de Duniter-v2s, une réécriture de Duniter basée sur le framework Substrate.

La majeure partie du spectre fonctionnel de la Ğ1 est déjà implémentée, mais le spectre fonctionnel ne représente qu’une petite partie du travail. De nombreuses autres taches techniques sont a réalisées, et demandent beaucoup de travail.

Le premier jalon sera le lancement d’une 1ère monnaie de test basée sur duniter-v2s, sans migration, et le test intensif de cette 1ère monnaie de tests pendant plusieurs mois. Cette permière monnaie sera nommée ĞDev.

Dans un 2ème temps nous pourrons commencer à préparer la migration de la ğ1-test, mais on en est encore loin.

Spectre fonctionnel

Implémenté

  • Création d’identité
  • Création des certificatons
  • Expiration des certifications
  • Renouvellement d’identité
  • Révocation implicite des identités non-renouvelées
  • Création du DU
  • Réévalutation du DU
  • Transfert de monnaie (en Ğ1 et en DU)
  • Virements automatiques (en Ğ1 et en DU)
  • sous-toile forgeron

Prévu

  • Révocation explicite d’une identité
  • règle de distance
  • Atomic swap

Tests end2end cucumber

Toute la logique métier du runtime doit être testée, nous utilisons cucumber pour exprimer les scénarios de test en langage humain (anglais).
Il faut couvrir toutes les fonctionnalités par de nombreux scénarios de tests, une bonne manière de contribuer est de rédiger des scénarios de test, si vous souhaiter aider à cette tache, lisez ce README:

Écrire des scénarios de test ne suffit pas, il faut également écrire le code qui va interpréter les actions et assertions écrites dans les scénarios, mais ça peut être réalisé par une personne différente de celle qui écrit le scénario, c’est même tout l’intérêt.

Fonctionnalités couvertes

  • Transfert de monnaie (partiellement)
  • Création du DU (partiellement)

Notez bien: il existe également de nombreux tests unitaires et tests d’intégration, personnellement je me concentre sur ces derniers pour le moment, donc il y a de la place pour contribuer aux tests end2end cucumber.

Intégration continue et déploiement continu

Mis en place

  • Formatage du code (rustfmt) et linter (clippy)
  • Exécution des tests automatisés cucumber sur un nœud build en mode debug
  • Dockerisation du binaire buildé en debug à chaque commit sur master

En cours

  • Dockerisation du binaire buildé en mode release à chaque nouvelle version (tag git) → il manque juste la CI des releases

Prévu

  • Automatiser la livraison d’un nouveau binaire (avec release note)
  • Automatiser la livraison d’un nouveau runtime (avec release note)

Étalonnage des poids

Tout les extrinsics substrate doivent être étalonnés pour connaître leur temps d’exécution en fonction des paramètres en entrée, cela est nécessaire pour savoir quelle portion du bloc est remplie par chaque extrinsic. Ce « poid » représente en temps d’exécution en nombre de nanosocondes, il sert aussi de base pour le calcul des frais (si on les active).

Il faut également étalonner les hooks, c’est à dire tous les évènements qui se produisent automatiquement sans action d’un utilisateur, par exemple l’expiration d’une certification.

Extrinsics couverts

Aucun

Hooks couverts

Aucun

Documentation

Documenté

  • Fonctionnement des tests d’intégration cucumber

Prévu

Ça va dépendre des besoins

Autres taches

De nombreuses autres petites taches sont nécessaires, mais difficile à classer.

Réalisé

Prévu


Le board sur le gitlab est plus à jour que ce post (mais en anglais), chaque ticket y est notamment priorisé et éventuellement placé dans un jalon :


D’autres taches sont également indispensables à la migration du la Ğ1 sur Duniter-v2s, mais ne sont pas gérées dans le projet Duniter-v2s en lui-même:

L’historisation de la blockchain

Duniter-v2s expose une API RPc qui ne renseigne que sur l’état courant de la monnaie pas sur l’historique des états passés. Il est donc nécessaire de mettre en place des serveurs d’indexation et d’historisation.

L’une des pistes les plus sérieuses serait d’utiliser Hydra, si vous aimez le typescript et GraphQL vous pouvez fortement aider la dessus.

@slaivyn avait commencé à tester Hydra il y a quleques mois, voir ici: Utilisation d'Hydra pour extraire des données typées - #6 par matograine

La migration des clients

Plusieurs logiciels clients ont pour projet de s’interfacer avec duniter-v2s:

  • Cesium-v2 en Typescript, référent @kimamila
  • Ğecko en Dart, référent @poka
  • Tikka en Python, référent @vit
  • Silkaj en Python, référent @Moul

Si j’oublie des projets, je m’en excuse, signalez-vous et je vous ajouterai :slight_smile:

Le développement d’outils de visualisation et de statistiques

(rédaction à venir)

Autre

Vous voyez d’autres taches techniques nécessaires à la migration sur substrate ? Alors créez un sujet dédié sur ce forum (s’il n’existe pas déjà) puis indiquez-moi le lien pour que je l’ajoute à la liste :slight_smile:

10 « J'aime »

Depuis 10 jours j’ai continué d’avancer sur l’implémentation de Duniter-v2s, j’ai travaillé principalement sur (dans l’ordre) :

  • L’écriture de tests d’intégrations sur le code de la wot
  • Le refactoring du code de la wot pour qu’une grande partie soit commune avec la « sous-wot » forgerons (les tests d’intégration m’ont énormément aidé pour le refactoring)
  • Le développement de la sous-toile forgerons
  • Encore du refactoring pour mieux intégrer les 2 wot ensemble et simplifier le code.
  • Le développement d’une pallet pour gérer le set des autorités en cours (chaque membre forgeron peut entrer ou sortir du set des autorités via des extrinsic dédiés).

Quand je trouverai la motivation et le temps je préciserai le fonctionnement de la sous-toile forgeron dans un sujet dédié, mais c’est le même que la toile normale, elle à son propre membership et ses propres certifications, seule l’identité est commune. Et évidement, il faut être membre de la toile « classique » pour demander l’adhésion à la toile forgeron.

5 « J'aime »

Bravo Elois (et Cgeek je crois) pour ce beau boulot abattu.

1 « J'aime »