Les consensus: Proof of work vs Proof of stake

L’état du système bitcoin à un instant T est une collection de outputs de transactions non dépensées qu’on appelle UTXO.

L’argent disponible dans chacun de ces outputs est protégé cryptographiquement par le protocole de la monnaie: quiconque veuille dépenser une somme dans un UTXO doit fournir la preuve qu’il en est bien le propriétaire.

Au lieu stocker explicitement le soldes de tout le monde, bitcoin garde l’historique complet des transactions des utilisateurs et les manie dynamiquement pour déduire l’état courant. Les transactions représentent donc des échanges atomiques de monnaie qui modifient l’état interne du système.

La découverte de nouveaux blocs se fait selon un ensemble précis de règles définies dans le protocole. Ces règles doivent protéger la blockchain des attaques et atteindre rapidement un consensus lorsque par exemple apparaissent des ramifications blockchain (forks).

La Proof of work (preuve de travail) et la Proof of Stake (preuve d’enjeu ou de possession) sont les deux manière de valider les blocs les plus connues. Elles impliquent deux mécanismes de consensus très différents.

Le processus de résoudre un défi informatique imposé par une Proof of Work est appelé mining: on parle de mineurs.

Le processus de résoudre un défi informatique imposé par une Proof of Stake est appelé minting: on parle de forgeurs.

Le théorème CAP dit qu’il est impossible sur un système informatique de calcul distribué de garantir en même temps (c’est à dire de manière synchrone) les trois contraintes suivantes:

  • Cohérence: tous les nœuds du système voient exactement les mêmes données au même moment ;
  • Disponibilité : garantie que toutes les requêtes reçoivent une réponse;
  • Tolérance au partitionnement : aucune panne moins importante qu’une coupure totale du réseau ne doit empêcher le système de répondre correctement.

Tout système de calcul distribué ne peut garantir à un instant T que deux de ces contraintes, mais pas les trois.

Les cryptomonnaies sont ainsi

  1. disponibles (chaque requête reçoit toujours une réponse),
  2. tolérants à la distribution (le service fonctionne encore même si quelques noeuds échouent), mais
  3. il ne sont jamais cohérents.

Au fil du temps, des utilisateurs différents peuvent voir des pseudo états courant différents. Par exemple l’incohérence arrive lorsque le hash d’un bloc nouvellement découvert n’a pas encore été relayé à tous les utilisateurs du système.

Ces instabilités temporaires sont un grand obstacle lorsqu’on implémente une cryptomonnaie, puisque à la fin il faudra bien finir par obtenir une consistance finale. Les incohérences sont physiologiques, et donc tolérées, mais doivent être transitoires, mieux encore éphémères.

C’est le rôle du protocole de consensus. Pour cela il impose les exigences suivantes

  1. Un utilisateur qui a découvert un bloc est encouragé à l’émettre sur le réseau immédiatement sans le retenir
  2. On doit décourager l’utilisateur de découvrir les blocs des chaînes intermédiaires (il faut qu’il focalise sur les plus longues).
  3. Les règles de consensus doivent être construites de manière à résoudre l’ambiguïté qui se forme à la suite d’un fork de blockchain: lors d’un fork une des branches en compétition doit prendre le contrôle sur les autres dans un temps raisonnablement court.

 

Proof of Work

Chaque bloc Bitcoin consiste de deux parties :

· partie de tête (header) avec les paramètres clés: timestamp de création du bloc, référence au bloc précédent, la racine de l’arbre Merkle du bloc de transactions…
· partie centrale qui contient la liste de transactions.

Pour faire référence à un bloc spécifique, on fait le hash SHA-256 de son header deux fois. L’entier résultant appartient à l’intervalle

[0, 2^256 – 1]

Dans la Proof of Work, pour qu’un bloc soit considéré valable, cet entier ne doit pas excéder un certain seuil :

hash(B) <= M/D

D ∈ [1, M] représente la difficulté de la tâche.

Il n’y a aucune façon connue de prédire à l’avance quel argument B va satisfaire cette équation. La seul possibilité est le lancer une sorte d’attaque en force brute aléatoire et itératif, dans l’espoir de trouver avant les autres un minimum assez petit. Plus haute est la valeur de D, plus il faudra d’itérations avant de trouver un bloc valable.


Proof of Stake

La Proof of Stake a, elle aussi, une inégalité à satisfaire mais celle ci concerne la quantité de monnaie qu’un utilisateur possède.

La probabilité qu’un compte parvienne à confirmer le prochain block de transactions à ajouter à la blockchain est proportionnelle à la quantité de monnaie qui est sur ce compte. Plus précisément, elle est proportionnelle au rapport entre le solde de l’utilisateur à l’instant T et le total de la monnaie en circulation.

Pour faire court, une personne possédant 5 % d’une monnaie PoS peut minter le 5 % des blocs de la même façon qu’une personne possédant 5 % de la puissance le réseau du bitcoin peut théoriquement miner le 5 % des blocs. C’est comme si une PoS tentait de de copier simplement la PoW en faisant de chaque pièce de sa monnaie un simulated mining rig.

***

Prenons un utilisateur avec adresse A et un solde bal(A).  Une fonction de PoS commune utilisera cette condition

hash( hash(Bprev),  A,  t) <= bal(A) M/D

· Bprev dénote le bloc sur lequel l’utilisateur est en train de construire,
· t est le timestamp UTC courant.

Contrairement à l’équation PoW, la seule variable que l’utilisateur peut changer est le timestamp t, dans la partie gauche de l’équation.

En effet le solde est connu publiquement et on peut aisément calculer les avoirs de chaque membre en prenant par exemple les montants qui n’ont pas été déplacés pendant les dernières 24h.

***

Le temps pour trouver un bloc pour l’adresse un est exponentiellement distribué avec un taux

bal (A)/D 

Ainsi, si la provision monétaire de la monnaie  est fixe ou tout au plus grandit à un taux connu, la difficulté D est connue à l’avance :

D = 1 /Tex ∑ bal(a)

Tex dénote le temps attendu  (expectation time) entre deux blocs.

Dans la pratique, D est ajustée en dynamique en se basant sur les blocs récents afin de tenir compte du fait que tous les propriétaires de monnaie ne participent pas au minting des blocs en même temps.

 

Le Nothing at Stake

Dans une Pow: en contribuant aux décisions pour les  validations blockchain, un mineur doit faire dont le choix entre toutes les fourchettes possibles (ou à défaut en commencer une nouvelle). Les options sont mutuellement exclusives. Voter double n’est pas profitable puisque on gaspille son pouvoir de mining  en l’éparpillant. La stratégie payante est celle de minier exclusivement sur la fourchette que vous pensez avoir le plus de chance de gagner.

Avec la Pos la situation est différente: le vote est libre et ne coûte rien. Si on est en train de miner, chaque coin qu’on possède a une certaine chance par seconde d’être utilisable pour signer un bloc. Cela a un inconvenient majeur: s’il y a des forks multiples, la stratégie optimale est de voter sur tous les forks en même temps.

C’est le concept de  Nothing at Stake.

 

Consensus objectif et faiblement objectif.

Un protocole de consensus est objectif si un nouveau noeud peut arriver au même état auquel arrive le reste du réseau en se basant seulement sur les règles du protocole et les messages propagés à travers le réseau.

La PoW est un exemple d’un protocole objectif: tant qu’un nouveau noeud est connecté à au moins un utilisateur honnête, il choisira un bloc valide.

La PoS par contre n’est pas objective. En effet, si nous prenons un attaquant avec assez de puissance de calcul. Pourvu que son fork soit assez longue, la difficulté sera ajustée pour favoriser le contrôlé de ce fork de la part de l’attaquant. Ceci lui permet éventuellement de produire une chaîne plus longue que le vrai fork, c-à-d de celui qui aurait dû être valable.

Ce type de forks longues sont rejetées par les utilisateurs qui sont depuis un moment dans le système, mais les nouveaux arrivants, n’ayant pas de connaissance antérieure, sont poussés par le protocole même à préférer le fork de l’attaquant.

***

Un protocole de consensus est subjectif si le système a des états stables où des noeuds différents parviennent à des conclusions différentes. Dans ce cas il faut une grande quantité d’informations sociales externe pour participer.

Les systèmes qui utilisent des réseaux sociaux comme leur ensemble de consensus (eg. Ripple) est nécessairement subjectif. Un nouveau noeud qui ne connaît rien d’autre que le protocole et les données peut être convaincu par un hacker que ses noeuds sont dignes de confiance. Sans une informations sociale externe qui donne de la réputation il est impossible de résoudre ce type d’ attaque.

C’est très différent de la PoW dans laquelle l’état actuel est toujours celui qui a fédéré la la plus haute quantité de ressources de calcul.

***

Un protocole de consensus est faiblement objectif si un noeud a besoin d’un état récent en plus des règles du protocole et des messages propagés pour déterminer l’état actuel du système.

Un nouveau noeud venant sur le réseau sans connaissance sauf

  1. les règles du protocole,
  2. l’ensemble de tous les blocs + les  messages « importants » qui ont été publiés et
  3. un état assez récent (moins e N blocs dans le passé) qui est certainement valable

peut arriver seul à la même conclusion que le reste du réseau quant à l’état actuel.

La PoS est  faiblement objective. Si il y a ambiguïté  il suffira de lire le contenu d’un bloc avec au moins profondeur N, pour déterminer l’état courant du système.  Un membre nouveau venu pourrait ainsi avoir accès à ce bloc d’une source fiable (par exemple, un site Web consacré à la monnaie en question).

Bien que cette méthode affaiblit la sécurité et modifie radicalement les coté décentralisation, la subjectivité faible est une bonne façon de combiner la sécurité computer-driven et celle social-driven.

 

Les différences PoW / PoS

Une PoS peut mettre des restrictions aux valeurs possibles de t. Par exemple, t ne doit pas différer du temps UTC sur des noeuds de réseau de plus d’une heure. Ainsi un utilisateur devra essayer au plus 3600*2 valeurs de t.

C’est la raison pour laquelle il n’y a pas de calculs particulièrement lourds dans un PoS.  Les mécanismes PoS ne nécessitent pas de matériel informatique puissant et onéreux pour la maintenance de la blockchain et ne consomment pas beaucoup d’électricité. Les PoS demandent des ressources nettement plus petites par rapport aux PoW, à la louche d’un facteur 1000. C’est pourquoi on les considère comme une technologie verte.

Le PoS n’est pas sujet au risque d’attaque 51% car, pour mener une telle attaque, il faudrait posséder au moins 51% de la masse monétaire, ce qui est considéré comme impossible, sauf peut être au tout début lorsque toutefois la monnaie ne vaut forcement pas encore grand chose.

Une monnaie PoS n’a pas d’inflation. La masse monétaire est créée au début, et c’est pourquoi un système PoS garantit qu’une monnaie sera déflationniste.

***

Malgré ses faiblesses remplacer la preuve de travail par la preuve d’enjeu reste un objectif intéressant car un algorithme PoS consomme beaucoup moins d’énergie que l’algorithme PoW.

Toutefois si on se limite à cette seule considération, on passe à coté du fait qu’ne blockchain PoS ne peut structurellement pas offrir le même niveau de sécurité qu’une PoW vu qu’elle ne demande pas de travail en contrepartie de ses validations. On pense généralement qu’une PoS est équivalente et meilleure d’un PoW, mais il n’en est rien.

Dans une blockchain PoS, si vous avez possédé assez de la monnaie à un certain point dans le passé vous pouvez faire votre propre chaîne alternative gratuitement et sans effort. Les autres membres ne pourront pas dire la différence entre la vraie chaîne et la votre sans disposer de quelques informations supplémentaires externe.

Le problème est dans le fait que le coût production des coins PoS est pratiquement zéro car aucune énergie n’a été dépensée pour les créer. Ainsi aucune fonction de coût ne limite la quantité de coin PoS disponibles sur le marché dans le futur.

On sait que la valeur d’un réseau est fonction du carré du nombre de ses utilisateurs  mais elle n’augmente pas en fonction de la quantité de coins circulant sur le réseau. La valeur réside plutôt dans le volume de transactions/paiements que le réseau est capable d’absorber.

Considérons le fait que les cryptomonnaies sont des entités numériques, divisibles à l’infini et à grande vélocité (on appel cela la fragmentation de l’effet réseau). De toute évidence une quantité de coins illimitée dans le futur fait obstacle à la valorisation de la cryptomonnaie car il n’y a plus de lien déterministe entre la valeur présente du réseau et la valeur des coins future.

Par conséquent la valeur d’une monnaie PoS peut décroître même si le nombre d’utilisateurs augmente: une monnaie 100% PoS ne peut pas avoir valeur d’investissement. Elle aura uniquement une valeur d’usage avec sa valeur unitaire qui tend vers zéro si les offres se multiplient indéfiniment.

Une blockchain PoS véhicule donc une monnaie qui n’a qu’une valeur conventionnelle entre les participants. Ses transactions s’apparentent aux transactions Bitcoin des colored coins et comme eux devra être compensée par un transfert de valeur effectif sur un autre réseau (euro, bitcoin ou autre).

***

A l’inverse d’une chaîne PoS, une blockchain PoW est une infrastructure qui ne peut pas être efficacement répliquée.

La réplication du réseau Bitcoin (par exemple lorsque on a crée le réseau Litecoin) est un gaspillage du point de vue de la sécurité et ne peut se justifier que par le nombre de transactions supplémentaires qu’il permet.

Mais là aussi on peut pas considérer Litecoin comme une solution de scalabilité pérenne, vu qu’il existent des solutions de scalabilité interne au Bitcoin plus efficace qu’une blockchain flottante satellite.

Il existe une solution élégante et efficace si on combine les deux:  un sidecoin PoS liée à la blockchain Bitcoin pegged sidechain. Cela évite à la monnaie PoS de converger inexorablement vers zéro tout en gardant les avantages de la faible consommation énergétique du protocole PoS et de la pérennité de la valeur des coins PoW.

Grâce au mapping des sidecoins PoS avec la blockchain bicoin, un acheteur ne pourra acquérir la majorité des sidecoins PoS qu’en payant le prix du marché des bitcoins. La sidechain PoS devient ainsi un registre publique annexe dont la sécurité sera directement liée à la quantité de bitcoins convertis en sidecoins PoS.

6 réflexions au sujet de « Les consensus: Proof of work vs Proof of stake »

  1. Merci pour cette article qui m’aide à y voir plus clair.

    J’aimerais s’avoir si le POSP de CryptoBullion (CBX) apporte un plus au niveau sécurité .

    Si quelqu’un à 10000 cbx, ils sont divisés en entrée de 500 à 1000 cbx .
    Chaque entrée est multipliée par le nombre de confirmations ( 601 CBX * 100 confirmations = 60100) celui qui à le plus grand chiffre remporte le bloc.

Répondre à Arnaud Annuler la réponse