Skip to content
Snippets Groups Projects
Commit 65a54f62 authored by Éloïs's avatar Éloïs
Browse files

rml13 durs wip

parent 5621745d
No related branches found
No related tags found
No related merge requests found
<!DOCTYPE html>
<html>
<head>
<title>RML13: elois: Durs (DUniter-RuSt)</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../common.css">
<link rel="stylesheet" href="../../lib/mermaid.dark.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tonsky/FiraCode@1.206/distr/fira_code.css">
</head>
<body>
<textarea id="source"></textarea>
<script src="../../lib/mermaid.min.js"></script>
<script src="../../lib/remark-latest.min.js"></script>
<script>
var slideshow = remark.create({
sourceUrl: 'markdown.md',
highlightStyle: 'tomorrow-night',
countIncrementalSlides: false
});
// don't let mermaid automatically load on start
mermaid.initialize({
startOnLoad: false,
cloneCssStyles: false
});
slideshow.on("afterShowSlide", s => {
const [slide] = document.getElementsByClassName("remark-visible");
mermaid.sequenceConfig = {
diagramMarginY: 0
};
mermaid.init(Array.from(slide.getElementsByClassName("mermaid")));
});
</script>
</body>
</html>
\ No newline at end of file
class: dark, middle, center
# DURS (DUniter-RuSt)
![durs logo](../../images/Durs.png)
Une implémentation du protocole [DUBP](https://git.duniter.org/nodes/common/doc/blob/master/rfc/0009_Duniter_Blockchain_Protocol_V11.md) en [Rust](https://www.rust-lang.org/).
_25 mai 2019_
_RML #13_
_Librelois <elois@ifee.fr>_
Suivre la présentation sur votre ecran :
`librelois.duniter.io/slides/rml13/durs`
???
Nouveaux modules : BlockGenerator et ClientIndexer
---
layout: true
class: dark
.center[DURS (DUniter-RuSt)]
---
## Sommaire
1. [Le langage Rust](#rust)
2. [Les objectifs](#targets)
3. [Historique du projet](#history)
4. [Durs actuellement](#currently)
5. [Depuis les rml12](#since-rml12)
6. [Roadmap](#roadmap)
7. [Architecture du projet](#archi)
8. [Le système de modules](#module-system)
---
name: rust
# .center[Le langage Rust]
.center[![rust logo](../../images/rust-logo-128x128.png)]
* Issue de la fondation Mozilla, 9 ans de travail avant 1.0 (2006-2015)
--
* Compilé et multi-paradigme. Croise impératif, objet, fonctionnel (Ocaml) et concurrent (Erlang)
--
* Inspiré des recherches récentes en théories des langages
--
* 3 objectifs : Sécurité, Concurrence et Performances.
--
* Stack Overflow's most loved language ! ([2017](https://insights.stackoverflow.com/survey/2017#most-loved-dreaded-and-wanted), [2018](https://insights.stackoverflow.com/survey/2018#most-loved-dreaded-and-wanted) et [2019](https://insights.stackoverflow.com/survey/2019#most-loved-dreaded-and-wanted))
---
name: rust2
# .center[Le langage Rust]
.center[![rust logo](../../images/rust-logo-128x128.png)]
* garantit la sûreté de la mémoire (no memory leaks)
* garantit la sûreté entre threads (no data races)
--
* ultra-rapide & abstractions sans coût (zero runtime)
* inférence de type & généricité avec les "traits"
--
* très expressif (pattern matching, iterators, ... )
* potentiel successeur du C++ (avec D)
---
name: targets
# .center[Les objectifs visés]
* 100% compatible avec Duniter
* -> Doit passer tests d'intégration de sync niveau 2
--
* Le plus fiable possible
* -> Coverage le plus proche possible des 100%
* -> Tests continues (déploiement continu noeuds de dev/test)
* -> Retro-compatibilité (versioning systématique)
--
* Le plus performant possible
* -> Conception pensée pour l'optimisation
* -> Tests benchs sur les traitements couteux ou très fréquents
--
* Le plus léger possible
* -> Version minimale pour micro-pc
* -> Stratégie d'usage des ressources configurable
---
name: history
## .center[Historique du projet]
* Novembre 2017 Création du projet par Nanocryk.
* ~ 3000 lignes. Crates crypto, wot.
* Février 2018: Rejoins par elois.
* Mai 2018: Nanocryk quitte le projet pour prioriser `Fygg`.
* Fin mai 2018: [1ère prés. officielle de duniter-rs aux rml11](https://www.youtube.com/watch?v=fJvMRv1l5wM)
* Juillet 2018: v0.1.0-a1
* Septembre 2018 : Renommage Duniter-Rs -> Durs (demande cgeek)
* Octobre 2018 : Nouveau contributeur: inso.
* Novembre 2018: [2ème prés. aux rml12](https://www.youtube.com/watch?v=EIjJNTeaP2g)
* Janvier 2019: Nouveau contributeur counter
* Mars 2019 : 1er hackathon dédié au projet: nouveaux contributeurs: 1000i100, vindarel, moul
* Début mai 2109: nouveaux contributeurs: Hugo et Jonas.
* Mai 2019: v0.2.0-a2
* 25 Mai 2019: 3ème prés. aux rml13
---
name: currently
# .center[Durs actuellement]
* 38315 lignes (dont 25532 lignes de code Rust) :
```table
| name | lines |
|----------|-------|
| elois | 36651 |
| nanocryk | 3258 |
| Hugo | 914 |
| inso | 680 |
| vindarel | 491 |
| Jonas | 325 |
| moul | 35 |
| 1000i100 | 10 |
```
???
Comments 6480
Blanks 2669
Markdown (doc) 1890
Toml 606
SVG 597
bash/python 299
Json 116
Dockerfile 42
--
* 23 crates (22 lib + 1 bin)
--
* ~750h de travail sur 15 mois
--
* 10 contributeurs (code de ji_emme et tuxmain pas encore mergé)
---
name: currently2
# .center[Durs actuellement]
* Synchronisation rapide depuis archives blockchain JSON
* Un noeud miroir qui reste synchronisé sur le réseau
* Résolution des fork réseau
* une base de donnée indexant la blockchain
* WS2P Privé
* une interface graphique dans le terminal
---
name: since-rml12
## .center[Depuis les rml12]
--
* Migration du code Rust en edition 2018
--
* Migration protocole DUP v10->v11 (rejeu des certif)
--
* Synchro depuis une blockchain JSON (pour compatibilité avec duniter 1.7)
--
* Implémentation de l'Algo de résolution des fork (inclus refonte du stockage des fork)
--
* Amélioration du build des paquets debian
--
* Création requete DAL `get_identities`
--
* Dockerisation continue
--
* Requetes WS2Pv1 (getCurrent, getBlock, getChunk)
--
* Rules engine
--
* Refonte core pour gérer plusieurs couches réseaux
--
* Négociation connexion WS2Pv2
--
=> ~ 250h de travailsur 6 mois.
---
name: roadmap
# .center[Roadmap]
--
* Jalon 0.3 (automne 2019)
* Requetage pour combler trous de l'arbre des fork
* Sync WS2Pv2 + requetes blocks WS2pv2
* Tests d'intégration de la sync
* Coverage CI + tests pour mieux couvrir l'existant
--
* Jalon 0.4 (printemps 2020)
* Vérif. globale protocole DUBP + sync cautious
* module Client Indexer
* module GVA (API CLient)
* WS2Pv1 + WS2Pv2: rebond des user documents
--
* Jalon 1.0 (automne 2020)
* module Mempool (+WS2Pv2: sync des mempool)
* module BlockGenerator
* module PoW
* Gestion de l'init. d'une monnaie (block genesis)
---
name: archi
## .center[architecture du dépôt]
* bin/ : crates binaires (durs-server, durs-desktop)
* lib/ : crates bibliothèques (tools, core, modules)
* core/ : crates constituant le squelette du programme (conf, boot, système modulaire)
* modules/ : crates des modules
* tools : Bibliothèques communes (crypto, documents, wot, etc)
* doc/ : documentation haut niveau (pour dev ET utilisateurs)
* images/ : images statiques (logo)
* releases/ : scripts bach de build des paquets
* .gitlab : scripts python de publication des releases
---
name: module-system
## .center[Le système de modules (1/5)]
![durs-modules-step-0](../../images/durs-modules-step-0.png)
* Chaque module est cloisonné dans un thread dédié.
* Ils interagissent uniquement par channels rust.
---
## .center[Le système de modules (2/5)]
![durs-modules-step-0](../../images/durs-modules-step-1.png)
* Le coeur lance les modules : ModName::start(..., ...)
* start() prend en param le RooterSender (+conf, etc)
---
## .center[Le système de modules (3/5)]
![durs-modules-step-0](../../images/durs-modules-step-2.png)
-> Chaque module s'enregistre auprès du router en transmettant une struct `ModuleRegistration`.
---
## .center[Le système de modules (4/5)]
![durs-modules-step-0](../../images/durs-modules-step-3.png)
* Puis les modules transmettent leurs messages au router.
* 3 types de messages : Event, Request, Response.
---
## .center[Le système de modules (5/5)]
![durs-modules-step-0](../../images/durs-modules-step-4.png)
* Le router filtre et relaie au(x) module(s) concernés.
* Destinataires ciblés via types de rôles et events.
---
name: dbex
## .center[DBexplorer]
---
## .center[Merci de votre attention]
Présentation réalisée avec [remark](https://github.com/gnab/remark).
Graphes réalisés avec [mermaid](https://github.com/knsv/mermaid).
Retrouvez les sources de cette présentation sur le gitlab de duniter :
.center[[https://git.duniter.org/librelois/slides](https://git.duniter.org/librelois/slides)]
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment