{"id":30047,"date":"2019-10-31T21:33:25","date_gmt":"2019-10-31T18:33:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\/"},"modified":"2019-10-31T21:33:25","modified_gmt":"2019-10-31T18:33:25","slug":"razbiraemsya-v-protokole-konsensusa-stellar","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Comprendre le protocole de consensus Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe protocole de consensus Stellar a \u00e9t\u00e9 d\u00e9crit pour la premi\u00e8re fois dans <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">un article scientifique<\/a><\/noindex> l'article de David Mazieres en 2015. Il s'agit d'un \u00ab syst\u00e8me f\u00e9d\u00e9ratif d'accord byzantin \u00bb qui permet aux r\u00e9seaux informatiques d\u00e9centralis\u00e9s, sans leaders, d'atteindre efficacement un consensus sur une d\u00e9cision quelconque. Le r\u00e9seau de paiement Stellar utilise le Stellar Consensus Protocol (SCP) pour maintenir un historique coh\u00e9rent des transactions, visible par tous les participants.<\/p>\n<p>Il est commun\u00e9ment admis que les protocoles de consensus sont difficiles \u00e0 comprendre. Le SCP est plus simple que la plupart d'entre eux, mais il partage n\u00e9anmoins cette r\u00e9putation, en partie \u00e0 cause d'une id\u00e9e erron\u00e9e selon laquelle le \u00ab vote f\u00e9d\u00e9ratif \u00bb, consacr\u00e9 dans la premi\u00e8re partie de l'article scientifique, est le SCP. Mais ce n'est pas le cas ! C'est simplement un \u00e9l\u00e9ment essentiel qui est utilis\u00e9 dans la seconde moiti\u00e9 de l'article pour cr\u00e9er <i>le v\u00e9ritable<\/i> protocole de consensus Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nCet article expliquera bri\u00e8vement ce qu'est un \u00ab syst\u00e8me d'accord \u00bb, ce qui peut le rendre \u00ab byzantin \u00bb et pourquoi rendre un syst\u00e8me byzantin \u00ab f\u00e9d\u00e9ratif \u00bb. Nous expliquerons ensuite la proc\u00e9dure de vote f\u00e9d\u00e9ratif d\u00e9crite dans l'article sur le SCP, et enfin nous expliquerons le protocole SCP lui-m\u00eame.<\/p>\n<h1>Syst\u00e8mes d'accords<\/h1>\n<p>\nUn syst\u00e8me d'accord permet \u00e0 un groupe de participants de parvenir \u00e0 un consensus sur un certain sujet, par exemple, ce qu'il faut commander pour le d\u00e9jeuner.<\/p>\n<p>Chez Interstellar, nous avons mis en place notre propre syst\u00e8me d'accord pour le d\u00e9jeuner : nous commandeons ce que dit notre responsable des op\u00e9rations, John. C'est un syst\u00e8me d'accord simple et efficace. Nous faisons tous confiance \u00e0 John et croyons qu'il trouvera chaque jour quelque chose d'int\u00e9ressant et de nutritif.<\/p>\n<p>Mais que se passerait-il si John abusait de notre confiance ? Il pourrait unilat\u00e9ralement d\u00e9cider que nous devrions tous devenir v\u00e9g\u00e9taliens. Dans une semaine ou deux, nous le renverserions probablement et confierions le pouvoir \u00e0 Elizabeth. Mais que se passe-t-il si elle aime les avocats avec des anchois et pense que tout le monde devrait l'\u00eatre ? Le pouvoir corrompt. Il vaut donc mieux trouver une m\u00e9thode plus d\u00e9mocratique : un moyen de s'assurer que diverses pr\u00e9f\u00e9rences sont prises en compte, tout en garantissant un r\u00e9sultat clair et opportun, afin qu'il ne se retrouve pas dans une situation o\u00f9 personne ne commande le d\u00e9jeuner ou cinq personnes passent des commandes diff\u00e9rentes, ou que la discussion s'\u00e9ternise jusqu'au soir.<\/p>\n<p>Il semblerait que la solution soit simple : organiser un vote ! Mais cette impression est trompeuse. Qui va collecter les bulletins et communiquer les r\u00e9sultats ? Et pourquoi les autres devraient-ils croire ce qu'il dira ? Peut-\u00eatre que nous pouvons <i>d'abord<\/i> voter pour un leader en qui nous avons confiance pour diriger le vote \u2014 mais qui dirigera ce <i>premier<\/i> vote ? Que se passe-t-il si nous ne parvenons pas \u00e0 nous mettre d'accord sur un leader ? Ou si nous parvenons \u00e0 un accord, mais que ce leader est retenu lors d'une r\u00e9union ou tombe malade ?<\/p>\n<p>Des probl\u00e8mes similaires se rencontrent dans les r\u00e9seaux informatiques distribu\u00e9s. Tous les participants ou n\u0153uds doivent convenir d'une certaine d\u00e9cision, par exemple, qui doit mettre \u00e0 jour un fichier commun ou retirer une t\u00e2che de la file d'attente. Dans un r\u00e9seau de cryptomonnaie, les n\u0153uds doivent \u00e0 plusieurs reprises choisir quelle histoire compl\u00e8te est celle qui s'applique, parmi plusieurs versions possibles qui entrent parfois en conflit. Cet accord r\u00e9seau garantit au destinataire que la pi\u00e8ce est (a) valide (non contrefaite) et (b) qu'elle n'a pas encore \u00e9t\u00e9 d\u00e9pens\u00e9e ailleurs. Cela garantit \u00e9galement qu'il pourra d\u00e9penser les pi\u00e8ces \u00e0 l'avenir, car le nouveau destinataire aura les m\u00eames garanties pour les m\u00eames raisons.<\/p>\n<p>Tout syst\u00e8me de consensus dans un r\u00e9seau informatique distribu\u00e9 doit \u00eatre tol\u00e9rant aux pannes : il doit donner des r\u00e9sultats coh\u00e9rents, malgr\u00e9 des erreurs telles que des lignes de communication lentes, des n\u0153uds non r\u00e9actifs et un ordre de messages incorrect. <i>Le<\/i> syst\u00e8me de consensus byzantin est en plus r\u00e9sistant aux erreurs \u00abbyzantines\u00bb : des n\u0153uds fournissant de fausses informations, que ce soit par erreur ou dans une tentative d\u00e9lib\u00e9r\u00e9e de nuire au syst\u00e8me ou d'en tirer un avantage. La tol\u00e9rance aux pannes \u00abbyzantine\u00bb \u2014 la capacit\u00e9 de faire confiance \u00e0 une d\u00e9cision de groupe, m\u00eame lorsque certains membres du groupe peuvent mentir ou ne pas suivre les r\u00e8gles de d\u00e9cision \u2014 a son nom d'apr\u00e8s <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B2%D0%B8%D0%B7%D0%B0%D0%BD%D1%82%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">la fable des g\u00e9n\u00e9raux de l'Empire byzantin<\/a><\/noindex>, qui essayaient de coordonner une attaque. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/coinmonks\/a-note-from-anthony-if-you-havent-already-please-read-the-article-gaining-clarity-on-key-787989107969\">Une bonne description<\/a><\/noindex> se trouve chez Anthony Stevens.<\/p>\n<p>Consid\u00e9rons Alice, la propri\u00e9taire de la cryptomonnaie, qui doit choisir entre acheter une d\u00e9licieuse glace chez Bob ou rembourser sa dette envers Carol. Peut-\u00eatre qu'Alice veut payer les deux en m\u00eame temps, en d\u00e9pensant frauduleusement la m\u00eame pi\u00e8ce. Pour cela, elle doit convaincre l'ordinateur de Bob que la pi\u00e8ce n'a jamais \u00e9t\u00e9 vers\u00e9e \u00e0 Carol, et convaincre l'ordinateur de Carol que la pi\u00e8ce n'a jamais \u00e9t\u00e9 vers\u00e9e \u00e0 Bob. Un syst\u00e8me byzantin de consensus rend cela pratiquement impossible, en utilisant une forme de r\u00e8gle de la majorit\u00e9 appel\u00e9e <i>quorum<\/i>. Dans un tel r\u00e9seau, un n\u0153ud refuse de passer \u00e0 une version particuli\u00e8re de l'histoire tant qu'il n'a pas vu qu'un nombre suffisant de n\u0153uds pairs \u2014 un quorum \u2014 sont d'accord avec ce passage. Une fois que cela se produit, ils forment un bloc \u00e9lectoral suffisamment important pour convaincre les n\u0153uds restants du r\u00e9seau d'accepter leur d\u00e9cision. Alice peut forcer certains n\u0153uds \u00e0 mentir en son nom, mais si le r\u00e9seau est suffisamment vaste, sa tentative sera \u00e9touff\u00e9e par les voix des n\u0153uds honn\u00eates.<\/p>\n<p>Combien de n\u0153uds sont n\u00e9cessaires pour un quorum ? Au minimum, la majorit\u00e9, ou plus pr\u00e9cis\u00e9ment, une majorit\u00e9 qualifi\u00e9e pour lutter contre les erreurs et la fraude. Mais pour compter la majorit\u00e9, il faut conna\u00eetre le nombre total de participants. Dans un bureau interstellaire ou pour des \u00e9lections de district, ces chiffres sont faciles \u00e0 obtenir. Mais si votre groupe est un r\u00e9seau mal d\u00e9fini, o\u00f9 les n\u0153uds peuvent entrer et sortir \u00e0 volont\u00e9 sans concertation avec un centre, alors il faut une <i>syst\u00e8me f\u00e9d\u00e9ratif<\/i> de consensus byzantin capable de d\u00e9terminer des quorums non \u00e0 partir d'une liste pr\u00e9d\u00e9finie de n\u0153uds, mais dynamiquement, \u00e0 partir d'un instantan\u00e9 constamment changeant et in\u00e9vitablement incomplet des n\u0153uds \u00e0 un moment donn\u00e9.<\/p>\n<p>Il peut sembler impossible de cr\u00e9er un quorum du point de vue d'un n\u0153ud dans un vaste r\u00e9seau, mais c'est possible. Un tel quorum peut m\u00eame garantir les r\u00e9sultats d'un vote d\u00e9centralis\u00e9. Le document technique SCP montre comment le faire \u00e0 l'aide d'une proc\u00e9dure appel\u00e9e <i>vote f\u00e9d\u00e9ratif<\/i>.<\/p>\n<h1>Pour les impatients<\/h1>\n<p>\nLe reste de l'article d\u00e9crit plus en d\u00e9tail le vote f\u00e9d\u00e9ratif et le protocole de consensus Stellar. Si les d\u00e9tails ne vous int\u00e9ressent pas, voici un aper\u00e7u g\u00e9n\u00e9ral du processus.<\/p>\n<ol>\n<li>Les n\u0153uds organisent des tours de vote f\u00e9d\u00e9raux sur les \u00ab nomin\u00e9s \u00bb. Un tour de vote f\u00e9d\u00e9ral signifie :\n<ul>\n<li>Le n\u0153ud vote pour une proposition quelconque, par exemple, \u00ab Je propose la valeur V \u00bb ;\n<\/li>\n<li>Le n\u0153ud \u00e9coute les voix des pairs jusqu'\u00e0 ce qu'il trouve celle qui peut \u00ab accepter \u00bb ;\n<\/li>\n<li>Le n\u0153ud recherche un \u00ab quorum \u00bb pour cette proposition. Le quorum \u00ab valide \u00bb le nomin\u00e9.<\/li>\n<\/ul>\n<\/li>\n<li>Une fois que le n\u0153ud peut valider un ou plusieurs nomin\u00e9s, il tente de \u00ab pr\u00e9parer \u00bb un \u00ab bulletin \u00bb \u00e0 travers plusieurs tours de vote f\u00e9d\u00e9ral.\n<\/li>\n<li>D\u00e8s que le n\u0153ud est en mesure de v\u00e9rifier la pr\u00e9paration du bulletin, il tente de l'engager avec encore plus de tours de vote f\u00e9d\u00e9ral.\n<\/li>\n<li>Une fois que le n\u0153ud peut confirmer l'engagement du bulletin, il peut \u00ab externaliser \u00bb la valeur de ce bulletin, en l'utilisant comme r\u00e9sultat de consensus.<\/li>\n<\/ol>\n<p>\nCes \u00e9tapes incluent plusieurs tours de vote f\u00e9d\u00e9ral, qui ensemble forment un tour SCP. Voyons plus en d\u00e9tail ce qui se passe \u00e0 chaque \u00e9tape.<\/p>\n<h1>Vote f\u00e9d\u00e9ral<\/h1>\n<p>\nLe vote f\u00e9d\u00e9ral est une proc\u00e9dure pour d\u00e9terminer si le r\u00e9seau peut s\u2019accorder sur une proposition. Lors d'un tour de vote, chaque n\u0153ud doit choisir une des nombreuses valeurs potentielles. Il ne peut le faire tant qu'il n'est pas certain que d'autres n\u0153uds du r\u00e9seau ne choisiront pas un r\u00e9sultat diff\u00e9rent. Pour \u00eatre s\u00fbrs de cela, les n\u0153uds \u00e9changent un flot de messages dans les deux sens, afin que chacun <i>a confirm\u00e9<\/i>, que <i>quorum<\/i> n\u0153uds <i>prend<\/i> le m\u00eame <i>la solution<\/i>. Le reste de cette section explique les termes dans cette d\u00e9claration et comment se d\u00e9roule toute la proc\u00e9dure.<\/p>\n<h1>Quorums et tranches de quorum<\/h1>\n<p>\nCommen\u00e7ons par d\u00e9finir le quorum. Comme nous l'avons discut\u00e9 pr\u00e9c\u00e9demment, dans un r\u00e9seau d\u00e9centralis\u00e9 avec une adh\u00e9sion dynamique, il est impossible de savoir \u00e0 l'avance combien de n\u0153uds il y a et donc combien sont n\u00e9cessaires pour une majorit\u00e9. Le vote f\u00e9d\u00e9ral r\u00e9sout ce probl\u00e8me en introduisant une nouvelle id\u00e9e <i>de tranche de quorum<\/i> (quorum slice) : un petit ensemble de n\u0153uds pairs en qui le n\u0153ud a confiance pour transmettre des informations sur l'\u00e9tat du vote au reste du r\u00e9seau. Chaque n\u0153ud d\u00e9finit sa propre tranche de quorum (dont il devient membre de facto).<\/p>\n<p>La formation du quorum commence par la tranche de quorum. Pour chaque n\u0153ud, les n\u0153uds de sa tranche sont ajout\u00e9s. Ensuite, les membres des tranches sont ajout\u00e9s. <i>ces n\u0153uds<\/i> et ainsi de suite. Au fur et \u00e0 mesure de la progression, de plus en plus de n\u0153uds apparaissent que vous ne pouvez pas ajouter, car ils sont d\u00e9j\u00e0 inclus dans le sous-ensemble. Lorsque plus aucun n\u0153ud nouveau n'est \u00e0 ajouter, le processus s'arr\u00eate : nous avons form\u00e9 un quorum par \u00ab fermeture transitive \u00bb (transitive closure) de l'ensemble de quorum du n\u0153ud initial.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Pour trouver un quorum \u00e0 partir d'un n\u0153ud donn\u00e9\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 nous ajoutons les membres de son sous-ensemble\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 puis nous ajoutons les membres des sous-ensembles de ces n\u0153uds.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nous continuons jusqu'\u00e0 ce qu'il n'y ait plus de n\u0153uds \u00e0 ajouter.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il n'y a plus de n\u0153uds \u00e0 ajouter. C'est un quorum.<\/i><\/p>\n<p>En r\u00e9alit\u00e9, chaque n\u0153ud peut faire partie de plus d'un sous-ensemble. Pour former un quorum, choisissez seulement un des sous-ensembles et ajoutez des membres ; ensuite, choisissez n'importe quel sous-ensemble pour chaque membre et ajoutez des membres <i>ce fichier) :<\/i> du sous-ensemble, et ainsi de suite. Cela signifie que chaque n\u0153ud fait partie d'un certain nombre de quorums possibles.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Choisissez seulement un sous-ensemble de quorum \u00e0 chaque \u00e9tape.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un quorum possible. Ou une alternative\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 nous choisissons d'autres sous-ensembles\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(quand c'est possible)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 cr\u00e9e un autre quorum.<\/i><\/p>\n<p>Comment un n\u0153ud sait-il \u00e0 quels sous-ensembles appartiennent les autres n\u0153uds ? De la m\u00eame mani\u00e8re qu'il obtient d'autres informations sur les autres n\u0153uds : par les transmissions que chaque n\u0153ud diffuse dans le r\u00e9seau lorsqu'il modifie son \u00e9tat de vote. Chaque diffusion inclut des informations sur les sous-ensembles du n\u0153ud \u00e9metteur. Le document technique SCP ne pr\u00e9cise pas le m\u00e9canisme de communication. Les impl\u00e9mentations utilisent g\u00e9n\u00e9ralement <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">le protocole de diffusion<\/a><\/noindex> pour garantir la diffusion des messages dans tout le r\u00e9seau.<\/p>\n<p>Rappelons que dans le syst\u00e8me de consensus byzantin non f\u00e9d\u00e9ratif, le quorum est d\u00e9fini comme la majorit\u00e9 de tous les n\u0153uds. Le syst\u00e8me de consensus byzantin a \u00e9t\u00e9 con\u00e7u en se demandant : combien de n\u0153uds malveillants le syst\u00e8me peut-il tol\u00e9rer ? Dans un syst\u00e8me de N n\u0153uds, con\u00e7u pour survivre \u00e0 f d\u00e9faillances (malversations), un n\u0153ud doit \u00eatre en mesure de progresser en recevant des r\u00e9ponses de N\u2212f pairs, puisque f d'entre eux peuvent ne pas fonctionner. Mais en recevant des r\u00e9ponses de N\u2212f pairs, on peut supposer que tous les f pairs (dont le n\u0153ud n'a pas re\u00e7u de r\u00e9ponse) sont en r\u00e9alit\u00e9 honn\u00eates. Ainsi, les malveillants sont f parmi les N\u2212f pairs (dont une r\u00e9ponse a \u00e9t\u00e9 obtenue). Pour que les n\u0153uds parviennent \u00e0 un consensus, la majorit\u00e9 des autres n\u0153uds doit \u00eatre honn\u00eate, c'est-\u00e0-dire qu'il nous faut que N\u2212f soit sup\u00e9rieur \u00e0 2f ou N &gt; 3f. Donc g\u00e9n\u00e9ralement, un syst\u00e8me con\u00e7u pour survivre \u00e0 f pannes aura au total N=3f+1 n\u0153uds et une taille de quorum de 2f+1. Une fois qu'une proposition franchit le seuil du quorum, les autres membres du r\u00e9seau sont convaincus que toutes les propositions concurrentes \u00e9choueront. Ainsi, le r\u00e9seau converge vers un r\u00e9sultat.<\/p>\n<p>Mais dans le syst\u00e8me de consensus byzantin f\u00e9d\u00e9ratif, il ne peut non seulement pas y avoir de majorit\u00e9 (car personne ne conna\u00eet la taille totale du r\u00e9seau), mais le concept de majorit\u00e9 est totalement inutile ! Si l'adh\u00e9sion au syst\u00e8me est ouverte, alors quelqu'un peut obtenir la majorit\u00e9 en menant une soi-disant attaque Sybil : en rejoignant plusieurs fois le r\u00e9seau \u00e0 travers diff\u00e9rents n\u0153uds. Alors pourquoi le coupage transitif de quorum peut-il \u00eatre appel\u00e9 <i>quorum<\/i>, et comment est-il capable de r\u00e9primer les propositions concurrentes ?<\/p>\n<p>Techniquement, il n'y a aucun moyen ! Imaginez un r\u00e9seau de six n\u0153uds, o\u00f9 deux groupes de trois sont isol\u00e9s dans des coupes de quorum l'un par rapport \u00e0 l'autre. Le premier sous-groupe peut prendre une d\u00e9cision dont le second n'entendra jamais parler, et vice versa. Pour ce r\u00e9seau, il n'y a aucun moyen d'atteindre un consensus (\u00e0 part par hasard).<\/p>\n<p>C'est pourquoi SCP exige que pour le vote f\u00e9d\u00e9ratif (et pour l'application des th\u00e9or\u00e8mes importants de l'article), le r\u00e9seau doit poss\u00e9der une propri\u00e9t\u00e9 appel\u00e9e <i>intersection de quorum.<\/i>. Dans un r\u00e9seau avec cette propri\u00e9t\u00e9, tout quorum que l'on peut construire se chevauche toujours au moins en un n\u0153ud. Pour d\u00e9terminer les sentiments pr\u00e9dominants du r\u00e9seau, c'est aussi efficace que d'avoir une majorit\u00e9. Cela signifie intuitivement que si un quorum s'accorde sur l'\u00e9nonc\u00e9 X, aucun autre quorum ne pourra jamais s'accorder sur quelque chose d'autre, car il inclura n\u00e9cessairement un n\u0153ud du premier quorum qui a d\u00e9j\u00e0 vot\u00e9 pour X.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>S'il existe un chevauchement de quorum dans le r\u00e9seau\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 alors tout deux quorums que vous pouvez construire\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 se chevaucheront toujours.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Bien s\u00fbr, des n\u0153uds qui se chevauchent peuvent s'av\u00e9rer \u00eatre des n\u0153uds byzantins ou d\u00e9fectueux d'autres mani\u00e8res. Dans ce cas, le chevauchement des quorums n'aide pas le r\u00e9seau \u00e0 parvenir \u00e0 un consensus. Pour cette raison, de nombreux r\u00e9sultats dans le document technique SCP reposent sur des hypoth\u00e8ses exprim\u00e9es telles que le fait qu'il reste un chevauchement de quorums dans le r\u00e9seau, <i>m\u00eame apr\u00e8s la suppression de n\u0153uds d\u00e9fectueux.<\/i>. Pour simplifier, laissons ces hypoth\u00e8ses <i>implicites<\/i> pour le reste de l'article).<\/p>\n<p>Il peut sembler peu raisonnable d'attendre qu'un r\u00e9seau de n\u0153uds ind\u00e9pendants puisse avoir un chevauchement de quorums fiable. Mais il y a deux raisons qui expliquent cela.<\/p>\n<p>La premi\u00e8re raison est l'existence m\u00eame de l'internet. L'internet est un exemple parfait d'un r\u00e9seau de n\u0153uds ind\u00e9pendants avec un chevauchement de quorums. La plupart des n\u0153uds sur internet ne sont connect\u00e9s qu'\u00e0 quelques autres n\u0153uds locaux, mais ces petits ensembles se chevauchent suffisamment pour qu'il soit possible d'acc\u00e9der \u00e0 chaque n\u0153ud \u00e0 partir de n'importe quel autre n\u0153ud par un chemin ou un autre.<\/p>\n<p>La deuxi\u00e8me raison est sp\u00e9cifique au r\u00e9seau de paiement Stellar (l'application la plus courante de SCP). Chaque actif dans le r\u00e9seau Stellar a un \u00e9metteur, et les recommandations Stellar exigent que chaque \u00e9metteur d\u00e9signe un ou plusieurs n\u0153uds dans le r\u00e9seau pour traiter les demandes de rachat. Il est dans votre int\u00e9r\u00eat d'inclure directement ou indirectement ces n\u0153uds dans les slices de quorum pour chaque actif qui vous int\u00e9resse. Les quorums pour tous les n\u0153uds concern\u00e9s par cet actif se chevaucheront donc au moins dans ces n\u0153uds de rachat. Les n\u0153uds int\u00e9ress\u00e9s par plusieurs actifs incluront dans leurs slices de quorum tous les n\u0153uds de rachat des \u00e9metteurs concern\u00e9s, et ils chercheront \u00e0 relier tous les actifs ensemble. De plus, tout actif qui n'est pas li\u00e9 de cette mani\u00e8re \u00e0 d'autres dans le r\u00e9seau, et <i>ne doit pas \u00eatre li\u00e9<\/i> \u2014 c'est ainsi con\u00e7u pour qu'il n'y ait pas de chevauchements de quorum dans ce r\u00e9seau (par exemple, les banques de la zone dollar souhaitent parfois \u00e9changer avec les banques de la zone euro et les banques de la zone peso, donc elles se trouvent dans le m\u00eame r\u00e9seau, mais aucune d'entre elles ne se pr\u00e9occupe du r\u00e9seau s\u00e9par\u00e9 d'enfants \u00e9changeant des cartes de baseball).<\/p>\n<p>Bien s\u00fbr, <i>l'attente<\/i> d'un chevauchement de quorums n'est pas <i>une garantie<\/i>. D'autres syst\u00e8mes d'accords byzantins, par leur complexit\u00e9, doivent en grande partie leur existence \u00e0 la garantie des quorums. L'innovation importante de SCP est qu'elle d\u00e9charge la responsabilit\u00e9 de la cr\u00e9ation de quorums de l'algorithme de consensus lui-m\u00eame et la place au niveau de l'application. Ainsi, bien que le vote f\u00e9d\u00e9ratif soit assez g\u00e9n\u00e9ral pour voter sur n'importe quel sujet, sa fiabilit\u00e9 d\u00e9pend en r\u00e9alit\u00e9 du sens plus large de ces valeurs. Certains types d'utilisation hypoth\u00e9tiques peuvent ne pas \u00eatre aussi pratiques pour cr\u00e9er des r\u00e9seaux bien reli\u00e9s que d'autres.<\/p>\n<h1>Vote, adoption et confirmation<\/h1>\n<p>\nAu cours d'un cycle de vote f\u00e9d\u00e9ratif, un n\u0153ud commence facultativement \u00e0 voter pour une certaine valeur V. Cela signifie la diffusion dans le r\u00e9seau d'un message : \u00ab Je suis le n\u0153ud N, mes slices de quorums Q, et je vote pour V \u00bb. Lorsque le n\u0153ud vote de cette mani\u00e8re, il promet qu'il n'a jamais vot\u00e9 contre V et ne le fera jamais.<\/p>\n<p>Dans les transmissions des n\u0153uds pair-\u00e0-pair, chaque n\u0153ud voit comment les autres votent. Une fois qu'un n\u0153ud a collect\u00e9 un nombre suffisant de ces messages, il peut suivre les coupes de quorums et essayer de trouver des quorums. S'il voit un quorum de pairs qui votent \u00e9galement pour V, il peut passer \u00e0 <i>l'acceptation<\/i> de V et transmettre ce nouveau message sur le r\u00e9seau : \u00ab Je suis le n\u0153ud N, mes coupes de quorum Q, et j'accepte V \u00bb. L'acceptation offre une garantie plus forte que le simple vote. Lorsqu'un n\u0153ud vote pour V, il ne peut jamais voter pour d'autres options. Mais si un n\u0153ud accepte V, aucun n\u0153ud du r\u00e9seau n'acceptera jamais une autre option (th\u00e9or\u00e8me 8 dans le document technique SCP le prouve).<\/p>\n<p>Bien s\u00fbr, il y a une forte probabilit\u00e9 qu'il n'y ait pas imm\u00e9diatement de quorum de n\u0153uds qui s'accordent sur V. D'autres n\u0153uds peuvent voter pour d'autres valeurs. Mais un n\u0153ud a un autre moyen de passer du simple vote \u00e0 l'acceptation. N peut accepter une autre valeur W, m\u00eame s'il n'a pas vot\u00e9 pour elle et m\u00eame s'il ne voit pas de quorum pour celle-ci. Pour qu'un changement de vote se produise, il suffit de voir <i>un ensemble bloquant<\/i> de n\u0153uds ayant accept\u00e9 W. Un ensemble bloquant est constitu\u00e9 d'un n\u0153ud de chacune des coupes de quorums de N. Comme son nom l'indique, il est capable de <i>bloquer<\/i> toute autre valeur. Si tous les n\u0153uds de cet ensemble acceptent W, alors (selon le th\u00e9or\u00e8me 8), il ne sera jamais possible de former un quorum acceptant une autre valeur, et donc il est \u00e9galement s\u00fbr pour N d'accepter W.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le n\u0153ud N avec trois coupes de quorums.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F est un ensemble bloquant pour N : il comprend un n\u0153ud de chacune des coupes de N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E est \u00e9galement un ensemble bloquant pour N, car E appara\u00eet dans deux coupes de N.<\/i><\/p>\n<p>Mais un ensemble bloquant n'est pas un quorum. Ce serait trop facile de tromper le n\u0153ud N pour qu'il accepte la valeur d\u00e9sir\u00e9e, si l'on parvenait \u00e0 pirater un seul n\u0153ud dans chacune des coupes de N. Par cons\u00e9quent, accepter une valeur n'est pas encore la fin du vote. Au lieu de cela, N doit confirmer la valeur, c'est-\u00e0-dire voir un quorum de n\u0153uds l'acceptant. S'il va aussi loin, alors, comme le prouve le document technique SCP (dans le th\u00e9or\u00e8me 11), le reste du r\u00e9seau finira \u00e9galement par confirmer la m\u00eame valeur, donc N terminera le vote f\u00e9d\u00e9ratif avec une valeur sp\u00e9cifique comme r\u00e9sultat.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vote f\u00e9d\u00e9ratif.<\/i><\/p>\n<p>Le processus de vote, d'adoption et de confirmation constitue un tour complet du vote f\u00e9d\u00e9ratif. Le protocole de consensus Stellar regroupe de nombreux de ces tours pour cr\u00e9er un syst\u00e8me de consensus complet.<\/p>\n<h1>Protocole de consensus Stellar<\/h1>\n<p>\nLes deux propri\u00e9t\u00e9s les plus importantes d'un syst\u00e8me de consensus sont <i>s\u00e9curit\u00e9<\/i> et <i>robustesse<\/i>. Un algorithme de consensus est \"s\u00e9curis\u00e9\" s'il ne peut jamais donner des r\u00e9sultats diff\u00e9rents \u00e0 diff\u00e9rents participants (l'historique de Bob ne contredira jamais celui de Carol). La \"robustesse\" signifie que l'algorithme produira toujours un r\u00e9sultat, c'est-\u00e0-dire qu'il ne sera jamais bloqu\u00e9.<\/p>\n<p>La proc\u00e9dure de vote f\u00e9d\u00e9ratif d\u00e9crite <i>est s\u00e9curis\u00e9e<\/i> dans le sens o\u00f9 si un n\u0153ud confirme la valeur V, aucun autre n\u0153ud ne confirmera une autre valeur. Mais \u00ab ne pas confirmer une autre valeur \u00bb ne signifie pas qu'il confirmera n\u00e9cessairement quelque chose. Les participants peuvent voter pour un si grand nombre de valeurs diff\u00e9rentes qu'aucune d'entre elles n'atteindra le seuil d'adoption. Cela signifie qu'il n'y a pas de <i>robustesse<\/i>.<\/p>\n<p>Le protocole de consensus Stellar utilise le vote f\u00e9d\u00e9ratif de mani\u00e8re \u00e0 garantir \u00e0 la fois s\u00e9curit\u00e9 et robustesse. (Les garanties de s\u00e9curit\u00e9 et de robustesse du SCP ont une limite th\u00e9orique. La construction choisit une tr\u00e8s forte garantie de s\u00e9curit\u00e9, sacrifiant une l\u00e9g\u00e8re diminution de la robustesse, mais puisqu'il y a un temps suffisant, le consensus sera probablement atteint). En r\u00e9sum\u00e9, l'id\u00e9e est de mener plusieurs votes f\u00e9d\u00e9ratifs sur diff\u00e9rentes valeurs jusqu'\u00e0 ce qu'une d'elles passe compl\u00e8tement par toutes les phases de vote du SCP, d\u00e9crites ci-dessous.<\/p>\n<p>Les valeurs sur lesquelles le SCP vise \u00e0 obtenir un consensus peuvent \u00eatre l'historique des transactions, une commande de d\u00e9jeuner ou autre chose, mais il est important de noter que ce ne sont pas les valeurs qui sont adopt\u00e9es ou confirm\u00e9es. Au lieu de cela, le vote f\u00e9d\u00e9ratif se d\u00e9roule sur <i>des d\u00e9clarations concernant ces valeurs<\/i>.<\/p>\n<p>Les premiers tours de vote f\u00e9d\u00e9ratif se d\u00e9roulent \u00e0 <i>l'\u00e9tape de nomination<\/i> (phase de nomination), sur un ensemble de d\u00e9clarations du type \u00ab Je nomme V \u00bb, potentiellement pour de nombreuses valeurs diff\u00e9rentes de V. L'objectif de la nomination est de trouver une ou plusieurs d\u00e9clarations qui passeront par l'adoption et la confirmation.<\/p>\n<p>Apr\u00e8s avoir trouv\u00e9 des candidats v\u00e9rifiables, le SCP passe \u00e0 l'\u00e9tape du vote, o\u00f9 l'objectif est de trouver une certaine <i>bulletin<\/i> (c'est-\u00e0-dire un conteneur pour la valeur propos\u00e9e) et un quorum qui peut d\u00e9clarer <i>commit<\/i> pour lui (commit). Si le quorum valide le bulletin, sa valeur est accept\u00e9e comme consensus. Mais avant qu'un n\u0153ud puisse voter pour le commit du bulletin, il doit d'abord confirmer <i>l'annulation<\/i> de tous les bulletins avec une valeur de compteur inf\u00e9rieure. Ces \u00e9tapes \u2014 l'annulation des bulletins, pour trouver celui pour lequel un commit peut \u00eatre confirm\u00e9 \u2014 comprennent plusieurs tours de vote f\u00e9d\u00e9ratif sur plusieurs propositions de bulletins.<\/p>\n<p>Les sections suivantes d\u00e9crivent plus en d\u00e9tail la nomination et le vote.<\/p>\n<h1>Nommer<\/h1>\n<p>\nAu d\u00e9but de l'\u00e9tape de nomination, chaque n\u0153ud peut spontan\u00e9ment choisir une valeur V et voter pour l'affirmation \u00ab Je nomme V \u00bb. L'objectif \u00e0 ce stade est de confirmer la nomination d'une certaine valeur par le biais du vote f\u00e9d\u00e9ratif.<\/p>\n<p>Il est possible qu'un nombre suffisant de n\u0153uds vote pour des affirmations suffisamment vari\u00e9es, et aucune nomination ne puisse atteindre le seuil d'acceptation. Par cons\u00e9quent, en plus de diffuser leurs propres votes de nomination, les n\u0153uds \u00ab refl\u00e8tent \u00bb les nominations de leurs pairs. Le reflet (echo) signifie que si un n\u0153ud vote pour la nomination V, mais voit un message d'un voisin votant pour la nomination W, alors il votera d\u00e9sormais pour la nomination \u00e0 la fois de V et de W. (Tous les votes des pairs ne sont pas refl\u00e9t\u00e9s pendant la nomination, car cela peut entra\u00eener une explosion de diff\u00e9rents nomin\u00e9s. Le SCP inclut un m\u00e9canisme r\u00e9gulant ces votes. En r\u00e9sum\u00e9, il existe une formule pour d\u00e9terminer le \u00ab prioritaire \u00bb d'un pair du point de vue d'un n\u0153ud, et seules les voix des n\u0153uds \u00e0 haute priorit\u00e9 sont refl\u00e9t\u00e9es. Plus la nomination dure longtemps, plus le seuil est bas, donc un n\u0153ud \u00e9largit l'ensemble de pairs dont il refl\u00e9tera les votes. La formule de priorit\u00e9 inclut comme une des entr\u00e9es le num\u00e9ro de slot, donc un pair de haute priorit\u00e9 pour un slot peut \u00eatre de basse priorit\u00e9 pour un autre, et vice versa).<\/p>\n<p>Conceptuellement, l'avancement de \u00e0 la fois V et W repr\u00e9sente des voix f\u00e9d\u00e9ratives distinctes, chacune pouvant ind\u00e9pendamment atteindre une adoption ou une confirmation. En pratique, les messages du protocole SCP regroupent ces voix s\u00e9par\u00e9es.<\/p>\n<p>Bien que voter pour l'avancement de V constitue une promesse de ne jamais voter contre cet avancement, au niveau de l'application \u2013 dans ce cas SCP \u2013 il est d\u00e9fini ce que signifie \u00ab contre \u00bb. SCP ne voit pas d'affirmation qui contredit le vote \u00ab Je propose X \u00bb, c'est-\u00e0-dire qu'il n'y a pas de message \u00ab Je suis contre la proposition X \u00bb, donc le n\u0153ud peut voter pour la proposition de n'importe quelles valeurs. Beaucoup de ces nominations peuvent ne mener \u00e0 rien, mais finalement, le n\u0153ud pourra accepter ou confirmer une ou plusieurs valeurs. Une fois le nomin\u00e9 confirm\u00e9, il devient <i>un candidat<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>La proposition de SCP utilisant le vote f\u00e9d\u00e9ratif. Il peut y avoir plusieurs valeurs \u201cB\u201d propos\u00e9es par des n\u0153uds de m\u00eame rang et \u00ab r\u00e9fl\u00e9chies \u00bb par un n\u0153ud.<\/i> <\/p>\n<p>La proposition de candidats peut mener \u00e0 l'apparition de plusieurs candidats confirmables. Par cons\u00e9quent, SCP exige que le niveau d'application fournisse une m\u00e9thode pour combiner les candidats en un <i>composite<\/i> (composite). La m\u00e9thode de combinaison peut \u00eatre n'importe laquelle. L'essentiel est que si cette m\u00e9thode est d\u00e9terministe, alors chaque n\u0153ud combinera les m\u00eames candidats. Dans un syst\u00e8me de vote pour le d\u00e9jeuner, la \u00ab combinaison \u00bb peut simplement signifier le rejet d'un des deux candidats. (Mais de mani\u00e8re d\u00e9terministe : chaque n\u0153ud doit choisir la m\u00eame valeur \u00e0 rejeter. Par exemple, une s\u00e9lection ant\u00e9rieure par ordre alphab\u00e9tique). Dans le r\u00e9seau de paiement Stellar, o\u00f9 se d\u00e9roule le vote sur l'historique des transactions, la combinaison de deux nomin\u00e9s propos\u00e9s implique la combinaison des transactions qu'ils contiennent et des derni\u00e8res de leurs deux horodatages.<\/p>\n<p>La description technique de SCP prouve (th\u00e9or\u00e8me 12) qu'\u00e0 la fin de la phase de proposition, le r\u00e9seau converge finalement vers un seul composite. Mais il y a un probl\u00e8me : le vote f\u00e9d\u00e9ratif est un protocole asynchrone (comme SCP). En d'autres termes, les n\u0153uds ne sont pas coordonn\u00e9s dans le temps, mais seulement par les messages qu'ils envoient. Du point de vue d'un n\u0153ud, il n'est pas clair quand <i>la prise en charge a pris fin<\/i> phase de proposition. Et bien que tous les n\u0153uds finissent par arriver au m\u00eame composite, ils peuvent choisir diff\u00e9rents chemins sur cette route, cr\u00e9ant en cours de route diff\u00e9rents candidats composites, sans jamais pouvoir dire lequel d'entre eux est final.<\/p>\n<p>Mais c'est normal. La proposition n'est qu'une pr\u00e9paration. L'essentiel est de limiter le nombre de candidats pour atteindre un consensus, qui se produit lors du processus <i>de vote<\/i> (balloting).<\/p>\n<h1>Le vote<\/h1>\n<p>\nUn bulletin est une paire , o\u00f9 counter est un entier qui commence \u00e0 1, et value est un candidat de l'\u00e9tape de proposition. Cela peut \u00eatre le propre candidat du n\u0153ud ou un candidat d'un n\u0153ud voisin, accept\u00e9 par ce n\u0153ud. En gros, lors du vote, plusieurs tentatives sont r\u00e9alis\u00e9es pour faire parvenir le r\u00e9seau \u00e0 un consensus sur un certain candidat dans un certain bulletin via de multiples votes f\u00e9d\u00e9ratifs sur des affirmations concernant les bulletins. Les compteurs dans les bulletins suivent les tentatives r\u00e9alis\u00e9es, et les bulletins avec des compteurs plus \u00e9lev\u00e9s ont la priorit\u00e9 sur ceux avec des compteurs plus bas. Si le bulletin  est bloqu\u00e9, un nouveau vote commence, cette fois sur le bulletin .<\/p>\n<p>Il est important de distinguer <i>les valeurs<\/i> (par exemple, quel devrait \u00eatre le choix de d\u00e9jeuner : pizza ou salades), <i>les bulletins<\/i> (paire counter-value) et <i>d\u00e9clarations<\/i> sur les bulletins. Un tour SCP comprend plusieurs tours de vote f\u00e9d\u00e9ratif, notamment sur les affirmations suivantes :<\/p>\n<ul>\n<li>\u00ab Je suis pr\u00eat \u00e0 engager le bulletin B \u00bb et\n<\/li>\n<li>\u00ab J'annonce l'engagement du bulletin B \u00bb<\/li>\n<\/ul>\n<p>\nDu point de vue de ce n\u0153ud, le consensus est atteint lorsque celui-ci trouve le bulletin B pour lequel il peut confirmer (c'est-\u00e0-dire trouver un quorum d'acceptation) l'affirmation \u00ab J'annonce l'engagement du bulletin B \u00bb. \u00c0 partir de ce moment, il est s\u00fbr d'agir selon la valeur indiqu\u00e9e dans B - par exemple, passer cette commande de d\u00e9jeuner. Cela s'appelle <i>l'externalisation<\/i> de la valeur. Une fois l'engagement du bulletin confirm\u00e9, le n\u0153ud peut \u00eatre certain que tout autre n\u0153ud a r\u00e9alis\u00e9 l'externalisation de cette m\u00eame valeur ou le fera obligatoirement \u00e0 l'avenir.<\/p>\n<p>Bien que, conceptuellement, de nombreux votes f\u00e9d\u00e9ratifs soient r\u00e9alis\u00e9s sur des d\u00e9clarations concernant divers bulletins, ils \u00e9changent un nombre relativement limit\u00e9 de messages, car chaque message encapsule un certain nombre de bulletins. Un message, par cons\u00e9quent, promeut l'\u00e9tat de nombreux votes f\u00e9d\u00e9ratifs simultan\u00e9ment, par exemple : \u00ab J'accepte l'engagement des bulletins dans la plage de  \u00e0  \u00bb.<\/p>\n<p>Que signifient les termes \u00ab pr\u00e9par\u00e9 \u00bb (prepared) et \u00ab engagement \u00bb (commit) ?<\/p>\n<p>Un n\u0153ud vote pour l'engagement d'un bulletin lorsqu'il est convaincu que d'autres n\u0153uds ne proc\u00e9deront pas \u00e0 l'engagement de bulletins avec d'autres valeurs. \u00catre convaincu de cela est l'objectif de la pr\u00e9paration de la d\u00e9claration. Un vote disant : \u00ab Je suis pr\u00eat \u00e0 m'engager sur le bulletin B \u00bb est une promesse de ne jamais proc\u00e9der \u00e0 l'engagement de bulletins inf\u00e9rieurs \u00e0 B, c'est-\u00e0-dire avec un compteur plus bas (SCP exige que les valeurs dans les bulletins suivent un ordre sp\u00e9cifique. Donc, le bulletin  est inf\u00e9rieur \u00e0  si N1&lt;N2, et aussi si N1=N2 et V1&lt;V2). Ces bulletins inf\u00e9rieurs sont \u00ab annul\u00e9s \u00bb (aborted) lors du vote pr\u00e9paratoire, tandis que B est consid\u00e9r\u00e9 comme \u00ab pr\u00e9par\u00e9 \u00bb.<\/p>\n<p>Pourquoi \u00ab Je suis pr\u00eat \u00e0 m'engager sur le bulletin B \u00bb signifie-t-il \u00ab Je promets de ne jamais permettre l'engagement de bulletins inf\u00e9rieurs \u00e0 B \u00bb ? Parce que SCP d\u00e9finit abort comme l'oppos\u00e9 de commit. Le vote pour pr\u00e9parer un bulletin implique \u00e9galement un vote pour annuler certains autres bulletins, et, comme nous l'avons discut\u00e9 pr\u00e9c\u00e9demment, voter pour un seul \u00e9l\u00e9ment est une promesse de ne jamais voter contre celui-ci.<\/p>\n<p>Avant de transmettre un engagement, un n\u0153ud doit d'abord trouver un bulletin qu'il peut confirmer comme pr\u00e9par\u00e9. En d'autres termes, il proc\u00e8de \u00e0 un vote f\u00e9d\u00e9ratif sur le th\u00e8me \u00ab Je suis pr\u00eat \u00e0 m'engager sur le bulletin B \u00bb, potentiellement pour de nombreux bulletins diff\u00e9rents, jusqu'\u00e0 ce qu'il trouve celui qui accepte le quorum.<\/p>\n<p>D'o\u00f9 viennent les bulletins pour la pr\u00e9paration du vote ? D'abord, le n\u0153ud diffuse la pr\u00e9paration du vote pour , o\u00f9 C est le candidat composite, produit lors de l'\u00e9tape de pr\u00e9sentation. Cependant, m\u00eame apr\u00e8s le d\u00e9but de la pr\u00e9paration du vote, la pr\u00e9sentation peut entra\u00eener l'apparition de candidats suppl\u00e9mentaires qui deviendront de nouveaux bulletins. Par ailleurs, les pairs peuvent avoir diff\u00e9rents candidats et peuvent former un ensemble bloquant qui accepte \u00ab Je suis pr\u00eat \u00e0 valider le bulletin B2 \u00bb, ce qui convaincra \u00e9galement le n\u0153ud de l'accepter. Enfin, il existe un m\u00e9canisme de temporisation qui g\u00e9n\u00e8re de nouveaux cycles de vote f\u00e9d\u00e9ratif sur de nouveaux bulletins avec des compteurs plus \u00e9lev\u00e9s, si les bulletins actuels sont bloqu\u00e9s.<\/p>\n<p>D\u00e8s qu'un n\u0153ud trouve un bulletin B qui peut \u00eatre confirm\u00e9 comme pr\u00e9par\u00e9, il diffuse un nouveau message \u00ab Valider le bulletin B \u00bb. Ce vote indique aux pairs que le n\u0153ud ne renoncera jamais \u00e0 B. En r\u00e9alit\u00e9, si B repr\u00e9sente un bulletin , alors \u00ab Valider le bulletin  \u00bb signifie un accord absolu pour voter pour la validation de chaque bulletin de  \u00e0 . Cette signification suppl\u00e9mentaire aide d'autres n\u0153uds \u00e0 rattraper un pair avec une validation, s'ils sont encore \u00e0 des \u00e9tapes ant\u00e9rieures du protocole.<\/p>\n<p>\u00c0 ce stade, il convient de souligner \u00e0 nouveau qu'il s'agit de protocoles asynchrones. Ce n'est pas parce qu'un n\u0153ud envoie des votes pour une validation que ses pairs le font \u00e9galement. Certains d'entre eux peuvent encore voter sur des d\u00e9clarations pour la pr\u00e9paration du vote, d'autres ont peut-\u00eatre d\u00e9j\u00e0 externalis\u00e9 la valeur. SCP explique comment un n\u0153ud doit traiter chaque type de message pair \u00e0 pair ind\u00e9pendamment de sa phase.<\/p>\n<p>Si le message \u00ab Je d\u00e9clare un engagement &lt;N,C&gt; \u00bb ne peut pas \u00eatre accept\u00e9 ou confirm\u00e9, il y a une probabilit\u00e9 que le message &lt;N+1,C&gt; ou &lt;N+2,C&gt; soit accept\u00e9 ou confirm\u00e9 \u2014 ou, en tout cas, n'importe quel bulletin ayant la valeur C, et non toute autre valeur, puisque le noeud a d\u00e9j\u00e0 promis de ne jamais annuler &lt;N,C&gt;. Au moment o\u00f9 le noeud diffuse les voix pour l'engagement, ce sera C ou rien, selon la profondeur du consensus. Cependant, cela ne suffit pas encore au noeud pour externaliser C. Certains envahisseurs byzantins (composant moins que le quorum, bas\u00e9 sur nos hypoth\u00e8ses de s\u00e9curit\u00e9) peuvent mentir au noeud. L'acceptation, puis la confirmation d'un certain bulletin (ou d'une plage de bulletins) donne enfin au noeud la certitude d'externaliser C.<\/p>\n<p><img decoding=\"async\" alt=\"Comprendre le protocole de consensus Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Le vote SCP par le vote f\u00e9d\u00e9ratif. Non montr\u00e9 : \u00e0 tout moment, un minuteur peut se d\u00e9clencher, augmentant le compteur dans le bulletin (et \u00e9ventuellement produisant un nouveau composite des candidats suppl\u00e9mentaires avanc\u00e9s).<\/i> <\/p>\n<p>Et c'est tout ! Une fois que le r\u00e9seau est parvenu \u00e0 un consensus, il est pr\u00eat \u00e0 le faire encore et encore. Dans le r\u00e9seau de paiement Stellar, cela se produit environ toutes les 5 secondes : un exploit qui n\u00e9cessite \u00e0 la fois s\u00e9curit\u00e9 et r\u00e9silience, garanties par SCP.<\/p>\n<p>SCP peut y parvenir en s'appuyant sur plusieurs tours de vote f\u00e9d\u00e9ratif. Le vote f\u00e9d\u00e9ratif est rendu possible gr\u00e2ce au concept de coupes de quorum : ensembles de n\u0153uds de m\u00eame niveau auxquels chaque n\u0153ud a d\u00e9cid\u00e9 de faire confiance comme partie de son quorum (subjectif). Cette configuration signifie qu'on peut parvenir \u00e0 un consensus m\u00eame dans un r\u00e9seau \u00e0 adh\u00e9sion ouverte et des tromperies byzantines.<\/p>\n<h1>Lectures compl\u00e9mentaires<\/h1>\n<p><\/p>\n<ul>\n<li>Le document technique original SCP peut \u00eatre trouv\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">ici<\/a><\/noindex>, et <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">ici<\/a><\/noindex> projet de sp\u00e9cifications pour sa mise en \u0153uvre.\n<\/li>\n<li>L'auteur original du protocole SCP, David Mazieres, l'explique de mani\u00e8re simplifi\u00e9e (mais toujours technique) <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">ici<\/a><\/noindex>.\n<\/li>\n<li>Vous avez peut-\u00eatre \u00e9t\u00e9 surpris de ne pas trouver dans cet article les termes \u00ab minage \u00bb ou \u00ab preuve de travail \u00bb. SCP n'utilise pas ces m\u00e9thodes, mais d'autres algorithmes de consensus le font. Zane Wisserpoon a \u00e9crit un <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">aper\u00e7u accessible des algorithmes de consensus<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Une description \u00e9tape par \u00e9tape<\/a><\/noindex> d'un r\u00e9seau simple atteignant un consensus en un tour complet de SCP.\n<\/li>\n<li>Pour les lecteurs int\u00e9ress\u00e9s par les mises en \u0153uvre SCP : voir <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">le code C++<\/a><\/noindex>, utilis\u00e9 par le r\u00e9seau de paiement Stellar, ou <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">le code Go<\/a><\/noindex>, que j'ai \u00e9crit pour une meilleure compr\u00e9hension du SCP.<\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0414\u044d\u0432\u0438\u0434\u0430 \u041c\u0430\u0437\u044c\u0435\u0440\u0430 \u0432 2015 \u0433\u043e\u0434\u0443. \u042d\u0442\u043e \u00ab\u0444\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0437\u0430\u043d\u0442\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0442\u044f\u043c \u0431\u0435\u0437 \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041f\u043b\u0430\u0442\u0451\u0436\u043d\u0430\u044f \u0441\u0435\u0442\u044c Stellar \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Stellar Consensus Protocol (SCP) \u0434\u043b\u044f \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0438\u0434\u044f\u0442 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438. \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0442\u0440\u0443\u0434\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-30047","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comprendre le protocole de consensus Stellar | ProHoster","description":"Le protocole de consensus Stellar est d\u00e9crit pour la premi\u00e8re fois dans.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster","og:description":"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.","og:url":"https:\/\/prohoster.info\/fr\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:33:25+00:00","article:modified_time":"2019-10-31T18:33:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30047","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 23:34:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:43:15","updated":"2026-01-20 23:34:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}