{"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\/no\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Vi utforsker Stellar konsensusprotokoll","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStellar konsensusprotokoll ble f\u00f8rst beskrevet i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">en vitenskapelig artikkel<\/a><\/noindex> av David Mazieres i 2015. Dette er et \u00abfederativt bysantinsk avtalesystem\u00bb som lar desentraliserte datanettverk uten ledere effektivt oppn\u00e5 konsensus om en bestemt avgj\u00f8relse. Stellar betalingsnettverk bruker Stellar Consensus Protocol (SCP) for \u00e5 opprettholde en enhetlig transaksjonshistorie som alle deltakere kan se.<\/p>\n<p>Det antas at konsensusprotokoller er vanskelige \u00e5 forst\u00e5. SCP er enklere enn de fleste, men har fortsatt et slikt rykte \u2013 delvis p\u00e5 grunn av misforst\u00e5elsen om at \u00abfederativ avstemming\u00bb, som er temaet for den f\u00f8rste delen av den vitenskapelige artikkelen, er SCP. Men det er ikke tilfelle! Det er bare en viktig byggestein som i den andre delen av artikkelen brukes til \u00e5 lage <i>den faktiske<\/i> Stellar konsensusprotokollen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nI denne artikkelen gir vi en kort oversikt over hva et \u00abavtalesystem\u00bb er, hva som kan gj\u00f8re det \u00abbysantinsk\u00bb, og hvorfor man skal gj\u00f8re et bysantinsk system \u00abfederativt\u00bb. Deretter forklarer vi den federative avstemningsprosessen som er beskrevet i artikkelen om SCP, og til slutt forklarer vi selve SCP-protokollen.<\/p>\n<h1>Avtalesystemer<\/h1>\n<p>\nEt avtalesystem lar en gruppe deltakere komme til enighet om et emne, for eksempel hva de skal bestille til lunsj.<\/p>\n<p>Vi i Interstellar har implementert v\u00e5rt eget system for lunsjavtale: vi bestiller det som v\u00e5r driftsleder John sier. Dette er et enkelt og effektivt avtalesystem. Vi har alle tillit til John og tror at han hver dag vil finne noe interessant og n\u00e6ringsrikt.<\/p>\n<p>Men hva om John misbruker v\u00e5r tillit? Han kan ensidig beslutte at vi alle m\u00e5 bli veganere. Om en uke eller to vil vi sannsynligvis avsette ham og gi makten til Elizabeth. Men hva om hun elsker avocado med ansjos og mener at alle m\u00e5 bli slik. Makten korrumperer. Derfor er det bedre \u00e5 finne en mer demokratisk metode: en m\u00e5te \u00e5 forsikre seg om at ulike preferanser blir hensyntatt, samtidig som man sikrer et tidsbestemt og entydig resultat, slik at det ikke skjer at ingen bestiller lunsj eller at fem personer legger inn forskjellige bestillinger, eller at diskusjonen drar ut til kvelden.<\/p>\n<p>Det virker som en enkel l\u00f8sning: \u00e5 holde en avstemning! Men dette er et villedende inntrykk. Hvem skal samle inn stemmesedlene og rapportere resultatene? Og hvorfor skal de andre tro p\u00e5 det han sier? Kanskje kan vi <i>f\u00f8rst<\/i> stemme p\u00e5 en leder vi stoler p\u00e5 til \u00e5 lede avstemningen \u2014 men hvem skal lede denne <i>f\u00f8rste<\/i> avstemningen? Hva om vi ikke klarer \u00e5 bli enige om en leder? Eller hvis vi blir enige, men denne lederen sitter fast i et m\u00f8te eller blir sykemeldt?<\/p>\n<p>Lignende problemer oppst\u00e5r i distribuerte datasystemer. Alle deltakere eller noder m\u00e5 bli enige om en l\u00f8sning, for eksempel hvem som har ansvaret for \u00e5 oppdatere den felles filen eller plukke opp en oppgave fra behandlingsk\u00f8en. I en kryptovalutanettverk m\u00e5 nodene gjentatte ganger velge hvordan den fullstendige historien ser ut, blant flere mulige versjoner, som noen ganger kan v\u00e6re i konflikt. Denne nettverksenigheten gir mottakeren garanti for at mynten er (a) gyldig (ikke falsk) og (b) enn\u00e5 ikke brukt et annet sted. Det garanterer ogs\u00e5 at han kan bruke myntene i fremtiden, fordi den nye mottakeren vil ha de samme garantiene av de samme grunnene.<\/p>\n<p>Ethvert konsensus-system i et distribuert datanettverk m\u00e5 v\u00e6re robust mot feil: det m\u00e5 gi konsekvente resultater til tross for feil som langsomme forbindelser, ikke-responderende noder og feil rekkef\u00f8lge p\u00e5 meldinger. <i>Den bysantinske<\/i> konsensus-systemet er i tillegg motstandsdyktig mot \u00abbysantinske\u00bb feil: noder som gir falsk informasjon, enten det er p\u00e5 grunn av feil eller i et bevisst fors\u00f8k p\u00e5 \u00e5 undergrave systemet eller oppn\u00e5 en fordel. \u00abBysantinsk\u00bb feiltoleranse\u00a0\u2014 evnen til \u00e5 stole p\u00e5 gruppens avgj\u00f8relse, selv n\u00e5r enkelte medlemmer av gruppen kan lyve eller p\u00e5 annen m\u00e5te ikke f\u00f8lge beslutningsprosessen\u00a0\u2014 fikk sitt 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\">liknelsen om de bysantinske generalene<\/a><\/noindex>, som pr\u00f8vde \u00e5 koordinere et angrep. <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> finnes hos Anthony Stevens.<\/p>\n<p>La oss vurdere kryptovaluta-eieren Alice, som m\u00e5 velge mellom \u00e5 kj\u00f8pe deilig iskrem fra Bob og betale gjelden sin til Carol. Kanskje \u00f8nsker Alice \u00e5 betale begge med samme mynt samtidig, ved \u00e5 bruke den svindelaktig. For \u00e5 gj\u00f8re dette m\u00e5 hun overbevise Bobs datamaskin om at mynten aldri har blitt betalt til Carol, og overbevise Carols datamaskin om at mynten aldri har blitt betalt til Bob. Et bysantinsk avtalesystem gj\u00f8r dette praktisk talt umulig ved \u00e5 bruke en flertallsregel kalt <i>kvotum<\/i>. En node i et slikt nettverk nekter \u00e5 g\u00e5 over til en bestemt versjon av historien, f\u00f8r den ser at et tilstrekkelig antall likestilte noder \u2013 kvotum \u2013 er enige om \u00e5 gj\u00f8re det. N\u00e5r dette skjer, vil de danne en stor nok valgblokk til \u00e5 f\u00e5 de resterende nodene i nettverket til \u00e5 godta avgj\u00f8relsen deres. Alice kan f\u00e5 noen noder til \u00e5 lyve p\u00e5 hennes vegne, men hvis nettverket er stort nok, vil fors\u00f8ket hennes bli overvunnet av stemmen til \u00e6rlige noder.<\/p>\n<p>Hvor mange noder kreves for kvotum? Som minimum, flertallet, mer spesifikt, et kvalifisert flertall for \u00e5 motst\u00e5 feil og svindel. Men for \u00e5 telle flertallet, m\u00e5 man vite det totale antallet deltakere. P\u00e5 Interstellar-kontoret eller ved lokale valg er disse tallene enkle \u00e5 finne. Men hvis gruppen din er et svakt definert nettverk, hvor noder kan komme og g\u00e5 etter eget \u00f8nske uten samtykke fra et senter, da er det n\u00f8dvendig med en <i>f\u00f8derativ<\/i> bysantinsk avtalesystem som kan identifisere kvotum ikke fra en forh\u00e5ndsbestemt liste over noder, men dynamisk, fra et stadig skiftende og uunng\u00e5elig ufullstendig snapshot av noder p\u00e5 et bestemt tidspunkt.<\/p>\n<p>Det kan virke umulig \u00e5 skape et kvotum sett fra \u00e9n nodes perspektiv i et stort nettverk, men det er mulig. Et slikt kvotum kan til og med garantere resultater fra desentralisert stemming. Det tekniske dokumentet SCP viser hvordan dette kan gj\u00f8res ved hjelp av en prosedyre kalt <i>f\u00f8derativ stemming<\/i>.<\/p>\n<h1>For de ut\u00e5lmodige<\/h1>\n<p>\nResten av artikkelen beskriver mer detaljert den f\u00f8derative stemmingen og Stellar-konsensusprotokollen. Hvis du ikke er interessert i detaljene, her er en generell oversikt over prosessen.<\/p>\n<ol>\n<li>Noderne holder runder med f\u00f8deral afstemning om \"nominaterne\". En runde af f\u00f8deral afstemning betyder:\n<ul>\n<li>Noden stemmer for et forslag, for eksempel \"Jeg foresl\u00e5r v\u00e6rdien V\";\n<\/li>\n<li>Noden lytter til stemmerne fra noderne, indtil den finder \u00e9n, der kan \"acceptere\";\n<\/li>\n<li>Noden s\u00f8ger efter et \"kvorum\" for dette forslag. Kvorummet \"bekr\u00e6fter\" nominaten.<\/li>\n<\/ul>\n<\/li>\n<li>N\u00e5r noden kan bekr\u00e6fte \u00e9n eller flere nominater, fors\u00f8ger den at \"forberede\" \"stemmesedlen\" gennem flere runder med f\u00f8deral afstemning.\n<\/li>\n<li>N\u00e5r noden er i stand til at kontrollere beredskabet af stemmesedlen, fors\u00f8ger den at kommittere den med hj\u00e6lp af endnu flere runder med f\u00f8deral afstemning.\n<\/li>\n<li>N\u00e5r noden kan bekr\u00e6fte kommitment af stemmesedlen, kan den \"eksternalisere\" v\u00e6rdien af denne stemmeseddel ved at bruge den som resultatet af konsensus.<\/li>\n<\/ol>\n<p>\nDisse trin inkluderer flere runder med f\u00f8deral afstemning, som tilsammen danner \u00e9n runde SCP. Lad os kigge n\u00e6rmere p\u00e5, hvad der sker p\u00e5 hvert trin.<\/p>\n<h1>F\u00f8deral afstemning<\/h1>\n<p>\nF\u00f8deral afstemning er en procedure til at bestemme, om netv\u00e6rket kan enes om et forslag. I afstemningsrunden skal hver node v\u00e6lge en af mange mulige v\u00e6rdier. Den kan ikke g\u00f8re dette, f\u00f8r den er sikker p\u00e5, at de andre noder i netv\u00e6rket ikke v\u00e6lger et andet resultat. For at v\u00e6re sikre p\u00e5 dette, udveksler noderne en str\u00f8m af beskeder frem og tilbage, s\u00e5 alle <i>bekr\u00e6fter<\/i>, at <i>kvorummet<\/i> af noder <i>godtager<\/i> det samme <i>beslutningen<\/i>. Resten af denne sektion forklarer termerne i denne s\u00e6tning og hvordan hele proceduren forl\u00f8ber.<\/p>\n<h1>Kvorumer og kvorumskiver<\/h1>\n<p>\nLad os starte med at definere kvorum. Som vi diskuterede ovenfor, er det i et decentraliseret netv\u00e6rk med dynamisk medlemskab 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>kvorumskive<\/i> (quorum slice): et lille s\u00e6t af ligestillede noder, som noden har tillid til at overf\u00f8re information om afstemningsstatus til resten af netv\u00e6rket. Hver node bestemmer selv sin egen kvorumskive (som den bliver medlem af i praksis).<\/p>\n<p>Danning av quorum begynner med skj\u00e6ringspunktet for quorum. For hver node legges nodene i dens skj\u00e6ring til. Deretter legges medlemmene av skj\u00e6ringene til <i>disse nodene<\/i> og s\u00e5 videre. Etter hvert som prosessen fortsetter, dukker det opp flere og flere noder som du ikke kan legge til, fordi de allerede er inkludert i skj\u00e6ringen. N\u00e5r det ikke er flere nye noder \u00e5 legge til, stopper prosessen: vi har dannet et quorum gjennom \u00abtransitiv lukking\u00bb av skj\u00e6ringspunktet for den f\u00f8rste noden.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>For \u00e5 finne et quorum fra en gitt node...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... legger vi til medlemmene av dens skj\u00e6ring...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... deretter legger vi til medlemmene av skj\u00e6ringene til disse nodene.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vi fortsetter til det ikke er flere noder \u00e5 legge til.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Det er ikke flere noder \u00e5 legge til. Dette er et quorum.<\/i><\/p>\n<p>Faktisk kan hver node v\u00e6re en del av mer enn \u00e9n skj\u00e6ring. For \u00e5 danne et quorum velger du bare \u00e9n av skj\u00e6ringene og legger til medlemmene; deretter velger du hvilken som helst skj\u00e6ring for hvert av medlemmene og legger til medlemmer <i>dette<\/i> av skj\u00e6ringen og s\u00e5 videre. Dette betyr at hver node er medlem av et sett av mulige quorum.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Velg bare \u00e9n skj\u00e6ring for quorum i hvert steg.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Et mulig quorum. Eller et alternativ...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... velger andre skj\u00e6ringer...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(n\u00e5r det er mulig)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... skaper et annet quorum.<\/i><\/p>\n<p>Hvordan vet en node hvilke skj\u00e6ringer andre noder best\u00e5r av? Akkurat som med annen informasjon om andre noder: fra meldinger som hver node sender ut i nettverket n\u00e5r dens stemmekonstitusjon endres. Hver sending inkluderer informasjon om skj\u00e6ringene til den sendende noden. I den tekniske dokumentasjonen for SCP er ikke kommunikasjonsmekanismen spesifisert. Implementeringer bruker vanligvis <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip-protokollen<\/a><\/noindex> for \u00e5 garantere distribusjon av meldinger over hele nettverket.<\/p>\n<p>La oss minne om at i det ikke-federative bysantinske konsensus-systemet defineres kvoten som majoriteten av alle noder. Det bysantinske konsensus-systemet er utviklet med tanke p\u00e5 sp\u00f8rsm\u00e5let: hvor mange u\u00e6rlige noder kan systemet t\u00e5le? I et system med N noder, designet for \u00e5 overleve ved f feil (svindel), m\u00e5 en node v\u00e6re i stand til \u00e5 oppn\u00e5 fremdrift ved \u00e5 motta svar fra N\u2212f peer-noder, siden f av dem kanskje ikke fungerer. Men ved \u00e5 motta svar fra N\u2212f peer-noder, kan man anta at alle f peer-noder (fra hvilke noden ikke fikk svar) faktisk er \u00e6rlige. Dermed er de skadelige f av N\u2212f peer-noder (fra hvilke svar ble mottatt). For at nodene skal komme til en felles konsensus, m\u00e5 det v\u00e6re et flertall blant de gjenv\u00e6rende nodene, det vil si vi trenger at N\u2212f er st\u00f8rre enn 2f eller N &gt; 3f. S\u00e5 vanligvis vil et system designet for \u00e5 overleve ved f feil ha totalt N=3f+1 noder og en kvote-st\u00f8rrelse p\u00e5 2f+1. S\u00e5 snart et forslag passerer kvotet\u00e6rskelen, er de andre medlemmene i nettverket overbevist om at enhver konkurrerende forslag vil mislykkes. S\u00e5 nettverket konvergerer mot et resultat.<\/p>\n<p>Men i det federative bysantinske konsensus-systemet kan det ikke bare v\u00e6re noen flertall (fordi ingen vet den totale st\u00f8rrelsen p\u00e5 nettverket), men begrepet flertall er generelt ubrukelig! Hvis medlemskapet i systemet er \u00e5pent, kan noen f\u00e5 flertall bare ved \u00e5 gjennomf\u00f8re det som kalles en Sybil-angrep: ved gjentatte ganger \u00e5 bli med i nettverket gjennom flere noder. S\u00e5 hvorfor kan den transitive lukkingen av skj\u00e6ringen bli kalt <i>kvotum<\/i>, og hvordan klarer det \u00e5 undertrykke konkurrerende forslag?<\/p>\n<p>Teknisk sett, ikke i det hele tatt! Tenk deg et nettverk av seks noder, der to grupper er isolert i kvoten sine skj\u00e6ringer fra hverandre. Den f\u00f8rste undergruppen kan fatte en beslutning som den andre aldri f\u00e5r h\u00f8re om, og omvendt. For dette nettverket er det ingen m\u00e5te \u00e5 oppn\u00e5 konsensus (bortsett fra ved en tilfeldighet).<\/p>\n<p>Derfor krever SCP at for federativ avstemning (og for anvendelse av viktige teoremer i artikkelen) m\u00e5 nettverket ha en egenskap som kalles <i>kvotekrysning<\/i>. I nettverket med denne egenskapen, vil alltid to quorum som kan bygges, overlappe i minst ett nod. For \u00e5 bestemme de dominerende stemningene i nettverket, er dette like nyttig som \u00e5 ha flertallet. Intuitivt betyr dette at hvis et quorum er enig i utsagn X, kan ikke noe annet quorum aldri v\u00e6re enig i noe annet, fordi det m\u00e5 inkludere en node fra det f\u00f8rste quorum som allerede har stemt for X.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hvis det er overlapping av quorum i nettverket\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" 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 bygge\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 alltid krysse hverandre.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Selvf\u00f8lgelig kan de overlappende nodene vise seg \u00e5 v\u00e6re bysantinske-lurendreiere eller d\u00e5rlige p\u00e5 andre m\u00e5ter. I s\u00e5 fall vil ikke overlappingen av quorum hjelpe nettverket med \u00e5 oppn\u00e5 enighet i det hele tatt. Av denne grunn er mange resultater i det tekniske dokumentet SCP basert p\u00e5 \u00e5penbart uttrykte antakelser, som at det er et overlapp mellom quorum i nettverket, <i>selv etter fjerning av d\u00e5rlige noder.<\/i>. For enkelhets skyld lar vi disse antakelsene <i>v\u00e6r uuttalt<\/i> i resten av artikkelen).<\/p>\n<p>Det kan virke urimelig \u00e5 forvente p\u00e5litelig overlapping av quorum i et nettverk av uavhengige noder. Men det er to grunner til at dette er tilfelle.<\/p>\n<p>Den f\u00f8rste grunnen er eksisteringen av selve internett. Internett er et perfekt eksempel p\u00e5 et nettverk av uavhengige noder med overlapping av quorum. De fleste noder p\u00e5 internett kobles kun til noen f\u00e5 andre lokale noder, men disse sm\u00e5 settene overlapper stort nok til at hver node er tilgjengelig fra hverandre node via en eller annen rute.<\/p>\n<p>Den andre grunnen er spesifikk for betalingsnettet Stellar (den mest utbredte bruken av SCP). Hver aktivum i Stellar-nettverket har en utsteder, og Stellar-rekommandasjoner krever at hver utsteder utpeker en eller flere noder i nettverket for \u00e5 h\u00e5ndtere innl\u00f8sningsforesp\u00f8rsler. Det er i din interesse \u00e5 inkludere disse nodene direkte eller indirekte i kvorumene for hvert aktivum som interesserer deg. Dermed vil kvorumene for alle noder som er interessert i et bestemt aktivum, overlappe i det minste p\u00e5 disse innl\u00f8sningsnodene. Noder som er interessert i flere aktivum, vil inkludere alle innl\u00f8sningsnoder til de aktuelle utstederne i sine kvorumskutter, og de vil tilstrebe \u00e5 samle alle aktivum sammen. I tillegg vil eventuelle aktivum som ikke er knyttet p\u00e5 denne m\u00e5ten til andre i nettverket, og <i>skal ikke v\u00e6re knyttet<\/i> \u2014 det er designet slik at det ikke skal v\u00e6re overlappende kvorum i dette nettverket (for eksempel \u00f8nsker banker i dollar-sonen noen ganger \u00e5 handle med banker i euro-sonen og banker i pesos-sonen, s\u00e5 de er i ett og samme nettverk, men ingen av dem bryr seg om det separate nettet av barn som handler baseballkort).<\/p>\n<p>Selvf\u00f8lgelig, <i>vendingen<\/i> av kvorumene er ikke <i>en garanti<\/i>. Andre byzantinske konsensusystemer skylder mye av sin kompleksitet til kvorumgarantiene. Et viktig nyskapende aspekt ved SCP er at det avlaster ansvaret for \u00e5 danne kvorum fra selve konsensusalgoritmen og flytter det til applikasjonsniv\u00e5. Dermed, selv om f\u00f8derativ stemmegivning er temmelig generelt for \u00e5 stemme om hva som helst, avhenger p\u00e5liteligheten i virkeligheten kritisk av en bredere forst\u00e5else av disse verdiene. Noen hypotetiske bruksformer kan vise seg \u00e5 v\u00e6re mindre gunstige for \u00e5 skape godt sammenkoblede nettverk enn andre.<\/p>\n<h1>Stemmegivning, vedtak og bekreftelse<\/h1>\n<p>\nI runden for f\u00f8derativ stemmegivning kan en node valgfritt begynne \u00e5 stemme for en verdi V. Dette betyr \u00e5 sende et budskap til nettverket: \u00abJeg er node N, mine kvorumskutter er Q, og jeg stemmer for V\u00bb. N\u00e5r en node stemmer p\u00e5 denne m\u00e5ten, lover den at den aldri har stemt mot V og aldri vil gj\u00f8re det.<\/p>\n<p>I overf\u00f8ringene fra peer-noder ser hver node hvordan andre stemmer. S\u00e5 snart noden har samlet et tilstrekkelig antall slike meldinger, kan den spore skj\u00e6ringspunktene til kvorumene og pr\u00f8ve \u00e5 finne kvorumer. Hvis den ser et kvorum av noder som ogs\u00e5 stemmer for V, kan den g\u00e5 videre til <i>vedtak<\/i> V og sende denne nye meldingen til nettverket: \u00abJeg er node N, mine skj\u00e6ringspunkter til kvorum Q, og jeg vedtar V\u00bb. Vedtak gir en sterkere garanti enn enkel avstemning. N\u00e5r en node stemmer for V, kan den aldri stemme for andre alternativer. Men hvis en node vedtar V, vil ingen noder i nettet noen gang vedta et annet alternativ (teorem 8 i det tekniske dokumentet SCP beviser dette).<\/p>\n<p>Selvf\u00f8lgelig er det stor sjanse for at det umiddelbart ikke finnes et kvorum av noder som er enige om V. Andre noder kan stemme for andre verdier. Men for noden er det en annen m\u00e5te \u00e5 g\u00e5 fra enkel avstemning til vedtak. N kan vedta en annen verdi W, selv om den ikke har stemt for det, og selv om den ikke ser et kvorum for det. For \u00e5 \u00e6ndre sin stemme er det nok \u00e5 se <i>et blokkerende sett<\/i> av noder som har vedtatt W. Det blokkerende settet er \u00e9n node fra hver av skj\u00e6ringspunktene til kvorumene N. Som navnet antyder, er det i stand til <i>\u00e5 blokkere<\/i> enhver annen verdi. Hvis alle noder i et slikt sett vedtar W, s\u00e5 (if\u00f8lge teorem 8) vil det aldri v\u00e6re mulig \u00e5 danne et kvorum som vedtar en annen verdi, og derfor er det ogs\u00e5 trygt for N \u00e5 vedta W.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Node N med tre skj\u00e6ringspunkter av kvorumer.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F er et blokkerende sett for N: det inkluderer \u00e9n node fra hver av skj\u00e6ringspunktene til N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E er ogs\u00e5 et blokkerende sett for N, fordi E vises i to av skj\u00e6ringspunktene til N.<\/i><\/p>\n<p>Men et blokkerende sett er ikke et kvorum. Det ville v\u00e6rt for enkelt \u00e5 lure node N til \u00e5 vedta den \u00f8nskede verdien hvis det var tilstrekkelig \u00e5 hacke bare \u00e9n node i hver av skj\u00e6ringspunktene til N. Derfor er vedtak av verdien ikke slutten p\u00e5 avstemningen. I stedet m\u00e5 N bekrefte verdien, det vil si se et kvorum av noder som vedtar den. Hvis den kommer s\u00e5 langt, beviser det tekniske dokumentet SCP (i teorem 11) at resten av nettverket ogs\u00e5 til slutt vil bekrefte den samme verdien, s\u00e5 N vil fullf\u00f8re den f\u00f8derale avstemningen med en bestemt verdi som resultat.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>F\u00f8deral avstemning.<\/i><\/p>\n<p>Prosessen for avstemning, vedtak og bekreftelse utgj\u00f8r \u00e9n hel runde med f\u00f8deral avstemning. Stellar konsensusprotokollen kombinerer mange slike runder for \u00e5 skape et komplett konsensusssystem.<\/p>\n<h1>Stellar konsensusprotokoll<\/h1>\n<p>\nDe to viktigste egenskapene til et konsensussystem er <i>sikkerhet<\/i> og <i>robusthet<\/i>. Konsensusalgoritmen er \u00absikker\u00bb hvis den aldri kan gi forskjellige resultater til forskjellige deltakere (Bobs historie vil aldri stride med Carols). \u00abRobusthet\u00bb betyr at algoritmen alltid vil gi et resultat, det vil si at den ikke vil henge seg opp.<\/p>\n<p>Den beskrevne prosedyren for f\u00f8deral avstemning <i>er sikker<\/i> i den forstand at hvis en node bekrefter verdien V, s\u00e5 vil ingen annen node bekrefte en annen verdi. Men \u00abikke bekrefte en annen verdi\u00bb betyr ikke at den n\u00f8dvendigvis bekrefter noe. Deltakere kan stemme for s\u00e5 mange forskjellige verdier at ingenting n\u00e5r terskelen for vedtak. Dette betyr at det ikke er <i>robusthet<\/i>.<\/p>\n<p>Stellar konsensusprotokollen bruker f\u00f8deral avstemning p\u00e5 en m\u00e5te som garanterer b\u00e5de sikkerhet og robusthet. (Sikkerhets- og robusthetsgarantiene til SCP har et teoretisk begrenset niv\u00e5. Konstruksjonen velger en veldig sterk sikkerhetsgaranti, og ofrer en liten svekkelse av robustheten, men med tilstrekkelig tid vil konsensus med stor sannsynlighet bli oppn\u00e5dd). I korte trekk g\u00e5r ideen ut p\u00e5 \u00e5 gjennomf\u00f8re flere f\u00f8derale avstemninger om flere verdier inntil en av dem g\u00e5r helt gjennom alle fasene av SCPs avstemning, som beskrevet nedenfor.<\/p>\n<p>Verdiene som SCP s\u00f8ker konsensus om kan v\u00e6re en transaksjonshistorikk eller en bestilling av lunsj, eller noe annet, men det er viktig \u00e5 merke seg at dette ikke er de verdiene som bli vedtatt eller bekreftet. I stedet skjer den f\u00f8derale avstemningen om <i>p\u00e5stander om disse verdiene<\/i>.<\/p>\n<p>De f\u00f8rste rundene med f\u00f8deral avstemning skjer p\u00e5 <i>nominasjonsstadiet<\/i> (nominasjonsfase), med et sett av p\u00e5stander som \u00abJeg foresl\u00e5r V\u00bb, muligens for mange forskjellige verdier av V. M\u00e5let med nominasjonen er \u00e5 finne \u00e9n eller flere p\u00e5stander som kan g\u00e5 gjennom vedtakelse og bekreftelse.<\/p>\n<p>Etter \u00e5 ha funnet bekreftede kandidater, g\u00e5r SCP videre til avstemningsfasen, der m\u00e5let er \u00e5 finne en viss <i>stemmeseddel<\/i> (det vil si beholderen for det foresl\u00e5tte verdien) og quorum som kan erkl\u00e6re <i>commiten<\/i> for det (commit). Hvis quorumet gj\u00f8r commit av stemmeseddelen, aksepteres dens verdi som konsensus. Men f\u00f8r en node kan stemme for commit av stemmeseddelen, m\u00e5 den f\u00f8rst bekrefte <i>annuleringen<\/i> av alle stemmesedler med lavere telleverdi. Disse trinnene \u2014 annullering av stemmesedler for \u00e5 finne den som kan bekrefte commit \u2014 inkluderer flere runder med f\u00f8deral avstemning om flere p\u00e5stander om stemmesedler.<\/p>\n<p>I de f\u00f8lgende avsnittene beskrives nominasjon og avstemming mer detaljert.<\/p>\n<h1>Nominasjon<\/h1>\n<p>\nI begynnelsen av nominasjonsfasen kan hver node spontant velge en verdi V og stemme for \u00e5 bekrefte \"Jeg nominerer V\". M\u00e5let i denne fasen er \u00e5 bekrefte nominasjonen av en viss verdi gjennom f\u00f8deral avstemning.<\/p>\n<p>Det kan hende at et tilstrekkelig antall noder stemmer for tilstrekkelig forskjellige p\u00e5stander, og ingen nominering n\u00e5r akseptterskelen. Derfor, i tillegg til \u00e5 transmittere sine egne nominasjonsstemmer, \"reflekterer\" nodene nomineringene fra sine naboer. Refleksjon (echo) betyr at hvis en node stemmer for nominasjonen V, men ser en melding fra en nabo som stemmer for nominasjonen W, s\u00e5 vil den n\u00e5 stemme for b\u00e5de nominasjonene V og W. (Ikke alle stemmer fra naboer f\u00e5r refleksjon under nominasjonsprosessen, da dette kan f\u00f8re til en eksplosjon av forskjellige nominerte. SCP inkluderer en mekanisme for regulering av disse stemmene. Kort sagt, det finnes en formel for \u00e5 bestemme \"prioriteten\" til en nabo sett fra noden, og kun stemmene fra h\u00f8yprioriterte noder blir reflektert. Jo lengre nominasjonen p\u00e5g\u00e5r, jo lavere blir terskelen, s\u00e5 noden utvider settet av naboer hvis stemmer den vil reflektere. Prioritetsformelen som en av inngangsparameterne inkluderer slotnummeret, s\u00e5 en h\u00f8yprioritert peer for \u00e9n slot kan v\u00e6re lavprioritert for en annen, og omvendt).<\/p>\n<p>Konseptuelt er det \u00e5 fremme b\u00e5de V og W separate f\u00f8derale stemmer, som hver for seg kan oppn\u00e5 aksept eller bekreftelse. I praksis pakker SCP-protokollen disse separate stemmene sammen.<\/p>\n<p>Selv om \u00e5 stemme for \u00e5 fremme V er et l\u00f8fte om aldri \u00e5 stemme imot, definerer applikasjonsniv\u00e5et \u2013 i dette tilfellet SCP \u2013 hva \u00abimot\u00bb betyr. SCP ser ikke noen uttalelse som motsetter seg stemmene \u00abJeg fremmer X\u00bb, det vil si det finnes ingen melding \u00abJeg er imot \u00e5 fremme X\u00bb, s\u00e5 noden kan stemme for \u00e5 fremme alle verdier. Mange av disse nominasjonene vil ikke f\u00f8re til noe, men til slutt vil noden kunne akseptere eller bekrefte en eller flere verdier. N\u00e5r en nominert er bekreftet, blir han <i>kandidaten<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fremme av SCP ved hjelp av f\u00f8deralt stemmesystem. Det kan v\u00e6re mange verdier \u201cB\u201d som fremmes av likestilte noder og \u00abreflektert\u00bb av noden.<\/i> <\/p>\n<p>Fremming av kandidater kan f\u00f8re til flere bekreftbare kandidater. Derfor krever SCP at applikasjonsniv\u00e5et gir en eller annen metode for \u00e5 kombinere kandidater til \u00e9n <i>kompositt<\/i> (kompositt). Metoden for kombinasjon kan v\u00e6re hvilken som helst. Det viktigste er at hvis denne metoden er deterministisk, s\u00e5 vil hver node kombinere de samme kandidatene. I en stemmesystem for lunsj kan \u00abkombinering\u00bb ganske enkelt bety \u00e5 avst\u00e5 fra \u00e9n av de to kandidatene. (Men p\u00e5 en deterministisk m\u00e5te: hver node m\u00e5 velge den samme verdien som skal forkastes. For eksempel, et tidlig valg i alfabetisk rekkef\u00f8lge). I betalingsnettverket Stellar, hvor avstemningen skjer for transaksjonshistorikken, inneb\u00e6rer kombinasjon av to foresl\u00e5tte nominerte \u00e5 kombinere transaksjonene de inneholder, samt de nyeste av deres to tidsstempler.<\/p>\n<p>Den tekniske beskrivelsen av SCP beviser (teorem 12) at ved slutten av nominasjonsfasen konvergerer nettverket til slutt til \u00e9n kompositt. Men det er et problem: f\u00f8deral stemmegivning er en asynkron protokoll (som SCP). Med andre ord, nodene er ikke koordinert etter tid, men bare etter meldingene de sender. Fra nodens synspunkt er det uklart n\u00e5r <i>ble avsluttet<\/i> fasa forslaging. Selv om alle noder til slutt vil komme til den samme kompositt, kan de ta forskjellige ruter p\u00e5 veien, noe som skaper ulike sammensatte kandidater underveis, og de kan aldri si hvilken av dem som er den endelige.<\/p>\n<p>Men det er greit. Forslag er bare en forberedelse. Hovedsaken er \u00e5 begrense antallet kandidater for \u00e5 oppn\u00e5 en konsensus, som skjer i prosessen. <i>stemmegivning<\/i> (stemmegivning).<\/p>\n<h1>Stemmegivning<\/h1>\n<p>\nEn stemmeseddel er et par , der counter er et heltall som begynner p\u00e5 1, og value er kandidaten fra forslagsfasen. Dette kan v\u00e6re nodens egen kandidat eller en kandidat fra en nabonode som er akseptert av denne noden. Grovt sett, i stemmegivningen gj\u00f8res gjentatte fors\u00f8k p\u00e5 \u00e5 f\u00e5 nettverket til \u00e5 oppn\u00e5 konsensus om en kandidat i en bestemt stemmeseddel ved \u00e5 gjennomf\u00f8re potensielt mange f\u00f8derative stemmegivninger p\u00e5 stemmesedler. Tellere i stemmesedlene sporer gjennomf\u00f8rte fors\u00f8k, og stemmesedler med h\u00f8yere tellere har prioritet over stemmesedler med lavere tellere. Hvis stemmeseddelen  sitter fast, begynner en ny stemmegivning n\u00e5 p\u00e5 stemmeseddelen .<\/p>\n<p>Det er viktig \u00e5 skille mellom <i>verdier<\/i> (for eksempel hva lunsjbestillingen skal v\u00e6re: pizza eller salater), <i>stemmesedler<\/i> (paret counter-value) og <i>uttalelser<\/i> om stemmesedler. SCP-runden inkluderer flere runder med f\u00f8derativ stemmegivning, spesielt p\u00e5 utsagn som:<\/p>\n<ul>\n<li>\u00abJeg er klar til \u00e5 forplikte stemmeseddel B\u00bb og\n<\/li>\n<li>\u00abJeg erkl\u00e6rer forpliktelsen til stemmeseddel B\u00bb<\/li>\n<\/ul>\n<p>\nFra denne nodens perspektiv oppn\u00e5s konsensus n\u00e5r den finner stemmeseddel B, som den kan bekrefte (det vil si finne et flertall som aksepterer) utsagnet \u00abJeg erkl\u00e6rer forpliktelsen til stemmeseddel B\u00bb. Fra dette \u00f8yeblikket kan man trygt handle i henhold til verdien angitt i B \u2013 for eksempel legge inn denne lunsjbestillingen. Dette kalles <i>eksternalisering<\/i> av verdien. N\u00e5r aksept av stemmeseddelen er bekreftet, kan noden v\u00e6re sikker p\u00e5 at enhver annen node har eksteralisert denne samme verdien eller n\u00f8dvendigvis vil gj\u00f8re det i fremtiden.<\/p>\n<p>Selv om mange f\u00f8derale avstemninger skjer gjennom krav om mange forskjellige stemmesedler, utveksler de ikke s\u00e5 mange meldinger, fordi hver melding kapsler inn en rekke stemmesedler. \u00c9n melding fremmer dermed tilstanden til mange f\u00f8derale avstemninger samtidig, for eksempel: \u00abJeg godtar \u00e5 foreta en forpliktelse p\u00e5 stemmesedlene fra &lt;min,V&gt; til &lt;max,V&gt;\u00bb.<\/p>\n<p>Hva betyr begrepene \u00abforberedt\u00bb (prepared) og \u00abforpliktelse\u00bb (commit)?<\/p>\n<p>Noden stemmer for forpliktelsen av stemmesedlen n\u00e5r den er overbevist om at andre noder ikke vil foreta forpliktelse av stemmesedler med andre verdier. \u00c5 overbevise om dette er m\u00e5let med \u00e5 forberede erkl\u00e6ringen. En avstemning der det sies: \u00abJeg er klar til \u00e5 forplikte meg til stemmeseddel B\u00bb, er et l\u00f8fte om aldri \u00e5 foreta forpliktelse av stemmesedler mindre enn B, det vil si med en lavere teller (SCP krever at verdiene i stemmesedler har en bestemt rekkef\u00f8lge. Dermed er stemmeseddel &lt;N1,V1&gt; mindre enn &lt;N2,V2&gt;, hvis N1&lt;N2, og ogs\u00e5 hvis N1=N2 og V1&lt;V2). Disse mindre stemmesedlene \u00abavvises\u00bb (aborted) under forberedelsesstemmesedelen, mens B betraktes som \u00abforberedt\u00bb.<\/p>\n<p>Hvorfor betyr \u00abJeg er klar til \u00e5 forplikte meg til stemmeseddel B\u00bb \u00abJeg lover aldri \u00e5 tillate forpliktelse av stemmesedler mindre enn B\u00bb? Fordi SCP definerer abort som motsetningen til forpliktelse. Forberedelsesstemmesedelen inneb\u00e6rer ogs\u00e5 avstemning om avvikling av andre stemmesedler, og som vi har diskutert tidligere, inneb\u00e6rer en avstemning for noe ett \u2013 et l\u00f8fte om aldri \u00e5 stemme imot det.<\/p>\n<p>F\u00f8r en forpliktelse sendes ut, m\u00e5 noden f\u00f8rst finne en stemmeseddel som den kan bekrefte som forberedt. Med andre ord gjennomf\u00f8rer den en f\u00f8deral avstemning p\u00e5 temaet \u00abJeg er klar til \u00e5 forplikte meg til stemmeseddel B\u00bb, muligens for mange forskjellige stemmesedler, inntil den finner den som godtar kvoren.<\/p>\n<p>Hvor kommer stemmesedlerne til forberedelse af afstemningen fra? F\u00f8rst transmitterer noden forberedelsen til afstemningen for , hvor C er en sammensat kandidat, der blev produceret i opstillingsfasen. Men selv efter at forberedelsen til afstemningen er begyndt, kan opstillingen f\u00f8re til, at der kommer nye kandidater, som vil blive nye stemmesedler. I mellemtiden kan piraterne have forskellige kandidater, og de kan danne et blokkerende s\u00e6t, der accepterer \"Jeg er klar til at kommittere stemmesedlen B2\", hvilket vil overbevise noden om ogs\u00e5 at acceptere det. Endelig er der en timeout-mekanisme, der genererer nye runder af f\u00f8derativ afstemning p\u00e5 nye stemmesedler med h\u00f8jere t\u00e6llere, hvis de aktuelle stemmesedler sidder fast.<\/p>\n<p>N\u00e5r noden finder en stemmeseddel B, der kan bekr\u00e6ftes som forberedt, transmitterer den en ny besked \"Commit stemmeseddel B\". Denne afstemning fort\u00e6ller piraterne, at noden aldrig vil afvise B. Faktisk, hvis B er en stemmeseddel , 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 piraten med commit, hvis de stadig befinder sig p\u00e5 tidligere stadier af protokollen.<\/p>\n<p>P\u00e5 dette tidspunkt skal det endnu engang understreges, at dette er asynkrone protokoller. Bare fordi \u00e9n node sender stemmer for commit, betyder det ikke, at dens j\u00e6vnaldrende ogs\u00e5 g\u00f8r det. Nogle af dem kan stadig stemme p\u00e5 erkl\u00e6ringer til forberedelse af afstemningen, mens andre muligvis allerede har eksternaliseret betydningen. SCP forklarer, hvordan noden skal h\u00e5ndtere hver type peer-to-peer besked uafh\u00e6ngigt af dens fase.<\/p>\n<p>Hvis meldingen \u00abJeg erkl\u00e6rer forpliktelse \u00bb ikke kan godtas eller bekreftes, er det en sjanse for at meldingen  eller  kan godtas eller bekreftes\u2014eller, i alle fall, enhver bulletin med verdien C, og ikke noe annet, siden noden allerede har lovet aldri \u00e5 tilbakekalle . N\u00e5r noden sender stemmer for forpliktelsen, blir det enten C eller ingenting, avhengig av hvor langt konsensus vil g\u00e5. Men dette er fortsatt ikke tilstrekkelig for noden til \u00e5 eksternalisere C. Noen bysantinske s\u00e5kalte (som utgj\u00f8r mindre enn kvorum, basert p\u00e5 v\u00e5re antagelser om sikkerhet) kan lyve for noden. \u00c5 akseptere og deretter bekrefte en eller flere bulletiner (eller et intervall av bulletiner)\u2014det er det som gir noden tillit til endelig \u00e5 eksternalisere C.<\/p>\n<p><img decoding=\"async\" alt=\"Vi utforsker Stellar konsensusprotokoll\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ballotering av SCP gjennom f\u00f8derativ avstemning. Ikke vist: n\u00e5r som helst kan en timer g\u00e5 av, noe som \u00f8ker telleren i bulletinen (og muligens produsere en ny kompositt fra tilleggskandidater).<\/i> <\/p>\n<p>Og det er det! N\u00e5r nettverket har kommet til konsensus, er det klart til \u00e5 gj\u00f8re det igjen og igjen. I Stellar betalingsnettverket skjer dette omtrent hvert 5. sekund: en prestasjon som krever b\u00e5de sikkerhet og robusthet, garantert av SCP.<\/p>\n<p>SCP kan oppn\u00e5 dette ved \u00e5 stole p\u00e5 flere runder med f\u00f8derativ avstemning. F\u00f8derativ avstemning ble muliggjort av konseptet med kvorumsnitt: sett av likeverdige noder som hver node har besluttet \u00e5 stole p\u00e5 som en del av sitt (subjektive) kvorum. Denne konfigurasjonen betyr at man kan komme til konsensus selv i et nett med \u00e5pen medlemskap og bysantinske bedrageri.<\/p>\n<h1>Ytterligere lesing<\/h1>\n<p><\/p>\n<ul>\n<li>Den opprinnelige tekniske dokumentasjonen av SCP kan bli funnet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">her<\/a><\/noindex>, men <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">here<\/a><\/noindex> prosjektspesifikasjoner for implementeringen.\n<\/li>\n<li>Den opprinnelige forfatteren av SCP-protokollen, David Mazieres, forklarer den p\u00e5 en forenklet (men fortsatt teknisk) m\u00e5te <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">her<\/a><\/noindex>.\n<\/li>\n<li>Du har kanskje blitt overrasket over ikke \u00e5 finne begrepene \u00abgruvearbeid\u00bb eller \u00abbevis p\u00e5 arbeid\u00bb i denne artikkelen. SCP bruker ikke disse metodene, men noen andre konsensusalgoritmer bruker dem. Zayn Witherspoon har skrevet en tilgjengelig <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">oversikt over konsensusalgoritmer<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Trinnvis beskrivelse<\/a><\/noindex> en enkel nettverksstruktur som n\u00e5r konsensus i l\u00f8pet av en full SCP-runde.\n<\/li>\n<li>For lesere som er interessert i implementeringer av SCP: se. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">C++-kode<\/a><\/noindex>, brukt av betalingsnettverket Stellar, eller <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">Go-kode<\/a><\/noindex>, som jeg skrev for bedre forst\u00e5else av 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.5 - 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\/no\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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\udd47Forst\u00e5 Stellar konsensusprotokoll | ProHoster","description":"Stellar konsensusprotokoll ble f\u00f8rst beskrevet i.","canonical_url":"https:\/\/prohoster.info\/no\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}