27 mars 2018 : cette RFC5 à vraiment progressé, et part maintenant sur un protocole généraliste dans lequel sera implémenté Duniter mais qui pourra supporter d’autres usage tout en réglant les problèmes de passage à l’échelle des blockchains actuelles.
La RFC détaillée est sur le gitlab : WIP: RFC 5 : New Scalable Blockchain Protocol (!6) · Merge requests · nodes / common / doc · GitLab
Je laisse l’ancienne proposition ci-dessous pour des raisons historique.
2 fevrier 2018 : ajout d’un paragraphe sur une nouvelle piste pour améliorer le protocole via des arbres de Merkle.
Bonjour à tous !
Je crée ce sujet pour recentrer les discutions et débats autour du futur nouveau protocole, ainsi que de lister les changements et nouvelles fonctionnalités qui semblent faire consensus.
J’ajoute aussi d’autres propositions à débattre, certaines assez triviales comme d’autres qui peuvent amener des changements importants. Elle ne sont pas encore prévues pour cette prochaine version mais pourront l’être si un consensus est établi à leur sujet.
Vous pouvez aussi commenter avec d’autres fonctionnalités, et si elles rencontre un “certain succès” je les rajouterais dans la liste pour avoir une vue d’ensemble.
Cette nouvelle version du protocole n’a pas encore de date précise, mais elle amorcera une phase de consolidation de Duniter avant de partir sur des fonctionnalités beaucoup plus avancées (Lightning Network par exemple).
Enfin, il serait bon de créer ces propositions du protocole en tant qu’issues du dépôt nodes/common/doc
car elles ne dépendent pas des projets individuels (duniter-ts, cesium, sakia, duniter-rs, etc).
Je vous remercie d’avance pour votre participation.
La RFC détaillée est sur le gitlab : WIP: RFC 5 : New Scalable Blockchain Protocol (!6) · Merge requests · nodes / common / doc · GitLab
Fonctionnalités prévues
-
A1 : Nouveau système de script pour la dépense des transactions permettant la création de contrats intéligents compacts, potentiellement complexe, permettant de masquer des conditions non utilisées.
Note : Les opérateurs de ce nouveau système de script devront seulement proposer des fonctionnalités de base ou qui simplifie la conception et réduise la taille des transactions. Des comportements trop avancées ne devraient être que des combinaisons de ces fonctions simples voir réalisée avec des ensembles de contrats off-chain comme avec un Lightning Network.
-
A3 : Nouveau format des documents en binaire au lieu du texte pour simplifier leur exploitation par les logiciels ainsi que d’économiser de la place dans la blockchain
Note : Ce nouveau format doit permettre d’accepter les documents de révocation actuels sans devoir resigner, et bien évidement accepter comme sources des transactions de l’ancien protocole.
Propositions
-
B1 : Les dates entrées dans les en-têtes de blocs sont déterminées par ceux qui forgent les blocs. Il pourrait être possible d’influencer le temps moyen calculé et poser des problèmes avec certains types de contrats sensible au temps (Time Locked Contracts utilisés dans un possible Lightning Network). Un proposition est de définir les intervalles de temps en nombre de blocs/id de blocs, ce qui avec un intervalle entre 2 blocs de 5 mins ne poseraient pas de problèmes pour les durées des documents en mois (certifications, identités) et qui permettrait d’avoir un compteur entier discret (le numéro du bloc).
-
B2 : Un solutions pour limiter le risque de spam sur le réseau. Pour l’instant le nombre d’utilisateurs est faible, tout comme le nombre de transactions. Cependant avec l’expension de la communauté il y a risque d’augmentation importante du nombre de transactions, voir même d’attaques purement malveillantes.
Il me semble aussi important de garder un protocole simple et de ne pas gérer des quotas pour plein de petits éléments.
Une idée qui vient de temps en temps sur ce forum est l’utilisation de frais comme dans d’autres cryptomonnaies, qui peuvent bien sûr être nuls tant qu’il n’y a pas de congestion. Il faudrait étudier s’ils sont compatibles avec la TRM, même s’ils ne sont pas de la création monétaire. Ils ne peuvent pas amener à une course à la puissance car celle-ci ne détermine pas le nombre de transactions possibles dans un bloc, et donc les frais récoltés. Ils ne seraient utilisés qu’en cas de congestion pour éviter un spam massif de transactions (qui pourraient là aussi poser problèmes pour un Lightning Network qui doit pouvoir fermer les channels en cas de conflit en un temps limité).
Beaucoup de personnes ne sont pas pour rajouter cette possibilité, mais j’aimerais réunir les différents arguments pour voir quels sont les désavantages de cette solution par rapport à d’autres plus complexes impliquant des quotas et des limitations pour tous les utilisateurs, même honnêtes. -
B3 : Possibilité de pouvoir désigner une clé déléguée au calcul des blocs, qui permet de ne pas exposer sa clé privée de membre en cas d’attaque (qui peut permettre de certifier des membres sans l’accord du possesseur de la clé). Cette clé pourrait être changée au bout d’une certaine période avec la signature de la clé membre, et pourrait permettre de révoquer le compte (ce qui incite le membre à sécuriser sa machine, ainsi que de ne pas donner sa clé à un tier de confiance qui calculerait à sa place). Cette clé ne pourrait pas déplacés les fonds du compte membre. (issue #1208)
-
B4 : Changement de l’algorithme de difficulté personnalisé et d’exclusion temporaire. (issue ?)
-
B5 : Changement de l’algorithme de preuve de travail pour être plus ASIC-resistent (issue #1239)
-
B6 : Examiner les différentes règles appliquées, et voir celles qui vraiment utiles et celles qui le sont moins dans le but de simplifier le protocole qui devrait rester simple mais efficace (Keep It Simple, Stupid)
Autre piste
Une autre piste utilisant quasi exclusivement des arbres de Merkle est étudiée. Elle permettrait de “stocker” l’état complet de la monnaie au moment de chaque bloc, de prouver l’existence d’informations dans cet etat via un nombre limité de requêtes, ainsi que de permettre l’oublie d’un grand nombre d’informations d’anciens blocs tout en restant certain que toutes les règles ont été respectées depuis le bloc/arbre genesis. Plus d’informations seront ajoutées au fil des recherches sur ce sujet, et une RFC dédiée la définira précisément et de manière beaucoup plus technique.