{"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\/sl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Raziskovanje protokola soglasja Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProtokol soglasja Stellar je bil prvi\u010d opisan v <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">znanstvenem \u010dlanku<\/a><\/noindex> Davida Mazi\u00e8rea leta 2015. Gre za \u00bbfederalni sistem bizantinskega soglasja\u00ab, ki decentraliziranim ra\u010dunalni\u0161kim omre\u017ejem brez vodij omogo\u010da u\u010dinkovito dosego soglasja o kak\u0161ni odlo\u010ditvi. Pla\u010dilna mre\u017ea Stellar uporablja Stellar Consensus Protocol (SCP) za vodenje usklajene zgodovine transakcij, ki jo vidijo vsi udele\u017eenci.<\/p>\n<p>Menijo, da so protokoli soglasja te\u017eko razumljivi. SCP je enostavnej\u0161i od ve\u010dine, a kljub temu deli to sloves \u2014 deloma zaradi napa\u010dnega prepri\u010danja, da je \u00bbfederalno glasovanje\u00ab, ki mu je posve\u010dena prva polovica znanstvenega \u010dlanka, SCP. A to ni res! To je le pomemben gradnik, ki se v drugi polovici \u010dlanka uporablja za ustvarjanje <i>dejanskega<\/i> protokola soglasja Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nV tem \u010dlanku bomo na kratko razlo\u017eili, kaj je \u00bbsistem soglasij\u00ab, kaj ga lahko naredi \u00bbbizantinskega\u00ab in zakaj bi morali bizantinski sistem narediti \u00bbfederalen\u00ab. Nato bomo pojasnili federalno glasovalno proceduro, opisano v \u010dlanku o SCP, in na koncu razlo\u017eili sam protokol SCP.<\/p>\n<h1>Sistemi soglasij<\/h1>\n<p>\nSistem soglasij omogo\u010da skupini udele\u017eencev, da dose\u017ee soglasje o neki temi, na primer, kaj naro\u010diti za kosilo.<\/p>\n<p>V podjetju Interstellar smo uvedli svoj lastni sistem soglasja o kosilu: naro\u010damo to, kar pove na\u0161 operativni vodja John. To je enostaven in u\u010dinkovit sistem soglasij. Vsi zaupamo Johnu in verjamemo, da bo vsak dan na\u0161el nekaj zanimivega in hranljivega.<\/p>\n<p>Toda kaj, \u010de John zlorabi na\u0161e zaupanje? Lahko enostransko odlo\u010di, da moramo postati veganisti. \u010cez teden ali dva ga bomo verjetno odstavili in pooblastila prenesli na Elizabeth. Ampak potem, ona ima rada avocado z an\u010dami in misli, da bi morali vsi biti taki. Mo\u010d pokvari. Zato je bolje najti nek bolj demokrati\u010den na\u010din: nek na\u010din, da zagotovimo, da so upo\u0161tevane razli\u010dne preference, hkrati pa zagotoviti pravo\u010dasno in nedvoumen rezultat, da ne pridemo v situacijo, da nih\u010de ne naro\u010di kosila ali da pet ljudi odda razli\u010dne naro\u010dilnice ali da se razprava zavle\u010de do ve\u010dera.<\/p>\n<p>Zdi se, da je re\u0161itev preprosta: izvesti glasovanje! Vendar je to zavajajo\u010d vtis. Kdo bo zbiral glasovnice in sporo\u010dal rezultate? In zakaj bi morali drugi verjeti tistemu, kar bo povedal? Morda lahko <i>najprej<\/i> glasujemo za vodjo, kateremu zaupamo, da bo vodil glasovanje \u2014 vendar kdo bo vodil to <i>prvo<\/i> glasovanje? Kaj se zgodi, \u010de se ne moremo dogovoriti o vodji? Ali pa se dogovorimo, a ta vodja obstane na sre\u010danju ali gre na bolni\u0161ko?<\/p>\n<p>Podobne te\u017eave se pojavljajo v razdistributed ra\u010dunalni\u0161kih omre\u017ejih. Vsi sodelujo\u010di ali vozli\u0161\u010da morajo uskladiti neko re\u0161itev, na primer, kdo bo posodobil skupno datoteko ali vzel nalogo iz obdelovalne vrste. V omre\u017eju kriptovalut morajo vozli\u0161te ve\u010dkrat izbrati, kako izgleda popolna zgodovina, iz ve\u010d mo\u017enih razli\u010dic, ki v\u010dasih nasprotujejo ena drugi. To omre\u017eno soglasje daje prejemniku zagotovilo, da je vrednost (a) veljavna (ne ponarejena) in (b) \u0161e ni bila porabljena na drugem mestu. Prav tako zagotavlja, da bo lahko vrednost porabil v prihodnosti, ker bo nov prejemnik imel iste garancije iz istih razlogov.<\/p>\n<p>Vsak sistem usklajevanja v razdistributed ra\u010dunalni\u0161ki mre\u017ei mora biti odporen na okvare: mora dajati dosledne rezultate, kljub napakam, kot so po\u010dasne komunikacijske \u010drte, neodzivna vozli\u0161\u010da in napa\u010den vrstni red sporo\u010dil. <i>Bizantinska<\/i> sistem soglasij je dodatno odporen na \u201ebizantinske\u201c napake: vozli\u0161\u010da, ki dajejo napa\u010dne informacije, bodisi zaradi napake ali zaradi namernega poskusa, da bi podkrepili sistem ali pridobili kak\u0161no prednost. \u201eBizantinska\u201c odpornost na okvare \u2014 sposobnost zaupati skupinskemu odlo\u010danju, tudi ko nekateri \u010dlani skupine lahko la\u017eejo ali druga\u010de ne upo\u0161tevajo pravil odlo\u010danja \u2014 je dobila ime po <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\">pripovetki o bizantinskih generalih<\/a><\/noindex>, ki so posku\u0161ali uskladiti napad. <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\">Dober opis<\/a><\/noindex> imajo Anthony Stevens.<\/p>\n<p>Upo\u0161tevajmo lastnico kriptovalute Aliso, ki mora izbrati med nakupom okusnega sladoleda pri Bobu in pla\u010dilom dolga Carol. Morda Alisa \u017eeli pla\u010dati obema hkrati, z goljufivo porabo iste valute. Zato mora prepri\u010dati Bobov ra\u010dunalnik, da valuta nikoli ni bila pla\u010dana Carol, in prepri\u010dati Carolin ra\u010dunalnik, da valuta nikoli ni bila pla\u010dana Bobu. Bizantinski sistem soglasja to dejansko onemogo\u010da z uporabo oblike pravila ve\u010dine, imenovane <i>kvorum<\/i>. Vozli\u0161\u010da v tak\u0161ni mre\u017ei zavrnejo prehod na dolo\u010deno razli\u010dico zgodovine, dokler ne vidijo, da je dovolj velika koli\u010dina enakopravnih vozli\u0161\u010d - kvorum - soglasna za tak prehod. Ko se to zgodi, oblikujejo dovolj velik volilni blok, da prisilijo preostala vozli\u0161\u010da v omre\u017eju, da se strinjajo z njihovo odlo\u010ditvijo. Alisa lahko prisili nekatera vozli\u0161\u010da, da la\u017eejo v njeno ime, toda \u010de je omre\u017eje dovolj veliko, bo njen poskus zatrten s strani po\u0161tenih vozli\u0161\u010d.<\/p>\n<p>Koliko vozli\u0161\u010d je potrebnih za kvorum? Vsaj ve\u010dina, natan\u010dneje kvalificirana ve\u010dina, ki se bori proti napakam in goljufijam. Vendar pa za \u0161tetje ve\u010dine potrebujemo vedeti skupno \u0161tevilo udele\u017eencev. V pisarni Interstellar ali pri okro\u017enih volitvah so te \u0161tevilke lahko enostavno ugotovljive. Toda \u010de je va\u0161a skupina slabo definirana mre\u017ea, kjer se lahko vozli\u0161\u010da priklju\u010dujejo in izklju\u010dujejo po \u017eelji brez usklajevanja s centrom, potem potrebujete <i>federalni<\/i> sistem bizantinskega soglasja, ki je sposoben dolo\u010dati kvorume ne iz vnaprej dolo\u010denega seznama vozli\u0161\u010d, temve\u010d dinami\u010dno, iz nenehno spreminjajo\u010dega se in neizogibno nepopolnega posnetka vozli\u0161\u010d v dolo\u010denem trenutku.<\/p>\n<p>Zdi se lahko nemogo\u010de ustvariti kvorum z vidika posameznega vozli\u0161\u010da v \u0161iroki mre\u017ei, vendar je to mogo\u010de. Tak kvorum lahko celo zagotovi rezultate decentraliziranega glasovanja. Tehni\u010dni dokument SCP prikazuje, kako to dose\u010di s postopkom, imenovanim <i>federalno glasovanje<\/i>.<\/p>\n<h1>Za nestrpne<\/h1>\n<p>\nPreostali del \u010dlanka podrobneje opisuje federalno glasovanje in protokol soglasja Stellar. \u010ce vas podrobnosti ne zanimajo, tukaj je splo\u0161en pregled procesa.<\/p>\n<ol>\n<li>Voizli izvajajo federativne glasovalne kroge za 'nominirance'. Federativno glasovanje pomeni:\n<ul>\n<li>Voizel glasuje za kakr\u0161no koli izjavo, na primer, 'predlagam vrednost V';\n<\/li>\n<li>Voizel poslu\u0161a glasove peerov, dokler ne najde tistega, ki ga lahko 'sprejme';\n<\/li>\n<li>Voizel i\u0161\u010de 'kvorum' za to izjavo. Kvorum 'potrdi' nominanta.<\/li>\n<\/ul>\n<\/li>\n<li>Ko voizel lahko potrdi enega ali ve\u010d nominantov, posku\u0161a 'pripraviti' 'glasovnico' skozi ve\u010d krogov federativnega glasovanja.\n<\/li>\n<li>Ko je voizel sposoben preveriti pripravljenost glasovnice, posku\u0161a njen commit izvesti s \u0161e ve\u010d krogi federativnega glasovanja.\n<\/li>\n<li>Ko voizel lahko potrdi commit glasovnice, lahko 'eksternalizira' vrednost te glasovnice, tako da jo uporabi kot rezultat konsenza.<\/li>\n<\/ol>\n<p>\nTi koraki vklju\u010dujejo ve\u010d krogov federativnega glasovanja, ki skupaj tvorijo en krog SCP. Poglejmo podrobneje, kaj se dogaja pri vsakem koraku.<\/p>\n<h1>Federativno glasovanje<\/h1>\n<p>\nFederativno glasovanje je postopek, s katerim se ugotovi, ali lahko omre\u017eje uskladi predlog. V glasovalnem krogu mora vsak voizel izbrati eno od potencialno mnogih mo\u017enih vrednosti. To ne more storiti, dokler ne bo prepri\u010dan, da drugi voizli v omre\u017eju ne bodo izbrali drugega rezultata. Da bi bili v tem prepri\u010dani, si voizli izmenjujejo veliko sporo\u010dil sem ter tja, da bi vsak <i>potvrdio<\/i>, da <i>kvorum<\/i> voizlov <i>sprejema<\/i> isto <i>odlo\u010ditev<\/i>. Preostali del tega razdelka pojasnjuje pojme v tej izjavi in kako poteka celoten postopek.<\/p>\n<h1>Kvorumi in delni kvorumi<\/h1>\n<p>\nZa\u010dnimo z opredelitvijo kvoruma. Kot smo ugotovili zgoraj, je v decentraliziranem omre\u017eju z dinami\u010dnim \u010dlanstvom skoraj nemogo\u010de vnaprej vedeti, koliko voizlov je in zato koliko jih je potrebno za ve\u010dino. Federativno glasovanje re\u0161uje to te\u017eavo s predstavitvijo nove ideje <i>delnega kvoruma<\/i> (quorum slice): majhna skupina enakopravnih voizlov, kateri voizel zaupa prenos informacije o stanju glasovanja v preostalo omre\u017eje. Vsak voizel dolo\u010di svoj lasten delni kvorum (ki postane \u010dlan dejansko).<\/p>\n<p>Oblikovanje kvoruma se za\u010dne z delnim kvorumom. Za vsak voizel se dodajo voizli njegovega delnega kvoruma. Nato se dodajo \u010dlani delnih kvorumov. <i>teh vozlova<\/i> itd. Kako nadaljujete, naletite na vedno ve\u010d vozlov, ki jih ne morete dodati, ker so \u017ee vklju\u010deni v rez. Ko ni ve\u010d novih vozlov za dodajanje, se postopek ustavi: oblikovali smo kvorum preko \u201etransitivnega zapiranja\u201c rezanja kvoruma za\u010detnega vozla.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Da bi na\u0161li kvorum iz danega vozla...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... dodamo \u010dlane njegovega reza...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... nato dodamo \u010dlane rezov teh vozlov.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nadaljujemo, dokler ne ostane ve\u010d vozlov za dodajanje.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vozlov za dodajanje ni ve\u010d. To je kvorum.<\/i><\/p>\n<p>V resnici lahko vsak vozel pripada ve\u010d kot enemu rezu. Da bi oblikovali kvorum, izberite le en rez in dodajte \u010dlane; nato izberite katerikoli rez za vsak \u010dlan in dodajte \u010dlane <i>tega<\/i> reza itd. To pomeni, da je vsak vozel \u010dlan mno\u017eice mo\u017enih kvorumov.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Izberite le en rez kvoruma na vsakem koraku.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Eden mo\u017enih kvorumov. Ali alternativna mo\u017enost...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... izberemo druge reze...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(kadar je to mogo\u010de)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... ustvarja drugi kvorum.<\/i><\/p>\n<p>Kako vozlu uspe izvedeti, v katerih rezih so drugi vozli? Enako kot druge informacije o drugih vozlih: iz sporo\u010dil, ki jih vsak vozel predvaja v omre\u017eje, ko se spremeni njegovo glasovalno stanje. Vsaka oddaja vklju\u010duje informacije o rezih po\u0161iljateljevega vozla. V tehni\u010dnem dokumentu SCP mehanizem komunikacije ni dolo\u010den. Izvedbe obi\u010dajno uporabljajo <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip protokol<\/a><\/noindex> za zagotovitev predvajanja sporo\u010dil po celotnem omre\u017eju.<\/p>\n<p>Pripomnimo, da je v nefeuderalnem bizantinskem sistemu sporazumov kvorum definiran kot ve\u010dina vseh vozli\u0161\u010d. Bizantinski sistem sporazumov je zasnovan z vidika vpra\u0161anja: koliko nepo\u0161tenih vozli\u0161\u010d lahko sistem prenese? V sistemu z N vozli\u0161\u010di, zasnovanem za pre\u017eivetje pri f napakah (prevarah), mora vozli\u0161\u010de biti sposobno dose\u010di napredek, \u010de prejme odziv od N\u2212f peers, saj f od njih morda ne deluje. \u010ce pa prejme odziv od N\u2212f peers, lahko domnevamo, da so vsa f peers (od katerih vozli\u0161\u010de ni prejelo odziva) dejansko po\u0161tena. Tako so zlonamerna f iz N\u2212f peers (od katerih je bil prejet odgovor). Da bi vozli\u0161\u010da dosegla enoten konsenz, mora biti ve\u010dina preostalih vozli\u0161\u010d po\u0161tenih, to pomeni, da potrebujemo, da je N\u2212f ve\u010d kot 2f ali N &gt; 3f. Tako obi\u010dajno sistem, zasnovan za pre\u017eivetje pri f napakah, vklju\u010duje skupno N=3f+1 vozli\u0161\u010d in velikost kvoruma 2f+1. Ko predlog prese\u017ee prag kvoruma, so preostali \u010dlani omre\u017eja prepri\u010dani, da bodo vsi konkuren\u010dni predlogi neuspe\u0161ni. Tako omre\u017eje konvergira k rezultatu.<\/p>\n<p>Toda v feudalnem bizantinskem sistemu sporazumov ne more biti samo ve\u010dine (ker nih\u010de ne ve skupne velikosti omre\u017eja), ampak je koncept ve\u010dine sploh brez smisla! \u010ce je \u010dlanstvo v sistemu odprto, lahko nekdo pridobi ve\u010dino, preprosto z izvedbo tako imenovanega Sibyl atac: ve\u010dkrat se pridru\u017euje omre\u017eju prek ve\u010d vozli\u0161\u010d. Zakaj torej se lahko tranzitivno zapiranje preseka imenuje <i>kvorum<\/i>, in kako lahko zatira konkuren\u010dne predloge?<\/p>\n<p>Tehni\u010dno, nikakor! Predstavite si omre\u017eje s \u0161estimi vozli\u0161\u010di, kjer sta dve trojici izolirani v prese\u010dnih kvorumih drug drugega. Prva podskupina lahko sprejme odlo\u010ditev, o kateri druga nikoli ne bo sli\u0161ala, in obratno. Za to omre\u017eje ni na\u010dina, da bi doseglo konsenz (razen naklju\u010dno).<\/p>\n<p>Zato SCP zahteva, da mora imeti omre\u017eje za feudalno glasovanje (in za uporabo pomembnih teoremov \u010dlanka) lastnost, imenovano <i>prese\u010di\u0161\u010de kvorumov<\/i>V omre\u017ei s to lastnostjo se vsak dva kvora, ki ju lahko zgradimo, vedno prekrivata vsaj v enem vozli\u0161\u010du. Za dolo\u010ditev prevladujo\u010dih razpolo\u017eenj omre\u017eja je to prav tako dobro, kot imeti ve\u010dino. Intuitivno to pomeni, da \u010de kateri koli kvor sogla\u0161a z trditvijo X, noben drug kvor nikoli ne more sogla\u0161ati z ne\u010dim drugim, ker bo nujno vseboval neko vozli\u0161\u010de iz prvega kvora, ki je \u017ee glasovalo za X.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u010ce v omre\u017eju obstaja prekrivanje kvorov\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 potem se vsak dva kvor, ki ju lahko zgradite\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 vedno prekrivata.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Seveda se lahko prekrivajo\u010da vozli\u0161\u010da izka\u017eejo za bizantinsko la\u017ena ali slaba na druge na\u010dine. V tem primeru prekrivanje kvorov ne pomaga omre\u017eju, da bi se sploh uskladilo. Iz tega razloga temelji veliko rezultatov v tehni\u010dnem dokumentu SCP na izrecno izra\u017eenih predpostavkah, kot je to, da v omre\u017eju ostaja prekrivanje kvorov, <i>tudi po odstranitvi slabih vozli\u0161\u010d.<\/i>. Zaradi preprostosti bomo te predpostavke <i>pustili neizrecne<\/i> v preostalem delu \u010dlanka).<\/p>\n<p>Morda se zdi nerazumljivo pri\u010dakovati, da je v omre\u017eju neodvisnih vozli\u0161\u010d mo\u017eno zanesljivo prekrivanje kvorov. Vendar sta tukaj dva razloga, zakaj je to tako.<\/p>\n<p>Prvi razlog je obstoj samega interneta. Internet je idealen primer omre\u017eja neodvisnih vozli\u0161\u010d s prekrivanjem kvorov. Ve\u010dina vozli\u0161\u010d v internetu je povezana le z nekaterimi drugimi lokalnimi vozli\u0161\u010di, toda ta majhna mno\u017eica se dovolj prekriva, da je bilo vsako vozli\u0161\u010de dostopno iz katerega koli drugega vozli\u0161\u010da po eni ali drugi poti.<\/p>\n<p>Druga razlog specifi\u010dan je za platnu mre\u017eu Stellar (naj\u010de\u0161\u0107e kori\u0161\u0107ena primena SCP). Svaka imovina u Stellar mre\u017ei ima izdavaoca, a preporuke Stellar-a zahtevaju da svaki izdavaoc imenuje jedan ili vi\u0161e \u010dvorova u mre\u017ei za obradu zahteva za otkup. U va\u0161em je interesu direktno ili indirektno uklju\u010diti te \u010dvorove u kvorum za svaku imovinu koja vas zanima. Tada \u0107e kvorumi za sve \u010dvorove koji su zainteresovani za odre\u0111enu imovinu biti preklapani barem u tim \u010dvorovima za otkup. \u010cvorovi zainteresovani za vi\u0161e imovine uklju\u010diva\u0107e u svoje kvorume sve \u010dvorove za otkup odgovaraju\u0107ih izdavaoca, i nastoja\u0107e da pove\u017eu sve imovine zajedno. Pored toga, sve imovine koje nisu na taj na\u010din povezane sa ostalima u mre\u017ei, i <i>ne treba da budu povezane<\/i> \u2014 tako je zami\u0161ljeno da u ovoj mre\u017ei ne bude preklapanja kvoruma (na primer, banke iz dolarske zone ponekad \u017eele da trguju sa bankama iz evro zone i bankama iz zone peza, tako da su u istoj mre\u017ei, ali nije ih briga za posebnu mre\u017eu dece koja trguju bejzbol karticama).<\/p>\n<p>Naravno, <i>o\u010dekivanje<\/i> preklapanja kvoruma nije <i>garancija<\/i>. Druge vizantijske sisteme dogovora svoju slo\u017eenost u velikoj meri duguju garanciji kvoruma. Va\u017ena novina SCP-a je to \u0161to prebacuje odgovornost za formiranje kvoruma sa samog algoritma konsenzusa na nivo aplikacije. Tako, iako je federativno glasanje dovoljno op\u0161te za glasanje o bilo kojim pitanjima, zapravo njegova pouzdanost kriti\u010dki zavisi od \u0161ireg zna\u010denja ovih vrednosti. Neki hipoteti\u010dki na\u010dini kori\u0161\u0107enja mo\u017eda ne\u0107e biti toliko povoljni za stvaranje dobro povezanih mre\u017ea kao drugi.<\/p>\n<h1>Glasanje, prihvatanje i potvrda<\/h1>\n<p>\nU rundi federativnog glasanja \u010dvor opcionalno po\u010dinje da glasa za neku vrednost V. To podrazumeva emitovanje poruke u mre\u017eu: \u201eJa sam \u010dvor N, moji kvorumi Q, i glasam za V\u201c. Kada \u010dvor glasa na ovaj na\u010din, on se obavezuje da nikada nije glasao protiv V i nikada ne\u0107e.<\/p>\n<p>V prenosih od enakih vozli\u0161\u010d vsak vozli\u0161\u010de vidi, kako glasujejo drugi. Ko vozli\u0161\u010de zbere dovolj tak\u0161nih sporo\u010dil, lahko sledi rezom kvorumov in poskusi najti kvorume. \u010ce vidi kvorum vozli\u0161\u010d, ki prav tako glasujejo za V, lahko preide k <i>sprejemanju<\/i> V in to novo sporo\u010dilo prenese v omre\u017eje: 'Jaz sem vozli\u0161\u010de N, moji rezi kvorumov Q, in sprejemam V'. Sprejemanje zagotavlja mo\u010dnej\u0161o garancijo kot zgolj glasovanje. Ko vozli\u0161\u010de glasuje za V, nikoli ne more glasovati za druge mo\u017enosti. \u010ce pa vozli\u0161\u010de sprejme V, nobeno vozli\u0161\u010de v omre\u017eju nikoli ne bo sprejelo druge mo\u017enosti (teorema 8 v tehni\u010dnem dokumentu SCP to dokazuje).<\/p>\n<p>Seveda je verjetnost, da takoj ne bo na\u0161el kvoruma vozli\u0161\u010d, ki bi se strinjala z V, velika. Druga vozli\u0161\u010da lahko glasujejo za druge vrednosti. Vendar ima vozli\u0161\u010de \u0161e en na\u010din, kako preiti od preprostega glasovanja k sprejemanju. N lahko sprejme drugo vrednost W, tudi \u010de zanje ni glasovalo, in tudi \u010de ne vidi kvoruma za to. <i>Zadostuje, da vidi<\/i> blokirajo\u010de mno\u017eice <i>vozli\u0161\u010d, ki so sprejela W. Blokirajo\u010de mno\u017eice so po en vozli\u0161\u010de iz vsakega rezanja kvorumov N. Kot pove ime, je sposobno<\/i> blokirati<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>katerekoli druge vrednosti. \u010ce vsa vozli\u0161\u010da v tako mno\u017eico sprejmejo W, potem (po teoremi 8) nikoli ne bo mogo\u010de oblikovati kvoruma, ki bi sprejel drugo vrednost, zato je za N tudi varno sprejeti W.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vozli\u0161\u010de N z tremi rezi kvorumov.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F je blokirajo\u010da mno\u017eica za N: vklju\u010duje po en vozli\u0161\u010de iz vsakega reza N.<\/i><\/p>\n<p>B-E je prav tako blokirajo\u010da mno\u017eica za N, ker E nastopa v dveh rezih N.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Toda blokirajo\u010da mno\u017eica ni kvorum. Prelahko bi bilo prevarati vozli\u0161\u010de N, da sprejme \u017eeleno vrednost, \u010de bi bilo dovolj, da bi heker prelomil le eno vozli\u0161\u010de v vsakem rezu N. Zato sprejemanje vrednosti \u0161e ne pomeni konca glasovanja. Namesto tega mora N potrditi vrednost, torej videti kvorum vozli\u0161\u010d, ki jo sprejemajo. \u010ce ga dose\u017ee, kot dokazuje tehni\u010dni dokument SCP (v teoremi 11), bo tudi preostalo omre\u017eje na koncu potrdilo isto vrednost, zato bo N zaklju\u010dil federativno glasovanje z dolo\u010deno vrednostjo kot rezultatom.<\/i><\/p>\n<p>Postopek glasovanja, sprejetja in potrjevanja predstavlja en celotni krog federativnega glasovanja. Protokol soglasja Stellar zdru\u017euje ve\u010d tak\u0161nih krogov za ustvarjanje celotnega soglasnega sistema.<\/p>\n<h1>Protokol soglasja Stellar<\/h1>\n<p>\nDve najpomembnej\u0161i lastnosti soglasnega sistema sta <i>varnost<\/i> in <i>odzivnost<\/i>. Soglasni algoritem je 'varen', \u010de nikoli ne more dati razli\u010dnih rezultatov razli\u010dnim udele\u017eencem (kopija zgodovine Boba nikoli ne bo v nasprotju s Carol). 'Odzivnost' pomeni, da algoritem vedno izda rezultat, kar pomeni, da ne obti\u010di.<\/p>\n<p>Opi\u0161ani postopek federativnega glasovanja <i>je varen<\/i> v tem smislu, da \u010de vozli\u0161\u010de potrdi vrednost V, nobeno drugo vozli\u0161\u010de ne bo potrdilo druge vrednosti. Vendar 'ne bo potrdilo druge vrednosti' ne pomeni, da bo nujno nekaj potrdilo. Udele\u017eenci lahko glasujejo za tako veliko \u0161tevilo razli\u010dnih vrednosti, da ni\u010d ne dose\u017ee praga sprejetja. To pomeni, da v federativnem glasovanju ni <i>odzivnost<\/i>.<\/p>\n<p>Protokol soglasja Stellar uporablja federativno glasovanje na na\u010din, ki zagotavlja tako varnost kot odzivnost. (Zagotavljanje varnosti in odzivnosti SCP ima teoreti\u010dno omejitev. Konstrukcija izbere zelo mo\u010dno zagotovilo varnosti, \u017ertvuje pa majhno oslabitev odzivnosti, vendar glede na dovolj dolgo obdobje bo soglasje z visoko verjetnostjo dose\u017eeno). Na kratko, ideja je izvesti ve\u010d federativnih glasovanj o ve\u010d vrednostih, dokler ena od njih popolnoma ne preide skozi vse faze glasovanja SCP, opisane spodaj.<\/p>\n<p>Vrednosti, za katere SCP stremi k soglasju, so lahko zgodovina transakcij ali naro\u010dilo za malico, ali kaj drugega, vendar je pomembno omeniti, da to niso tiste vrednosti, ki se sprejemajo ali potrjujejo. Namesto tega poteka federativno glasovanje o <i>izjavah o teh vrednostih<\/i>.<\/p>\n<p>Prvi krogi federativnega glasovanja potekajo na <i>fazni nominaciji<\/i> (nominacijska faza), pri naboru izjav vrste 'Predlagam V', morda za mnoge razli\u010dne vrednosti V. Cilj nominacije je najti eno ali ve\u010d izjav, ki preidejo skozi sprejem in potrditev.<\/p>\n<p>Po iskanju potrjenih kandidatov SCP preide na fazo glasovanja, kjer je cilj najti nek. <i>glasilni list.<\/i> (torej vsebnik za predlagano vrednost) in kvorum, ki lahko razglasi. <i>commit<\/i> za njega (commit). \u010ce kvorum izvede commit glasila, se njegova vrednost sprejme kot konsenz. A preden lahko vozli\u0161\u010de glasuje za commit glasila, mora najprej potrditi. <i>preklic.<\/i> vseh glasil s manj\u0161im \u0161tevcem. Ti koraki \u2014 preklic glasil, da najdejo tistega, za katerega je mogo\u010de potrditi commit \u2014 vklju\u010dujejo ve\u010d krogov federativnega glasovanja o ve\u010d trditvah o glasilih.<\/p>\n<p>V naslednjih razdelkih so podrobneje opisani predlog in glasovanje.<\/p>\n<h1>Predlog.<\/h1>\n<p>\nNa za\u010detku faze predloga lahko vsako vozli\u0161\u010de spontano izbere vrednost V in glasuje za potrditev 'Jaz predlagam V'. Cilj v tej fazi je potrditi predlog dolo\u010dene vrednosti z federativnim glasovanjem.<\/p>\n<p>Morda bo dovolj vozli\u0161\u010d glasovalo za dovolj razli\u010dne trditve in noben predlog ne more dose\u010di praga sprejetja. Zato poleg predvajanja lastnih nominacijskih glasov, vozli\u0161\u010da 'odra\u017eajo' nominacije svojih peer-ov. Odra\u017eanje (echo) pomeni, da \u010de vozli\u0161\u010de glasuje za predlog V, vendar vidi sporo\u010dilo od soseda, ki glasuje za predlog W, bo zdaj glasovalo za predlog tako V kot W. (Ne vsi glasovi peer-ov se odra\u017eajo med predlogom, ker to lahko privede do eksplozije razli\u010dnih nominantov. SCP vklju\u010duje mehanizem za regulacijo teh glasov. Na kratko, obstaja formula za dolo\u010ditev 'prioritete' peer-a z vidika vozli\u0161\u010da, in odra\u017eajo se glasovi le visokoprioritetnih vozli\u0161\u010d. \u010cim dlje traja predlog, tem ni\u017eji je prag, zato vozli\u0161\u010de raz\u0161iri nabor peer-ov, katerih glasove bo odra\u017ealo. Formula prioritete kot enega od vhodnih podatkov vklju\u010duje \u0161tevilko slot-a, zato je visokoprioritetno enakovredno vozli\u0161\u010de za en slot lahko nizkoprioritizirano za drugega, in obratno).<\/p>\n<p>Konceptualno, istovremeno izno\u0161enje i V i W je odvojeni federativni glasovi, od kojih svaki mo\u017ee da postigne usvajanje ili potvrdu. U praksi, SCP protokol pakira ove odvojene glasove zajedno.<\/p>\n<p>Iako glasanje za izno\u0161enje V predstavlja obe\u0107anje da nikada ne\u0107e glasati protiv izno\u0161enja V, na nivou aplikacije - u ovom slu\u010daju SCP - odre\u0111uje se \u0161ta zna\u010di \u201eprotiv\u201c. SCP ne prepoznaje tvrdnju koja protivre\u010di glasanju \u201eJa iznosim X\u201c, to jest, nema poruke \u201eJa sam protiv izno\u0161enja X\u201c, pa \u010dvor mo\u017ee glasati za iznos svake vrednosti. Mnogi od ovih nominacija ne\u0107e dovesti do ni\u010dega, ali u kona\u010dnici \u010dvor \u0107e mo\u0107i da prihvati ili potvrdi jednu ili vi\u0161e vrednosti. Kada je nominant potvr\u0111en, postaje <i>kandidat<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Izno\u0161enje SCP-a koriste\u0107i federativno glasanje. Mnoge vrednosti 'B' mogu se iznositi od strane ravnopravnih \u010dvorova i 'reflektovati' od strane \u010dvora.<\/i> <\/p>\n<p>Izno\u0161enje kandidata mo\u017ee dovesti do pojave vi\u0161e potvr\u0111enih kandidata. Stoga SCP zahteva da aplikacioni nivo pru\u017ei neku metodu za spajanje kandidata u jedan <i>kompozit<\/i> (composite). Metoda spajanja mo\u017ee biti bilo koja. Glavna stvar je da, ako je ova metoda deterministi\u010dka, svaki \u010dvor \u0107e spojiti iste kandidate. U sistemu glasanja za ru\u010dak, 'spajanje' mo\u017ee jednostavno zna\u010diti odbacivanje jednog od dva kandidata. (Ali deterministi\u010dki: svaki \u010dvor mora izabrati istu vrednost za poni\u0161tavanje. Na primer, raniji izbor u abecednom redu). U platnoj mre\u017ei Stellar, gde se glasa o istoriji transakcija, spajanje dva predlo\u017eena nominanta podrazumeva spajanje transakcija koje sadr\u017ee i poslednjih od njih dve vremenske oznake.<\/p>\n<p>Tehni\u010dki opis SCP-a dokazuje (teorema 12) da se do kraja faze izno\u0161enja mre\u017ea kona\u010dno konvergira ka jednom kompozitu. Ali postoji problem: federativno glasanje je asinhroni protokol (kao i SCP). Drugim re\u010dima, \u010dvorovi nisu usagla\u0161eni u vremenu, ve\u0107 samo u porukama koje \u0161alju. Sa stanovi\u0161ta \u010dvora nije jasno kada <i>se je kon\u010dala<\/i> faza potiskanja. In \u010deprav bodo vsi vozli na koncu pri\u0161li do istega zdru\u017eevanja, lahko izberejo razli\u010dne poti na tej poti, kar ustvarja razli\u010dne sestavne kandidate, in nikoli ne morejo povedati, kateri je kon\u010dni.<\/p>\n<p>Ampak to je v redu. Potiskanje je le priprava. Glavno je omejiti \u0161tevilo kandidatov za dosego konsenza, ki nastane v procesu <i>glasovanja<\/i> (glasovanje).<\/p>\n<h1>Glasovanje<\/h1>\n<p>\nGlasovnica je par , kjer je counter celo \u0161tevilo, ki se za\u010dne s 1, value pa je kandidat iz faze potiskanja. To je lahko lastni kandidat vozla ali kandidat sosednjega vozla, ki ga sprejema to vozlo. Na grobo, pri glasovanju se izvajajo ve\u010dkratni poskusi za dosego konsenza v omre\u017eju o nekem kandidatu v neki glasovnici z izvajanjem potencialno \u0161tevilnih federativnih glasovanj o izjavah o glasovnicah. \u0160tevci v glasovnicah spremljajo opravljene poskuse in glasovnice z vi\u0161jimi \u0161tevci imajo prednost pred glasovnicami z ni\u017ejimi \u0161tevci. \u010ce glasovnica  zmrzne, se za\u010dne novo glasovanje, zdaj o glasovnici .<\/p>\n<p>Pomembno je razlikovati <i>pomeni<\/i> (na primer, kak\u0161na naj bo naro\u010dilo za kosilo: pica ali solate), <i>glasovnice<\/i> (par counter-value) in <i>izjave<\/i> o glasovnicah. Krog SCP vklju\u010duje ve\u010d krogov federativnih glasovanj, zlasti o takih izjavah:<\/p>\n<ul>\n<li>\"Pripravljen sem potrditi glasovnico B\" in\n<\/li>\n<li>\"Jaz razgla\u0161am potrditev glasovnice B\"<\/li>\n<\/ul>\n<p>\nZ vidika tega vozla se konsenz dose\u017ee, ko najde glasovnico B, za katero lahko potrdi (tj. najde kvorum, ki sprejema) izjavo \"Jaz razgla\u0161am potrditev glasovnice B\". Od tega trenutka je mogo\u010de varno delovati po vrednosti, navedeni v B \u2013 na primer, oddati to naro\u010dilo za kosilo. To se imenuje <i>eksternalizacija<\/i> vrednosti. Ko je potrjeno sprejetje glasovnice, lahko vozlo verjame, da je katero koli drugo vozlo opravilo eksteralizacijo te iste vrednosti ali jo bo nujno opravilo v prihodnosti.<\/p>\n<p>\u010ceprav konceptualno mnoge federativne volitve potekajo na podlagi izjav o ve\u010d razli\u010dnih glasovnicah, si izmenjajo manj\u0161o koli\u010dino sporo\u010dil, saj vsako sporo\u010dilo inkapsulira vrsto glasovnic. Tako eno sporo\u010dilo promovira stanje ve\u010d federativnih volitev hkrati, na primer: \u201eSprejemam zavezo glasovnic v razponu od  do .\u201d<\/p>\n<p>Kaj pomenita izraza \u201epripravljen\u201d (prepared) in \u201ezaveza\u201d (commit)?<\/p>\n<p>Svojo zavezo glasovnice odda vozli\u0161\u010de, ko je prepri\u010dano, da druga vozli\u0161\u010da ne bodo oddala zaveze glasovnic z drugimi vrednostmi. Prepri\u010danje o tem je cilj pripravljanja izjave. Glasovanje, v katerem se izjasni: \u201ePripravljen sem na zavezo glasovnice B\u201d, je obljuba, da nikoli ne bom oddal zavezo glasovnice, ki je manj\u0161a od B, tj. z manj\u0161im \u0161tevcem (SCP zahteva, da imajo vrednosti v glasovnicah dolo\u010den red. Tako je glasovnica  manj\u0161a od , \u010de je N1&lt;N2, prav tako, \u010de je N1=N2 in V1&lt;V2). Te manj\u0161e glasovnice se \u201eprekli\u010dejo\u201d (aborted) med pripravljalnim glasovanjem, medtem ko je B obravnavana kot \u201epripravljena\u201d.<\/p>\n<p>Zakaj \u201ePripravljen sem na zavezo glasovnice V\u201d pomeni \u201eObljubljam, da nikoli ne bom dovolil zaveze glasovnic, manj\u0161ih od V\u201d? Ker SCP definira abort kot nasprotje commit. Glasovanje o pripravljenosti glasovnice prav tako implicira glasovanje o preklicu nekaterih drugih glasovnic, in, kot smo \u017ee razpravljali, glasovanje za nekaj enega je obljuba, da se nikoli ne bom glasoval proti temu.<\/p>\n<p>Preden odda zavezo, mora vozli\u0161\u010de najprej najti glasovnico, ki jo lahko potrdi kot pripravljeno. Z drugimi besedami, opravi federativno glasovanje na temo \u201ePripravljen sem na zavezo glasovnice B\u201d, morda za ve\u010d razli\u010dnih glasovnic, dokler ne najde tiste, ki sprejme kvorum.<\/p>\n<p>Kje izhajajo glasovnice za pripravo glasovanja? Najprej vozli\u0161\u010de prenese pripravo za glasovanje za , kjer je C kandidat-kompozit, ki je bil pripravljen v fazi predloga. Vendar pa lahko tudi po za\u010detku priprave na glasovanje predlog vodi do dodatnih kandidatov, ki postanejo nove glasovnice. Medtem imajo lahko pirom razli\u010dne kandidate in lahko oblikujejo blokirno mno\u017eico, ki sprejema \"Pripravljen sem za potrjevanje glasovnice B2\", kar prepri\u010da vozli\u0161\u010de, da jo tudi sprejme. Nazadnje obstaja mehanizem \u010dasovne omejitve, ki generira nove na\u010dine federativnega glasovanja na novih glasovnicah z vi\u0161jimi \u0161tevcem, \u010de trenutne glasovnice obti\u010dijo.<\/p>\n<p>Ko vozli\u0161\u010de najde glasovnico B, ki jo lahko potrdi kot pripravljeno, prenese novo sporo\u010dilo \"Potrditev glasovnice B\". To glasovanje pove pirom, da vozli\u0161\u010de nikoli ne bo opustilo B. V resnici, \u010de je B glasovnica , to pomeni \"Potrditev glasovnice \" brezpogojno soglasje za glasovanje o pripravljenosti vsake glasovnice od  do . Ta dodatna vrednost pomaga drugim vozli\u0161\u010dem, da uhitijo pira s potrditvijo, \u010de so \u0161e na prej\u0161njih fazah protokola.<\/p>\n<p>Na tej to\u010dki je vredno ponovno poudariti, da so to asimetri\u010dni protokoli. To, da eno vozli\u0161\u010de odda glasove za potrditev, ne pomeni, da tudi njegovi vrstniki to po\u010dnejo. Nekateri od njih morda \u0161e vedno ka\u017eejo glasove za prijave za pripravo glasovanja, drugi so morda \u017ee eksternalizirali vrednost. SCP razlaga, kako mora vozli\u0161\u010de obravnavati vsak tip enakovrednega sporo\u010dila ne glede na njegovo fazo.<\/p>\n<p>\u010ce sporo\u010dilo \u201eJaz razgla\u0161am commit &lt;N,C&gt;\u201c ne more biti sprejeto ali potrjeno, obstaja mo\u017enost sprejema ali potrjevanja sporo\u010dila &lt;N+1,C&gt; ali &lt;N+2,C&gt; \u2014 ali, v vsakem primeru, katerega koli biltena s vrednostjo C, ne pa katerega koli drugega, saj je vozli\u0161\u010de \u017ee obljubilo, da nikoli ne prekli\u010de &lt;N,C&gt;. Do takrat, ko vozli\u0161\u010de odda glasove za commit, bo to C ali ni\u010d, odvisno od tega, kako dale\u010d bo \u0161el konsenz. Vendar to \u0161e ni dovolj, da bi vozli\u0161\u010de lahko eksternaliziralo C. Nekateri bizantinski bendi (ki predstavljajo manj kot kvorum, na podlagi na\u0161ih predpostavk o varnosti) lahko la\u017eejo vozli\u0161\u010du. Sprejem in nato potrditev nekega biltena (ali niza biltenov) je to, kar vozli\u0161\u010du daje zaupanje, da kon\u010dno eksternalizira C.<\/p>\n<p><img decoding=\"async\" alt=\"Raziskovanje protokola soglasja Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Glasovanje SCP prek federativnega glasovanja. Ni prikazano: kadarkoli se lahko spro\u017ei \u010dasovnik, ki pove\u010da \u0161tevec v biltenu (in morda ustvari nov kompozit iz dodatno predlaganih kandidatov).<\/i> <\/p>\n<p>In to je to! Ko dose\u017ee omre\u017eje konsenz, je pripravljeno to po\u010deti znova in znova. V pla\u010dilnem omre\u017eju Stellar se to zgodi pribli\u017eno na vsakih 5 sekund: podvig, ki zahteva tako varnost kot obstojnost, garantiran s SCP.<\/p>\n<p>SCP to dose\u017ee z ve\u010d krogi federativnega glasovanja. Federativno glasovanje je postalo mogo\u010de zaradi koncepta rezov kvoruma: sklopov enakopravnih vozli\u0161\u010d, katerim je vsak vozli\u0161\u010de se odlo\u010dilo zaupati kot del svojega (subjektivnega) kvoruma. Ta konfiguracija pomeni, da lahko pridemo do konsenza tudi v omre\u017eju odprtega \u010dlanstva in bizantinskimi prevarami.<\/p>\n<h1>Dodatno branje<\/h1>\n<p><\/p>\n<ul>\n<li>Izvirni tehni\u010dni dokument SCP je na voljo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">ovde<\/a><\/noindex>, a <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">tukaj<\/a><\/noindex> projekt specifikacij za njegovo izvajanje.\n<\/li>\n<li>Izvirni avtor protokola SCP David Mazier poenostavljeno (a vendar tehni\u010dno) razlaga njegov <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">ovde<\/a><\/noindex>.\n<\/li>\n<li>Morda ste bili presene\u010deni, ker v tem \u010dlanku niste na\u0161li izrazov \u201erudarjenje\u201c ali \u201edokaz delovanja\u201c. SCP ne uporablja teh metod, vendar jih uporabljajo nekateri drugi algoritmi konsenza. Zane Wiser spoon je napisal dostopen <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">pregled algoritmov konsenza<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Korak za korakom opis<\/a><\/noindex> preproste mre\u017ee, ki dose\u017ee konsenz v eni celotni rundi SCP.\n<\/li>\n<li>Za bralce, ki jih zanima izvajanje SCP: glej. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">koda C++<\/a><\/noindex>, ki ga uporablja pla\u010dilna mre\u017ea Stellar, ali <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">Go koda<\/a><\/noindex>, ki sem jo napisal za bolj\u0161e razumevanje SCP.<\/li>\n<\/ul>\n<p>Izvor: <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\/sl\/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=\"sl_SI\" \/>\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\/sl\/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\udd47Razumemo protokol konsenza Stellar | ProHoster","description":"Protokol konsenza Stellar je prvi\u010d opisan v.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}