Temps de production des blocs

Question sur Telegram :point_down:

Question qui concerne la V1 et la V2.
Comment on peut expliquer (à moi également) ce qui fait la différence entre des blocs de tant de temps pour la V1 et tant de temps pour la V2.
Est ce que + les blocs sont courts et + c’est rapide, c’est ça
Ce qui fait l’action c’est quand un bloc est terminé ?
Est ce que ça veut dire par ex dans la V1 quand si je fais un virement en début de bloc alors le virement sera validé quand le bloc sera terminé ?

Je veux m’assurer d’avoir compris la mécanique et aussi comprendre si je fais erreur…

2 « J'aime »

Ça, c’est une question blockchain.
Le temps entre les blocs, c’est un paramétrage.
Les temps de la V1 sont paramétrés plus longs, parce que les nœuds font la course, le premier qui a réussi a calculé le bloc, a le droit d’écrire en blockchain, la difficulté du calcul est artificiellement augmenté pour durer le temps prévu en paramètre. C’est pourquoi le temps entre 2 blocs n’est pas précisément 5 min, mais environ 5 min.

En V2 les nœuds sont désignés pour écrire tel ou tel bloc à tel instant précis, moins de consommation (un seul nœud fait le calcul pour chaque bloc), mais besoin de disponibilité forte de chaque nœud. Et cela apporte plus de précision sur le temps entre 2 blocs.

Chaque bloc est calculé avec les infos dont le nœud dispose (transaction, certifs et autre…) Donc le nœud doit avoir reçu la transaction avant de calculer le bloc pour que celle-ci soit dans le bloc, sinon ce sera pour le bloc suivant.

1 « J'aime »

Est-ce que cela veut dire que chaque bloc ne contient les datas que d’un seul noeud en V2 ?
les noeuds ne travaillent pas « en même temps » mais l’un après l’autre ?

Tous les nœuds échangent leurs données entre eux…
Les transactions et certifs demandées sont envoyées à tous les nœuds, pour que chacun ait toutes les infos à mettre dans le bloc.

2 « J'aime »

Pour être plus précis :
si je certifie quelqu’un, cette donnée ne sera pas « reçue par tous les noeuds » en même temps mais plutôt par celui sur lequel je serai connectée, n’est-ce pas ?
Je parle au niveau des blocs :

Je comprends un bloc est « rempli » par les données d’un seul noeud ?
Autrement dit je repose ma question : chaque noeud travaille un après l’autre ?

Donc dès qu’un nœud reçoit une demande de transaction ou certifs ou autre, il transmet l’info à tous les autres nœuds qu’il connait et tous ces nœuds transmettent à leur tour à leurs voisins, et ainsi de suite. Cela se fait en quelques millisecondes.

En V2, quand un nœud arrive à son tour de calculer un bloc, il le fait avec toutes les données qui lui ont été transmises. Les nœuds calculateurs (validateurs) ne sont pas en contact direct avec les clients, ils reçoivent les infos depuis les nœuds miroirs qui eux discutent avec les clients.

1 « J'aime »

Que ce soit sur DuniterV1 ou DuniterV2, un bloc ne contient les données que « d’un seul noeud », car le noeud qui crée le bloc ne peut pas y inscrire des données qu’il ne connaît pas.

Que ce soit sur DuniterV1 ou DuniterV2, tous les noeuds communiquent pour se transmettre les données à inscrire dans les futurs blocs.

Oui, tout à fait, aussi bien en V1 qu’en V2. Et cette donnée sera ensuite propagée aux autres noeuds pour qu’ils puissent l’inscrire dans un futur bloc.

Sur Duniter V2 oui, le noeud qui doit écrire le futur bloc est désigné aléatoirement. Et le noeud qui écrira le bloc +2 est également désigné aléatoirement. Donc oui ils travaillent l’un après l’autre, mais 1) pas dans un ordre prédéfini, et 2) en ayant reçu des données (transactions, certifs, etc) venant d’autres noeuds.

1 « J'aime »

merci d’avoir répondu directement à ma question (qui demandait un oui ou un non).

Donc, en V2 je comprends que les noeuds miroirs captent les actions des utilisateurs (transactions, certifs etc.) qu’ils sont tous synchros et contiennent aussi toutes les infos des autres noeuds.

Ils passent leurs datas au noeud forgeron dont c’est le tour d’enregistrer, jusqu’à ce que le block où il enregistre soit rempli et passe alors en blockchain.

Le noeud forgeron suivant prendra la suite et enregistrerace que les noeuds miroirs lui transmettront, etc.

est-ce juste ?

Y a-t-il une limite de remplissage pour chaque bloc?

Dans ce que @Spiranne30 explique cela voudrait dire que s’il y a peu d’opérations alors le bloc n’est pas rempli. Attendre qu’il soit rempli revient à dire qu’il y a des blocs qui mettent plus que les six secondes à se remplir.

Et si il y a un million de fois plus d’opérations? Que se passera-t-il? Cette question est cruciale dès qu’on a espoir que la G1 ou la G2 voire une future G3 en tout cas la monnaie libre soit utilisée au quotidien dans tous les magasins.

Non, ils envoient leurs données en permanence à tous les nœuds qu’ils connaissent. Ces données incluent les nœuds qu’ils connaissent, pour que leurs connaissances fassent connaissances. Ça, c’est pareil en V1 ou V2.

En V2 un bloc est calculé toutes les 6 secondes, avec les actions demandées (virements, certifs, adhésions, etc) par le nœud dont c’est le tour de le faire. S’il n’y a aucune action demandée, le bloc est calculé et enregistré comme étant 6 secondes de vide.

En V1, tu peux déjà voir des blocs de 5 minutes, qui sont vides, en V2, il y aura beaucoup plus de blocs vides.

Non.

  1. envoi d’un document (transaction, certification)

votre logiciel client envoie le document au noeud N auquel il est connecté (miroir ou membre, mais en V2 ce sera miroir dans l’immense majorité des cas)

  1. propagation des documents

Le noeud N transmet le document aux autres noeuds M, L,O,P dont il a connaissance, qu’ils soient miroirs ou membre. Le document est placé en ‹ piscine ›, mauvaise traduction de l’anglais ‹ pool ›. Le doc est en attente d’être inscrit. Les noeuds L,O,P le retransmettent aux noeuds qu’ils onnaissent , etc.

  1. inscription dans un bloc par un noeud membre M

Un bloc vient d’être inscrit. Le noeud membre construit un bloc avec les informations qu’il a dans sa piscine et le fige (donc les informations qu’il recevra ensuite ne seront pas inscrites dans ce bloc). Puis :

3.1 en V1, il résout un calcul compliqué, propre au bloc qu’il vient de construire. S’il est le premier noeud à résoudre ce problème (ce qui doit prendre environ 5 minutes), il publie le bloc qui est enregistré en blockchain. Tous les autres noeuds membres font pareil, avec les informations qu’ils ont en piscine.

3.2 en V2, le noeud a été désigné au hasard. Il vérifie le contenu du bloc, le signe et doit le publier exactement 6 secondes après le bloc précédent (NB - il y a d’autres processus qui se jouent et que je ne connais pas assez pour les expliquer, mais en gros et dans la plupart des cas c’est ce qui se passe.)

  1. Tous les noeuds 1. vérifient que le bloc est bon, et 2. suppriment de leur piscine les documents qui ont été inscrits en blockchain.

Donc :

les noeuds miroirs sont tous synchro

Pas plus qu’en V1, non. On ne peut pas être certain que les piscine de tous les noeuds sont synchro, c’est impossible.

Ils passent leurs datas au noeud forgeron dont c’est le tour d’enregistrer,

Non. Ils passent les données à tous les noeuds qu’ils connaissent.

jusqu’à ce que le block où il enregistre soit rempli

Non. Un bloc vide est tout à fait valide.

Le noeud forgeron suivant prendra la suite et enregistrerace que les noeuds miroirs lui transmettront,

Non. Le noeud fait avec les données qu’il a à l’instant où il construit le bloc. Ces données lui sont transmises par d’autres noeuds, qui peuvent être membres ou miroir.


Vous observerez qu’il y a toujours une ‹ piscine ›, même en V2, alors qu’on clame haut et fort qu’il n’y a pas de piscine en V2. La différence, c’est qu’en V2, les documents sont inscrits immédiatement en blockchain, alors qu’en V1 on attendait qu’un dossier d’identité soit complet (ce qui pouvait prendre plusieurs semaines) avant de l’inscrire en blockchain.


est-ce plus clair ?

2 « J'aime »

J’avais cru comprendre qu’en V2, les nœuds forgerons ne répondraient pas directement aux clients, et donc que les clients ne pourrais communiquer qu’avec des nœuds miroirs.
Ai-je mal compris, ou est-ce que cela a changé ?

Tu as très bien compris. Les rares cas où un noeud membre répond à un client sont :

  • quand la gestionnaire du noeud envoie une demande rotate-key (ce qui ne provoque pas d’inscription en blockchain)
  • quand la propriétaire du noeud envoie des documents directement à son noeud, par exemple pour des opérations concernant la TDC forgeron. Elle en a tout à fait la possibilité technique et ça ne pose pas de souci majeur de sécurité, même si ce n’est pas une bonne habitude.

NB - dans ces deux cas, le client doit se trouver directement sur le serveur qui exécute le noeud (ou directement lié par SSH).

1 « J'aime »

Merci @matograine c’est beaucoup plus clair comme cela !
Juste une petite chose :

Que vérifie-t-il ?
Pour quelle raison un bloc pourrait-il être « refusé » par exemple ?

Dans l’exemple que j’ai donné, dans la mesure où le bloc a été construit par le noeud lui-même, il n’y a à priori rien à vérifier, car le noeud utilise les mêmes règles pour la vérification et pour la construction du bloc.

Mais par exemple, quand un noeud reçoit un nouveau bloc, il vérifie (liste non exhaustive) :

  • le bloc reçu est-il bien celui qui suit le dernier bloc que je connais ?
  • Le compte qui émet cette transaction de 100Ğ1, a-t-il réellement 100Ğ1 disponibles ?
  • L’identité qui émet cette certification, est-elle bien membre ? Si oui, peut-elle effectivement émettre une certification ?
  • etc.

En fait, quand un noeud ajoute un bloc à sa blockchain locale, il doit vérifier toutes les règles du protocole.

Pourquoi blockchain 'locale'

Chaque noeud possède localement une copie de la blockchain, qu’il construit peu à peu à mesure qu’il reçoit (ou crée) des blocs. Donc la blockchain est « locale », même si elle vise à être identique pour tous les noeuds.

3 « J'aime »