{"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\/da\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Vi forst\u00e5r konsensusprotokollen Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStellar konsensusprotokol blev f\u00f8rst beskrevet i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">en videnskabelig artikel<\/a><\/noindex> David Mazi\u00e8res i 2015. Det er et \u201efedereret system for byzantinsk enighed\u201c, som g\u00f8r det muligt for decentraliserede beregningsnetv\u00e6rk uden ledere effektivt at n\u00e5 enighed om en beslutning. Stellar betalingsnetv\u00e6rk bruger Stellar Consensus Protocol (SCP) til at opretholde en konsistent historie af transaktioner, som alle deltagere kan se.<\/p>\n<p>Det anses for, at konsensusprotokoller er sv\u00e6re at forst\u00e5. SCP er lettere end de fleste af dem, men deler stadig dette ry - delvist p\u00e5 grund af den fejlagtige id\u00e9 om, at \u201efedereret stemmeafgivning\u201c, som den f\u00f8rste halvdel af den videnskabelige artikel er dedikeret til, er SCP. Men det er ikke tilf\u00e6ldet! Det er blot en vigtig byggesten, der i den anden halvdel af artiklen bruges til at konstruere <i>den faktiske<\/i> Stellar konsensusprotokol.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nI denne artikel vil vi kort fort\u00e6lle, hvad en \u201eaftalesystem\u201c er, hvad der kan g\u00f8re det \u201ebyzantinsk\u201c og hvorfor man b\u00f8r g\u00f8re et byzantinsk system \u201efedereret\u201c. Derefter vil vi forklare den federerede stemmeafgivningsprocedure, som beskrives i artiklen om SCP, og til sidst vil vi forklare selve SCP-protokollen.<\/p>\n<h1>Aftalesystemer<\/h1>\n<p>\nAftalesystemet g\u00f8r det muligt for en gruppe deltagere at n\u00e5 til enighed om et emne, for eksempel hvad de skal bestille til frokost.<\/p>\n<p>Vi hos Interstellar har implementeret vores eget frokostaftalesystem: vi bestiller det, vores operationschef John siger. Det er et simpelt og effektivt aftalesystem. Vi stoler alle p\u00e5 John og tror, at han hver dag vil finde noget interessant og n\u00e6rende.<\/p>\n<p>Men hvad nu hvis John misbruger vores tillid? Han kan ensidigt beslutte, at vi alle skal v\u00e6re veganere. Om en uges tid vil vi sandsynligvis v\u00e6lte ham og give magten videre til Elizabeth. Men hvad nu hvis hun elsker avocado med ansjoser og t\u00e6nker, at alle skal v\u00e6re s\u00e5dan? Magt korrumperer. Derfor er det bedre at finde en mere demokratisk metode: en m\u00e5de at sikre, at forskellige pr\u00e6ferencer tages i betragtning, samtidig med at der opn\u00e5s et rettidigt og entydigt resultat, s\u00e5 det ikke ender med, at ingen bestiller frokost, eller fem personer afgiver forskellige bestillinger, eller diskussionen str\u00e6kker sig til aftenen.<\/p>\n<p>Det kan tilsyneladende synes simpelt: at afholde en afstemning! Men det er en vildledende opfattelse. Hvem skal indsamle stemmesedlerne og rapportere resultaterne? Og hvorfor skulle de andre tro p\u00e5, hvad vedkommende siger? M\u00e5ske kan vi <i>f\u00f8rst<\/i> stemme p\u00e5 en leder, som vi stoler p\u00e5 til at lede afstemningen \u2014 men hvem skal lede denne <i>anges f\u00f8rst<\/i> afstemning? Hvad hvis vi ikke kan blive enige om en leder? Eller hvis vi bliver enige, og denne leder sidder fast i et m\u00f8de eller bliver syg?<\/p>\n<p>Lignende problemer opst\u00e5r i distribuerede computersystemer. Alle deltagere eller noder skal blive enige om en l\u00f8sning, for eksempel hvis det er ens tur til at opdatere en f\u00e6lles fil eller tage en opgave fra en behandlingsk\u00f8. I et kryptovaluta-netv\u00e6rk m\u00e5 noderne gentagne gange v\u00e6lge, hvordan den fulde historie ser ud, fra flere mulige versioner, der nogle gange er i konflikt. Denne netv\u00e6rksaftale garanterer modtageren, at m\u00f8nten er (a) gyldig (ikke falsk) og (b) endnu ikke er brugt et andet sted. Det garanterer ogs\u00e5, at han vil kunne bruge m\u00f8nterne i fremtiden, fordi den nye modtager vil have de samme garantier af de samme grunde.<\/p>\n<p>Enhver konsensusmekanisme i et distribueret computersystem skal v\u00e6re fejltolerant: den skal give konsekvente resultater trods fejl som langsomme forbindelser, ikke-responderende noder og forkert r\u00e6kkef\u00f8lge af beskeder. <i>Den byzantinske<\/i> konsensusmekanisme er yderligere modstandsdygtig over for 'byzantinske' fejl: noder, der giver falske oplysninger, enten p\u00e5 grund af fejl eller i et bevidst fors\u00f8g p\u00e5 at underminere systemet eller opn\u00e5 en fordel. 'Byzantinsk' fejltolerance \u2014 evnen til at stole p\u00e5 en gruppes beslutning, selv n\u00e5r nogle medlemmer af gruppen kan lyve eller p\u00e5 anden m\u00e5de ikke f\u00f8lge beslutningsreglerne \u2014 har f\u00e5et sit navn fra <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\">fabelen om generalerne i det Byzantinske imperium<\/a><\/noindex>, som fors\u00f8gte at koordinere et angreb. <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\">En god beskrivelse<\/a><\/noindex> finder man hos Anthony Stevens.<\/p>\n<p>Lad os overveje kryptovaluta-ejeren Alice, som skal v\u00e6lge mellem at k\u00f8be l\u00e6kker is fra Bob eller betale sin g\u00e6ld til Carol. M\u00e5ske vil Alice gerne betale begge med det samme og snyde ved at bruge den samme m\u00f8nt. For at g\u00f8re dette skal hun overbevise Bobs computer om, at m\u00f8nten aldrig er blevet betalt til Carol, og overbevise Carols computer om, at m\u00f8nten aldrig er blevet betalt til Bob. Et byzantinsk konsensusystem g\u00f8r dette praktisk umuligt ved hj\u00e6lp af en form for flertalsregel, som kaldes <i>kvorum<\/i>. En node i et s\u00e5dant netv\u00e6rk n\u00e6gter at g\u00e5 videre til en bestemt version af historien, indtil den ser, at tilstr\u00e6kkeligt mange ligev\u00e6rdige noder - kvorum - er enige om at skifte. N\u00e5r det sker, danner de en tilstr\u00e6kkeligt stor valgblok til at tvinge de resterende noder i netv\u00e6rket til at acceptere deres beslutning. Alice kan f\u00e5 nogle noder til at lyve p\u00e5 hendes vegne, men hvis netv\u00e6rket er stort nok, vil hendes fors\u00f8g blive nedslidt af stemmerne fra \u00e6rlige noder.<\/p>\n<p>Hvor mange noder kr\u00e6ves der for at danne et kvorum? Som minimum et flertal, n\u00e6rmere bestemt et kvalificeret flertal, for at bek\u00e6mpe fejl og svindel. Men for at t\u00e6lle flertallet er det n\u00f8dvendigt at kende det samlede antal deltagere. I Interstellar-kontoret eller ved lokale valg er disse tal let tilg\u00e6ngelige. Men hvis din gruppe er et svagt defineret netv\u00e6rk, hvor noder kan komme og g\u00e5 efter eget valg uden godkendelse fra en central instans, er der behov for en <i>federativ<\/i> byzantinsk konsensusordning, der kan bestemme kvora ikke fra en forudbestemt liste over noder, men dynamisk fra et konstant skiftende og uundg\u00e5eligt ufuldst\u00e6ndigt snapshot af noder p\u00e5 et givet tidspunkt.<\/p>\n<p>Det kan synes umuligt at skabe et kvorum fra synspunktet af en enkelt node i et stort netv\u00e6rk, men det er muligt. Et s\u00e5dant kvorum kan endda garantere resultaterne af decentraliseret afstemning. Det tekniske dokument SCP viser, hvordan dette kan g\u00f8res ved hj\u00e6lp af en procedure kaldet <i>federativ afstemning<\/i>.<\/p>\n<h1>For de ut\u00e5lmodige<\/h1>\n<p>\nDen resterende del af artiklen beskriver mere detaljeret den federative afstemning og Stellar-konsensusprotokollen. Hvis du ikke er interesseret i detaljerne, er her et overblik over processen.<\/p>\n<ol>\n<li>Noderne gennemf\u00f8rer runder af den f\u00f8derale afstemning om \"nominatioerne\". En runde af den f\u00f8derale afstemning indeb\u00e6rer:\n<ul>\n<li>Noden stemmer for en p\u00e5stand, for eksempel \"Jeg foresl\u00e5r v\u00e6rdien V\";\n<\/li>\n<li>Noden lytter til stemmerne fra peerne, indtil den finder en, som kan \"acceptere\";\n<\/li>\n<li>Noden leder efter et \"kvorum\" for denne p\u00e5stand. Kvoret \"bekr\u00e6fter\" nomineringen.<\/li>\n<\/ul>\n<\/li>\n<li>N\u00e5r noden kan bekr\u00e6fte en eller flere nomineringer, fors\u00f8ger den at \"forberede\" \"stemmesedlen\" gennem flere runder af den f\u00f8derale afstemning.\n<\/li>\n<li>N\u00e5r noden er i stand til at kontrollere beredskaben af stemmesedlen, fors\u00f8ger den at forpligte den med hj\u00e6lp af endnu flere runder af den f\u00f8derale afstemning.\n<\/li>\n<li>N\u00e5r noden kan bekr\u00e6fte forpligtelsen af stemmesedlen, kan den \"eksternalisere\" v\u00e6rdien af denne stemmeseddel ved at bruge den som resultat af konsensus.<\/li>\n<\/ol>\n<p>\nDisse trin omfatter flere runder af den f\u00f8derale afstemning, som samlet set udg\u00f8r \u00e9n runde SCP. Lad os se n\u00e6rmere p\u00e5, hvad der sker i hvert trin.<\/p>\n<h1>F\u00f8deral afstemning<\/h1>\n<p>\nF\u00f8deral afstemning er en procedure, hvormed det bestemmes, om netv\u00e6rket kan enes om et forslag. I afstemningsrunden skal hver node v\u00e6lge et af mange potentielt mulige v\u00e6rdier. Den kan ikke g\u00f8re dette, f\u00f8r den er sikker p\u00e5, at andre noder i netv\u00e6rket ikke vil v\u00e6lge et andet resultat. For at v\u00e6re sikre p\u00e5 dette, udveksler noderne en v\u00e6ld af beskeder frem og tilbage, s\u00e5 hver <i>har bekr\u00e6ftet<\/i>, at <i>kvorum<\/i> node <i>modtager<\/i> den samme <i>l\u00f8sning<\/i>. Resten af denne sektion forklarer de termer, som er n\u00e6vnt i denne p\u00e5stand, og hvordan hele proceduren finder sted.<\/p>\n<h1>Kvourummer og kvourskiver<\/h1>\n<p>\nLad os begynde med at definere et kvorum. Som n\u00e6vnt tidligere, i et decentralt netv\u00e6rk med dynamisk medlemskab er det umuligt at vide p\u00e5 forh\u00e5nd, hvor mange noder der er, og derfor hvor mange der kr\u00e6ves for et flertal. F\u00f8deral afstemning l\u00f8ser dette problem ved at introducere en ny id\u00e9 <i>kvourskiver<\/i> (quorum slice): et lille s\u00e6t af ligestillede noder, som noden har tillid til at videregive information om afstemningsstatus til resten af netv\u00e6rket. Hver node definerer sin egen kvourskive (som den bliver medlem af i praksis).<\/p>\n<p>Dannelsen af kvorum begynder med kvourskiver. For hver node tilf\u00f8jes noderne fra dens kvourskive. Derefter tilf\u00f8jes medlemmer fra kvourskiverne <i>disse noder<\/i> og s\u00e5 videre. Efterh\u00e5nden som processen forts\u00e6tter, finder man flere og flere noder, som man ikke kan tilf\u00f8je, fordi de allerede er inkluderet i quorumskiverne. N\u00e5r der ikke er flere nye noder at tilf\u00f8je, stopper processen: vi har dannet et quorum gennem \"transitiv lukning\" (transitive closure) af quorumskiven fra den oprindelige node.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>For at finde et quorum fra en given node\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 tilf\u00f8jer vi medlemmer af dens skive\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 derefter tilf\u00f8jer vi medlemmer af skiverne fra disse noder.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vi forts\u00e6tter, indtil der ikke er flere noder at tilf\u00f8je.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Der er ikke flere noder at tilf\u00f8je. Dette er et quorum.<\/i><\/p>\n<p>Faktisk kan hver node v\u00e6re en del af mere end \u00e9n skive. For at danne et quorum, v\u00e6lg kun \u00e9n af skiverne og tilf\u00f8j medlemmer; v\u00e6lg derefter en hvilken som helst skive for hvert af medlemmerne og tilf\u00f8j medlemmerne. <i>denne<\/i> skiven og s\u00e5 videre. Det betyder, at hver node er medlem af mange mulige quorum.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>V\u00e6lg kun \u00e9n quorumskive ad gangen.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u00c9n mulig quorum. Eller et alternativt valg\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 v\u00e6lger andre skiver\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(n\u00e5r det er muligt)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 skaber et andet quorum.<\/i><\/p>\n<p>Hvordan finder en node ud af, hvilke skiver de andre noder tilh\u00f8rer? P\u00e5 samme m\u00e5de som anden information om andre noder: fra de meddelelser, som hver node transmitterer i netv\u00e6rket, n\u00e5r dens stemmestatus \u00e6ndres. Hver meddelelse indeholder oplysninger om skiverne fra den afsendende node. I den tekniske dokumentation SCP er der ikke angivet en kommunikationsmekanisme. Implementeringerne bruger typisk <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip-protokollen<\/a><\/noindex> til garanteret transmission af beskeder over hele netv\u00e6rket.<\/p>\n<p>Lad os minde om, at i det ikke-f\u00f8derale byzantinske aftalesystem defineres et quorum som flertallet af alle noder. Det byzantinske aftalesystem er udviklet med hensyn til sp\u00f8rgsm\u00e5let: hvor mange u\u00e6rlige noder kan systemet t\u00e5le? I et system med N noder, designet til at overleve ved f fejl (bedragerier), skal en node v\u00e6re i stand til at opn\u00e5 fremskridt ved at modtage svar fra N\u2212f peer, da f af dem muligvis ikke fungerer. Men n\u00e5r der modtages svar fra N\u2212f peer, kan man antage, at alle f peer (som noden ikke har modtaget svar fra) faktisk er \u00e6rlige. Dermed er de skadelige f af N\u2212f peer (som noden har modtaget svar fra). For at noderne skal n\u00e5 til enighed, skal flertallet af de resterende noder v\u00e6re \u00e6rlige, hvilket betyder, at vi har brug for, at N\u2212f er st\u00f8rre end 2f eller N &gt; 3f. S\u00e5 typisk vil et system designet til at overleve ved f fejl have i alt N=3f+1 noder og st\u00f8rrelse quorum 2f+1. S\u00e5 snart forslaget passerer quorum-gr\u00e6nsen, er resten af netv\u00e6rket overbevist om, at enhver konkurrenceforslag vil mislykkes. S\u00e5 netv\u00e6rket konvergerer mod et resultat.<\/p>\n<p>Men i det f\u00f8derale byzantinske aftalesystem kan der ikke kun v\u00e6re flertal (fordi ingen kender det samlede netv\u00e6rks st\u00f8rrelse), men konceptet med flertal er helt meningsl\u00f8st! Hvis medlemskabet i systemet er \u00e5bent, kan nogen f\u00e5 flertal ved simpelthen at udf\u00f8re et s\u00e5kaldt Sybil-angreb: ved gentagne gange at tilslutte sig netv\u00e6rket gennem flere noder. S\u00e5 hvorfor kan det transitive lukning af sk\u00e6ringen kaldes <i>kvorum<\/i>, og hvordan kan det undertrykke konkurrenceforslag?<\/p>\n<p>Teknisk set, ikke p\u00e5 nogen m\u00e5de! Forestil dig et netv\u00e6rk af seks noder, hvor to grupper er isoleret i hinandens quorum-sk\u00e6ringer. Den f\u00f8rste undergruppe kan tr\u00e6ffe en beslutning, som den anden aldrig vil h\u00f8re, og omvendt. For dette netv\u00e6rk er der ingen m\u00e5de at opn\u00e5 enighed p\u00e5 (andet end ved tilf\u00e6ldigheder).<\/p>\n<p>Derfor kr\u00e6ver SCP, at for f\u00f8deral afstemning (og for anvendelse af vigtige teoremer i artiklen) skal netv\u00e6rket have en egenskab, der kaldes <i>sk\u00e6ringskvora<\/i>. I netv\u00e6rk med denne egenskab vil enhver to quorum, der kan opbygges, altid overlappe hinanden i mindst \u00e9t knudepunkt. For at bestemme de dominerende holdninger i netv\u00e6rket er det lige s\u00e5 godt som at have flertallet. Intuitivt betyder det, at hvis et hvilket som helst quorum er enig i udsagnet X, kan intet andet quorum nogensinde v\u00e6re enig i noget andet, fordi det n\u00f8dvendigvis vil inkludere et knudepunkt fra det f\u00f8rste quorum, som allerede har stemt for X.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hvis der er overlap mellem quorum i netv\u00e6rket...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 s\u00e5 vil enhver to quorum, du kan opbygge...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 altid krydse hinanden.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Selvf\u00f8lgelig kan de overlappende knudepunkter vise sig at v\u00e6re byzantinsk bedrageriske eller d\u00e5rlige p\u00e5 andre m\u00e5der. I s\u00e5 fald hj\u00e6lper overlapningen af quorum ikke netv\u00e6rket med at opn\u00e5 enighed overhovedet. Af denne grund bygger mange resultater i det tekniske dokument SCP p\u00e5 \u00e5benlyse antagelser, s\u00e5som at der i netv\u00e6rket stadig er overlap mellem quorum, <i>selv efter fjernelse af d\u00e5rlige knudepunkter.<\/i>. For enkelhedens skyld lader vi disse antagelser <i>v\u00e6re underforst\u00e5ede<\/i> i resten af artiklen).<\/p>\n<p>Det kan synes urimeligt at forvente, at det er muligt med p\u00e5lideligt overlap mellem quorum i et netv\u00e6rk af uafh\u00e6ngige knudepunkter. Men der er to grunde til, at dette er tilf\u00e6ldet.<\/p>\n<p>Den f\u00f8rste grund er tilstedev\u00e6relsen af selve internettet. Internettet er et ideelt eksempel p\u00e5 et netv\u00e6rk af uafh\u00e6ngige knudepunkter med overlap mellem quorum. De fleste knudepunkter i internettet forbinder kun med nogle f\u00e5 andre lokale knudepunkter, men disse sm\u00e5 s\u00e6t overlapper tilstr\u00e6kkeligt, s\u00e5 hvert knudepunkt er tilg\u00e6ngeligt fra hvert andet knudepunkt via en eller anden rute.<\/p>\n<p>Den anden \u00e5rsag er specifik for betalingsnetv\u00e6rket Stellar (den mest almindelige anvendelse af SCP). Hver aktiv i Stellar-netv\u00e6rket har en udsteder, og Stellar-anbefalingerne kr\u00e6ver, at hver udsteder tildeler en eller flere noder i netv\u00e6rket til at h\u00e5ndtere indl\u00f8sningsanmodninger. Det er i din interesse hurtigt eller indirekte at inkludere disse noder i quorum-slices for hvert aktiv, du er interesseret i. Derefter vil quorum for alle de noder, der er interesseret i det p\u00e5g\u00e6ldende aktiv, overlappe sig i det mindste i disse indl\u00f8sningsnoder. Noder, der er interesseret i flere aktiver, vil inkludere alle indl\u00f8sningsnoderne fra de relevante udstedere i deres quorum-slices, og de vil str\u00e6be efter at kombinere alle aktiverne. Desuden vil aktiver, der ikke er forbundet p\u00e5 denne m\u00e5de med andre i netv\u00e6rket, <i>ikke v\u00e6re forbundet<\/i> \u2014 dette er tilsigtet, s\u00e5 der ikke er nogen overlapning af quorum i dette netv\u00e6rk (for eksempel \u00f8nsker banker i dollarzonen nogle gange at handle med banker i eurozonen og banker i peso, s\u00e5 de er i samme netv\u00e6rk, men ingen af dem er interesserede i et separat netv\u00e6rk af b\u00f8rn, der handler med baseballkort).<\/p>\n<p>Selvf\u00f8lgelig, <i>forventning<\/i> til overlapning af quorum er ikke en <i>garanti<\/i>. Andre byzantinske konsensusystemer er i h\u00f8j grad pr\u00e6get af garantien for quorum. En vigtig innovation ved SCP er, at det frig\u00f8r skabelsen af quorum fra selve konsensusalgoritmen og flytter det til applikationsniveau. Derfor, selvom f\u00f8deral stemmeafgivning er relativt almindelig for stemmeafgivning om enhver sag, afh\u00e6nger dens p\u00e5lidelighed kritisk af den bredere betydning af disse v\u00e6rdier. Nogle hypotetiske anvendelser kan vise sig at v\u00e6re mindre hensigtsm\u00e6ssige til at skabe godt forbundne netv\u00e6rk end andre.<\/p>\n<h1>Stemmesystem, godkendelse og bekr\u00e6ftelse<\/h1>\n<p>\nI runden om f\u00f8deral stemmeafgivning begynder noden valgfrit at stemme for en bestemt v\u00e6rdi V. Dette betyder, at der sendes en meddelelse til netv\u00e6rket: \"Jeg er node N, mine quorum-slices Q, og jeg stemmer for V\". N\u00e5r noden stemmer p\u00e5 denne m\u00e5de, lover den, at den aldrig har stemt imod V og aldrig vil.<\/p>\n<p>I peer-to-peer-transmission ser, ser hver node, hvordan andre stemmer. N\u00e5r en node har samlet tilstr\u00e6kkeligt med s\u00e5danne meddelelser, kan den spore de quorum-skiv, der er blevet dannet, og fors\u00f8ge at finde quorum. Hvis den ser et quorum af peers, der ogs\u00e5 stemmer for V, kan den g\u00e5 videre til <i>acceptance<\/i> af V og sende den nye meddelelse til netv\u00e6rket: \u201eJeg er node N, mine quorum-skiver Q, og jeg accepterer V.\u201d Accept giver en st\u00e6rkere garanti end simpel stemmeafgivning. N\u00e5r en node stemmer for V, kan den aldrig stemme for andre muligheder. Men hvis en node accepterer V, vil ingen node i netv\u00e6rket nogensinde acceptere en anden mulighed (teorem 8 i SCP-teknisk dokumentation beviser dette).<\/p>\n<p>Selvf\u00f8lgelig er der en h\u00f8j sandsynlighed for, at der ikke straks vil blive fundet et quorum af noder, der er enige om V. Andre noder kan stemme for andre v\u00e6rdier. Men for noden er der en anden m\u00e5de at g\u00e5 fra simpel stemmeafgivning til acceptance. N kan acceptere en anden v\u00e6rdi W, selvom den ikke har stemt for den, og selvom den ikke ser et quorum for denne. <i>blokerende m\u00e6ngde<\/i> noder, der har accepteret W. Den blokerende m\u00e6ngde er \u00e9n node fra hver af quorum-skiverne N. Som navnet antyder, er den i stand til <i>at blokere<\/i> en hvilken som helst anden v\u00e6rdi. Hvis alle noder i en s\u00e5dan m\u00e6ngde accepterer W, s\u00e5 (if\u00f8lge teorem 8) vil det aldrig v\u00e6re muligt at danne et quorum, der accepterer en anden v\u00e6rdi, og derfor er det ogs\u00e5 sikkert for N at acceptere W.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Node N med tre quorum-skiver.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F er den blokerende m\u00e6ngde for N: den inkluderer \u00e9n node fra hver af skiverne N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E er ogs\u00e5 en blokerende m\u00e6ngde for N, fordi E vises i to af skiverne N.<\/i><\/p>\n<p>Men den blokerende m\u00e6ngde er ikke et quorum. Det ville v\u00e6re for nemt at narre node N til at acceptere den \u00f8nskede v\u00e6rdi, hvis det var tilstr\u00e6kkeligt at hacke \u00e9n node i hver af skiverne N. Derfor er accept af en v\u00e6rdi ikke slutningen p\u00e5 stemmeafgivningen. I stedet skal N bekr\u00e6fte v\u00e6rdien, hvilket betyder, at den skal se et quorum af noder, der accepterer det. Hvis den kommer s\u00e5 langt, som det bevises af SCP-teknisk dokumentation (i teorem 11), vil resten af netv\u00e6rket ogs\u00e5 til sidst bekr\u00e6fte den samme v\u00e6rdi, s\u00e5 N afslutter det f\u00f8derative stemme med en bestemt v\u00e6rdi som resultat.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>F\u00f8derativ stemmeafgivning.<\/i><\/p>\n<p>Stemmesystemet til vedtagelse og bekr\u00e6ftelse udg\u00f8r en fuld runde af f\u00f8deral stemmeafgivning. Stellar konsensusprotokol samler mange s\u00e5danne runder for at skabe et komplet konsensus-system.<\/p>\n<h1>Stellar konsensusprotokol<\/h1>\n<p>\nDe to mest vigtige egenskaber ved et konsensus-system er <i>sikkerhed<\/i> og <i>modstandsdygtighed<\/i>. Konsensusalgoritmen er \"sikker\", hvis den aldrig kan give forskellige resultater til forskellige deltagere (Bob's historie vil aldrig modsige Carol's). \"Modstandsdygtighed\" betyder, at algoritmen altid vil producere et resultat, dvs. den vil ikke sidde fast.<\/p>\n<p>Den beskrevne procedure for f\u00f8deral stemmeafgivning <i>er sikker<\/i> i den forstand, at hvis en node bekr\u00e6fter v\u00e6rdien V, s\u00e5 vil ingen anden node bekr\u00e6fte en anden v\u00e6rdi. Men \"ikke bekr\u00e6fte en anden v\u00e6rdi\" betyder ikke, at den n\u00f8dvendigvis vil bekr\u00e6fte noget. Deltagere kan stemme for s\u00e5 mange forskellige v\u00e6rdier, at ingen n\u00e5r t\u00e6rsklen for vedtagelse. Dette betyder, at der i f\u00f8deral stemmeafgivning ikke findes <i>modstandsdygtighed<\/i>.<\/p>\n<p>Stellar konsensusprotokol bruger f\u00f8deral stemmeafgivning p\u00e5 en m\u00e5de, der garanterer b\u00e5de sikkerhed og modstandsdygtighed. (Sikkerheds- og modstandsdygtighedsgarantierne for SCP har en teoretisk gr\u00e6nse. Konstruktet v\u00e6lger en meget st\u00e6rk sikkerhedsgaranti, hvilket ofrer en lille smule af modstandsdygtighed, men under hensyntagen til tilstr\u00e6kkelig tid vil konsensus med h\u00f8j sandsynlighed blive n\u00e5et). Kort sagt g\u00e5r id\u00e9en ud p\u00e5 at afholde flere f\u00f8derale stemmeafgivelser for flere v\u00e6rdier, indtil en af dem fuldt ud g\u00e5r igennem alle faserne af SCP-stemmesystemet, som beskrevet nedenfor.<\/p>\n<p>De v\u00e6rdier, som SCP str\u00e6ber efter at opn\u00e5 konsensus om, kan v\u00e6re historien om transaktioner eller en bestilling p\u00e5 frokost, eller noget andet, men det er vigtigt at bem\u00e6rke, at det ikke er disse v\u00e6rdier, der vedtages eller bekr\u00e6ftes. I stedet finder f\u00f8deral stemmeafgivning sted for <i>udsagn om disse v\u00e6rdier<\/i>.<\/p>\n<p>De f\u00f8rste runder af f\u00f8deral stemmeafgivning finder sted i <i>nomineringens fase<\/i> (nomination phase), i et s\u00e6t udsagn som \"Jeg nominerer V\", muligvis for mange forskellige v\u00e6rdier V. M\u00e5let med nomineringen er at finde et eller flere udsagn, der kan n\u00e5 vedtagelse og bekr\u00e6ftelse.<\/p>\n<p>Efter at have fundet bekr\u00e6ftede kandidater g\u00e5r SCP videre til afstemningsfasen, hvor m\u00e5let er at finde en eller anden <i>stemme<\/i> (det vil sige en beholder for den foresl\u00e5ede v\u00e6rdi) og et quorum, der kan erkl\u00e6re <i>commit<\/i> for det (commit). Hvis quorummet foretager en commit af stemmen, accepteres dens v\u00e6rdi som konsensus. Men f\u00f8r en node kan stemme for commit af stemmen, skal den f\u00f8rst bekr\u00e6fte <i>annulleringen<\/i> af alle stemmer med en lavere t\u00e6llev\u00e6rdi. Disse trin \u2014 annullering af stemmer for at finde den, som commit kan bekr\u00e6ftes for \u2014 involverer flere runder af f\u00f8derativ afstemning over flere erkl\u00e6ringer om stemmer.<\/p>\n<p>I de f\u00f8lgende afsnit beskrives nominering og afstemning mere detaljeret.<\/p>\n<h1>Nominering<\/h1>\n<p>\nI begyndelsen af nomineringstrinnet kan hver node spontant v\u00e6lge v\u00e6rdien V og stemme for at bekr\u00e6fte \"Jeg nominerer V\". M\u00e5let p\u00e5 dette trin er at bekr\u00e6fte nomineringen af en given v\u00e6rdi gennem f\u00f8derativ afstemning.<\/p>\n<p>Det er muligt, at et tilstr\u00e6kkeligt antal noder stemmer for tilstr\u00e6kkeligt forskellige erkl\u00e6ringer, og ingen nominering kan n\u00e5 t\u00e6rsklen for godkendelse. Derfor, ud over at overf\u00f8re deres egne nominative stemmer, \"reflekterer\" noder nomineringer fra deres naboer. Refleksion betyder, at hvis en node stemmer for nomineringen V, men ser en besked fra en nabo, der stemmer for nomineringen W, s\u00e5 vil den nu stemme for b\u00e5de nomineringen V og W. (Ikke alle stemmer fra naboer reflekteres under nomineringen, da dette kan f\u00f8re til en eksplosion af forskellige kandidater. SCP inkluderer en mekanisme til at regulere disse stemmer. Kort sagt, der findes en formel til at bestemme \"prioriteten\" af en peer set fra noden, og kun stemmer fra h\u00f8jprioriterede noder reflekteres. Jo l\u00e6ngere nomineringen varer, jo lavere er t\u00e6rsklen, s\u00e5 noden udvider s\u00e6ttet af naboer, hvis stemmer den vil reflektere. Prioritetsformlen inkluderer slotnumret som en af inputene, s\u00e5 en h\u00f8jprioriteret peer-node for \u00e9n slot kan v\u00e6re lavprioriteret for en anden, og omvendt).<\/p>\n<p>Konceptuelt er frems\u00e6ttelsen af b\u00e5de V og W separate f\u00f8derative stemmer, hver is\u00e6r i stand til at opn\u00e5 vedtagelse eller bekr\u00e6ftelse. I praksis pakker SCP-protokolens meddelelser disse separate stemmer sammen.<\/p>\n<p>Selvom stemmeafgivningen for frems\u00e6ttelse af V er et l\u00f8fte om aldrig at stemme imod frems\u00e6ttelse af V, defineres der p\u00e5 anvendelsesniveauet - i dette tilf\u00e6lde SCP - hvad 'imod' betyder. SCP ser ikke en erkl\u00e6ring, der strider imod stemmeafgivningen 'Jeg frems\u00e6tter X', dvs. der er ikke en meddelelse 'Jeg stemmer imod frems\u00e6ttelse af X', s\u00e5 noden kan stemme for frems\u00e6ttelse af enhver v\u00e6rdi. Mange af disse nomineringer vil ikke f\u00f8re til noget, men i sidste ende kan noden godkende eller bekr\u00e6fte en eller flere v\u00e6rdier. N\u00e5r en nominant er bekr\u00e6ftet, bliver han <i>nominert<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Frems\u00e6ttelse af SCP ved hj\u00e6lp af f\u00f8derativ stemmeafgivning. Der kan v\u00e6re mange v\u00e6rdier \u201cB\u201d, der frems\u00e6ttes af ligestillede noder og 'reflekteret' af en node.<\/i> <\/p>\n<p>Frems\u00e6ttelse af kandidater kan f\u00f8re til, at der opst\u00e5r flere bekr\u00e6ftede kandidater. Derfor kr\u00e6ver SCP, at applikationsniveauet giver en metode til at sammenl\u00e6gge kandidaterne til \u00e9n <i>komposit<\/i> (komposit). Sammenl\u00e6gningsmetoden kan v\u00e6re en hvilken som helst. Det vigtigste er, at hvis denne metode er deterministisk, s\u00e5 vil hver node sammenl\u00e6gge de samme kandidater. I et m\u00e5ltid stemmesystem kan 'sammenl\u00e6gningen' blot betyde at forkaste en af de to kandidater. (Men p\u00e5 en deterministisk m\u00e5de: hver node skal v\u00e6lge den samme v\u00e6rdi til nulstilling. For eksempel tidligere valg i alfabetisk r\u00e6kkef\u00f8lge). I Stellar betalingsnetv\u00e6rket, hvor stemmeafgivning om transaktionshistorik finder sted, indeb\u00e6rer sammenl\u00e6gningen af to foresl\u00e5ede kandidater en sammenl\u00e6gning af de transaktioner, de indeholder, og de seneste af deres to tidsstempler.<\/p>\n<p>Den tekniske beskrivelse af SCP beviser (teorem 12), at netv\u00e6rket i sidste ende konvergerer til en enkelt komposit ved afslutningen af frems\u00e6tningsfasen. Men der er et problem: f\u00f8derativ stemmeafgivning er en asynkron protokol (ligesom SCP). Med andre ord er noderne ikke koordineret tidsm\u00e6ssigt, men kun via de meddelelser, de sender. Set fra en nodes synspunkt er det uklart, hvorn\u00e5r <i>afsluttet<\/i> udriftsfase. Selvom alle noder til sidst vil komme til den samme sammens\u00e6tning, kan de v\u00e6lge forskellige ruter undervejs, hvilket skaber forskellige kandidater undervejs, og de kan aldrig vide, hvilken der er den endelige.<\/p>\n<p>Men det er i orden. Udrift er blot en forberedelse. Det vigtigste er at begr\u00e6nse antallet af kandidater for at opn\u00e5 konsensus, hvilket sker i processen. <i>afstemning<\/i> (afstemning).<\/p>\n<h1>Afstemning<\/h1>\n<p>\nEn stemmeseddel er et par , hvor counter er et helt tal, der starter fra 1, og value er kandidaten fra udriftsfasen. Dette kan v\u00e6re nodens egen kandidat eller en kandidat fra en nabo-node, som denne node har accepteret. Groft sagt g\u00f8r afstemningen gentagne fors\u00f8g p\u00e5 at f\u00e5 netv\u00e6rket til at n\u00e5 konsensus om en kandidat i en given stemmeseddel ved at gennemf\u00f8re potentielt mange f\u00f8derale afstemninger om stemmesedler. T\u00e6llere i stemmesedlerne holder styr p\u00e5 de foretagne fors\u00f8g, og stemmesedler med h\u00f8jere t\u00e6llere har prioritet over dem med lavere t\u00e6llere. Hvis stemmesedlen  h\u00e6nger fast, p\u00e5begyndes en ny afstemning, nu p\u00e5 stemmesedlen .<\/p>\n<p>Det er vigtigt at skelne mellem <i>v\u00e6rdier<\/i> (for eksempel hvad bestillingen til frokost skal v\u00e6re: pizza eller salater), <i>stemmesedler<\/i> (par counter-value) og <i>udtalelser<\/i> om stemmesedler. En SCP-runde inkluderer flere runder af f\u00f8deral afstemning, is\u00e6r om s\u00e5danne udsagn:<\/p>\n<ul>\n<li>\"Jeg er klar til at forpligte stemmeseddel B\" og\n<\/li>\n<li>\"Jeg erkl\u00e6rer forpligtelsen til stemmeseddel B\".<\/li>\n<\/ul>\n<p>\nFra dette nodes perspektiv opn\u00e5s konsensus, n\u00e5r den finder stemmeseddel B, som den kan bekr\u00e6fte (dvs. finde et quorum, der accepterer) udsagnet \"Jeg erkl\u00e6rer forpligtelsen til stemmeseddel B\". Fra dette tidspunkt kan man sikkert handle efter v\u00e6rdien angivet i B \u2013 for eksempel ved at placere denne frokostbestilling. Dette kaldes <i>eksternalisering<\/i> af v\u00e6rdien. N\u00e5r det er bekr\u00e6ftet, at stemmesedlen er vedtaget, kan noden v\u00e6re sikker p\u00e5, at enhver anden node har eksternaliseret denne samme v\u00e6rdi eller vil g\u00f8re det i fremtiden.<\/p>\n<p>Selvom mange f\u00f8derative afstemninger konceptuelt udf\u00f8res p\u00e5 erkl\u00e6ringer om mange forskellige stemmesedler, udveksles der ikke s\u00e5 mange beskeder, fordi hver besked indkapsler en r\u00e6kke stemmesedler. En besked fremmer s\u00e5ledes tilstanden for mange f\u00f8derative afstemninger p\u00e5 \u00e9n gang, for eksempel: \u00abJeg accepterer committet af stemmesedler i intervallet fra  til .\u00bb<\/p>\n<p>Hvad betyder begreberne \u00abforberedt\u00bb (prepared) og \u00abcommit\u00bb (commit)?<\/p>\n<p>Noden stemmer for commit af stemmesedlen, n\u00e5r den er overbevist om, at andre noder ikke vil foretage commit af stemmesedler med andre v\u00e6rdier. At blive overbevist om dette er m\u00e5let med at forberede erkl\u00e6ringen. Stemmesedlen, der siger: \u00abJeg er klar til commit af stemmesedlen B\u00bb, er et l\u00f8fte om aldrig at foretage commit af en stemmeseddel mindre end B, dvs. med en lavere t\u00e6ller (SCP kr\u00e6ver, at v\u00e6rdierne i stemmesedlerne har en bestemt r\u00e6kkef\u00f8lge. S\u00e5ledes er stemmesedlen  mindre end , hvis N1&lt;N2, og ogs\u00e5 hvis N1=N2 og V1&lt;V2). Disse mindre stemmesedler \u00abannulleres\u00bb (aborted) under forberedelsesafstemningen, mens B betragtes som \u00abforberedt\u00bb.<\/p>\n<p>Hvorfor betyder \u00abJeg er klar til commit af stemmesedlen B\u00bb \u00abJeg lover aldrig at tillade commit af stemmesedler mindre end B\u00bb? Fordi SCP definerer abort som mods\u00e6tning til commit. Afstemning om forberedelse af stemmesedlen indeb\u00e6rer ogs\u00e5 afstemning om annullering af nogle andre stemmesedler, og som vi har diskuteret f\u00f8r, er afstemning om \u00e9n ting et l\u00f8fte om aldrig at stemme imod den.<\/p>\n<p>F\u00f8r en commit kan sendes, skal noden f\u00f8rst finde en stemmeseddel, som den kan bekr\u00e6fte som forberedt. Med andre ord, den gennemf\u00f8rer en f\u00f8derativ afstemning om emnet \u00abJeg er klar til commit af stemmesedlen B\u00bb, muligvis for mange forskellige stemmesedler, indtil den finder den, der accepterer kvorummet.<\/p>\n<p>Hvor kommer stemmesedlerne til valgforberedelsen fra? F\u00f8rst transmitterer noden forberedelsen til stemmesedlen for , hvor C er kandidatkompositten, der blev produceret under nomineringen. Men selv efter begyndelsen af stemmesedlens forberedelse kan nomineringen f\u00f8re til nye kandidater, som vil blive nye stemmesedler. Imellemtiden kan pirerne have forskellige kandidater, og de kan danne en blokkerende m\u00e6ngde, der accepterer \"Jeg er klar til at kommittere stemmeseddel B2\", hvilket overbeviser noden om ogs\u00e5 at tage den med. Endelig er der en timeout-mekanisme, der genererer nye runder af f\u00f8deral afstemning p\u00e5 nye stemmesedler med h\u00f8jere t\u00e6llere, hvis de nuv\u00e6rende stemmesedler sidder fast.<\/p>\n<p>N\u00e5r noden finder en stemmeseddel B, som kan bekr\u00e6ftes som forberedt, transmitterer den en ny besked \"Commit stemmeseddel B\". Denne afstemning fort\u00e6ller pirerne, at noden aldrig vil give afkald p\u00e5 B. I virkeligheden, hvis B er en stemmeseddel , s\u00e5 betyder \"Commit stemmeseddel \" ubetinget samtykke til at stemme for beredskabet af hver stemmeseddel fra  til . Denne ekstra betydning hj\u00e6lper andre noder med at indhente piren med commit, hvis de stadig er p\u00e5 tidligere faser af protokollen.<\/p>\n<p>P\u00e5 dette tidspunkt er det v\u00e6rd at understrege, at disse er asynkrone protokoller. Bare fordi en node sender stemmer for commit, betyder det ikke, at dens j\u00e6vnaldrende ogs\u00e5 g\u00f8r det. Nogle af dem kan stadig stemme om erkl\u00e6ringer til forberedelsen af afstemningen, mens andre muligvis allerede har eksternaliseret betydningen. SCP forklarer, hvordan en node skal h\u00e5ndtere hver type peer-to-peer besked uafh\u00e6ngigt af dens fase.<\/p>\n<p>Hvis beskeden \"Jeg erkl\u00e6rer commit &lt;N,C&gt;\" ikke kan accepteres eller bekr\u00e6ftes, er der en chance for, at beskeden &lt;N+1, C&gt; eller &lt;N+2, C&gt; vil blive accepteret eller bekr\u00e6ftet \u2014 eller under alle omst\u00e6ndigheder enhver bulletins med v\u00e6rdien C, og ikke nogen anden, da noden allerede har lovet aldrig at tilbagekalde &lt;N,C&gt;. P\u00e5 det tidspunkt, hvor noden transmitterer stemmer for committet, vil det v\u00e6re C eller intet, afh\u00e6ngigt af hvor langt konsensus str\u00e6kker sig. Men dette er stadig ikke tilstr\u00e6kkeligt for noden til at eksternalisere C. Nogle byzantinske bedragere (som udg\u00f8r mindre end quorum baseret p\u00e5 vores antagelser om sikkerhed) kan lyve for noden. Accepteringen og derefter bekr\u00e6ftelsen af et bestemt bulletin (eller et interval af bulletins) \u2014 det er hvad der giver noden sikkerhed for endelig at eksternalisere C.<\/p>\n<p><img decoding=\"async\" alt=\"Vi forst\u00e5r konsensusprotokollen Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Afstemning af SCP gennem f\u00f8derativ afstemning. Ikke vist: n\u00e5r som helst kan en timer aktiveres, der \u00f8ger t\u00e6lleren i bulletinen (og muligvis skabe en ny komposit af yderligere nominerede kandidater).<\/i> <\/p>\n<p>Og det er det! S\u00e5 snart netv\u00e6rket n\u00e5r til konsensus, er det klar til at g\u00f8re det igen og igen. I Stellar betalingsnetv\u00e6rket sker dette cirka hvert 5. sekund: et brag, der kr\u00e6ver b\u00e5de sikkerhed og modstandsdygtighed, garanteret af SCP.<\/p>\n<p>SCP kan opn\u00e5 dette ved at stole p\u00e5 flere runder af f\u00f8derativ afstemning. F\u00f8derativ afstemning blev muliggjort ved konceptet med quorum-skiver: s\u00e6t af ligestillede noder, som hver node har besluttet at stole p\u00e5 som en del af sin (subjektive) quorum. Denne konfiguration betyder, at man kan n\u00e5 til konsensus selv i et \u00e5bent medlemskabsnetv\u00e6rk med byzantinske bedrageri.<\/p>\n<h1>Yderligere l\u00e6sning<\/h1>\n<p><\/p>\n<ul>\n<li>Det originale tekniske dokument for SCP kan findes <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">her<\/a><\/noindex>, og <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">her<\/a><\/noindex> specifikationsprojekt for dets implementering.\n<\/li>\n<li>Den originale forfatter af SCP-protokollen, David Mazieres, forklarer det forenklet (men stadig teknisk) <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">her<\/a><\/noindex>.\n<\/li>\n<li>Du har m\u00e5ske v\u00e6ret overrasket over ikke at finde udtrykkene \"minedrift\" eller \"proof-of-work\" i denne artikel. SCP bruger ikke disse metoder, men nogle andre konsensusalgoritmer g\u00f8r. Zain Waiswpoon har skrevet en tilg\u00e6ngelig <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">oversigt over konsensusalgoritmer<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Trinvise beskrivelser<\/a><\/noindex> af et simpelt netv\u00e6rk, der n\u00e5r konsensus i l\u00f8bet af \u00e9n fuld runde af SCP.\n<\/li>\n<li>For l\u00e6sere, der er interesseret i implementeringer af SCP: se <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">C++ kode<\/a><\/noindex>, der bruges af betalingsnetv\u00e6rket Stellar, eller <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">Go-kode<\/a><\/noindex>, som jeg skrev for bedre at forst\u00e5 SCP.<\/li>\n<\/ul>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Lad os forst\u00e5 Stellar-konsensusprotokollen | ProHoster","description":"Stellar-konsensusprotokollen blev f\u00f8rst beskrevet i.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}