{"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\/nl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Laten we de Stellar-consensusprotocol bekijken","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet Stellar-consensusprotocol werd voor het eerst beschreven in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">een wetenschappelijk artikel<\/a><\/noindex> David Mazi\u00e8res in 2015. Dit is een 'federatief systeem van Byzantijnse overeenstemming', dat gedecentraliseerde computernetwerken zonder leiders in staat stelt om effectief consensus te bereiken over een beslissing. Het betalingsnetwerk Stellar maakt gebruik van het Stellar Consensus Protocol (SCP) om een consistente geschiedenis van transacties bij te houden die door alle deelnemers wordt gezien.<\/p>\n<p>Het wordt vaak gedacht dat consensusprotocollen moeilijk te begrijpen zijn. SCP is eenvoudiger dan de meeste, maar heeft nog steeds deze reputatie \u2014 deels door de misvatting dat 'federatieve stemmen', waar de eerste helft van het wetenschappelijk artikel aan gewijd is, SCP is. Maar dat is niet zo! Dit is slechts een belangrijke bouwsteen die in de tweede helft van het artikel wordt gebruikt om <i>het werkelijke<\/i> Stellar-consensusprotocol te cre\u00ebren.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIn dit artikel zullen we kort uitleggen wat een 'overeenkomstensysteem' is, wat het 'Byzantijns' maakt en waarom een Byzantijns systeem 'federatief' moet zijn. Vervolgens zullen we de federatieve stemprocedure uitleggen die in het SCP-artikel is beschreven, en tenslotte het SCP-protocol zelf uitleggen.<\/p>\n<h1>Overeenkomstensystemen<\/h1>\n<p>\nEen overeenkomstensysteem stelt een groep deelnemers in staat om consensus te bereiken over een bepaald onderwerp, bijvoorbeeld wat ze moeten bestellen voor de lunch.<\/p>\n<p>Bij Interstellar hebben we ons eigen systeem voor lunchovereenkomsten ge\u00efmplementeerd: we bestellen wat onze operationele manager John zegt. Dit is een eenvoudig en effectief systeem van overeenstemming. We vertrouwen allemaal op John en geloven dat hij elke dag iets interessants en voedzaams zal vinden.<\/p>\n<p>Maar wat als John ons vertrouwen misbruikt? Hij kan eenzijdig beslissen dat we allemaal veganisten moeten worden. Na een week of twee, zouden we waarschijnlijk hem afzetten en de macht aan Elizabeth overdragen. Maar stel dat zij van avocado's met ansjovis houdt en denkt dat iedereen dat zou moeten zijn. Macht corrumpeert. Daarom is het beter een meer democratische methode te vinden: een manier om ervoor te zorgen dat verschillende voorkeuren worden meegenomen, terwijl er tijdig en eenduidig resultaat wordt gegarandeerd, zodat niet niemand lunch besteld of vijf mensen verschillende bestellingen plaatsen, of de discussie tot de avond doorgaat.<\/p>\n<p>Het lijkt eenvoudig: een stemming organiseren! Maar dat is een misleidende indruk. Wie verzamelt de stembiljetten en brengt de resultaten op de hoogte? En waarom zouden de anderen moeten geloven wat hij zegt? Misschien kunnen we <i>eerst<\/i> stemmen op een leider die we vertrouwen om de stemmen te tellen \u2014 maar wie leidt deze <i>de eerste<\/i> stemming? Wat als we het niet eens kunnen worden over een leider? Of als we het eens worden, maar deze leider vast komt te zitten in een bijeenkomst of ziek wordt?<\/p>\n<p>Soortgelijke problemen doen zich voor in gedistribueerde computernetwerken. Alle deelnemers of knooppunten moeten tot een gezamenlijke beslissing komen, bijvoorbeeld wie er verantwoordelijk is voor het bijwerken van een gedeeld bestand of het ophalen van een taak uit de verwerkingswachtrij. In een cryptocurrency-netwerk moeten knooppunten herhaaldelijk kiezen hoe het volledige verhaal eruitziet uit verschillende mogelijke versies die soms conflicteren. Deze netwerkconsensus garandeert de ontvanger dat een munt (a) geldig is (niet vervalst) en (b) nog niet elders is besteed. Het garandeert ook dat hij de munten in de toekomst kan besteden, omdat de nieuwe ontvanger dezelfde garanties heeft om dezelfde redenen.<\/p>\n<p>Elk consensus systeem in een gedistribueerd computersysteem moet fouttolerant zijn: het moet consistente resultaten opleveren, ongeacht fouten, zoals trage verbindingen, niet reagerende knooppunten en een verkeerde volgorde van berichten. <i>Een Byzantijnse<\/i> consensus systeem is extra resistent tegen 'Byzantijnse' fouten: knooppunten die verkeerde informatie geven, hetzij door een fout of in een opzettelijke poging om het systeem te ondermijnen of om een voordeel te verkrijgen. 'Byzantijnse' fouttolerantie \u2014 het vermogen om te vertrouwen op een groepsbeslissing, zelfs wanneer sommige leden van de groep kunnen liegen of zich op een andere manier niet aan de besluitvormingsregels houden \u2014 ontleent zijn naam aan <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\">de parabel van de generaals van het Byzantijnse rijk<\/a><\/noindex>, die probeerden een aanval te co\u00f6rdineren. <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\">Een goede beschrijving<\/a><\/noindex> is van Anthony Stevens.<\/p>\n<p>Laten we de eigenaar van de cryptocurrency, Alice, bekijken, die moet kiezen tussen het kopen van heerlijk ijs bij Bob en het betalen van haar schuld aan Carol. Misschien wil Alice beiden tegelijkertijd betalen, door frauduleus dezelfde munt twee keer uit te geven. Hiervoor moet ze de computer van Bob overtuigen dat de munt nooit aan Carol is betaald, en de computer van Carol overtuigen dat de munt nooit aan Bob is betaald. Een Byzantijns akkoordensysteem maakt dit vrijwel onmogelijk, met behulp van een meerderheidsregel die wordt genoemd <i>een quorum<\/i>. Een knooppunt in zo'n netwerk weigert over te stappen naar een bepaalde versie van de geschiedenis totdat het ziet dat een voldoende aantal gelijke knooppunten \u2013 het quorum \u2013 akkoord gaat met die overstap. Zodra dit gebeurt, vormen ze een voldoende grote kiesblok om de overige knooppunten in het netwerk te dwingen in te stemmen met hun beslissing. Alice kan sommige knooppunten dwingen om te liegen namens haar, maar als het netwerk groot genoeg is, zal haar poging worden onderdrukt door de stemmen van eerlijke knooppunten.<\/p>\n<p>Hoeveel knooppunten zijn er nodig voor een quorum? Minimaal de meerderheid, en specifieker, een gekwalificeerde meerderheid om om te gaan met fouten en fraude. Maar om de meerderheid te berekenen, moet je het totale aantal deelnemers weten. In het kantoor van Interstellar of bij lokale verkiezingen zijn deze cijfers gemakkelijk te achterhalen. Maar als jouw groep een vaag gedefinieerd netwerk is, waarin knooppunten vrij in- en uit kunnen treden zonder afstemming met een centraal punt, dan is er een <i>federatief<\/i> Byzantijns akkoordensysteem nodig, dat in staat is om quorums niet uit een vooraf bepaalde lijst van knooppunten, maar dynamisch, uit een voortdurend veranderend en onvermijdelijk onvolledig momentopname van knooppunten op een bepaald moment te bepalen.<\/p>\n<p>Het kan onmogelijk lijken om een quorum te cre\u00ebren vanuit het perspectief van \u00e9\u00e9n knooppunt in een uitgebreid netwerk, maar het is mogelijk. Zo'n quorum kan zelfs de resultaten van gedecentraliseerde stemmen garanderen. Het technische document SCP toont aan hoe dit kan worden gedaan met behulp van een procedure die <i>federatieve stemprocedure<\/i>.<\/p>\n<h1>Voor de ongeduldigen<\/h1>\n<p>\nDe rest van het artikel beschrijft federatieve stemprocedures en het Stellar-consensusprotocol in meer detail. Als je niet ge\u00efnteresseerd bent in de details, hier is een algemeen overzicht van het proces.<\/p>\n<ol>\n<li>Knooppunten voeren federale stemrondes uit voor de 'genomineerden'. Een federale stemronde betekent:\n<ul>\n<li>Een knooppunt stemt voor een bepaalde verklaring, bijvoorbeeld 'Ik stel waarde V voor';\n<\/li>\n<li>Een knooppunt luistert naar de stemmen van peers totdat het een vindt die kan 'accepteren';\n<\/li>\n<li>Een knooppunt zoekt naar een 'quorum' voor deze verklaring. Een quorum 'bevestigt' de genomineerde.<\/li>\n<\/ul>\n<\/li>\n<li>Zodra een knooppunt \u00e9\u00e9n of meerdere genomineerden kan bevestigen, probeert het een 'stemlijst' voor te bereiden door meerdere federale stemrondes.\n<\/li>\n<li>Zodra een knooppunt in staat is om de gereedheid van de stemlijst te verifi\u00ebren, probeert het deze te committeren met nog meer federale stemrondes.\n<\/li>\n<li>Zodra een knooppunt de commit van de stemlijst kan bevestigen, kan het de waarde van deze stemlijst 'externaliseren' als resultaat van consensus.<\/li>\n<\/ol>\n<p>\nDeze stappen omvatten meerdere federale stemrondes die samen \u00e9\u00e9n SCP-ronde vormen. Laten we dieper ingaan op wat er bij elke stap gebeurt.<\/p>\n<h1>Federale stemming<\/h1>\n<p>\nFederale stemming is de procedure om te bepalen of het netwerk het voorstel kan goedkeuren. In de stemronde moet elk knooppunt een van de eventueel vele mogelijke waarden kiezen. Het kan dit niet doen totdat het zeker weet dat andere knooppunten in het netwerk niet een ander resultaat kiezen. Om dit zeker te weten, wisselen knooppunten een overvloed aan berichten uit en heen, zodat elk <i>bevestigde<\/i>, dat <i>quorum<\/i> knooppunt <i>hetzelfde aanneemt<\/i> . De rest van deze sectie legt de termen in deze verklaring uit en hoe de gehele procedure verloopt. <i>oplossing<\/i>Quorums en quorum slices<\/p>\n<h1>Laten we beginnen met de definitie van quorum. Zoals we hierboven hebben besproken, is het in een gedecentraliseerd netwerk met dynamisch lidmaatschap onmogelijk om van tevoren te weten hoeveel knooppunten er zijn en dus hoeveel er nodig zijn voor een meerderheid. Federale stemming lost dit probleem op door een nieuw idee voor te stellen,<\/h1>\n<p>\nquorum slice <i>(quorum slice): een kleine set gelijkwaardige knooppunten die een knooppunt vertrouwt om informatie over de stemstatus naar de rest van het netwerk te verzenden. Elk knooppunt bepaalt zijn eigen quorum slice (met welke het feitelijk lid wordt).<\/i> (quorum slice): een kleine set van gelijkwaardige knooppunten waarmee een knooppunt vertrouwt om informatie over de stemstatus in de rest van het netwerk door te geven. Elk knooppunt bepaalt zijn eigen quorum slice (waarvan het lid geworden is door feitelijke deelname).<\/p>\n<p>De vorming van een quorum begint met de snede van het quorum. Voor elk knooppunt worden de knooppunten van zijn snede toegevoegd. Vervolgens worden de leden van de sneden toegevoegd. <i>van deze knooppunten<\/i> enzovoorts. Naarmate het proces vordert, komen er steeds meer knooppunten in zicht die niet kunnen worden toegevoegd omdat ze al in de snede zijn opgenomen. Wanneer er geen nieuwe knooppunten meer zijn om toe te voegen, stopt het proces: we hebben een quorum gevormd via 'transitieve afsluiting' van de snede van het startknooppunt.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Om een quorum vanuit een gegeven knooppunt te vinden\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... voegen we de leden van zijn snede toe\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... en daarna voegen we de leden van de sneden van deze knooppunten toe.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>We gaan door totdat er geen knooppunten meer zijn om toe te voegen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Er zijn geen knooppunten meer om toe te voegen. Dit is het quorum.<\/i><\/p>\n<p>In feite kan elk knooppunt tot meer dan \u00e9\u00e9n snede behoren. Om een quorum te vormen, kies je slechts \u00e9\u00e9n van de sneden en voeg je de leden toe; kies vervolgens een snede voor elk van de leden en voeg leden toe <i>dit<\/i> van de snede, enzovoorts. Dit betekent dat elk knooppunt lid is van een aantal mogelijke quorums.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kies slechts \u00e9\u00e9n snede van het quorum bij elke stap.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Een mogelijk quorum. Of een alternatieve optie\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... kiezen we andere sneden\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(wanneer mogelijk)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... cre\u00ebert een ander quorum.<\/i><\/p>\n<p>Hoe weet een knooppunt in welke sneden andere knooppunten zich bevinden? Net als andere informatie over andere knooppunten: uit de uitzendingen die elk knooppunt naar het netwerk zendt wanneer zijn stemstatus verandert. Elke uitzending bevat informatie over de sneden van het verzendende knooppunt. In het technische document SCP wordt het communicatieproces niet gespecificeerd. Implementaties gebruiken meestal <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossipprotocol<\/a><\/noindex> voor gegarandeerde uitzending van berichten door het hele netwerk.<\/p>\n<p>Laten we herinneren dat in een niet-federale Byzantijnse consensus systeem de quorum wordt gedefinieerd als de meerderheid van alle knooppunten. Het Byzantijnse overeenkomsten systeem is ontwikkeld met de vraag in gedachten: hoeveel oneerlijke knooppunten kan het systeem verdragen? In een systeem van N knooppunten, ontworpen om te overleven bij f fouten (bedrog), moet een knoop in staat zijn om vooruitgang te boeken door een reactie te ontvangen van N\u2212f peers, aangezien f van hen mogelijk niet functioneren. Maar door een reactie te ontvangen van N\u2212f peers, kan worden aangenomen dat alle f peers (van wie de knoop geen reactie heeft ontvangen) in werkelijkheid eerlijk zijn. Dus zijn f van de N\u2212f peers (waarvan een antwoord is ontvangen) schadelijk. Om ervoor te zorgen dat de knopen tot een consensus komen, moet de meerderheid van de overgebleven knopen eerlijk zijn, wat betekent dat we willen dat N\u2212f groter is dan 2f, of N &gt; 3f. Dus meestal zal een systeem dat is ontworpen om te overleven bij f storingen, in totaal N=3f+1 knooppunten hebben en een quorumgrootte van 2f+1. Zodra het voorstel de quorumgrens overschrijdt, zijn de overige leden van het netwerk ervan overtuigd dat alle concurrerende voorstellen zullen falen. Zo convergeert het netwerk naar een resultaat.<\/p>\n<p>Maar in een federale Byzantijnse consensus systeem kan er niet alleen geen meerderheid zijn (omdat niemand de totale netwerkgrootte weet), maar het concept van meerderheid is zelfs volkomen nutteloos! Als het lidmaatschap in het systeem open is, kan iemand de meerderheid behalen door een zogenaamde Sybil-aanval uit te voeren: zich herhaaldelijk bij het netwerk aansluitend via meerdere knooppunten. Waarom kan de transitive sluiting van de snede dan worden genoemd <i>een quorum<\/i>, en hoe kan het concurrerende voorstellen onderdrukken?<\/p>\n<p>Technisch gezien: geen enkele manier! Stel je een netwerk voor van zes knooppunten, waarbij twee groepen ge\u00efsoleerd zijn in de quorum sneden van elkaar. De eerste subgroep kan een beslissing nemen waar de tweede nooit van hoort, en vice versa. Voor dit netwerk is er geen manier om consensus te bereiken (behalve toevallig).<\/p>\n<p>Daarom vereist SCP dat voor federale stemprocedures (en voor de toepassing van belangrijke theorema's in het artikel) het netwerk moet beschikken over een eigenschap die wordt genoemd <i>quorumoverlapping<\/i>In a network with this property, any two quorums that can be constructed will always overlap in at least one node. For determining the prevailing sentiments of the network, this is as good as having a majority. Intuitively, this means that if any quorum agrees with statement X, no other quorum will ever be able to agree with something else, because it must include some node from the first quorum that has already voted for X.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>If there is an overlap of quorums in the network\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 then any two quorums that you can construct\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 will always intersect.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Of course, overlapping nodes can be Byzantine faulty or bad in other ways. In this case, the intersection of quorums does not help the network to agree at all. For this reason, many results in the SCP technical document are based on explicitly stated assumptions, such as that there is still an intersection of quorums in the network, <i>even after the removal of bad nodes.<\/i>For simplicity, let\u2019s leave these assumptions <i>implicit<\/i> for the rest of the article).<\/p>\n<p>It may seem unreasonable to expect reliable quorum intersections in a network of independent nodes. But there are two reasons why this is not the case.<\/p>\n<p>The first reason lies in the existence of the Internet itself. The Internet is an ideal example of a network of independent nodes with overlapping quorums. Most nodes on the Internet connect only to a few other local nodes, but these small sets overlap enough that each node is accessible from every other node by some route.<\/p>\n<p>De tweede reden is specifiek voor het betalingsnetwerk Stellar (de meest voorkomende toepassing van SCP). Elke activa in het Stellar-netwerk heeft een uitgever, en de aanbevelingen van Stellar vereisen dat elke uitgever een of meerdere knooppunten in het netwerk aanstelt om verzoeken om inlossing te verwerken. Het is in uw belang om deze knooppunten rechtstreeks of onrechtstreeks op te nemen in de quorum-slices voor elk activum dat u interesseert. Vervolgens zullen de quorum-slices voor alle knooppunten die ge\u00efnteresseerd zijn in dit activum, minstens in deze inlossingsknopen overlappen. Knooppunten die ge\u00efnteresseerd zijn in meerdere activa zullen alle inlossingsknopen van de betreffende uitgevers opnemen in hun quorum-slices, en zij zullen proberen om alle activa samen te voegen. Bovendien, eventuele activa die op deze manier niet met andere activa in het netwerk verbonden zijn, en <i>moeten niet verbonden zijn<\/i> \u2014 is bedoeld om ervoor te zorgen dat er geen overlapping van quorum's in dit netwerk is (bijvoorbeeld, banken uit de dollarzone willen soms handelen met banken uit de eurozone en banken uit de peso-zone, dus bevinden ze zich in hetzelfde netwerk, maar niemand geeft om een afzonderlijk netwerk van kinderen die honkbalkaarten verhandelen).<\/p>\n<p>Natuurlijk, <i>de verwachting<\/i> van overlapping van quorum's is geen <i>garantie<\/i>. Andere Byzantijnse overeenstemmingssystemen zijn in hoge mate afhankelijk van de garantie van quorum's door hun complexiteit. Een belangrijk nieuw aspect van SCP is dat het de verantwoordelijkheid voor het cre\u00ebren van quorum's wegneemt van het consensusalgoritme en deze naar het applicatieniveau verplaatst. Hoewel federatief stemmen vrij algemeen is voor het stemmen over allerlei kwesties, hangt de betrouwbaarheid ervan daadwerkelijk cruciaal af van de bredere betekenis van deze waarden. Sommige hypothetische gebruikstoepassingen kunnen minder handig blijken te zijn voor het cre\u00ebren van goed verbonden netwerken dan andere.<\/p>\n<h1>Stemmen, goedkeuring en bevestiging<\/h1>\n<p>\nIn de ronde van het federatieve stemmen begint de knoop optioneel te stemmen voor een bepaalde waarde V. Dit betekent dat het een bericht naar het netwerk uitzendt: 'Ik ben knoop N, mijn quorum-slices Q, en ik stem voor V.' Wanneer een knoop op deze manier stemt, belooft hij dat hij nooit tegen V heeft gestemd en nooit zal stemmen.<\/p>\n<p>In uitzendingen van peer-to-peer knooppunten ziet elk knooppunt hoe anderen stemmen. Zodra een knooppunt voldoende van dergelijke berichten heeft verzameld, kan het quorum-sneden volgen en proberen quorums te vinden. Als het een quorum van peers ziet die ook voor V stemmen, kan het doorgaan naar <i>de acceptatie<\/i> van V en dit nieuwe bericht in het netwerk broadcasten: \"Ik ben knooppunt N, mijn quorum-sneden Q, en ik accepteer V.\" Acceptatie biedt een sterkere garantie dan simpel stemmen. Wanneer een knooppunt voor V stemt, kan het nooit voor andere opties stemmen. Maar als een knooppunt V accepteert, zal geen enkel knooppunt in het netwerk ooit een andere optie accepteren (theorema 8 in het technische document SCP bewijst dit).<\/p>\n<p>Natuurlijk is er een grote kans dat er niet meteen een quorum van knooppunten te vinden is die het eens zijn met V. Andere knooppunten kunnen stemmen voor andere waarden. Maar voor een knooppunt is er nog een andere manier om van simpel stemmen naar acceptatie over te schakelen. N kan een andere waarde W accepteren, zelfs als het daar niet voor heeft gestemd en zelfs als het er geen quorum voor ziet. Om zijn stem te wijzigen, hoeft het alleen maar te zien <i>een blockerende set<\/i> van knooppunten die W hebben geaccepteerd. Een blockerende set bestaat uit \u00e9\u00e9n knooppunt van elk van de quorum-snedes van N. Zoals de naam al aangeeft, is het in staat om <i>elk ander waarde te blokkeren. Als alle knooppunten in zo'n set W accepteren, dan (volgens theorema 8) zal er nooit een quorum kunnen worden gevormd dat een andere waarde accepteert, en daarom is het voor N ook veilig om W te accepteren.<\/i> Knooppunt N met drie quorum-snedes.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F is een blockerende set voor N: het bevat \u00e9\u00e9n knooppunt van elke snede van N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E is ook een blockerende set voor N, omdat E in twee sneden van N voorkomt.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Maar een blockerende set is geen quorum. Het zou te eenvoudig zijn om knooppunt N te misleiden om een gewenste waarde te accepteren, als het voldoende is om \u00e9\u00e9n knooppunt in elke snede van N te hacken. Daarom is het accepteren van een waarde nog niet het einde van het stemmen. In plaats daarvan moet N de waarde bevestigen, dat wil zeggen, een quorum van knooppunten zien die het accepteren. Als het zover komt, dan, zoals het technische document SCP bewijst (in theorema 11), zal de rest van het netwerk uiteindelijk ook dezelfde waarde bevestigen, zodat N het federatieve stemmen met een bepaalde waarde als resultaat zal afsluiten.<\/i><\/p>\n<p>Federatief stemmen.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Federatief stemmen.<\/i><\/p>\n<p>Het stemproces, de acceptatie en de bevestiging vormen \u00e9\u00e9n volledige ronde van federatief stemmen. Het Stellar-consensusprotocol combineert veel van dergelijke ronden om een volledig consensus systeem te cre\u00ebren.<\/p>\n<h1>Het Stellar-consensusprotocol<\/h1>\n<p>\nDe twee belangrijkste eigenschappen van een consensus systeem zijn <i>veiligheid<\/i> en <i>veerkracht<\/i>. Een consensusalgoritme is 'veilig' als het nooit verschillende resultaten kan geven aan verschillende deelnemers (een kopie van Bob's geschiedenis zal nooit in tegenspraak zijn met die van Carol). 'Veerkracht' betekent dat het algoritme altijd een resultaat oplevert, dat wil zeggen het blijft niet steken.<\/p>\n<p>De beschreven procedure van federatief stemmen <i>is veilig<\/i> in de zin dat als een knooppunt een waarde V bevestigt, geen ander knooppunt een andere waarde zal bevestigen. Maar 'zal geen andere waarde bevestigen' betekent niet dat het noodzakelijkerwijs iets zal bevestigen. De deelnemers kunnen stemmen op zoveel verschillende waarden dat niets de acceptatiegrens zal bereiken. Dit betekent dat er in federatief stemmen geen <i>veerkracht<\/i>.<\/p>\n<p>Het Stellar-consensusprotocol maakt gebruik van federatief stemmen op een manier die zowel veiligheid als veerkracht garandeert. (De garanties van veiligheid en veerkracht van SCP hebben een theoretische limiet. De constructie kiest voor een zeer sterke veiligheidsgarantie, ten koste van een kleine vermindering van de veerkracht, maar gezien een voldoende tijdsbestek zal consensus met hoge waarschijnlijkheid worden bereikt). In het kort komt het idee erop neer dat er meerdere federatieve stemrondes worden gehouden over verschillende waarden, totdat \u00e9\u00e9n ervan volledig door alle fasen van SCP-stemming gaat, zoals hieronder beschreven.<\/p>\n<p>De waarden waarvoor SCP consensus nastreeft, kunnen een geschiedenis van transacties of een lunchbestelling zijn, of iets anders, maar het is belangrijk op te merken dat dit niet de waarden zijn die worden aangenomen of bevestigd. In plaats daarvan vindt federatief stemmen plaats over <i>verklaringen over deze waarden.<\/i>.<\/p>\n<p>De eerste rondes van federatief stemmen vinden plaats in de <i>nominatiefase<\/i> (nominatiefase), op een set verklaringen van het type 'Ik nomineer V', mogelijk voor veel verschillende waarden V. Het doel van de nominatie is om \u00e9\u00e9n of meerdere verklaringen te vinden die de acceptatie en bevestiging doorstaan.<\/p>\n<p>Na het vinden van bevestigde kandidaten gaat SCP over naar de stemfase, waarbij het doel is om een bepaalde <i>stem<\/i> (dat wil zeggen een container voor de voorgestelde waarde) en het quorum dat kan verklaren <i>commit<\/i> voor hem (commit). Als het quorum het stemmen van de stem commit, wordt zijn waarde geaccepteerd als consensus. Maar voordat een knoop voor het committen van de stem kan stemmen, moet deze eerst bevestigen <i>de annulering<\/i> van alle stemmen met een lagere tellercode. Deze stappen \u2014 het annuleren van stemmen om diegene te vinden waarvan het commit kan worden bevestigd \u2014 omvatten meerdere rondes van federatief stemmen over meerdere stemmen.<\/p>\n<p>In de volgende secties worden de nominatie en het stemmen uitgebreider behandeld.<\/p>\n<h1>Nominatie<\/h1>\n<p>\nAan het begin van de nominatiefase kan elke knoop spontaan een waarde V kiezen en stemmen voor de bewering \"Ik nomineer V\". Het doel in deze fase is om de nominatie van een bepaalde waarde te bevestigen door federatief stemmen.<\/p>\n<p>Het kan zijn dat een voldoende aantal knopen stemmen voor verschillende beweringen, waardoor geen enkele nominatie de acceptatiegrens kan bereiken. Daarom, naast het uitzenden van hun eigen nominatiestemmen, \"reflecteren\" knopen de nominaties van hun buren. Reflectie betekent dat als een knoop stemt voor de nominatie V, maar een bericht van een buur ziet die stemt voor de nominatie W, deze nu zal stemmen voor zowel V als W. (Niet alle stemmen van buren worden tijdens de nominatie gereflecteerd, omdat dit kan leiden tot een explosie van verschillende nominaties. SCP bevat een mechanisme om deze stemmen te reguleren. Kortom, er is een formule om de \"prioriteit\" van een buur vanuit het perspectief van de knoop te bepalen, en alleen de stemmen van hooggeprioriteerde knopen worden gereflecteerd. Hoe langer de nominatie duurt, hoe lager de drempel, zodat de knoop het aantal buren van wie hij stemmen zal reflecteren, vergroot. De prioriteitsformule omvat het slotnummer als invoer, zodat een hooggeprioriteerde peer voor \u00e9\u00e9n slot laaggeprioriteerd kan zijn voor een ander, en vice versa).<\/p>\n<p>Conceptueel gezien zijn de parallelle nominaties van zowel V als W afzonderlijke federale stemmen, waarbij elk onafhankelijk kan worden goedgekeurd of bevestigd. In de praktijk verpakt het SCP-protocol deze afzonderlijke stemmen samen.<\/p>\n<p>Hoewel stemmen voor de nominatie V inhoudt dat men nooit tegen nominatie V zal stemmen, wordt op applicatieniveau - in dit geval SCP - gedefinieerd wat 'tegen' betekent. SCP ziet geen bevestiging die in tegenspraak is met de stem 'ik nomineer X', dat wil zeggen, er is geen bericht 'ik ben tegen nominatie X', waardoor de node voor de nominatie van elke waarde kan stemmen. Veel van deze nominaties zullen tot niets leiden, maar uiteindelijk kan de node \u00e9\u00e9n of meerdere waarden aannemen of bevestigen. Zodra de genomineerde bevestigd is, wordt hij <i>een kandidaat<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nominatie in SCP met behulp van federale stemmen. Er kunnen veel waarden 'B' zijn die door gelijkwaardige nodes zijn voorgedragen en 'gereflecteerd' door een node.<\/i> <\/p>\n<p>Nominaties kunnen leiden tot de opkomst van meerdere bevestigbare kandidaten. Daarom vereist SCP dat het applicatieniveau een methode biedt om kandidaten tot \u00e9\u00e9n <i>composiet<\/i> (composite) samen te voegen. De samenvoegmethode kan willekeurig zijn. Het belangrijkste is dat als deze methode deterministisch is, elke node dezelfde kandidaten zal samenvoegen. In een stemprotocol voor de lunch kan 'samenvoegen' simpelweg betekenen dat \u00e9\u00e9n van de twee kandidaten wordt afgewezen. (Maar op een deterministische manier: elke node moet dezelfde waarde kiezen om te verwerpen. Bijvoorbeeld, de eerder gekozen waarde in alfabetische volgorde). In het Stellar-betaalnetwerk, waar stemmen gebeurt over de geschiedenis van transacties, impliceert de samenvoeging van twee voorgestelde kandidaten de samenvoeging van de transacties die zij bevatten en de laatste van hun twee tijdstempels.<\/p>\n<p>De technische beschrijving van SCP bewijst (theorema 12) dat tegen het einde van de nominatiefase het netwerk uiteindelijk convergeert naar \u00e9\u00e9n composiet. Maar er is een probleem: federale stemmen zijn een asynchroon protocol (net als SCP). Met andere woorden, nodes zijn niet in de tijd geco\u00f6rdineerd, maar alleen naar de berichten die ze verzenden. Vanuit het perspectief van de node is het onduidelijk wanneer <i>het afgelopen is<\/i> fase van het indienen. En hoewel alle knooppunten uiteindelijk aan dezelfde samenstelling zullen komen, kunnen ze verschillende routes kiezen op deze weg, waardoor ze onderweg verschillende samengestelde kandidaten cre\u00ebren, en ze kunnen nooit zeggen welke de definitieve is.<\/p>\n<p>Maar dat is niet erg. Indienen is slechts een voorbereiding. Het belangrijkste is om het aantal kandidaten te beperken om een consensus te bereiken, die plaatsvindt in het proces. <i>stemmen.<\/i> (stemmen).<\/p>\n<h1>Stemmen<\/h1>\n<p>\nEen stembiljet is een paar , waarbij counter een geheel getal is dat begint bij 1, en value een kandidaat is van de indieningsfase. Dit kan een eigen kandidaat van het knooppunt zijn of een kandidaat van een buurknooppunt die door dit knooppunt is aangenomen. Grof gezegd, bij het stemmen wordt geprobeerd de netwerkconsensus te bereiken over een bepaalde kandidaat in een bepaald stembiljet door potentieel vele federatieve stemronden over verklaringen betreffende stembiljetten uit te voeren. De tellers in de stembiljetten volgen de gemaakte pogingen, en stembiljetten met hogere tellers hebben prioriteit boven stembiljetten met lagere tellers. Als het stembiljet  vastloopt, begint er een nieuwe stemming, nu op het stembiljet .<\/p>\n<p>Het is belangrijk om te onderscheiden <i>waarden<\/i> (bijvoorbeeld wat de lunchbestelling zou moeten zijn: pizza of salades), <i>stembiljetten<\/i> (paar counter-value) en <i>verklaringen<\/i> over stembiljetten. Een SCP-ronde omvat verschillende rondes van federatief stemmen, met name over dergelijke verklaringen:<\/p>\n<ul>\n<li>\u2018Ik ben bereid om stembiljet B in te dienen\u2019 en\n<\/li>\n<li>\u2018Ik kondig de indiening van stembiljet B aan\u2019.<\/li>\n<\/ul>\n<p>\nVanuit het perspectief van dit knooppunt wordt consensus bereikt wanneer het een stembiljet B vindt waarvoor het kan bevestigen (dat wil zeggen een quorum kan vinden dat het standpunt aanvaardt) de verklaring \u2018Ik kondig de indiening van stembiljet B aan\u2019. Vanaf dat moment kan er veilig worden gehandeld op de waarde die in B staat \u2014 bijvoorbeeld deze lunchbestelling plaatsen. Dit wordt genoemd <i>externalisatie<\/i> van de waarde. Zodra de aanname van het stembiljet is bevestigd, kan het knooppunt er zeker van zijn dat elk ander knooppunt dezezelfde waarde heeft geexternaliseerd of dat het dat in de toekomst zeker zal doen.<\/p>\n<p>Hoewel conceptueel veel federatieve stemmen worden uitgevoerd op basis van verklaringen met betrekking tot verschillende stembiljetten, wisselen ze niet zoveel berichten uit, omdat elk bericht een reeks stembiljetten encapsuleert. \u00c9\u00e9n bericht bevordert dus de status van veel federatieve stemmen tegelijk, bijvoorbeeld: \"Ik accepteer de commit van stembiljetten in het bereik van  tot \".<\/p>\n<p>Wat betekenen de termen 'prepared' (voorbereid) en 'commit' (committeren)?<\/p>\n<p>Een knoop stemt voor de commit van een stembiljet wanneer hij ervan overtuigd is dat andere knopen geen commits van stembiljetten met andere waarden zullen maken. Deze overtuiging is het doel van de voorbereiding van de verklaring. Een stem waarin staat: \"Ik ben klaar om het stembiljet B te committeren\", is een belofte om nooit een commit van een stembiljet kleiner dan B te maken, dat wil zeggen met een lagere teller (SCP vereist dat waarden in stembiljetten een bepaalde volgorde hebben. Dus is het stembiljet  kleiner dan , als N1&lt;N2, en ook als N1=N2 en V1&lt;V2). Deze kleinere stembiljetten worden &#039;afgebroken&#039; (aborted) tijdens de voorbereidende stem, terwijl B wordt beschouwd als &#039;voorbereid&#039;.<\/p>\n<p>Waarom betekent 'Ik ben klaar om het stembiljet B te committeren' 'Ik beloof nooit een commit van stembiljetten kleiner dan B toe te staan'? Omdat SCP abort defineert als het tegenovergestelde van commit. Stemmen voor de voorbereiding van een stembiljet impliceert ook stemmen voor het annuleren van andere stembiljetten, en, zoals we eerder hebben besproken, is stemmen voor iets \u00e9\u00e9n belofte om er nooit tegen te stemmen.<\/p>\n<p>Voordat hij de commit uitzendt, moet de knoop eerst een stembiljet vinden dat hij kan bevestigen als voorbereid. Met andere woorden, hij voert een federatieve stemming uit over het thema 'Ik ben klaar om het stembiljet B te committeren', mogelijk voor verschillende stembiljetten, totdat hij er \u00e9\u00e9n vindt die de quorum accepteert.<\/p>\n<p>Waar komen de stembiljetten voor de verkiezing vandaan? Eerst zendt de knoop de voorbereiding voor de stem uit voor , waarbij C de samengestelde kandidaat is die in de nominatiefase is geproduceerd. Echter, zelfs na de start van de voorbereiding kunnen nieuwe kandidaten verschijnen door de nominatie, die nieuwe stembiljetten zullen worden. Ondertussen kunnen de peers verschillende kandidaten hebben, en zij kunnen een blokkerende set vormen die \"Ik ben klaar om stembiljet B2 te committeren\" accepteert, wat de knoop overtuigt om dit ook te accepteren. Ten slotte is er een timeoutmechanisme dat nieuwe ronden van federatieve stemmen genereert op nieuwe stembiljetten met hogere tellingen, als de huidige stembiljetten vastzitten.<\/p>\n<p>Zodra de knoop stembiljet B vindt dat als voorbereid kan worden bevestigd, verzendt deze een nieuw bericht \"Commit stembiljet B\". Deze stem vertelt de peers dat de knoop zich nooit van B zal terugtrekken. In feite, als B een stembiljet  is, betekent \"Commit stembiljet \" onvoorwaardelijke instemming om te stemmen voor de bereidheid van elk stembiljet van  tot . Deze extra betekenis helpt andere knopen om de peer in te halen met de commit, als ze zich nog in eerdere stadia van het protocol bevinden.<\/p>\n<p>In deze fase is het nogmaals belangrijk om te benadrukken dat dit asynchrone protocollen zijn. Alleen omdat \u00e9\u00e9n knoop stemmen voor een commit verzendt, betekent niet dat zijn gelijken dit ook doen. Sommigen van hen kunnen nog steeds stemmen over verklaringen voor de voorbereiding van de stem, terwijl anderen misschien de waarde al geexternaliseerd hebben. SCP legt uit hoe de knoop elk type peerbericht onafhankelijk van zijn fase moet verwerken.<\/p>\n<p>Als het bericht \"Ik verklaar commit \" niet kan worden aangenomen of bevestigd, is er een kans dat het bericht  of  wordt aangenomen of bevestigd - of in ieder geval elk bulletin met de waarde C en niet iets anders, aangezien de node al heeft beloofd  nooit te annuleren. Tegen de tijd dat de node stemmen voor de commit uitzendt, is het C of niets, afhankelijk van hoe ver de consensus zal gaan. Dat is echter nog niet voldoende voor de node om C te externaliseren. Sommige Byzantijnse piraten (die minder dan de quorum vormen, op basis van onze aannames over veiligheid) kunnen de node liegen. Acceptatie en vervolgens bevestiging van een bepaald bulletin (of bereik van bulletins) is wat de node uiteindelijk vertrouwen geeft om C te externaliseren.<\/p>\n<p><img decoding=\"async\" alt=\"Laten we de Stellar-consensusprotocol bekijken\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Stemmen met SCP via federatief stemmen. Niet weergegeven: op elk moment kan de timer afgaan, wat de teller in het bulletin verhoogt (en mogelijk een nieuwe composiet kan produceren van extra voorgestelde kandidaten).<\/i> <\/p>\n<p>En dat is alles! Zodra het netwerk consensus heeft bereikt, is het klaar om dit keer op keer te doen. In het betalingsnetwerk Stellar gebeurt dit ongeveer elke 5 seconden: een prestatie die zowel veiligheid als veerkracht vereist, gegarandeerd door SCP.<\/p>\n<p>SCP kan dit bereiken door zich te baseren op verschillende rondes van federatief stemmen. Federatief stemmen werd mogelijk gemaakt door het concept van quorum-slices: sets van gelijkwaardige nodes die elke node heeft besloten te vertrouwen als onderdeel van haar (subjectieve) quorum. Deze configuratie betekent dat consensus kan worden bereikt, zelfs in een netwerk met open lidmaatschap en Byzantijnse bedrog.<\/p>\n<h1>Verder lezen<\/h1>\n<p><\/p>\n<ul>\n<li>Het originele technische document van SCP is te vinden <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">hier<\/a><\/noindex>, met behulp van 1 bit, gelijk aan 0, <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">here<\/a><\/noindex> project specificaties voor de implementatie.\n<\/li>\n<li>De oorspronkelijke auteur van het SCP-protocol, David Mazieres, legt het eenvoudig (maar toch technisch) uit <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">hier<\/a><\/noindex>.\n<\/li>\n<li>U bent misschien verrast dat u in dit artikel de termen \"mining\" of \"proof of work\" niet aantrof. SCP gebruikt deze methoden niet, maar sommige andere consensusalgoritmes wel. Zane Wiserpoon heeft een beschikbare <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">overzicht van consensusalgoritmes<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Stapsgewijze beschrijving<\/a><\/noindex> van een eenvoudig netwerk dat consensus bereikt in \u00e9\u00e9n volledige ronde van SCP.\n<\/li>\n<li>Voor lezers die ge\u00efnteresseerd zijn in implementaties van SCP: zie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">C++ code<\/a><\/noindex>, gebruikt door het betalingsnetwerk Stellar, of <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">de Go-code<\/a><\/noindex>, die ik heb geschreven voor een beter begrip van de SCP.<\/li>\n<\/ul>\n<p>Bron: <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.3 - 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\/nl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Laten we het Stellar-consensusprotocol verkennen | ProHoster","description":"Het Stellar-consensusprotocol wordt voor het eerst beschreven in.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}