L’enjeu est ce que j’appelle la synchronisation, ou comment faire avancer de façon synchrone un système réparti.
À cet enjeu il convient de poser certaines hypothèses, pour Duniter j’ai choisi :
- faible connectivité : on suppose que les nœuds disposent d’un faible débit de données, et d’une connexion instable (tend à être établie par intermittence)
- les membres du réseau ne sont pas tous disponibles pour l’écriture
- tout membre n’est pas forcément honnête, et peut aussi faire des erreurs (bugs logiciels, erreur de configuration, …)
À ces 3 hypothèses j’ai ajouté, de façon moins impactante :
- fréquence relativement élevée (1h d’attente = trop lent)
- capacité de traitement limitée : on suppose que le traitement d’une seule donnée décisionnelle (donnée à vocation de synchronisation) prend un temps non-négligeable
De là, certains algorithmes conviennent, d’autres moyennement, d’autres encore pas du tout.
Citons en exemples :
-
La PoW, fonctionne très bien dans ce contexte car :
- faible connectivité OK : 1 seule trame réseau
- membres pas tous disponibles OK : il suffit d’un seul membre
(à l’exclusion près)
- membre malhonnête/buggué OK : tant qu’il reste des membres honnêtes/conformes
- fréquence OK : 5’
- capacité de traitement : 1 seul message (le bloc)
- faible connectivité OK : 1 seule trame réseau
-
Algorand qui se rapproche de ce que tu évoques @pparent76, mais :
- dont la crypto sous-jacente est très récente et peu éprouvée
- suppose une connectivité élevée en cas de divergence sévère
- dont la crypto sous-jacente est très récente et peu éprouvée
-
Ma proposition initiale, basée sur FBA :
- suppose une connectivité élevée
- membre malhonnête/buggué : comment gérer les multiples avis ?
- capacité de traitement limitée : potentiellement de nombreux échanges
- suppose une connectivité élevée
Je t’invite à lire ces deux sujets sur Algorand et FBA, tu y trouveras pas mal d’informations sur le cheminement de Duniter.