{"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\/sk\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Rozober\u00e1me protokol konsenzu Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProtokol konsenzu Stellar bol prv\u00fdkr\u00e1t op\u00edsan\u00fd v <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">vedeckom \u010dl\u00e1nku<\/a><\/noindex> Davida Mazi\u00e8ra v roku 2015. Ide o \u201efederat\u00edvny syst\u00e9m byzantsk\u00e9ho s\u00fahlasu\u201c, ktor\u00fd umo\u017e\u0148uje decentralizovan\u00fdm v\u00fdpo\u010dtov\u00fdm sie\u0165am bez l\u00eddrov efekt\u00edvne dosahova\u0165 konsenzus o akomko\u013evek rozhodnut\u00ed. Platobn\u00e1 sie\u0165 Stellar pou\u017e\u00edva Stellar Consensus Protocol (SCP) na vedenie zos\u00faladen\u00e9ho hist\u00f3rie transakci\u00ed, ktor\u00fa vidia v\u0161etci \u00fa\u010dastn\u00edci.<\/p>\n<p>Pova\u017euje sa, \u017ee protokoly konsenzu s\u00fa \u0165a\u017eko pochopite\u013en\u00e9. SCP je jednoduch\u0161\u00ed ako v\u00e4\u010d\u0161ina z nich, ale predsa len zdie\u013ea t\u00fato poves\u0165 \u2014 \u010diasto\u010dne kv\u00f4li mylnej predstave, \u017ee \u201efederat\u00edvne hlasovanie\u201c, ktor\u00e9mu je venovan\u00e1 prv\u00e1 polovica vedeck\u00e9ho \u010dl\u00e1nku, je SCP. Nie je to tak! Je to len d\u00f4le\u017eit\u00e1 s\u00fa\u010diastka, ktor\u00e1 sa v druhej polovici \u010dl\u00e1nku pou\u017e\u00edva na vytvorenie <i>skuto\u010dn\u00e9ho<\/i> protokolu konsenzu Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nV tomto \u010dl\u00e1nku stru\u010dne vysvetl\u00edme, \u010do je to \u201esyst\u00e9m s\u00fahlasu\u201c, \u010do m\u00f4\u017ee urobi\u0165 jeho \u201ebyzantsk\u00fdm\u201c a pre\u010do robi\u0165 byzantsk\u00fd syst\u00e9m \u201efederat\u00edvnym\u201c. Potom vysvetl\u00edme federat\u00edvny hlasovac\u00ed postup, ktor\u00fd je op\u00edsan\u00fd v \u010dl\u00e1nku o SCP, a nakoniec vysvetl\u00edme samotn\u00fd protokol SCP.<\/p>\n<h1>Syst\u00e9my s\u00fahlasu<\/h1>\n<p>\nSyst\u00e9m s\u00fahlasu umo\u017e\u0148uje skupine \u00fa\u010dastn\u00edkov dosiahnu\u0165 konsenzus o ur\u010ditej t\u00e9me, napr\u00edklad \u010do si objedna\u0165 na obed.<\/p>\n<p>My v spolo\u010dnosti Interstellar sme implementovali vlastn\u00fd syst\u00e9m obedov\u00e9ho s\u00fahlasu: objedn\u00e1vame to, \u010do hovor\u00ed n\u00e1\u0161 opera\u010dn\u00fd mana\u017e\u00e9r John. Je to jednoduch\u00fd a efekt\u00edvny s\u00fahlasov\u00fd syst\u00e9m. V\u0161etci d\u00f4verujeme Johnovi a ver\u00edme, \u017ee ka\u017ed\u00fd de\u0148 n\u00e1jde nie\u010do zauj\u00edmav\u00e9 a v\u00fd\u017eivn\u00e9.<\/p>\n<p>Ale \u010do ak John zneu\u017eije na\u0161u d\u00f4veru? M\u00f4\u017ee jednostranne rozhodn\u00fa\u0165, \u017ee v\u0161etci mus\u00edme by\u0165 veg\u00e1ni. O t\u00fd\u017ede\u0148 alebo dva mo\u017eno zvrhneme ho a odovzd\u00e1me moc Elisabeth. Ale zrazu ona miluje avok\u00e1do s an\u010dovi\u010dkami a mysl\u00ed si, \u017ee v\u0161etci by mali by\u0165 tak\u00e9. Moc kaz\u00ed. Preto je lep\u0161ie n\u00e1js\u0165 nejak\u00fa demokratickej\u0161iu met\u00f3du: nejak\u00fd sp\u00f4sob, ako zabezpe\u010di\u0165, \u017ee sa zoh\u013eadnia r\u00f4zne preferencie, pri\u010dom zabezpe\u010d\u00edme v\u010dasn\u00fd a jednozna\u010dn\u00fd v\u00fdsledok, aby sa nestalo, \u017ee nikto neobjedn\u00e1 obed alebo piati \u013eudia umiestnia r\u00f4zne objedn\u00e1vky, alebo diskusia potrv\u00e1 a\u017e do ve\u010dera.<\/p>\n<p>Na prv\u00fd poh\u013ead sa zd\u00e1, \u017ee rie\u0161enie je jednoduch\u00e9: uskuto\u010dni\u0165 hlasovanie! Ale to je klamliv\u00fd dojem. Kto bude zbiera\u0165 hlasovacie l\u00edstky a oznamova\u0165 v\u00fdsledky? A pre\u010do by mali ostatn\u00ed veri\u0165 tomu, \u010do povie? Mo\u017eno m\u00f4\u017eeme <i>najprv<\/i> hlasova\u0165 za l\u00eddra, ktor\u00e9mu d\u00f4verujeme, aby riadil hlasovanie \u2014 ale kto bude vies\u0165 toto <i>prv\u00fdm<\/i> hlasovanie? \u010co ak sa nedok\u00e1\u017eeme dohodn\u00fa\u0165 na l\u00eddrovi? Alebo ak sa dohodneme a tento l\u00edder uviazne na stretnut\u00ed alebo ochorie?<\/p>\n<p>Podobn\u00e9 probl\u00e9my sa vyskytuj\u00fa v distribuovan\u00fdch po\u010d\u00edta\u010dov\u00fdch sie\u0165ach. V\u0161etky \u00fa\u010dastn\u00edci alebo uzly musia dosiahnu\u0165 nejak\u00e9 rozhodnutie, napr\u00edklad, kto m\u00e1 aktualizova\u0165 spolo\u010dn\u00fd s\u00fabor alebo prevzia\u0165 \u00falohu z fronty spracovania. V kryptomenovej sieti sa uzly opakovane musia rozhodn\u00fa\u0165, ako vyzer\u00e1 \u00fapln\u00e1 hist\u00f3ria z nieko\u013ek\u00fdch mo\u017en\u00fdch verzi\u00ed, ktor\u00e9 niekedy konfliktuj\u00fa. Toto sie\u0165ov\u00e9 dohodnutie zaru\u010duje prij\u00edmate\u013eovi, \u017ee minca je (a) platn\u00e1 (nie falo\u0161n\u00e1) a (b) e\u0161te nebola utraten\u00e1 na inom mieste. Taktie\u017e zaru\u010duje, \u017ee ju m\u00f4\u017ee v bud\u00facnosti utrati\u0165, preto\u017ee nov\u00fd prij\u00edmate\u013e bude ma\u0165 rovnak\u00e9 z\u00e1ruky z t\u00fdch ist\u00fdch d\u00f4vodov.<\/p>\n<p>Ak\u00fdko\u013evek syst\u00e9m dohovoru v distribuovanej v\u00fdpo\u010dtovej sieti mus\u00ed by\u0165 odoln\u00fd vo\u010di poruch\u00e1m: mal by poskytova\u0165 konzistentn\u00e9 v\u00fdsledky napriek chyb\u00e1m, ako s\u00fa pomal\u00e9 komunika\u010dn\u00e9 linky, nereaguj\u00face uzly a nespr\u00e1vny poradie spr\u00e1v. <i>Byzantsk\u00fd<\/i> syst\u00e9m dohovoru je navy\u0161e odoln\u00fd vo\u010di \u201ebyzantsk\u00fdm\u201c chyb\u00e1m: uzlom, ktor\u00e9 poskytuj\u00fa nepravdiv\u00e9 inform\u00e1cie, \u010di u\u017e z d\u00f4vodu chyby alebo z \u00famyseln\u00e9ho pokusu podkopa\u0165 syst\u00e9m alebo z\u00edska\u0165 nejak\u00fa v\u00fdhodu. \u201eByzantsk\u00e1\u201c odolnos\u0165 vo\u010di poruch\u00e1m \u2014 schopnos\u0165 d\u00f4verova\u0165 skupinov\u00e9mu rozhodnutiu, aj ke\u010f niektor\u00ed \u010dlenovia skupiny m\u00f4\u017eu klama\u0165 alebo inak sa riadi\u0165 pravidlami rozhodovania \u2014 z\u00edskala n\u00e1zov pod\u013ea <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\">podobenstva o gener\u00e1loch Byzantskej r\u00ed\u0161e<\/a><\/noindex>, ktor\u00ed sa sna\u017eili koordinova\u0165 \u00fatok. <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\">Dobr\u00e9 op\u00edsanie<\/a><\/noindex> m\u00e1 Anthony Stevens.<\/p>\n<p>Zv\u00e1\u017eme majite\u013ea kryptomeny Alisu, ktor\u00e1 sa mus\u00ed rozhodn\u00fa\u0165 medzi n\u00e1kupom chutnej zmrzliny od Boba a splaten\u00edm dlhu Carol. Mo\u017eno chce Alisa zaplati\u0165 obom naraz, podvodne min\u00fac jednu a t\u00fa ist\u00fa mincu. Na to mus\u00ed presved\u010di\u0165 Bobov po\u010d\u00edta\u010d, \u017ee minca nikdy nebola vyplaten\u00e1 Carol, a presved\u010di\u0165 Carolin po\u010d\u00edta\u010d, \u017ee minca nikdy nebola vyplaten\u00e1 Bobovi. Byzantsk\u00fd syst\u00e9m doh\u00f4d to v podstate znemo\u017e\u0148uje, pomocou formy pravidla v\u00e4\u010d\u0161iny naz\u00fdvanej <i>kv\u00f3rum<\/i>. Uzol v takej sieti sa vzd\u00e1va prechodu na ur\u010dit\u00fa verziu hist\u00f3rie, k\u00fdm nevid\u00ed, \u017ee dostato\u010dn\u00fd po\u010det rovnocenn\u00fdch uzlov \u2013 kv\u00f3rum \u2013 s\u00fahlas\u00ed s tak\u00fdmto prechodom. Hne\u010f ako k tomu d\u00f4jde, vytvoria dostato\u010dne ve\u013ek\u00fd v\u00fdberov\u00fd blok, aby prin\u00fatili zost\u00e1vaj\u00face uzly siete s\u00fahlasi\u0165 s ich rozhodnut\u00edm. Alisa m\u00f4\u017ee don\u00fati\u0165 niektor\u00e9 uzly klama\u0165 v jej mene, ale ak je sie\u0165 dos\u0165 ve\u013ek\u00e1, jej pokus bude potla\u010den\u00fd hlasmi \u010destn\u00fdch uzlov.<\/p>\n<p>Ko\u013eko uzlov je potrebn\u00fdch na kv\u00f3rum? Minim\u00e1lne v\u00e4\u010d\u0161ina, presnej\u0161ie kvalifikovan\u00e1 v\u00e4\u010d\u0161ina na boj proti chyb\u00e1m a podvodom. Ale aby ste spo\u010d\u00edtali v\u00e4\u010d\u0161inu, mus\u00edte pozna\u0165 celkov\u00fd po\u010det \u00fa\u010dastn\u00edkov. V kancel\u00e1rii Interstellar alebo na okresn\u00fdch vo\u013eb\u00e1ch s\u00fa tieto \u010d\u00edsla \u013eahko zistite\u013en\u00e9. Ale ak je va\u0161a skupina slabodefinovan\u00e1 sie\u0165, do ktorej uzly m\u00f4\u017eu vstupova\u0165 a odch\u00e1dza\u0165 pod\u013ea svojho \u017eelania bez s\u00fahlasu centra, potom je potrebn\u00fd <i>feder\u00e1lny<\/i> syst\u00e9m byzantsk\u00e9ho dohody, schopn\u00fd ur\u010dova\u0165 kv\u00f3rum nie z vopred ur\u010den\u00e9ho zoznamu uzlov, ale dynamicky, z neust\u00e1le sa meniacich a nevyhnutne ne\u00fapln\u00fdch sn\u00edmok uzlov v ur\u010ditom okamihu.<\/p>\n<p>M\u00f4\u017ee sa zda\u0165 nemo\u017en\u00e9 vytvori\u0165 kv\u00f3rum z poh\u013eadu jedn\u00e9ho uzla v rozsiahlej sieti, ale je to mo\u017en\u00e9. Tak\u00e9 kv\u00f3rum m\u00f4\u017ee dokonca zaru\u010di\u0165 v\u00fdsledky decentralizovan\u00e9ho hlasovania. Technick\u00fd dokument SCP ukazuje, ako to dosiahnu\u0165 pomocou postupu naz\u00fdvan\u00e9ho <i>feder\u00e1lne hlasovanie<\/i>.<\/p>\n<h1>Pre netrpezliv\u00fdch<\/h1>\n<p>\nZvy\u0161ok \u010dl\u00e1nku podrobnej\u0161ie popisuje feder\u00e1lne hlasovanie a konsenzu\u00e1lny protokol Stellar. Ak v\u00e1s podrobnosti nezauj\u00edmaj\u00fa, tu je v\u0161eobecn\u00fd preh\u013ead procesu.<\/p>\n<ol>\n<li>Uzly vykon\u00e1vaj\u00fa kol\u00e1 feder\u00e1lneho hlasovania o \u201enominantoch\u201c. Kolo feder\u00e1lneho hlasovania znamen\u00e1:\n<ul>\n<li>Uzol hlasuje za nejak\u00e9 tvrdenie, napr\u00edklad \u201eNavrhujem hodnotu V\u201c;\n<\/li>\n<li>Uzol po\u010d\u00fava hlasy p\u00e1rov, k\u00fdm nen\u00e1jde ten, ktor\u00fd m\u00f4\u017ee \u201eprija\u0165\u201c;\n<\/li>\n<li>Uzol h\u013ead\u00e1 \u201ekvorum\u201c pre toto tvrdenie. Kvorum \u201epotvrdzuje\u201c nominanta.<\/li>\n<\/ul>\n<\/li>\n<li>Akon\u00e1hle uzol m\u00f4\u017ee potvrdi\u0165 jedn\u00e9ho alebo viacer\u00fdch nominantov, sna\u017e\u00ed sa \u201epripravi\u0165\u201c \u201ehlasovac\u00ed l\u00edstok\u201c cez nieko\u013eko k\u00f4l feder\u00e1lneho hlasovania.\n<\/li>\n<li>Akon\u00e1hle uzol je schopn\u00fd overi\u0165 pripravenos\u0165 hlasovacieho l\u00edstka, sna\u017e\u00ed sa ho zaviaza\u0165 s pou\u017eit\u00edm e\u0161te v\u00e4\u010d\u0161ieho po\u010dtu k\u00f4l feder\u00e1lneho hlasovania.\n<\/li>\n<li>Akon\u00e1hle uzol dok\u00e1\u017ee potvrdi\u0165 z\u00e1v\u00e4zok hlasovacieho l\u00edstka, m\u00f4\u017ee \u201eexternalizova\u0165\u201c hodnotu tohto hlasovacieho l\u00edstka, pou\u017e\u00edvaj\u00fac ho ako v\u00fdsledok konsenzu.<\/li>\n<\/ol>\n<p>\nTieto kroky zah\u0155\u0148aj\u00fa nieko\u013eko k\u00f4l feder\u00e1lneho hlasovania, ktor\u00e9 spolu vytv\u00e1raj\u00fa jedno kolo SCP. Pozrime sa podrobnej\u0161ie, \u010do sa stane pri ka\u017edom kroku.<\/p>\n<h1>Feder\u00e1lne hlasovanie<\/h1>\n<p>\nFeder\u00e1lne hlasovanie je proced\u00fara, ktor\u00e1 ur\u010duje, \u010di m\u00f4\u017ee sie\u0165 s\u00fahlasi\u0165 s n\u00e1vrhom. V kole hlasovania mus\u00ed ka\u017ed\u00fd uzol vybra\u0165 jednu z potenci\u00e1lne mnoh\u00fdch mo\u017en\u00fdch hodn\u00f4t. Nem\u00f4\u017ee to urobi\u0165, k\u00fdm nebude presved\u010den\u00fd, \u017ee ostatn\u00e9 uzly v sieti nevyber\u00fa in\u00fd v\u00fdsledok. Aby si boli t\u00fdm ist\u00ed, uzly si vymie\u0148aj\u00fa z\u00e1plavu spr\u00e1v tam a sp\u00e4\u0165, aby ka\u017ed\u00fd <i>potvrdil<\/i>, \u010do <i>kv\u00f3rum<\/i> uzol <i>prij\u00edma<\/i> to ist\u00e9 <i>rie\u0161enia.<\/i>. Zvy\u0161ok tejto sekcie vysvet\u013euje pojmy v tomto tvrden\u00ed a ak\u00fdm sp\u00f4sobom prebieha cel\u00e1 proced\u00fara.<\/p>\n<h1>Kvor\u00e1 a kvorov\u00e9 rezy<\/h1>\n<p>\nZa\u010dneme defin\u00edciou kvoru. Ako sme si spomenuli vy\u0161\u0161ie, v decentralizovanej sieti s dynamick\u00fdm \u010dlenstvom nie je mo\u017en\u00e9 vopred vedie\u0165 po\u010det uzlov, a teda, ko\u013eko ich je potrebn\u00fdch na v\u00e4\u010d\u0161inu. Feder\u00e1lne hlasovanie rie\u0161i tento probl\u00e9m predstaven\u00edm novej my\u0161lienky <i>kvorov\u00e9ho rezu<\/i> (quorum slice): mal\u00e1 skupina rovnocenn\u00fdch uzlov, ktor\u00fdm uzol d\u00f4veruje na pren\u00e1\u0161anie inform\u00e1ci\u00ed o stave hlasovania do zvy\u0161ku siete. Ka\u017ed\u00fd uzol si ur\u010duje svoj vlastn\u00fd kvorov\u00fd rez (\u010dlenom ktor\u00e9ho sa st\u00e1va fakticky).<\/p>\n<p>Tvorba kvoru za\u010d\u00edna s kvorov\u00fdm rezom. Pre ka\u017ed\u00fd uzol sa prid\u00e1vaj\u00fa uzly jeho kvorov\u00e9ho rezu. Potom sa prid\u00e1vaj\u00fa \u010dlenovia rezov <i>t\u00fdchto uzlov<\/i> a tak \u010falej. Ako pokra\u010dujeme, naraz\u00edme na \u010doraz viac uzlov, ktor\u00e9 nem\u00f4\u017eete prida\u0165, preto\u017ee s\u00fa u\u017e zahrnut\u00e9 v reze. Ke\u010f u\u017e nie s\u00fa nov\u00e9 uzly na pridanie, proces sa zastav\u00ed: vytvorili sme kv\u00f3rum prostredn\u00edctvom \u201etransit\u00edvneho uzavretia\u201c kv\u00f3ra po\u010diato\u010dn\u00e9ho uzla.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Aby ste na\u0161li kv\u00f3rum z dan\u00e9ho uzla\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 prid\u00e1vame \u010dlenov jeho rezu\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 potom prid\u00e1vame \u010dlenov rezov t\u00fdchto uzlov.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Pokra\u010dujeme, k\u00fdm nezostan\u00fa \u017eiadne uzly na pridanie.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Uzly na pridanie nezostali. Toto je kv\u00f3rum.<\/i><\/p>\n<p>V skuto\u010dnosti m\u00f4\u017ee ka\u017ed\u00fd uzol n\u00e1le\u017eat' do viacer\u00fdch rezov. Aby sme vytvorili kv\u00f3rum, vyberte len jeden z rezov a pridajte \u010dlenov; potom pre ka\u017ed\u00e9ho \u010dlena vyberte ak\u00fdko\u013evek rez a pridajte \u010dlenov <i>tohto<\/i> rezu a tak \u010falej. To znamen\u00e1, \u017ee ka\u017ed\u00fd uzol je \u010dlenom viacer\u00fdch mo\u017en\u00fdch kv\u00f3rum.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Na ka\u017edom kroku vyberte len jeden rez kv\u00f3rum.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jedno mo\u017en\u00e9 kv\u00f3rum. Alebo alternat\u00edvna mo\u017enos\u0165\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 vyber\u00e1me in\u00e9 rezy\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(ke\u010f je to mo\u017en\u00e9)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 vytv\u00e1ra in\u00e9 kv\u00f3rum.<\/i><\/p>\n<p>Ako sa uzol dozvie, v ktor\u00fdch rezov s\u00fa ostatn\u00e9 uzly? Presne tak, ako ostatn\u00e9 inform\u00e1cie o in\u00fdch uzloch: z ozn\u00e1men\u00ed, ktor\u00e9 ka\u017ed\u00fd uzol vysiela do siete, ke\u010f sa men\u00ed jeho hlasovacieho stavu. Ka\u017ed\u00e9 vysielanie obsahuje inform\u00e1cie o rezoch odosielaj\u00faceho uzla. V technickej dokument\u00e1cii SCP nie je uveden\u00fd mechanizmus komunik\u00e1cie. Implement\u00e1cie zvy\u010dajne pou\u017e\u00edvaj\u00fa <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip protokol<\/a><\/noindex> na zabezpe\u010den\u00e9 vysielanie spr\u00e1v po celej sieti.<\/p>\n<p>Pripom\u00edname, \u017ee v nefi federat\u00edvnom byzantskom syst\u00e9me doh\u00f4d je kv\u00f3rum definovan\u00e9 ako v\u00e4\u010d\u0161ina v\u0161etk\u00fdch uzlov. Byzantsk\u00fd syst\u00e9m doh\u00f4d bol vyvinut\u00fd z poh\u013eadu ot\u00e1zky: ko\u013eko nespo\u013eahliv\u00fdch uzlov je syst\u00e9m schopn\u00fd unies\u0165? V syst\u00e9me z N uzlov, navrhnutom na pre\u017eitie pri f poruch\u00e1ch (klamstv\u00e1ch), by mal uzol ma\u0165 schopnos\u0165 dosiahnu\u0165 pokrok z\u00edskan\u00edm odpovede od N\u2212f peerov, ke\u010f\u017ee f z nich mo\u017eno nefunguje. Ale z\u00edskan\u00edm odpovede od N\u2212f peerov, je mo\u017en\u00e9 predpoklada\u0165, \u017ee v\u0161etk\u00fdch f peerov (od ktor\u00fdch uzol nedostal odpove\u010f) s\u00fa v skuto\u010dnosti \u010destn\u00ed. T\u00fdmto s\u00fa zlovoln\u00ed f z N\u2212f peerov (od ktor\u00fdch bola odpove\u010f prijat\u00e1). Aby uzly dospeli k jednozna\u010dn\u00e9mu konsenzu, mus\u00ed by\u0165 v\u00e4\u010d\u0161ina ostatn\u00fdch uzlov \u010destn\u00e1, to znamen\u00e1, \u017ee potrebujeme, aby N\u2212f bolo v\u00e4\u010d\u0161ie ako 2f alebo N &gt; 3f. Tak\u017ee zvy\u010dajne syst\u00e9m navrhnut\u00fd na pre\u017eitie pri f poruch\u00e1ch, bude ma\u0165 celkovo N=3f+1 uzlov a ve\u013ekos\u0165 kv\u00f3ra 2f+1. Akon\u00e1hle n\u00e1vrh prekro\u010d\u00ed prah kv\u00f3ra, ostatn\u00ed \u010dlenovia siete s\u00fa presved\u010den\u00ed, \u017ee ak\u00e9ko\u013evek konkuruj\u00face n\u00e1vrhy zlyhaj\u00fa. Tak sa sie\u0165 zbieha k v\u00fdsledku.<\/p>\n<p>Ale vo federat\u00edvnom byzantskom syst\u00e9me doh\u00f4d nem\u00f4\u017ee existova\u0165 v\u00e4\u010d\u0161ina (preto\u017ee nikto nevie o celkovej ve\u013ekosti siete), ale koncept v\u00e4\u010d\u0161iny je vo v\u0161eobecnosti nepou\u017eite\u013en\u00fd! Ak je \u010dlenstvo v syst\u00e9me otvoren\u00e9, niekto m\u00f4\u017ee z\u00edska\u0165 v\u00e4\u010d\u0161inu jednoducho vykonan\u00edm takzvanej Sybilovej \u00fatoku: viackr\u00e1t sa pripoji\u0165 k sieti cez nieko\u013eko uzlov. Tak pre\u010do sa tranzit\u00edvne uzavretie rezu m\u00f4\u017ee nazva\u0165 <i>kv\u00f3rum<\/i>, a ako je schopn\u00e9 potl\u00e1\u010da\u0165 konkuruj\u00face n\u00e1vrhy?<\/p>\n<p>Technicky, nijako! Predstavte si sie\u0165 z \u0161iestich uzlov, kde s\u00fa dve trojice izolovan\u00e9 vo vz\u00e1jomn\u00fdch rezoch kv\u00f3ra. Prv\u00e1 podskupina m\u00f4\u017ee prija\u0165 rozhodnutie, o ktorom druh\u00e1 nikdy nepo\u010duje, a naopak. Pre t\u00fato sie\u0165 nie je sp\u00f4sob, ako dosiahnu\u0165 konsenzus (okrem n\u00e1hody).<\/p>\n<p>Preto SCP vy\u017eaduje, aby pre federat\u00edvne hlasovanie (a na aplik\u00e1ciu d\u00f4le\u017eit\u00fdch teore\u00e9m \u010dl\u00e1nku) sie\u0165 mala vlastnos\u0165 naz\u00fdvan\u00fa <i>prienik kv\u00f3r.<\/i>V sieti s touto vlastnos\u0165ou sa \u013eubovo\u013en\u00e9 dve kv\u00f3ra, ktor\u00e9 mo\u017eno vytvori\u0165, v\u017edy prekryj\u00fa aspo\u0148 v jednom uzle. Na ur\u010denie prevl\u00e1daj\u00facich n\u00e1lad v sieti je to rovnako dobr\u00e9, ako ma\u0165 v\u00e4\u010d\u0161inu. Intuit\u00edvne to znamen\u00e1, \u017ee ak\u00e9ko\u013evek kv\u00f3rum s\u00fahlas\u00ed s v\u00fdrokom X, \u017eiadne in\u00e9 kv\u00f3rum nem\u00f4\u017ee nikdy s\u00fahlasi\u0165 s nie\u010d\u00edm in\u00fdm, preto\u017ee nevyhnutne bude zah\u0155\u0148a\u0165 nejak\u00fd uzol z prv\u00e9ho kv\u00f3ra, ktor\u00fd u\u017e hlasoval za X.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ak existuje prekr\u00fdvanie kv\u00f3r v sieti...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>...potom ak\u00e9ko\u013evek dve kv\u00f3ra, ktor\u00e9 m\u00f4\u017eete zostavi\u0165...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>...v\u017edy sa bud\u00fa prekr\u00fdva\u0165.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Samozrejme, prekr\u00fdvaj\u00face sa uzly m\u00f4\u017eu by\u0165 byzantsky klamn\u00e9 alebo zl\u00e9 in\u00fdm sp\u00f4sobom. V takom pr\u00edpade prekr\u00fdvanie kv\u00f3r nepom\u00e1ha sieti dosiahnu\u0165 s\u00fahlas. Z tohto d\u00f4vodu sa mnoh\u00e9 v\u00fdsledky v technickom dokumente SCP zakladaj\u00fa na jasne vyjadren\u00fdch predpokladoch, ako je to, \u017ee v sieti zost\u00e1va prekr\u00fdvanie kv\u00f3r... <i>...aj po odstr\u00e1nen\u00ed zl\u00fdch uzlov.<\/i>Na jednoduchosti ponech\u00e1me tieto predpoklady... <i>implicitn\u00e9<\/i> v zvy\u0161ku \u010dl\u00e1nku).<\/p>\n<p>M\u00f4\u017ee sa zda\u0165 nerozumn\u00e9 o\u010dak\u00e1va\u0165, \u017ee v sieti nez\u00e1visl\u00fdch uzlov m\u00f4\u017ee existova\u0165 spo\u013eahliv\u00e9 prekr\u00fdvanie kv\u00f3r. Ale existuj\u00fa dva d\u00f4vody, pre\u010do je to tak.<\/p>\n<p>Prv\u00fd d\u00f4vod spo\u010d\u00edva v samotnej existencii internetu. Internet je ide\u00e1lny pr\u00edklad siete nez\u00e1visl\u00fdch uzlov s prekr\u00fdvan\u00edm kv\u00f3r. V\u00e4\u010d\u0161ina uzlov v internete sa sp\u00e1ja len s nieko\u013ek\u00fdmi \u010fal\u0161\u00edmi lok\u00e1lnymi uzlami, ale tieto mal\u00e9 skupiny sa dostato\u010dne prekryj\u00fa, aby ka\u017ed\u00fd uzol bol pr\u00edstupn\u00fd z ka\u017ed\u00e9ho in\u00e9ho uzla r\u00f4znymi trasami.<\/p>\n<p>Druh\u00fd d\u00f4vod je \u0161pecifick\u00fd pre platobn\u00fa sie\u0165 Stellar (najbe\u017enej\u0161ie pou\u017eitie SCP). Ka\u017ed\u00fd akt\u00edvum v sieti Stellar m\u00e1 emitenta, a odpor\u00fa\u010dania Stellar po\u017eaduj\u00fa, aby ka\u017ed\u00fd emitent priradil jeden alebo viac uzlov v sieti na spracovanie po\u017eiadaviek na vyplatenie. Je vo va\u0161om z\u00e1ujme priamo alebo nepriamo zahrn\u00fa\u0165 tieto uzly do rezov kv\u00f3ra pre ka\u017ed\u00e9 akt\u00edvum, ktor\u00e9 v\u00e1s zauj\u00edma. Potom sa kv\u00f3ra pre v\u0161etky uzly, ktor\u00e9 maj\u00fa z\u00e1ujem o dan\u00e9 akt\u00edvum, prekr\u00fdvaj\u00fa aspo\u0148 v t\u00fdchto uzloch vyplatenia. Uzly, ktor\u00e9 maj\u00fa z\u00e1ujem o nieko\u013eko akt\u00edv, bud\u00fa zah\u0155\u0148a\u0165 do svojich rezov kv\u00f3ra v\u0161etky uzly vyplatenia pr\u00edslu\u0161n\u00fdch emitentov, a bud\u00fa sa sna\u017ei\u0165 spoji\u0165 v\u0161etky akt\u00edva dohromady. Okrem toho ak\u00e9ko\u013evek akt\u00edva, ktor\u00e9 nie s\u00fa takto spojen\u00e9 s in\u00fdmi v sieti, a <i>nemali by by\u0165 spojen\u00e9<\/i> \u2014 je to navrhnut\u00e9 tak, aby v tejto sieti neexistovalo prekr\u00fdvanie kv\u00f3ra (napr\u00edklad banky z dol\u00e1rovej z\u00f3ny niekedy chc\u00fa obchodova\u0165 s bankami z euroz\u00f3ny a bankami z z\u00f3ny pesa, tak\u017ee sa nach\u00e1dzaj\u00fa v jednej sieti, ale nikomu z nich nez\u00e1le\u017e\u00ed na samostatnej sieti det\u00ed, ktor\u00e9 obchoduj\u00fa s baseballov\u00fdmi kartami).<\/p>\n<p>Samozrejme, <i>o\u010dak\u00e1vanie<\/i> prekr\u00fdvania kv\u00f3ra nie je <i>zaru\u010den\u00e9<\/i>. In\u00e9 byzantsk\u00e9 syst\u00e9my dohadovania maj\u00fa svoju komplexnos\u0165 vo ve\u013ekej miere v\u010faka z\u00e1ruke kv\u00f3ra. D\u00f4le\u017eitou novinkou SCP je to, \u017ee zni\u017euje zodpovednos\u0165 za vytv\u00e1ranie kv\u00f3ra z algoritmu konsenzu na \u00farove\u0148 aplik\u00e1cie. Tak\u017ee hoci federat\u00edvne hlasovanie je dos\u0165 be\u017en\u00e9 pre hlasovanie o ak\u00fdchko\u013evek ot\u00e1zkach, jeho spo\u013eahlivos\u0165 sa kriticky z\u00e1vis\u00ed od \u0161ir\u0161ieho zmyslu t\u00fdchto hodn\u00f4t. Niektor\u00e9 hypotetick\u00e9 druhy vyu\u017eitia sa m\u00f4\u017eu uk\u00e1za\u0165 ako menej vhodn\u00e9 na vytv\u00e1ranie dobre prepojen\u00fdch siet\u00ed ako in\u00e9.<\/p>\n<h1>Hlasovanie, prijatie a potvrdenie<\/h1>\n<p>\nV kole federat\u00edvneho hlasovania uzol volite\u013ene za\u010dne hlasova\u0165 za nejak\u00fa hodnotu V. To znamen\u00e1 vysielanie spr\u00e1vy do siete: \u201eJa som uzol N, moje rezy kv\u00f3ra Q a hlasujem za V\u201c. Ke\u010f uzol hlasuje t\u00fdmto sp\u00f4sobom, s\u013eubuje, \u017ee nikdy nehlasoval proti V a nikdy nebude.<\/p>\n<p>V prenosoch z rovnocenn\u00fdch uzlov ka\u017ed\u00fd uzol vid\u00ed, ako hlasuj\u00fa ostatn\u00ed. Akon\u00e1hle uzol z\u00edska dostato\u010dn\u00fd po\u010det tak\u00fdchto spr\u00e1v, m\u00f4\u017ee sledova\u0165 prieniky kv\u00f3r a pok\u00fasi\u0165 sa n\u00e1js\u0165 kv\u00f3ry. Ak vid\u00ed kv\u00f3r s\u00fam, ktor\u00e9 tie\u017e hlasuj\u00fa za V, m\u00f4\u017ee prejs\u0165 k <i>prijatiu<\/i> V a pren\u00e1\u0161a\u0165 t\u00fato nov\u00fa spr\u00e1vu do siete: \u201eJa som uzol N, moje prieniky kv\u00f3r Q a prij\u00edmam V\u201c. Prijatie poskytuje silnej\u0161iu z\u00e1ruku ne\u017e jednoduch\u00e9 hlasovanie. Ke\u010f uzol hlasuje za V, nikdy nem\u00f4\u017ee hlasova\u0165 za in\u00e9 varianty. Ale ak uzol prijme V, \u017eiadny uzol v sieti nikdy neprijme in\u00fd variant (teor\u00e9ma 8 v technickom dokumente SCP to dokazuje).<\/p>\n<p>Samozrejme, existuje vysok\u00e1 pravdepodobnos\u0165, \u017ee okam\u017eite sa nen\u00e1jde kv\u00f3r uzlov, ktor\u00e9 by s\u00fahlasili s V. In\u00e9 uzly m\u00f4\u017eu hlasova\u0165 za in\u00e9 hodnoty. Ale pre uzol existuje e\u0161te jeden sp\u00f4sob, ako prejs\u0165 od jednoduch\u00e9ho hlasovania k prijatiu. N m\u00f4\u017ee prija\u0165 in\u00fa hodnotu W, aj ke\u010f za \u0148u nehlasoval, a dokonca aj ke\u010f nevid\u00ed pre \u0148u kv\u00f3r. Na to, aby sa zmenil svoj hlas, sta\u010d\u00ed vidie\u0165 <i>blokuj\u00face mno\u017estvo<\/i> uzlov, ktor\u00e9 prijali W. Blokuj\u00face mno\u017estvo je po jednom uzle z ka\u017ed\u00e9ho z prienikov kv\u00f3r N. Ako n\u00e1zov napoved\u00e1, je schopn\u00e9 <i>blokova\u0165<\/i> ak\u00fako\u013evek in\u00fa hodnotu. Ak v\u0161etky uzly v takomto mno\u017estve prij\u00edmaj\u00fa W, potom (pod\u013ea teor\u00e9my 8) sa nikdy nepodar\u00ed vytvori\u0165 kv\u00f3r, ktor\u00fd by prijal in\u00fa hodnotu, a preto je pre N bezpe\u010dn\u00e9 prija\u0165 W.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Uzol N s tromi prienikmi kv\u00f3r.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F je blokuj\u00face mno\u017estvo pre N: obsahuje po jednom uzle z ka\u017ed\u00e9ho z prienikov N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E je tie\u017e blokuj\u00facim mno\u017estvom pre N, preto\u017ee E sa objavuje v dvoch prienikoch N.<\/i><\/p>\n<p>Ale blokuj\u00face mno\u017estvo nie je kv\u00f3r. Bolo by pr\u00edli\u0161 jednoduch\u00e9 oklama\u0165 uzol N, aby prijal po\u017eadovan\u00fa hodnotu, ak by sta\u010dilo hackn\u00fa\u0165 len jeden uzol v ka\u017edom z prienikov N. Preto prijatie hodnoty e\u0161te neznamen\u00e1 koniec hlasovania. N mus\u00ed potvrdi\u0165 hodnotu, to znamen\u00e1 vidie\u0165 kv\u00f3r uzlov, ktor\u00e9 ju prij\u00edmaj\u00fa. Ak sa dostane tak \u010faleko, ako dokazuje technick\u00fd dokument SCP (v teor\u00e9me 11), zvy\u0161ok siete tie\u017e nakoniec potvrd\u00ed t\u00fa ist\u00fa hodnotu, \u010d\u00edm N dokon\u010d\u00ed federat\u00edvne hlasovanie s konkr\u00e9tnou hodnotou ako v\u00fdsledok.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Federat\u00edvne hlasovanie.<\/i><\/p>\n<p>Proces hlasovania, prij\u00edmania a potvrdenia predstavuje jedno \u00fapln\u00e9 kolo federat\u00edvneho hlasovania. Konsenzu\u00e1lny protokol Stellar sp\u00e1ja viacero tak\u00fdchto k\u00f4l na vytvorenie \u00fapln\u00e9ho konsenzu\u00e1lneho syst\u00e9mu.<\/p>\n<h1>Konsenzu\u00e1lny protokol Stellar<\/h1>\n<p>\nDve najd\u00f4le\u017eitej\u0161ie vlastnosti konsenzu\u00e1lneho syst\u00e9mu s\u00fa <i>bezpe\u010dnos\u0165<\/i> a <i>odolnos\u0165<\/i>. Konsenzu\u00e1lny algoritmus je \u201ebezpe\u010dn\u00fd\u201c, ak nikdy nem\u00f4\u017ee da\u0165 r\u00f4zne v\u00fdsledky r\u00f4znym \u00fa\u010dastn\u00edkom (k\u00f3pia hist\u00f3rie Boba nikdy nebude protire\u010di\u0165 Carol). \u201eOdolnos\u0165\u201c znamen\u00e1, \u017ee algoritmus v\u017edy vyprodukuje v\u00fdsledok, teda nenaraz\u00ed.<\/p>\n<p>Op\u00edsan\u00e1 proced\u00fara federat\u00edvneho hlasovania <i>je bezpe\u010dn\u00e1<\/i> v tom zmysle, \u017ee ak uzol potvrd\u00ed hodnotu V, \u017eiadny in\u00fd uzol nepotvrd\u00ed in\u00fa hodnotu. Ale \u201enepotvrd\u00ed in\u00fa hodnotu\u201c \u2013 to neznamen\u00e1, \u017ee nie\u010do nepotvrd\u00ed. \u00da\u010dastn\u00edci m\u00f4\u017eu hlasova\u0165 za tak ve\u013ek\u00e9 mno\u017estvo r\u00f4znych hodn\u00f4t, \u017ee ni\u010d nepr\u00edde nad prah prijatia. To znamen\u00e1, \u017ee v federat\u00edvnom hlasovan\u00ed ch\u00fdba <i>odolnos\u0165<\/i>.<\/p>\n<p>Konsenzu\u00e1lny protokol Stellar pou\u017e\u00edva federat\u00edvne hlasovanie tak, aby zabezpe\u010dil bezpe\u010dnos\u0165 aj odolnos\u0165. (Z\u00e1ruky bezpe\u010dnosti a odolnosti SCP maj\u00fa teoretick\u00fd limit. Kon\u0161trukcia vyber\u00e1 ve\u013emi siln\u00fa z\u00e1ruku bezpe\u010dnosti na \u00fakor mal\u00e9ho oslabenia odolnosti, ale ak je \u010das dostato\u010dn\u00fd, s vysokou pravdepodobnos\u0165ou sa dosiahne konsenzus). Jednoducho povedan\u00e9, my\u0161lienka spo\u010d\u00edva v tom, \u017ee sa uskuto\u010dn\u00ed nieko\u013eko federat\u00edvnych hlasovan\u00ed o r\u00f4znych hodnot\u00e1ch, k\u00fdm jedna z nich neprejde kompletn\u00fdmi f\u00e1zami hlasovania SCP, ktor\u00e9 s\u00fa op\u00edsan\u00e9 ni\u017e\u0161ie.<\/p>\n<p>Hodnoty, o ktor\u00e9 SCP usiluje o konsenzus, m\u00f4\u017eu by\u0165 hist\u00f3riou transakci\u00ed alebo objedn\u00e1vkou na obed, alebo nie\u010d\u00edm in\u00fdm, ale je d\u00f4le\u017eit\u00e9 poznamena\u0165, \u017ee to nie s\u00fa tie hodnoty, ktor\u00e9 sa prij\u00edmaj\u00fa alebo potvrdzuj\u00fa. Namiesto toho sa federat\u00edvne hlasovanie kon\u00e1 o <i>oznamoch k t\u00fdmto hodnot\u00e1m.<\/i>.<\/p>\n<p>Prv\u00e9 kol\u00e1 federat\u00edvneho hlasovania prebiehaj\u00fa v <i>etape nomin\u00e1cie<\/i> (nomin\u00e1cia), na s\u00fabore ozn\u00e1men\u00ed typu \u201eNavrhovujem V\u201c, mo\u017eno pre mnoh\u00e9 r\u00f4zne hodnoty V. Cie\u013eom nomin\u00e1cie je n\u00e1js\u0165 jedno alebo nieko\u013eko ozn\u00e1men\u00ed, ktor\u00e9 prejd\u00fa prijat\u00edm a potvrden\u00edm.<\/p>\n<p>Po n\u00e1jden\u00ed potvrden\u00fdch kandid\u00e1tov SCP prech\u00e1dza do etapy hlasovania, kde cie\u013eom je n\u00e1js\u0165 ak\u00fdsi <i>hlasovac\u00ed l\u00edstok<\/i> (t.j. kontajner pre navrhovan\u00fa hodnotu) a kv\u00f3rum, ktor\u00e9 m\u00f4\u017ee vyhl\u00e1si\u0165 <i>zm\u011bnu<\/i> komit pre\u0148 (commit). Ak kv\u00f3rum vykon\u00e1 komit hlasovacieho l\u00edstka, jeho hodnota sa prij\u00edma ako konsenzus. Ale predt\u00fdm, ne\u017e sa uzol m\u00f4\u017ee hlasova\u0165 za komit hlasovacieho l\u00edstka, mus\u00ed najprv potvrdi\u0165 <i>zru\u0161enie<\/i> v\u0161etk\u00fdch hlasovac\u00edch l\u00edstkov s men\u0161ou hodnotou po\u010d\u00edtadla. Tieto kroky \u2013 zru\u0161enie hlasovac\u00edch l\u00edstkov, aby sa na\u0161iel ten, za ktor\u00fd sa m\u00f4\u017ee potvrdi\u0165 komit \u2013 zah\u0155\u0148aj\u00fa nieko\u013eko k\u00f4l federat\u00edvneho hlasovania oh\u013eadom nieko\u013ek\u00fdch vyhl\u00e1sen\u00ed o hlasovac\u00edch l\u00edstkoch.<\/p>\n<p>V nasleduj\u00facich oddieloch sa podrobnej\u0161ie opisuje navrhovanie a hlasovanie.<\/p>\n<h1>Navrhovanie<\/h1>\n<p>\nNa za\u010diatku etapy navrhovania m\u00f4\u017ee ka\u017ed\u00fd uzol spont\u00e1nne vybra\u0165 hodnotu V a hlasova\u0165 za potvrdenie \u201eNavrhujem V\u201c. Cie\u013eom v tejto etape je potvrdi\u0165 navrhnutie nejakej hodnoty prostredn\u00edctvom federat\u00edvneho hlasovania.<\/p>\n<p>Je mo\u017en\u00e9, \u017ee dostato\u010dn\u00fd po\u010det uzlov hlasuje za dostato\u010dne r\u00f4zne vyhl\u00e1senia a \u017eiadne navrhovanie nem\u00f4\u017ee dosiahnu\u0165 prah prijatia. Preto okrem vysielania vlastn\u00fdch nomin\u00e1ci\u00ed uzly \u201eodr\u00e1\u017eaj\u00fa\u201c nomin\u00e1cie svojich peerov. Odr\u00e1\u017eanie (echo) znamen\u00e1, \u017ee ak uzol hlasuje za navrhnutie V, ale vid\u00ed spr\u00e1vu od suseda, ktor\u00fd hlasuje za navrhnutie W, tak teraz bude hlasova\u0165 za navrhnutie aj V, aj W. (Nie v\u0161etky hlasy peerov sa odr\u00e1\u017eaj\u00fa po\u010das navrhovania, preto\u017ee to m\u00f4\u017ee vies\u0165 k v\u00fdbuchu r\u00f4znych nominantov. SCP obsahuje mechanizmus regul\u00e1cie t\u00fdchto hlasov. Skr\u00e1tka, existuje vzorec na ur\u010denie \u201eprior\u00edt\u201c peera z poh\u013eadu uzla, a odr\u00e1\u017eaj\u00fa sa hlasy iba vysoko priorizovan\u00fdch uzlov. \u010c\u00edm dlh\u0161ie navrhovanie trv\u00e1, t\u00fdm je ni\u017e\u0161\u00ed prah, tak\u017ee uzol roz\u0161iruje s\u00fabor peerov, ktor\u00fdch hlasy bude odr\u00e1\u017ea\u0165. Vzorec priority ako jeden z vstupov zah\u0155\u0148a \u010d\u00edslo slotu, tak\u017ee vysoko priorizovan\u00fd peer pre jeden slot m\u00f4\u017ee by\u0165 n\u00edzkoprioritn\u00fd pre in\u00fd, a naopak).<\/p>\n<p>Konceptu\u00e1lne vyhadzovanie paralelne V a W \u2013 to s\u00fa samostatn\u00e9 federat\u00edvne hlasy, ka\u017ed\u00fd samostatne schopn\u00fd dosiahnu\u0165 prijatie alebo potvrdenie. V praxi spr\u00e1vy protokolu SCP balia tieto samostatn\u00e9 hlasy spolu.<\/p>\n<p>Hoci hlasovanie za vyhadzovanie V je s\u013eubom nikdy nehlasova\u0165 proti vyhadzovaniu V, na \u00farovni aplik\u00e1cie - v tomto pr\u00edpade SCP - sa ur\u010duje, \u010do znamen\u00e1 'proti'. SCP nevid\u00ed tvrdenie, ktor\u00e9 by bolo v rozpore s hlasovan\u00edm 'Ja vyhadzujem X', teda nie je \u017eiadna spr\u00e1va 'Ja som proti vyhadzovaniu X', tak\u017ee uzol m\u00f4\u017ee hlasova\u0165 za vyhadzovanie ak\u00fdchko\u013evek hodn\u00f4t. Mnoh\u00e9 z t\u00fdchto nomin\u00e1ci\u00ed nikam neved\u00fa, ale nakoniec uzol m\u00f4\u017ee prija\u0165 alebo potvrdi\u0165 jednu alebo viac hodn\u00f4t. Akon\u00e1hle je nominant potvrden\u00fd, st\u00e1va sa <i>kandid\u00e1tom<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vyhadzovanie SCP s vyu\u017eit\u00edm federat\u00edvneho hlasovania. M\u00f4\u017ee by\u0165 mnoho hodn\u00f4t 'B', vyhadzovan\u00fdch rovnocenn\u00fdmi uzlami a 'odr\u00e1\u017ean\u00fdch' uzlom.<\/i> <\/p>\n<p>Vyhadzovanie kandid\u00e1tov m\u00f4\u017ee vies\u0165 k vzniku nieko\u013ek\u00fdch potvrden\u00fdch kandid\u00e1tov. Preto SCP vy\u017eaduje, aby aplika\u010dn\u00e1 \u00farove\u0148 poskytla ak\u00fasi met\u00f3du zl\u00fa\u010denia kandid\u00e1tov do jedn\u00e9ho <i>kompozitu<\/i> (composite). Met\u00f3da zl\u00fa\u010denia m\u00f4\u017ee by\u0165 ak\u00e1ko\u013evek. D\u00f4le\u017eit\u00e9 je, \u017ee ak je t\u00e1to met\u00f3da deterministick\u00e1, ka\u017ed\u00fd uzol zl\u00fa\u010di rovnak\u00fdch kandid\u00e1tov. V syst\u00e9me hlasovania za obed 'zl\u00fa\u010denie' m\u00f4\u017ee jednoducho znamena\u0165 odmietnutie jedn\u00e9ho z dvoch kandid\u00e1tov. (Ale deterministicky: ka\u017ed\u00fd uzol mus\u00ed zvoli\u0165 rovnak\u00fa hodnotu na zru\u0161enie. Napr\u00edklad, skor\u0161ia vo\u013eba v abecednom poriadku). V platobnej sieti Stellar, kde prebieha hlasovanie o hist\u00f3rii transakci\u00ed, zl\u00fa\u010denie dvoch navrhnut\u00fdch nominantov predpoklad\u00e1 zl\u00fa\u010denie transakci\u00ed, ktor\u00e9 obsahuj\u00fa, a posledn\u00fdch z ich dvoch \u010dasov\u00fdch pe\u010diatok.<\/p>\n<p>Technick\u00fd popis SCP dokazuje (veta 12), \u017ee na konci f\u00e1zy vyhadzovania sa sie\u0165 nakoniec zlad\u00ed na jeden kompozit. Ale je tu probl\u00e9m: federat\u00edvne hlasovanie je asynchr\u00f3nny protokol (rovnako ako SCP). In\u00fdmi slovami, uzly nie s\u00fa koordinovan\u00e9 v \u010dase, ale iba prostredn\u00edctvom spr\u00e1v, ktor\u00e9 odosielaj\u00fa. Z poh\u013eadu uzla nie je jasn\u00e9, kedy <i>skon\u010dila<\/i> f\u00e1za navrhovania. A hoci v\u0161etky uzly nakoniec pr\u00eddu k rovnak\u00e9mu kompozitu, m\u00f4\u017eu zvoli\u0165 r\u00f4zne trasy na tejto ceste, pri\u010dom vytv\u00e1raj\u00fa r\u00f4znych zlo\u017een\u00fdch kandid\u00e1tov na ceste, a nikdy nem\u00f4\u017eu poveda\u0165, ktor\u00fd z nich je kone\u010dn\u00fd.<\/p>\n<p>Ale to je v poriadku. Navrhovanie je len pr\u00edprava. Hlavn\u00e9 je obmedzi\u0165 po\u010det kandid\u00e1tov na dosiahnutie konsenzu, ktor\u00fd sa uskuto\u010d\u0148uje v procese. <i>hlasovania<\/i> (voice).<\/p>\n<h1>Hlasovanie<\/h1>\n<p>\nHlasovac\u00ed l\u00edstok je p\u00e1r , kde counter je cel\u00e9 \u010d\u00edslo, ktor\u00e9 za\u010d\u00edna od 1, a value je kandid\u00e1t z f\u00e1zy navrhovania. M\u00f4\u017ee to by\u0165 vlastn\u00fd kandid\u00e1t uzla alebo kandid\u00e1t susedn\u00e9ho uzla, ktor\u00e9ho akceptoval tento uzol. Hrubo povedan\u00e9, pri hlasovan\u00ed sa uskuto\u010d\u0148uj\u00fa mnoh\u00e9 pokusy don\u00fati\u0165 sie\u0165 dosiahnu\u0165 konsenzus o nejakom kandid\u00e1tovi v nejakom hlasovacom l\u00edstku, a to prostredn\u00edctvom potenci\u00e1lne mnoh\u00fdch federat\u00edvnych hlasovan\u00ed o vyhl\u00e1seniach t\u00fdkaj\u00facich sa hlasovac\u00edch l\u00edstkov. Po\u010d\u00edtadl\u00e1 na hlasovac\u00edch l\u00edstkoch sleduj\u00fa uskuto\u010dnen\u00e9 pokusy, a hlasovacie l\u00edstky s vy\u0161\u0161\u00edmi po\u010d\u00edtadlami maj\u00fa prednos\u0165 pred hlasovac\u00edmi l\u00edstkami s ni\u017e\u0161\u00edmi po\u010d\u00edtadlami. Ak sa hlasovac\u00ed l\u00edstok  zasekne, za\u010dne sa nov\u00e9 hlasovanie, teraz na hlasovacom l\u00edstku .<\/p>\n<p>D\u00f4le\u017eit\u00e9 je rozli\u0161ova\u0165 <i>hodnoty<\/i> (napr\u00edklad, ak\u00e1 by mala by\u0165 objedn\u00e1vka na obedom: pizza alebo \u0161al\u00e1ty), <i>hlasovacie l\u00edstky<\/i> (p\u00e1r counter-value) a <i>vyhl\u00e1senia<\/i> o hlasovac\u00edch l\u00edstkoch. Kolo SCP zah\u0155\u0148a nieko\u013eko k\u00f4l federat\u00edvneho hlasovania, najm\u00e4 na tak\u00fdchto vyhl\u00e1seniach:<\/p>\n<ul>\n<li>\u201eSom pripraven\u00fd na potvrdenie hlasovacieho l\u00edstka B\u201c a\n<\/li>\n<li>\u201eVyhlasujem potvrdenie hlasovacieho l\u00edstka B\u201c<\/li>\n<\/ul>\n<p>\nZ h\u013eadiska tohto uzla sa konsenzus dosahuje, ke\u010f n\u00e1jde hlasovac\u00ed l\u00edstok B, ku ktor\u00e9mu m\u00f4\u017ee potvrdi\u0165 (t.j. n\u00e1js\u0165 kv\u00f3rum, ktor\u00e9 akceptuje) vyhl\u00e1senie \u201eVyhlasujem potvrdenie hlasovacieho l\u00edstka B\u201c. Od tejto chv\u00edle je mo\u017en\u00e9 bezpe\u010dne kona\u0165 pod\u013ea hodnoty uvedenej v B \u2013 napr\u00edklad uskuto\u010dni\u0165 t\u00fato objedn\u00e1vku na obedom. Toto sa naz\u00fdva <i>externaliz\u00e1cia<\/i> hodnoty. Akon\u00e1hle je potvrden\u00e9 prijatie hlasovacieho l\u00edstka, uzol si m\u00f4\u017ee by\u0165 ist\u00fd, \u017ee ak\u00fdko\u013evek in\u00fd uzol vykonal externaliz\u00e1ciu tej istej hodnoty, alebo ju nevyhnutne vykon\u00e1 v bud\u00facnosti.<\/p>\n<p>Aj ke\u010f sa koncep\u010dne mnoh\u00e9 federat\u00edvne hlasovania vykon\u00e1vaj\u00fa na z\u00e1klade vyhl\u00e1sen\u00ed o mnoh\u00fdch r\u00f4znych hlasovac\u00edch l\u00edstkoch, nezdie\u013eaj\u00fa tak ve\u013ek\u00e9 mno\u017estvo spr\u00e1v, preto\u017ee ka\u017ed\u00e1 spr\u00e1va zah\u0155\u0148a radu hlasovac\u00edch l\u00edstkov. Jedna spr\u00e1va tak pos\u00fava stav mnoh\u00fdch federat\u00edvnych hlasovan\u00ed naraz, napr\u00edklad: \u201eS\u00fahlas\u00edm s komitom hlasovac\u00edch l\u00edstkov v rozsahu od  do .\u201c<\/p>\n<p>\u010co znamenaj\u00fa term\u00edny \u201epripraven\u00fd\u201c (prepared) a \u201ekomit\u201c (commit)?<\/p>\n<p>Uzol hlasuje za komit hlasovacieho l\u00edstka, ke\u010f je presved\u010den\u00fd, \u017ee ostatn\u00e9 uzly nespravia komit hlasovac\u00edch l\u00edstkov s in\u00fdmi hodnotami. Presved\u010denie o tom je cie\u013eom pr\u00edpravy vyhl\u00e1senia. Hlasovanie, v ktorom sa hovor\u00ed: \u201eSom pripraven\u00fd na komit hlasovacieho l\u00edstka B\u201c, je s\u013eub, \u017ee nikdy nesprav\u00edm komit hlasovacieho l\u00edstka men\u0161ieho ako B, t. j. s ni\u017e\u0161\u00edm \u010d\u00edslom (SCP vy\u017eaduje, aby hodnoty v hlasovac\u00edch l\u00edstkoch mali ur\u010dit\u00fd poriadok. Tak\u017ee hlasovac\u00ed l\u00edstok  je men\u0161\u00ed ako , ak N1&lt;N2, a tie\u017e ak N1=N2 a V1&lt;V2). Tieto men\u0161ie hlasovacie l\u00edstky s\u00fa \u201ezru\u0161en\u00e9\u201c (aborted) po\u010das pr\u00edpravn\u00e9ho hlasovania, zatia\u013e \u010do B je pova\u017eovan\u00fd za \u201epripraven\u00fd\u201c.<\/p>\n<p>Pre\u010do \u201eSom pripraven\u00fd na komit hlasovacieho l\u00edstka B\u201c znamen\u00e1 \u201eS\u013eubujem, \u017ee nikdy nebudem povoli\u0165 komit hlasovac\u00edch l\u00edstkov men\u0161\u00edch ako B\u201c? Preto\u017ee SCP definuje abort ako protiklad k commit. Hlasovanie na pr\u00edpravu hlasovacieho l\u00edstka predpoklad\u00e1 tie\u017e hlasovanie o zru\u0161en\u00ed niektor\u00fdch in\u00fdch hlasovac\u00edch l\u00edstkov a, ako sme u\u017e predt\u00fdm diskutovali, hlasovanie za nie\u010do jedno je s\u013eub, \u017ee nikdy nebudem hlasova\u0165 proti tomu.<\/p>\n<p>Predt\u00fdm, ako uzol prenesie komit, mus\u00ed najprv n\u00e1js\u0165 hlasovac\u00ed l\u00edstok, ktor\u00fd m\u00f4\u017ee potvrdi\u0165 ako pripraven\u00fd. In\u00fdmi slovami, vykon\u00e1va federat\u00edvne hlasovanie na t\u00e9mu \u201eSom pripraven\u00fd na komit hlasovacieho l\u00edstka B\u201c, pravdepodobne pre mnoh\u00e9 r\u00f4zne hlasovacie l\u00edstky, a\u017e k\u00fdm nen\u00e1jde ten, ktor\u00fd akceptuje kv\u00f3rum.<\/p>\n<p>Odkia\u013e poch\u00e1dzaj\u00fa hlasovacie l\u00edstky na pr\u00edpravu hlasovania? Najprv sa uzol zdie\u013ea o pr\u00edprave na hlasovanie za , kde C je kompozitn\u00fd kandid\u00e1t, vytvoren\u00fd v r\u00e1mci f\u00e1zy nomin\u00e1cie. Av\u0161ak aj po za\u010diatku pr\u00edpravy na hlasovanie m\u00f4\u017ee nomin\u00e1cia vies\u0165 k objaveniu nov\u00fdch kandid\u00e1tov, ktor\u00ed sa stan\u00fa nov\u00fdmi hlasovac\u00edmi l\u00edstkami. Medzit\u00fdm m\u00f4\u017eu ma\u0165 p\u00e1ry r\u00f4znych kandid\u00e1tov a m\u00f4\u017eu vytvori\u0165 blokuj\u00facu mno\u017einu, ktor\u00e1 prij\u00edma \u201eSom pripraven\u00fd zaviaza\u0165 hlasovac\u00ed l\u00edstok B2\u201c, \u010d\u00edm presved\u010d\u00ed uzol, aby ho tie\u017e prijal. Nakoniec existuje mechanizmus \u010dasov\u00e9ho limitu, ktor\u00fd generuje nov\u00e9 kol\u00e1 federat\u00edvneho hlasovania s nov\u00fdmi hlasovac\u00edmi l\u00edstkami s vy\u0161\u0161\u00edmi \u010d\u00edslami, ak s\u00fa\u010dasn\u00e9 hlasovacie l\u00edstky uviazli.<\/p>\n<p>Akon\u00e1hle uzol n\u00e1jde hlasovac\u00ed l\u00edstok B, ktor\u00fd m\u00f4\u017ee potvrdi\u0165 ako pripraven\u00fd, zdie\u013ea nov\u00fa spr\u00e1vu \u201eZviazanie hlasovacieho l\u00edstka B\u201c. Toto hlasovanie hovor\u00ed p\u00e1rom, \u017ee uzol nikdy neodmietne B. V skuto\u010dnosti, ak B predstavuje hlasovac\u00ed l\u00edstok , tak \u201eZviazanie hlasovacieho l\u00edstka \u201c znamen\u00e1 neodvolate\u013en\u00fd s\u00fahlas hlasova\u0165 za pripravenos\u0165 ka\u017ed\u00e9ho hlasovacieho l\u00edstka od  po . T\u00e1to dodato\u010dn\u00e1 hodnota pom\u00e1ha ostatn\u00fdm uzlom dohna\u0165 p\u00e1ra so zaviazovan\u00edm, ak s\u00fa e\u0161te v skor\u0161\u00edch f\u00e1zach protokolu.<\/p>\n<p>V tejto f\u00e1ze je e\u0161te raz d\u00f4le\u017eit\u00e9 zd\u00f4razni\u0165, \u017ee ide o asynchr\u00f3nne protokoly. Iba preto, \u017ee jeden uzol posiela hlasy na zaviazanie, neznamen\u00e1 to, \u017ee jeho rovesn\u00edci to tie\u017e robia. Niektor\u00ed z nich m\u00f4\u017eu st\u00e1le hlasova\u0165 o vyhl\u00e1seniach na pr\u00edpravu hlasovania, in\u00ed u\u017e mo\u017eno externelizovali hodnotu. SCP vysvet\u013euje, ako by mal uzol spracov\u00e1va\u0165 ka\u017ed\u00fd typ rovnocenn\u00e9ho spr\u00e1vy bez oh\u013eadu na jeho f\u00e1zu.<\/p>\n<p>Ak spr\u00e1va \u201eJa vyhlasujem commit \u201c nem\u00f4\u017ee by\u0165 prijat\u00e1 alebo potvrden\u00e1, existuje pravdepodobnos\u0165 prijatia alebo potvrdenia spr\u00e1vy  alebo  \u2014 alebo v ka\u017edom pr\u00edpade ak\u00e9hoko\u013evek bulletinu so hodnotou C, a nie akouko\u013evek inou, preto\u017ee uzol u\u017e s\u013e\u00fabil, \u017ee nikdy neodvol\u00e1 . Do doby, ke\u010f uzol zrealizuje hlasy pre commit, to bude C alebo ni\u010d, v z\u00e1vislosti od toho, ako \u010faleko z\u00e1jde konsenzus. Av\u0161ak zatia\u013e je to pre uzol nedostato\u010dn\u00e9 pre externiliz\u00e1ciu C. Niektor\u00e9 byzantsk\u00e9 zr\u00e1dy (tvoriace menej ne\u017e kv\u00f3rum, zalo\u017een\u00e9 na na\u0161ich predpokladoch o bezpe\u010dnosti) m\u00f4\u017eu klama\u0165 uzol. Prijatie a n\u00e1sledn\u00e9 potvrdenie nejak\u00e9ho bulletinu (alebo rozsahu bulletinov) \u2014 to je to, \u010do d\u00e1va uzolu istotu, \u017ee kone\u010dne externilizuje C.<\/p>\n<p><img decoding=\"async\" alt=\"Rozober\u00e1me protokol konsenzu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Hlasovanie SCP prostredn\u00edctvom federat\u00edvneho hlasovania. Nie je zobrazen\u00e9: kedyko\u013evek m\u00f4\u017ee spusti\u0165 \u010dasova\u010d, \u010do zv\u00fd\u0161i po\u010det v bulletine (a mo\u017eno vytvor\u00ed nov\u00fd kompozit z dodato\u010dne navrhnut\u00fdch kandid\u00e1tov).<\/i> <\/p>\n<p>A to je v\u0161etko! Akon\u00e1hle sie\u0165 dosiahne konsenzus, je pripraven\u00e1 robi\u0165 to znova a znova. V platobnej sieti Stellar sa to deje pribli\u017ene ka\u017ed\u00fdch 5 sek\u00fand: v\u00fdkon, ktor\u00fd si vy\u017eaduje ako bezpe\u010dnos\u0165, tak aj odolnos\u0165, zaru\u010den\u00e9 SCP.<\/p>\n<p>SCP to m\u00f4\u017ee dosiahnu\u0165 za pomoci nieko\u013ek\u00fdch k\u00f4l federat\u00edvneho hlasovania. Federat\u00edvne hlasovanie sa stalo mo\u017en\u00fdm v\u010faka konceptu rezov kv\u00f3ra: s\u00faborom rovnocenn\u00fdch uzlov, ktor\u00fdm sa ka\u017ed\u00fd uzol rozhodol d\u00f4verova\u0165 ako s\u00fa\u010dasti svojho (subjekt\u00edvneho) kv\u00f3ra. T\u00e1to konfigur\u00e1cia znamen\u00e1, \u017ee je mo\u017en\u00e9 dosiahnu\u0165 konsenzus aj v sieti s otvoren\u00fdm \u010dlenstvom a byzantsk\u00fdmi podvodmi.<\/p>\n<h1>\u010eal\u0161ie \u010d\u00edtanie<\/h1>\n<p><\/p>\n<ul>\n<li>Origin\u00e1lny technick\u00fd dokument SCP je mo\u017en\u00e9 n\u00e1js\u0165 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">tu<\/a><\/noindex>, a <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">tu<\/a><\/noindex> projekt \u0161pecifik\u00e1ci\u00ed pre jeho implement\u00e1ciu.\n<\/li>\n<li>P\u00f4vodn\u00fd autor protokolu SCP David Mazieres zjednodu\u0161ene (ale st\u00e1le technicky) vysvet\u013euje jeho <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">tu<\/a><\/noindex>.\n<\/li>\n<li>Mo\u017eno ste boli prekvapen\u00ed, ke\u010f ste nena\u0161li v tomto \u010dl\u00e1nku pojmy \u201e\u0165a\u017eba\u201c alebo \u201ed\u00f4kaz pr\u00e1ce\u201c. SCP nepou\u017e\u00edva tieto met\u00f3dy, ale niektor\u00e9 in\u00e9 algoritmy konsenzu ich pou\u017e\u00edvaj\u00fa. Zane Wizerspoon nap\u00edsal pr\u00edstupn\u00fd <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">preh\u013ead algoritmov konsenzu<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Krok za krokom<\/a><\/noindex> jednoduch\u00e1 sie\u0165 dosahuj\u00faca konsenzus po\u010das jedn\u00e9ho kompletn\u00e9ho kola SCP.\n<\/li>\n<li>Pre \u010ditate\u013eov, ktor\u00ed maj\u00fa z\u00e1ujem o implement\u00e1cie SCP: pozri. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">k\u00f3d C++<\/a><\/noindex>, pou\u017e\u00edvan\u00e1 platobnou sie\u0165ou Stellar, alebo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">k\u00f3d Go<\/a><\/noindex>, ktor\u00fd som nap\u00edsal pre lep\u0161ie pochopenie SCP.<\/li>\n<\/ul>\n<p>Zdroj: <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.4 - 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\/sk\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Po\u010fme sa pusti\u0165 do protokolu konsenzu Stellar | ProHoster","description":"Protokol konsenzu Stellar je prv\u00fdkr\u00e1t op\u00edsan\u00fd v.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}