Validation des blocs (théorie)

Salut,

Je me pose quelques questions sur le fonctionnement de la blockchain avec Duniter. Est-ce qu’il y a une documentation qui explique cette partie?

Le point que je voudrais comprendre est le suivant:
Pourquoi Duniter utilise un challenge personnalisé? Duniter a une toile de confiance à sa disposition, donc il est possible d’imaginer une comparaison entre les nouveaux blocs et de valider (choisir) le bloc qui est le plus souvent proposé sur la toile.

La technique bitcoin de la preuve de calcul est en fait un tirage au sort décentralisé. Le tirage au sort était censé garantir l’incorruptabilité du système. Mais la course au CPU/GPU a biaisé le système.

En quoi Duniter à besoin d’un tirage au sort puisqu’il est possible de “voter” le bloc gagnant?

En fait, au tout début de Duniter (le nom était uCoin à ce moment), j’utilisais un système de votes. En ouvrant l’historique Git, tu trouveras des références au document Amendement par exemple.

Mais je me suis rapidement réorienté vers ce que faisait Bitcoin avec la PoW. Dans un de mes 1ers sujets sur ce forum, je faisais mon analyse de l’utilité de la blockchain Bitcoin. Il en ressort notamment que la PoW est un excellent mécanisme de synchronisation des noeuds, au sens réseau du terme. La PoW a comme effet d’avoir des noeuds qui s’attendent, jusqu’à ce que l’un d’eux finisse par parler, ceci dans un ordre aléatoire.

La difficulté personnalisée n’est pas nécessaire, toutefois vu que l’on dispose d’une toile de membres quasi uniques, cela nous donne un bon levier pour garder une empreinte énergétique faible pour notre PoW.

Bien sûr on peut aussi imaginer d’autres façon de faire, comme le système à votes. Mais tu as toujours la problématique de synchronisation, puisque pour voter identiquement, les noeud doivent avoir les mêmes données. Et alors on voit que la synchro est un élément plus profond encore que le contenu voté, et donc que le vote lui-même.

1 « J'aime »

It est très intéressant ton ancien post.

Voici ma description des deux méthodes PoW et Vote pour départager deux blocs concurrents:
PoW: Un noeud qui a la connaissance des deux blocs concurrents choisit le bloc qui a le meilleur résultat du challenge.
Vote: Le noeud choisit le bloc qui a le plus de signatures d’autres noeuds.

La méthode Vote nécessite de transférer avec un bloc la liste des noeuds qui l’ approuvent et leurs signatures de ce bloc. La méthode PoW nécessite moins de données. Mais le consensus (c-a-d la synchronization du réseau) est plus vite atteint.

Départager 2 blocs concurrents suppose déjà de définir ce qu’est un bloc concurrent (et donc ce qui n’est pas un bloc concurrent), et vis-à-vis de quoi. La description que tu donnes ici est un peu trop courte pour que je distingue cela dans les 2 méthodes que tu cites. Mais je suis curieux de savoir ce que tu as pensé.

Peux-tu détailler davantage ?

Avec plaisir :o)

Voici ma compréhension de la blockchain:

Un client s’adresse à un ou plusieurs serveurs et leur soumet une transaction. Les serveurs solicités vérifient la transaction et en particulier si l’argent n’a pas déjà été dépensé. Si la transaction est acceptée par un serveur, il l’a communique à d’autres serveurs du réseau qui refont le travail de vérification de la transaction.

A intervalles réguliers, les transactions soumises pendant le dernier intervalle sont rassemblées dans un bloc qu’on va appeler bloc-candidat. Donc chaque noeud propose un bloc-candidat. Dans un monde où les communications inter-noeuds seraient infiniment rapides et tous les noeuds seraient bien intentionnés, tous les noeuds proposeraient le même bloc. Dans la réalité, on a plusieurs bloc-candidats que j’ai appelé concurrents dans mon précédent message.

Première question: D’après ton expérience, en général y a-t-il autant de blocs-concurrents que de noeuds? Ou on observe que beaucoup de noeuds proposent le même bloc-candidat?

Dans le cas où les noeuds sont jamais d’accord entre eux, on pourrait imaginer que chaque noeud propose plusieurs blocs-candidats plausibles. Ainsi par un système de vote, on pourrait trouver un bloc-candidat proposé par une majorité de noeuds.

Dans Duniter oui, chaque bloc-candidat est même strictement unique puisqu’il contient la clé publique de son émetteur, et que la signature du bloc doit y correspondre.

Mais si la comparaison ne devait porter que sur le je de nouvelles données, alors on parle des transactions certes, mais aussi des certifications, identités, adhésions, révocations. A notre échelle sur TestNet, on a régulièrement le même bloc-candidat malgré cette multitude de données. Mais on a aussi très souvent des blocs différents, comme en attestent très régulièrement les forks observables sur le réseau.

En outre il existe de très nombreuses raisons de penser qu’on aura que très rarement le même bloc candidat, étant donné que l’on est dans un environnement non contrôlé.

Proposer plusieurs blocs ne dira rien quant à la probabilité de proposer le même que d’autres, les combinaisons possibles pouvant devenir très grandes.

En fait, la PoW actuelle me paraît être tout à fait suffisante. Pourquoi vouloir un système de vote ?

1 « J'aime »

J’imagine que dans la plupart des cas, la différence entre les blocs candidats est due au fait que certains noeuds auront mis une transaction dans le bloc N alors que les autres noeuds classeront cette transaction dans le bloc N+1. Si les noeuds proposent plusieurs blocs candidats avec et sans les transactions qui sont à la limite temporelle du bloc, on trouvera plus facilement des matchs entre blocs candidats.

Je trouve le vote plus robuste car il permet de converger plus rapidement vers un consensus:
-A1: lors de la selection du bloc gagnant
-A2: un bloc gagnant l’est définitivement (sauf problème réseau de communication où la toile serait coupée en deux)

A2: Avec la PoW (qui est en fait un tirage au sort de bloc candidat), comme on peut tomber sur un bloc malveillant, on doit attendre plusieurs blocs pour être définitivement assuré de l’inscription d’une transaction dans la blockchain. Avec le vote on n’a plus le problème du noeud malveillant. De plus le résultat du vote donne un indice sur la “convergence” des noeuds.

A1: Avec la PoW, le bloc gagnant met plus de temps à se faire connaitre à l’ensemble des autres noeuds. Car le noeud du bloc gagnant est le seul à connaitre sa PoW en début de phase de validation de bloc.
Avec le vote, le bloc gagnant émergera dans plusieurs zones du réseau simultanément. Les informations venants de noeuds éloignés renforceront normalement le score du bloc gagnant.

En résumé, le vote donne une méthode systématique et rapide d’identifier les blocs gagnants. La PoW nécessite du temps (plusieurs blocs) pour complètement valider un bloc.

Y a-t-il une limite de temps pour qu’un noeud apporte sa PoW? Se donner un peu plus de temps, c’est se donner un avantage. Vérifier que les autes noeuds ne grapillent pas des secondes voir des minutes, c’est difficile! Comment est résolu ce problème?

Non, c’est au 1er qui calculera et propagera un bloc valide. Dès que c’est fait, chaque noeud ayant reçu un tel bloc passe au suivant.

Oui mais pourquoi ? Cela peut être dû à une latence réseau, un processeur ou un disque dur plus lent, ou bien du fait de l’utilisation d’un antivirus réduisant considérablement les performances du système.

On ne peut pas considérer que tous les noeuds auront des caractéristiques techniques identiques et seront capables d’encaisser le même volume de données, ou de produire un bloc similaire aux autres dans un temps prédéfini. Et donc plus le volume de données sera important, plus les probabilités d’avoir des blocs candidats différents seront grandes. Et donc moins le réseau pourra faire émerger un consensus. C’est une fausse piste.

Par ailleurs tu parles de “limite temporelle”, mais qui définit le temps ? Chaque noeud possède sa propre horloge, et rien ne dit que l’heure est identique d’un noeud à l’autre. On est même plutôt certain du contraire aujourd’hui.

Enfin tu parles de validation “définitive”, mais qu’est-ce qui empêche un bloc d’être signé a posteriori ? Par exemple si 2 blocs B1 et B2 sont candidats, que B1 est validé “définitivement” par 3 signatures parmi 5 signataires autorisés face à B2 qui n’en aurait reçu que 2, puis qu’on découvre finalement 1 autre signature pour B2 un peu plus tard, alors quel est le bloc “finalement définitivement autorisé” ? En utilisant l’algorithme de vote, le paradoxe est que tu ne peux pas trancher car il est impossible de savoir quel bloc a été réellement signé en 1er, et donc lequel est plus légitime que l’autre.

C’est pour cela que je dis que la synchronisation est plus profonde que le vote, car en réalité elle le précède : les noeuds doivent préalablement définir un temps commun avant quoi que ce soit d’autre pour pouvoir trancher sur la précédence de telle ou telle donnée, or la preuve de travail est manifestement la solution la plus efficace et adaptée dans un environnement P2P non contrôlé. Elle permet de définir un temps, de le faire avancer, et en plus ce temps est résistant au postdatage (contraire de l’antidatage).

Et donc non, la méthode “vote” n’est pas “une méthode systématique et rapide pour identifier les blocs gagnants”. Le vote est une illusion, qui oublie la problématique de simultanéité et omet d’intégrer le fait que les pairs ne sont pas tous capables des mêmes actions.

1 « J'aime »

Ok. Bon, il faut que je potasse ca encore un peu. Peux-tu me donner des liens qui m’instruiront sur le sujet?

Disons que c’est plutôt ma réflexion personnelle ainsi que mes essais de développement d’un système de vote au début du projet qui m’ont conduit à ce que je raconte aujourd’hui.

Mais je pense que tu peux creuser (je l’ai moi-même fait) le temps bloc de Bitcoin. Tu verras que Bitcoin possède bien un temps propre, et tu pourras vérifier que toute chaîne fait de même.

Je sais qu’il existe d’autres systèmes, notamment avec vote comme Ripple, mais tu constateras qu’avant tout ses auteurs résolvent le problème de synchronisation en ayant une liste de noeuds autorisés avec lesquels s’opère le consensus. Mais c’est une prix d’une centralisation dans ce cas-ci.

Après, d’autres personnes pourront te donner d’autres liens, je pense à @inso qui est un véritable crawler humain du web. Si vous en avez, merci de les partager :slight_smile:

J’avais lu et partagé un article de blog d’un mec qui maitrisait son sujet à propos des alternatives à la blockchain. Comme quoi la blockchain c’est bien, mais de nouveaux algos arrivent et pourraient faire bien mieux. Mais impossible de le retrouver :frowning:

Ceci dit, l’utilisation de la blockchain nous permet de profiter de tout l’écosysteme qui est autour. Aussi, c’est “moins” expérimental que si on essayait un algo de consensus “plus récent”. Elle a déja 7 ans d’expérience cette techno, ça commence à être pas mal.

A noter qu’à terme, la blockchain ne contiendra plus grand chose niveau transactions. Ce sont les services batis par dessus qui vont gérer les transactions (voir https://lightning.network/)
Mais pour Duniter, le lightning network c’est déja du long terme… Comme toute crypto monnaie, on commencera par des transactions “on-chain” avec 5 minutes de validation environ. :slight_smile:

Cyclos n’utilisent pas de blockchain http://www.cyclos.org/
Ils sont sur du noSql graph, on ma beaucoup dit que c’était mieux que la blockchain en terme de performance (scalabilité, vitesse de synchro,…) mais peut être moins en terme de sécurité, il faut voir …

C’est surtout pas le même problème que celui auquel s’adresse la blockchain : la décentralisation :wink:

Il est techniquement possible d’organiser une architecture nosql graph décentralisé, car celles-ci sont distribués de base, de la même manière qu’une blockchain.

Tu peux faire du décentralisé, mais seulement au sein d’un réseau que tu maitrises et que tu as toi même déployé. Car tu sais que tu es derrière ces nœuds, et qu’ils ne vont pas essayer de tricher.

C’est le problème que la blockchain résous : un réseau de nœud techniques, installés par n’importe qui, mais ou personne ne peut abuser.

1 « J'aime »

Donc pour toi il est impossible de décentraliser le pouvoir avec du nosql graph ? Je ne suis pas expert hein mais je me pose la question, je ne vois pas en quoi se serais techniquement impossible.

Avec les mécanismes purement noSql graph, oui. Ce n’est pas fait pour ça. C’est fait pour distribuer une base de donnée centralisée. Au sein d’un datacenter, une entreprise peut vouloir “distribuer un service”. Elle en installe 20 000 instances, qu’elle maitrise, et elle n’a pas de problème.

Les algorithmes de ces bases de données permettent d’écrire des milliers de transactions à la seconde, car elles savent qu’elles fonctionneront toute de concert suivant le même mécanisme.
A l’opposé, la blockchain bitcoin est limitée à 10 transactions / secondes environ, parce que justement, elle ne peut pas faire confiance au fonctionnement technique des autres nœuds du réseau.

1 « J'aime »

Je pense que si les documents JSON ne sont pas liés “cryptographiquement” entre eux sous forme d’arbre , où le changement d’un document permet de voir la falsification ,
cela peut être corrompu à un certain instant t

Je crois que c’est le lien que tu cherchais @inso :wink:

Ce lien fait le point sur la techno “blockchain”, les bons points comme les mauvais et propose des liens vers des alternatives.

La blockchain est utilisée parfois à outrance, mais comme le dit @inso les outils seront pluriels et la blockchain cantonnée à ce qu’elle sait le mieux faire.

4 « J'aime »

Ah putain vit merci merci je pensais pas le retrouver ahah !