Bonjour à toutes et tous, chers amateurs de blockchains !
Aujourd'hui, avec l'aide de nous allons tenter de vous expliquer ce que c'est que le Stellar Consensus Protocol (ou SCP), un protocole de consensus sur lequel nous avons du faire des recherche dans le cadre de notre formation en programmation parallèle et distribué .
Tout d'abord, remettons nous dans le contexte. Une blockchain est un registre distribué (DLT) qui permet de stocker des données de manière sécurisée et immuable. Pour qu’une blockchain fonctionne correctement, elle doit assurer un consensus entre les différents nœuds du réseau. Pour cela, il existe une multitude de mécanismes de consensus, dont le Stellar Consensus Protocol (SCP).
Le mécanisme de consensus SCP a été conçu par David Mazières, professeur à l’université de Stanford, et est utilisé par le réseau Stellar. Il repose sur ce qu’on appelle la “Preuve d’accord” (Proof of Agreement, PoA), une option plus performante par rapport aux blockchains traditionnelles qui nécessitent des solutions très coûteuses en ressources ( comme la Preuve de Travail, PoW utilisé par le Bitcoin).
Accord Byzantin Fédéré (FBA) :
Le SCP est basé sur un modèle d’accord byzantin fédéré (FBA). Dans ce modèle, chaque nœud du réseau choisit un ensemble de nœuds de confiance appelés “quorum set”. Ce choix est arbitraire et c’est qui le rend similaire à un réseau social où chaque utilisateur choisit ses amis. Un quorum slice est un sous-ensemble de nœuds dont l’accord est nécessaire pour garantir que l’accord est atteint.
Si on reprend l’analogie du réseau social,
un quorum set serait l’ensemble des amis d’un utilisateur, un quorum slice serait une partie des amis d’un utilisateur qui forme une majorité au sein du groupe (quorum set), alors qu’un quorum serait l’ensemble des quorum slices et donc l'ensemble des amis de tous les utilisateurs.
Il existe trois caractéristiques nécessaires à un protocole de consensus : la tolérance aux pannes, la sécurité et la disponibilité. Cependant, il n’est pas possible d’avoir les trois à la fois, c’est pourquoi SCP est tolérant aux pannes et est sécurisé, mais il ne gère pas la disponibilité. Il n’en reste pas moins un protocole décentralisé, avec une faible latence et un mécanisme de confiance flexible.
Le protocole utilise un principe de nœud, où n’importe quelle personne peut devenir un nœud. Chaque nœud décide lui-même en qui placer sa confiance afin de créer son quorum set. Ce principe permet à de petites organisations de pouvoir avoir un impact sur l’honnêteté de plus grandes organisations.
De plus, ces nœuds utilisent une technique de vote fédéré pour atteindre le consensus. Cette technique est divisée en deux phases : Vote et Confirmation. Du point de vue d'un noeud, c'est deux phases sont divisé en trois états :
- Inconnu : la proposition n'a pas encore été vue par le nœud.
- Accepté : Le nœud a accepté la proposition.
- Confirmé : Le nœud a confirmé la proposition.
Si on prend l'exemple d'une proposition A lors de la phase de vote, un noeud peut avoir les opinions suivantes :
- A est inconnu, le nœud n'a pas d'opinion sur A.
- Le noeud vote pour A, il valide la proposition. Il ne votera pour A que si ça reste cohérent avec ses précédents votes. Par exemple : s’il a voté contre A précédemment, il ne votera pas pour A.
Si la phase de vote est terminée, alors la phase de confirmation commence. Le noeud peut alors avoir les opinions suivantes : - Le noeud accepte A si l'une des deux condition est respectée :
- tous les nœuds dans un quorum slice on voté ou accepté A.
- Le set bloquant du nœud a accepté A. (Dans ce cas, si le noeud avait eu un vote contre A, il oublie ce vote et accepte A).
- Le nœud confirme A, si tous les nœuds du quorum slice ont accepté A.
Le SCP est un protocole utilisé notamment par Stellar, un protocole de paiement. Nous allons expliquer comment il fonctionne dans Stellar, afin que ce soit plus simple.
Le SCP consiste en deux sous-protocoles : le protocole de nomination (nomination protocol) et le protocole de vote (ballot protocol).
Le but du protocole de nomination est de sélectionner des ensembles de transactions candidates qui peuvent être écrites dans un registre. Pour ce faire, un nœud va proposer un ensemble de transactions et envoyer cette proposition à tous les nœuds du quorum. Les nœuds vont voter pour nominer cet ensemble de transactions (dans le cas où ils le considèrent valide) et envoyer leur réponse à tous les nœuds. Puisque tous les nœuds ont voté pour cet ensemble, les nœuds vont changer d’opinion et accepter cet ensemble.
Une fois qu’un ensemble de transactions a été confirmé, le nœud passe à l’étape suivante, qui consiste à exécuter le protocole de vote.
Le protocole de vote sert à confirmer et à appliquer un set de valeurs candidates de façon unanime. Durant ce protocole, une valeur composite est utilisée : il s’agit de l’ensemble de transactions le plus grand parmi les candidats qui ont été confirmés pendant le protocole de nomination.
Un vote fédéré va donc être lancé, demandant de voter pour “préparer la valeur composite”. Les autres nœuds vont donc voter pour cette préparation, et lorsque tous les nœuds du quorum slice auront voté, les nœuds passeront dans l’état accepté. Pour finir, lorsque tous les nœuds auront accepté cette valeur, ils passeront dans l’état confirmé, ce qui signifie que la préparation de la valeur composite est confirmée.
Ensuite, vient un dernier vote fédéré pour valider le set, et puisque tous les nœuds auront confirmé la préparation, tous les nœuds passeront en état confirmé pour la validation de la valeur composite.
Merci d'avoir lu jusqu'au bout !
Références utilisées :
https://8130068.fs1.hubspotusercontent-na1.net/hubfs/8130068/stellar-consensus-protocol.pdf
https://stellar.org/learn/stellar-consensus-protocol
https://www.scs.stanford.edu/~dm/home/bio.html
https://fr.wikipedia.org/wiki/Blockchain
https://fr.wikipedia.org/wiki/Registre_distribu%C3%A9
https://developers.stellar.org/docs/learn/fundamentals/stellar-consensus-protocol
https://stellar.org/blog/developers/intuitive-stellar-consensus-protocol