État d'avancement de Dunitrust (nouveau nom de DURS)

dunitrust logo

Le projet

Dunitrust est une implémentation du protocole DUBP, le protocole technique actuellement implémenté dans le logiciel Duniter qui fait fonctionner la monnaie Ğ1 et sa monnaie de test associée ğ1-test.

L’objectif, à minima, est que le logiciel Dunitrust assure toutes les fonctionnalités permettant de faire fonctionner la Ğ1, ce qui veut dire qu’il pourrait remplacer totalement Duniter à terme (les 2 logiciels pourront également continuer a faire co-fonctionner la Ğ1 ensemble tant que des développeurs maintiendrons Duniter).

Comme son nom l’indique, Dunitrust est écrit en Rust, un langage moderne, safe by design et aussi performant que le C/C++ tout en étant plus expressifs que ces derniers.

la route est encore très longue avant la sortie d’une v1 de Dunitrust, notamment car nous faisons le choix de prendre le temps de faire les choses biens afin d’avoir un logiciel le plus fiable et optimisé possible.

Si les contributeurs qui ont rejoins le projet ces derniers mois y restent et montent en compétences, alors on peut raisonnablement espérer une v1 pour l’automne 2020 (rml16). Cette estimation n’a rien de contractuelle et pourra être repoussée autant que nécessaire, le temps d’atteindre une version stable incluant toutes les fonctionnalités nécessaires et suffisantes pour faire fonctionner la Ğ1.

L’équipe

Contributeurs actifs les 3 derniers mois :

@elois lead dev & archi technique
@HugoTrentesaux Développeur actif de WS2Pv2
@jsprenger Développeur actif non-spécialisé (en voie de spécialisation sur GVA)
@Lucas Récent contributeur non-spécialisé (vérification des blocs)
@ji_emme Développeur de GVA et de la commande blocks

D’autres contributeurs ont été actifs par le passé et reviendrons peut-être sur le projet quand il le pourront/souhaiteront, notamment @Inso, @tuxmain et d’autres.

L’implication de chaque contributeur est très variable selon ses possibilités et ses envies, ça peut aller de 15h/semaine dans mon cas a quelques heures tout les 3 mois, chacun fait ce qu’il peut et ce qu’il veut, nous sommes avant tout bénévoles :slight_smile:

Envie de contribuer au développement de Dunitrust ?

prérequis

Une fois ses prérequis remplis, je vous propose une formation individuelle sur le projet Dunitrust (en vocal via mumble) au prix de 5DUĞ1 de l’heure, contactez moi en MP si intéressé :slight_smile:

Une autre manière de rentrer dans le projet est de venir est de venir a un Rustkathon (hacakthon dédié à Dunitrust), il y en a 2 par an, le prochain sera les 5 et 6 octobre à Toulouse.

Vous pouvez également faire les deux (c’est même recommandé), dans tout les cas vous ne pouvez pas déroger aux prérequis cités au-dessus.

Envie de contribuer en tant que testeur ?

Pas besoin d’être développeur pour contribuer au projet, nous avons également besoin de testeurs. C’est encore un peu tôt, mais d’ici quelques mois nous publierons un guide pour le testeurs et feront un large appel a testeurs (notamment pour le jalon 0.3 pévu en novembre 2019).

La roadmap

  • Jalon 0.3 [fin novembre 2019]
    • Requetage pour combler trous de l’arbre des fork
    • Migration de rust-crypto vers ring (pour remplacer openssl par rustls)
    • Migration de la base de donnée de Rustbreak vers LMDB
    • Sync WS2Pv2 + requetes blocks WS2pv2 (en cours par hugo)
    • Résolution des regressions induites par migration LMDB (#170, #171, #172) (en cours par elois)
  • Jalon 0.4 [juin 2020]
    • Archivage des blocs qui sortent de la fenêtre de fork #174
    • Tests d’indexation de la blockchain pour garantir la compatibilité avec Duniter
    • Coverage CI + tests pour mieux couvrir l’existant
    • Vérif. globale protocole DUBP + sync cautious
    • module Client Indexer
    • module GVA (API CLient)
    • WS2Pv1 + WS2Pv2: rebond des user documents
    • Vérif. globale protocole DUBP + sync cautious
  • Jalon 1.0 [novembre 2020]
    • module Mempool (+WS2Pv2: sync des mempool)
    • module BlockGenerator
    • module PoW
    • Gestion de l’initialisation d’une monnaie (block genesis)
    • interface graphique d’administration (variante dunitrust-desktop)

Plateformes cibles

L’objectif actuel est que Dunitrust soit livré a minima pour 3 plateformes :

  • linux (64 bit)
  • windows (64bit)
  • armv7 (32bit)

Fiabilité et stratégies de test

Une des exigences du projet est d’assurer à 100% qu’il n’y aura aucune régression pour les utilisateurs de la Ğ1. Cela nécessite toute une stratégie de test qui sera présentée au Rustkathon d’octobre.
Le projet comporte déjà plus d’une centaine de tests automatisés et je compte et écrire encore plusieurs centaines afin de couvrir le plus de comportements possibles.
Désormais, tout nouveau développement s’accompagne nécessairement de tests associés. De plus, je favorise désormais l’approche TDD, que j’ai d’ailleurs appliqué pour le développement de l’algo de résolutiondes forks :slight_smile:

je compte également automatiser le redéploiement de noeuds de test sur la g1-test a chaque modification de la branche dev, pour l’instant je fais cela manuellement.
J’ai notamment un nœud Dunitrust sur la g1-test qui est synchronisé depuis 164h non-stop (c’est actuellement un record car avant il manquais la résolution des fork donc le nœud se désynchronisait au 1er fork réseau, ce qui m’a permis de constater qu’il y en a plusieurs par jour mais on ne les voient pas car ils sont très court).

Licence et propriété

Le projet Dunitrust garanti a ses utilisateurs les 4 libertés logicielles via la licence libre AGPLv3.

Le projet Dunitrust appartient désormais officiellement a l’association Axiom Team co-fondée par @PiNguyen, @poka et d’autres membres de la Ğ1, il s’agit donc d’un projet collectif dont les objectifs sont fixés par les membres de l’association (dont je fais parti).
J’ai décidé de transférer la propriété du projet afin d’être cohérent avec ma volonté d’en faire un projet collectif qui appartiennent a la communauté Ğ1. Comme la communauté Ğ1 n’a pas d’existence juridique, j’ai choisi l’association fondée par Pi dans laquelle tout les membres de la Ğ1 sont les bienvenus :slight_smile:

12 Likes

L’équipe de Dunitrust organise désormais des réunions vocales bimensuelles sur un serveur mumble, ces réunions sont occasion de faire le point au sein de l’équipe et de répondre en live aux questions des différents contributeurs et testeurs :grinning:

1ère réunion bimensuelle de la saison Samedi 7 Septembre à 20H sur un serveur Mumble, si vous êtes intéresssés vous pouvez me contacter par MP afin que je vous donne les informations d’accès au serveur mumble :slight_smile:

Ceux qui souhaiterais tester les versions alpha de Dunitrust sont aussi les bienvenues (maîtrise de la ligne de commande linux obligatoire).

Je rappelle que nous avons également un week-end entier dédié au projet les 5 et 6 octobre à Toulouse : Rustkathon (hackathon Dunitrust) les 5 et 6 octobre à Toulouse

Enfin, je propose des formations individuelles sur Dunitrust pour seulement 5DUĞ1 de l’heure ! Contactez moi en MP si intéressé :slight_smile:

2 Likes

1ère réunion bimensuelle du projet Dunitrust Demain à 20H sur mumble, si vous êtes intéresssés vous pouvez me contacter par MP afin que je vous donne les informations d’accès au serveur mumble :slight_smile:

2 Likes

Intéressant ! Cette page est-elle à jour ? Notamment pour la roadmap ?
Y a t-il un meilleur pointeur

1 Like

@Grosquick, la stratégie adoptée pour le développement de Dunitrust a changé. Plutôt que de développer entièrement un nouveau logiciel capable de fonctionner en parallèle de Duniter, dans un délai minimal de deux ans, nous avons opté pour un intégration progressive dans Duniter grâce à une librairie de binding nodejs-Rust. Cette opération a été appelée l’oxydation de Duniter (en référence à la rouille, rust) et la version 1.8 de Duniter en est le premier témoin, car il intègre des composants en Rust ! Plus d’informations sur le post Duniteroxyde (oxydation de Duniter) :slight_smile:

3 Likes

Merci Hugo !
Je ne comprenais pas pourquoi je n’avais pas de binaire lors de la compilation de duniter-rs et seulement des libs. Ceci explique certainement cela.
Je vais aller voir le site indiqué.

Fabien

Si, il y a un binaire, dans ./target/release/dunitrust (ou ./target/release/duniter-rs) (sous GNU/Linux au moins). Il fonctionne, mais seulement pour se synchroniser en local et rester synchro ensuite. Il ne fait rien d’autre.

2 Likes

@Grosquick, comme dit @tuxmain, il y a effectivement un binaire, et il fonctionne bien. Le dernier gros événement en date autour du projet dunitrust était le rustkathon de 2019. Les vidéos sont disponible ici : https://tube.p2p.legal/video-channels/rustkathon/videos. Cela permet de mieux comprendre le projet si cela vous intéresse vraiment.

1 Like

Oui j’ai regardé les vidéo et ai lu cette page:

Apès avoir cloné le repository, j’ai lancé:

 ~/Devel/rust/duniter-rs > cargo build --release
   Compiling libc v0.2.40
   Compiling lazy_static v1.0.0
   Compiling nodrop v0.1.12
   Compiling cfg-if v0.1.3
   Compiling gcc v0.3.54
   Compiling scopeguard v0.3.3
   Compiling memoffset v0.2.1
   Compiling byteorder v1.2.2
   Compiling unicode-xid v0.1.0
   Compiling serde v1.0.50
   Compiling rayon-core v1.4.0
   Compiling void v1.0.2
   Compiling regex v0.2.11
   Compiling ucd-util v0.1.1
   Compiling rustc-serialize v0.3.24
   Compiling safemem v0.2.0
   Compiling utf8-ranges v1.0.0
   Compiling base58 v0.1.0
   Compiling either v1.5.0
   Compiling linked-hash-map v0.5.1
   Compiling crossbeam-utils v0.2.2
   Compiling arrayvec v0.4.7
   Compiling proc-macro2 v0.3.8
   Compiling rand v0.4.2
   Compiling num_cpus v1.8.0
   Compiling time v0.1.39
   Compiling memchr v2.0.1
   Compiling unreachable v1.0.0
   Compiling regex-syntax v0.5.6
   Compiling base64 v0.8.0
   Compiling crossbeam-epoch v0.3.1
   Compiling rust-crypto v0.2.36
   Compiling quote v0.5.2
   Compiling rand v0.3.22
   Compiling bincode v0.9.2
   Compiling aho-corasick v0.6.4
   Compiling thread_local v0.3.5
   Compiling crossbeam-deque v0.2.0
   Compiling syn v0.13.7
   Compiling rayon v1.0.1
   Compiling duniter-crypto v0.1.2 (/home/fabien/Devel/rust/duniter-rs/crypto)
   Compiling duniter-documents v0.7.1 (/home/fabien/Devel/rust/duniter-rs/documents)

puis j’ai plein de warnings:

warning: use of deprecated item 'std::sync::ONCE_INIT': the `new` function is now preferred
  --> documents/blockchain/v10/documents/mod.rs:46:1
   |
46 | / lazy_static! {
47 | |     static ref DOCUMENT_REGEX: Regex = Regex::new(
48 | |         "^(?P<doc>Version: (?P<version>[0-9]+)\n\
49 | |          Type: (?P<type>[[:alpha:]]+)\n\
...  |
54 | |     static ref SIGNATURES_REGEX: Regex = Regex::new("[[:alnum:]+/=]+\n?").unwrap();
55 | | }
   | |_^
   |
   = note: `#[warn(deprecated)]` on by default
   = note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)


Compiling serde_derive v1.0.50
warning: 22 warnings emitted

   Compiling duniter-wotb v0.8.0-a0.6 (/home/fabien/Devel/rust/duniter-rs/wotb)
    Finished release [optimized] target(s) in 1m 07s

Mais rien qui ressemble à dunitrust ou duniter-rs

~/Devel/rust/duniter-rs/target/release $ ls
build  examples     libduniter_crypto.d     libduniter_documents.d     libduniter_wotb.d
deps   incremental  libduniter_crypto.rlib  libduniter_documents.rlib  libduniter_wotb.rlib


git remote -v
origin	https://git.duniter.org/librelois/duniter-rs.git (fetch)
origin	https://git.duniter.org/librelois/duniter-rs.git (push)

Ah oui, j’avais oublié : si on compile à la racine ça compile la bibliothèque (d’où le dossier lib). Pour compiler l’exécutable serveur il faut aller dans bin/dunitrust-server.

Les warnings viennent probablement d’une version plus récente de rust sur ta machine qu’au moment où le code a été pushé, car les warnings étaient interdits normalement, et qu’il y a un « deprecated ».

2 Likes

Merci @tuxmain ! Ca me rassure un peu, je débute en Rust pas encore la belle patine rouillée :slight_smile:

Cela veut dire que le code dans le repo que j’ai pris n’est plus à jour du fait des warnings.
Je vais me concentrer sur Duniteroxyde (oxydation de Duniter)
alors.

3 Likes

Comme là dit @HugoTrentesaux j’ai arrête le projet Dunitrust car il n’a plus de raison d’être. J’intègre progressivement des bouts de code de Dunitrust dans Duniter mais je le fait par déplacement du code dans les dépôts dubp-rs-libs et Duniter directement, le dépôt Dunitrust n’est donc plus mis à jour.

Je viens d’archiver le dépôt Dunitrust et d’ajouter un message d’explication :wink:

5 Likes