Stellar est un réseau blockchain open source qui permet aux développeurs de créer des applications financières. Le Stellar Consensus Protocol (SCP) est un algorithme de consensus distribué qui permet à Stellar de gérer les transactions et de maintenir la sécurité du réseau.
L'algorithme Stellar Consensus Protocol, publié en 2015, appartient aux algorithmes de type Federated Byzantine Agreement (FBA), il décrit un moyen pour un ensemble de nœud de s'entendre sur un état commun. Il est utilisé par la blockchain Stellar pour déterminer l'état de la blockchain.
Le réseau Stellar est un réseau décentralisé public, tout le monde peut participer et maintenir un ou plusieurs nœuds du réseau.
Une des caractéristiques du réseau Stellar est sa faible latence, en comparaison avec d'autres algorithmes de consensus SCP traite les transactions plus rapidement.
Concepts
Quorum
Un quorum est un ensemble de nœuds suffisant pour pouvoir arriver à un accord, une fois qu'un quorum a pris une décision concernant une transaction, il est capable de convaincre le reste du réseau de cette décision.
Quorum slice
Un quorum slice est un ensemble de nœuds suffisant pour convaincre un autre nœud de la validité d'une information. Si un nœud trouve un quorum slice à qui il fait confiance, il va accepter toutes les décisions que le quorum slice a prises.
Node Blocking sets
Un nœud peut être stoppé dans sa prise de décision par un ensemble de nœuds qui le bloquent, un blocking set est un ensemble de nœuds dans un quorum qui empêchent ce quorum de trouver un accord.
Par exemple : N'importe quelle combinaison de deux nœuds est un blocking set pour un nœud si dans un quorum de quatre nœuds trois sont requis pour convaincre ce nœud.
Fonctionnement
L'algorithme utilise un système de vote fédéré pour garantir la sécurité et la disponibilité de l'information. Le vote est dit fédéré, car il n'y a pas de nœud qui fonctionne comme une autorité centrale organisant le vote. Chaque nœud prend une décision en fonction des informations qu'il reçoit des nœuds voisins.
Lors d'un vote un nœud peut effectuer trois actions, nous avons dans l'ordre :
- le vote
- l'acceptation
- la confirmation
Le vote commence par la phase de nomination où les nœuds envoient des candidats à la prochaine valeur de la blockchain. Les nœuds qui reçoivent les candidats les envoient à leurs voisins.
La phase de vote commence lorsque le nœud a reçu des candidats de la part de suffisamment de nœuds. Il envoie alors un vote pour un candidat. Les nœuds qui reçoivent le vote le transmettent à leurs voisins.
Concernant une proposition A un nœud peut avoir quatre états :
- le nœud ne sait rien de la proposition A (aucun de ses voisins ne lui a donné d'information sur A)
- le nœud vote pour A, il considère A comme valide, mais ne sait pas si c'est la bonne décision
- le nœud accepte A, car suffisamment de nœuds sont d'accord avec A, mais il n'est toujours pas sûr de sa décision.
- le nœud confirme A, même si tout le quorum auquel il appartient n'a pas encore accepté A, il est sûr que A est la bonne décision.
Pour passer du vote pour une proposition à la confirmation de cette même proposition, il faut qu'au moins une des deux conditions suivantes soient remplies :
- que tous les nœuds du quorum slice aient votés ou acceptés la proposition
- que le blocking set ait accepté la proposition
Pour passer de l'acceptation à la confirmation, il faut que tous les nœuds du quorum slice aient accepté la proposition A.
Conclusion
Utiliser un registre utilisant l'accord Byzantin fédéré (FBA) permet de garantir la sécurité et la cohérence de l'information. Le tout de manière extrêmement rapide puisque n'ayant pas besoin de l'accord de tous les nœuds du réseau, mais seulement d'une partie d'entre eux via la notion de quorum.
Une partie du quorum (le quorum slice) est capable de convaincre un autre nœud de la validité d'une information, tandis qu'un quorum peut ensuite convaincre tout le réseau de la validité de cette information.