Le principe de consensus
Qu'est ce qu'un consensus
Dans le cadre générale, on considère qu'un consensus est l'idée qu'un accord sur une action ou une décision a été trouvé. Supposons que nous soyons dans une grande entreprise de boulangerie et que nous siégons au conseil d'administration auprès d'autre actionnaires. Arrive maintenant le moment de décider si nous allons commercialiser une nouvelle baguette au Maïs. Si l'ensemble des actionnaires décident de la même action (que ce soit vendre ou renoncer de vendre ces baguettes), on dit alors qu'un consensus a été trouvé. Si tous les actionnaires ne sont pas d'accord, aucun consensus n'a pu être trouvé et nous nous retrouvons face à un risque que certains vendent leurs actions ou partent de leurs côtés créer leur propre conglomérat de boulangerie.
Pour l'Ethereum et l'ensemble des crypto / blockchain décentralisés, tous les noeuds décentralisés doivent trouvé un consensus sur l'état de la blockchain . Si un consensus ne peux être trouvé, il existe un risque de divergence de l'état de la blockchain entre les différents noeuds composant la blockchain, pouvant conduire à certaines transactions étant executés et valide sur certain noeuds et inconnus sur d'autres. En d'autres termes, une transaction d'argent pourrait être à la fois réalisé et non réalise en fonction du noeud depuis lequel on regarde cela.
Les méchanismes pour obtenir un consensus
Les méchanismes de consensus représentent l'ensemble des élèments pouvant être nécessaire à un réseau de noeud souhaitant atteindre un consensus. Il existe ainsi plusieurs types de consensus et d'implémentation possible, décrit ci-après dont plus particulièrement les méchanismes de Proof-of-Stake, utilisé par Ethereum, depuis Septembre 2022.
Un PoS pour remplacer un PoW
Qu'est ce que le Proof-of-Stake (PoS)
L'idée générale derrière le PoS est la mise. Chaque validateur (personne étant les noeuds dans le réseau faisant tourner les algos) doit miser une certaine quantité d'élément (considéré comme ayant de la valeur) pour pouvoir valider, proposer ou propager des blocks dans le réseau. Cette mise peux être détruite (signifiant pour la personne ayant misé la perte du capital misé) si la personne essaye d'être malveillant en proposant de mauvaise chose sur le réseau. Dans le cas de l'Ethereum, les validateurs peuvent aussi être pénalisé sur cette mise s'ils sont par exemple déconnectés.
Devenir un validateur dans ethereum
Pour devenir un validateur dans le réseau, un utilisateur doit déposer 32 ETH (58350.70 euros en Novembre 2023), ce qui représente sa mise et doit faire tourner trois types de programmes : un programme d'éxécution, un programme de consensus et un programme de validation.
Une fois la mise déposé, l'utilisateur rejoins une liste de validateur en attente, permettant de limiter le nombre de validateur actif sur le réseau. Une fois le validateur choisi, selon un algorithme RANDAO, le validateur recoit des blocks qu'il ré-éxécute localement pour vérifier que le changement proposé est correcte. Le validateur doit ensuite envoyer sur le réseau une attestation, témoignant de sa validation de ce block.
Les validateurs ne font pas que validé les blocks proposé sur le réseau, car il faut bien que quelqu'un sur le réseau propose un block. De manière aléatoire, les validateurs peuvent être choisi pour créé et proposé un nouveau block sur le réseau, envoyé en validation auprès des autres validateurs. Contrairement a l'algo de consensus PoW, l'algo PoS se joue en temps fixe et Ethereum a donc définit des timings de validation de nouveau block, structurant aussi le moment du choix des validateurs. En effet, Ethereum a divisé le temps en slots (un slots mettant 12 secondes) et en epoch (composé de 12 slots). La sélection du validateur proposant un nouveau block est effectué tous les slots. Cela signifie que le validateur proposant un block est supposé changé toutes les 12 secondes, même si l'algo aléatoire pourrait permettre la sélectionner du même validateur plusieurs fois de suite. De même, tous les validateurs sur le réseau ne sont pas sélectionner pour attester d'un block, permettant d'éviter des surchages de réseau notamment. A chaque slot, un comité de validateur (composé de 4 à 64 validateur sur 128 validateurs) est choisi. Ce comité est choisi de manière à ce que sur un epoch, tous les validateurs ont pu attesté d'un block (i.e chaque validateur a moins participé dans un slot).
Et la finalité
La finalité représente le moment ou un block dans une blockchain est considéré presque comme inaltérable. En d'autres termes, on considére que la finalité d'une transaction est atteinte si l'inverser est très difficile, voir impossible ou si l'énergie nécessaire pour inverse cette transaction est démentiellement trop élévés pour les bénéfices. Avec l'algo PoW, la finalité est atteinte de facto par l'addition de nouveau bloc a la tête de la chaine. Comme PoW repose sur la diffculté d'un challenge et la consommation électrique qui en résulte, plus une transaction et loin dans la blockchaine, plus il est compliqué de l'altérer car cela implique de réécrire tous les élèments qui la suivent.
Pour PoS, ne peux fonctionner sur ce mechanismes. Ethereum régle ce problème en ayant déterminer que si plus de 2/3 des validateurs (représentant 2/3 de la mise totale pour le block) ont voté positivement pour le block de la tête de la chaine, on peux considérer que tous ce qui était avant un checkpoint est finalisé.
Le processus de finalité de ETH2 est définit ainsi :
- Si 2/3 des validateurs vote positivement pour la validation de la tête de la chaine dans une epoch, ce dernier epoch est considéré comme justifié
- Si 2 epochs a la suite sont considéré comme justifié, l'epoch potionné 2 epoch avant celui actuel est considéré comme final.
Le big Recap : l'éxécution d'une transaction dans l'Ethereum
6 étapes sont nécessaires pour finalisé une transaction en Ethereum :
- Un utilisateur créé une transaction signé avec sa clef privée. Cette transaction contient aussi le GAS (une somme en ETH que l'utilisateur paye pour encourager les validateurs a inclure cette transaction dans le bloc, car les validateurs touche cette somme).
- La transaction est envoyé a un noeud (faisaint tourner le programme execution client) vérifiant la validité de la transaction. Le validateur s'assure notamment que la personne envoyant la demande dispose de suffisament de ETH et que la transaction est signé avec la bonne clef).
- Si la transaction est valide, le client l'ajoute a sa "mempool" locale, représentant la liste des transactions en attentes d'être validées dans un block et broadcast la transaction aux autre noeuds qui l'ajoute eux aussi a leur "mempool".
- L'un des noeuds est élu pour le slot courant comme le block proposeur grace a un algo pseudo-random RANDAO que chaque validateur fait tourner. Le block proposeur construit un block et broadcast le block et le state proposé à tous les autres validateurs.
- Les validateurs recoivent ce block et re-execute les transactions localement pour vérifier que l'état proposé est le bon. Les validateur envoient ensuite leurs validation et ajoute sur leurs DB local ce block.
- La transaction est considéré ensuite finalisé seulement si elle appartient un block étant positionné dans un epoch considéré comme justifié, selon les conditions précèdemments écrites.
Congratulations @boutvalentin! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)
Your next target is to reach 50 upvotes.
You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Check out our last posts: