Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu

Stellar konsensa protokols pirmo reizi aprakstÄ«ts zinātniskajā rakstā Deivida MazÄ«ra 2015. gadā. Tas ir ā€žfederatÄ«va bizantieÅ”u saskaņoÅ”anas sistēmaā€, kas ļauj decentralizētām datoru tÄ«klam, kuriem nav vadÄ«tāju, efektÄ«vi panākt konsensu par jebkuru lēmumu. Stellar maksājumu tÄ«kls izmanto Stellar Consensus Protocol (SCP), lai uzturētu saskaņotu darÄ«jumu vēsturi, kuru redz visi dalÄ«bnieki.

Uzskata, ka konsensa protokoli ir grÅ«ti saprotami. SCP ir vienkārŔāks nekā vairums no tiem, taču tam ir lÄ«dzÄ«ga reputācija — daļēji tāpēc, ka pastāv nepareiza ideja, ka ā€žfederatÄ«vais balsojumsā€, kuram veltÄ«ta raksta pirmā puse, ir SCP. Bet tā nav! Tas ir tikai svarÄ«gs celtniecÄ«bas elements, ko raksta otrajā pusē izmanto, lai izveidotu faktisko Stellar konsensa protokolu.

Å ajā rakstā Ä«si pastāstÄ«sim, kas ir ā€žsaskaņas sistēmaā€, kas var padarÄ«t to ā€žbizantieÅ”uā€ un kāpēc federatÄ«vo sistēmu var padarÄ«t ā€žfederatÄ«vuā€. Pēc tam izskaidrosim federatÄ«vo balsoÅ”anas procedÅ«ru, kas aprakstÄ«ta SCP rakstā, un visbeidzot izskaidrosim paÅ”u SCP protokolu.

Saskaņas sistēmas

Saskaņas sistēma ļauj grupai dalībnieku panākt konsensu par kādu tēmu, piemēram, ko pasūtīt pusdienām.

Mēs uzņēmumā Interstellar esam ieviesuÅ”i savu pusdienu saskaņas sistēmu: pasÅ«tām to, ko saka mÅ«su operatÄ«vais vadÄ«tājs Džons. Tā ir vienkārÅ”a un efektÄ«va saskaņas sistēma. Mēs visi uzticamies Džonam un ticam, ka viņŔ katru dienu atradÄ«s kaut ko interesantu un uzturÄ«gu.

Bet ko darÄ«t, ja Džons ļaunprātÄ«gi izmanto mÅ«su uzticÄ«bu? ViņŔ var patstāvÄ«gi nolemt, ka mums visiem jābÅ«t vegāniem. Pusstundas laikā vai divās, visticamāk, mēs viņu gāzÄ«sim un pilnvaras nodosim Elizabetei. Bet, iespējams, viņa mÄ«l avokado ar anÅ”oviem un domā, ka visiem jābÅ«t tādiem. Varu korumpē. Tāpēc labāk atrast kādu demokrātiskāku metodi: veidu, kā pārliecināties, ka tiek ņemti vērā dažādi preferencēs, vienlaikus nodroÅ”inot savlaicÄ«gu un nepārprotamu rezultātu, lai nenotiktu, ka neviens nepaspēj pasÅ«tÄ«t pusdienas vai pieci cilvēki izvirza dažādus pasÅ«tÄ«jumus, vai diskusija varētu ieilgt lÄ«dz vakaram.

Izskatās, ka risinājums ir vienkārÅ”s: rÄ«kot balsojumu! Bet tas ir maldinoÅ”s iespaids. Kas savāks biļetenus un paziņos rezultātus? Un kāpēc pārējiem vajadzētu ticēt tam, ko viņŔ teiks? VarbÅ«t mēs varam vispirms nobalso par lÄ«deri, kuram uzticamies, lai vadÄ«tu balsoÅ”anu — bet kurÅ” vadÄ«s Å”o pirmo balsojumu? Ko darÄ«t, ja mēs nevaram vienoties par lÄ«deri? Vai arÄ«, ja vienosimies, bet Å”is lÄ«deris iestrēgst sapulcē vai dodas uz slimnÄ«cu?

LÄ«dzÄ«gas problēmas pastāv izplatÄ«tajās datoru tÄ«klos. Visiem dalÄ«bniekiem vai mezgliem jāvienojas par kādu risinājumu, piemēram, kurÅ” gatavs atjaunināt kopÄ«gu failu vai ņemt uzdevumu no apstrādes rindas. KriptovalÅ«tu tÄ«klā mezgliem vairākkārt jāizlemj, kāda ir pilnÄ«ga vēsture no vairākām iespējām, kas dažreiz nesakrÄ«t. Å Ä« tÄ«kla vienoÅ”anās garantē saņēmējam, ka monēta ir (a) derÄ«ga (neviltojuma) un (b) vēl nav iztērēta citur. Tā arÄ« garantē, ka viņŔ varēs iztērēt monētas nākotnē, jo jaunajam saņēmējam bÅ«s tās paÅ”as garantijas to paÅ”u iemeslu dēļ.

Jebkurai vienoÅ”anās sistēmai izplatÄ«tajā skaitļoÅ”anas tÄ«klā ir jābÅ«t kļūdu izturÄ«gai: tai jāsniedz konsekventi rezultāti, neskatoties uz kļūdām, piemēram, lēnām sakaru lÄ«nijām, nereÄ£istrētiem mezgliem un nepareiziem ziņojumu secÄ«bām. Bizantijas vienoÅ”anās sistēma ir papildus noturÄ«ga pret "bizantieÅ”u" kļūdām: mezgli, kuri sniedz nepatiesu informāciju, vai nu kļūdas dēļ, vai ar nodomu, lai sagrautu sistēmu vai gÅ«tu kādu priekÅ”rocÄ«bu. "Bizantijas" kļūdu izturÄ«ba — spēja uzticēties grupas lēmumam, pat ja daži grupas dalÄ«bnieki var melo vai citādi noturēt lēmumu pieņemÅ”anas noteikumus — ir nosaukta pēc Bizantijas impērijas Ä£enerāļu pasakas, kuri mēģināja saskaņot uzbrukumu. Labākais apraksts ir pie Enthony Stevena.

Apsveriet kriptovalÅ«tas Ä«paÅ”nieku Alisu, kura ir jāizvēlas starp gardas saldējuma iegādi no Boba un parāda apmaksu Kerolai. Iespējams, Alisa vēlas maksāt abiem uzreiz, krāpnieciski iztērējot to paÅ”u monētu. Lai to izdarÄ«tu, viņai jānodroÅ”ina Boba dators, ka monēta nekad nav izmaksāta Kerolai, un jānodroÅ”ina Kerolas dators, ka monēta nekad nav izmaksāta Bobam. Bizantiskā vienoÅ”anās sistēma faktiski padara to neiespējamu, izmantojot vairākuma principa formu, ko sauc par kvotu. Mezgls Ŕādā tÄ«klā atsakās pieņemt noteiktu vēstures versiju, kamēr neredz, ka pietiekami liels skaits vienādu mezglu – kvots – piekrÄ«t Ŕādai pārejai. Kad tas notiks, viņi izveidos pietiekami lielu vēlēŔanu grupu, lai piespiestu pārējos tÄ«kla mezglus piekrist viņu lēmumam. Alisa var piespiest dažus mezglus melot viņas vārdā, bet, ja tÄ«kls ir pietiekami liels, viņas mēģinājums tiks apspiests ar godÄ«gu mezglu balsÄ«m.

Cik mezglu nepiecieÅ”ams kvotai? Vismaz vairums, precÄ«zāk, kvalificēts vairākums, lai cÄ«nÄ«tos ar kļūdām un krāpniecÄ«bu. Bet, lai saskaitÄ«tu vairākumu, ir jāzina kopējais dalÄ«bnieku skaits. Interstellar birojā vai apgabala vēlēŔanās Å”ie skaitļi ir viegli nosakāmi. Bet, ja jÅ«su grupa ir vāji definēta tÄ«kls, kur mezgli var ienākt un iznākt pēc savas izvēles bez saskaņoÅ”anas ar centru, tad nepiecieÅ”ama federatÄ«vā bizantiskā vienoÅ”anās sistēma, kas spēj noteikt kvotas nevis no iepriekÅ” noteikta mezglu saraksta, bet dinamiski, no pastāvÄ«gi mainÄ«ga un neizbēgami nepilnÄ«ga mezglu attēla noteiktā brÄ«dÄ«.

Var Ŕķist neiespējami izveidot kvotu no viena mezgla viedokļa plaŔā tÄ«klā, bet tas ir iespējams. Šāda kvota pat var garantēt decentralizētu balsoÅ”anas rezultātu. Tehniskajā dokumentā SCP tiek parādÄ«ts, kā to izdarÄ«t, izmantojot procedÅ«ru, ko sauc par federatÄ«vo balsoÅ”anu.

Steidzīgiem

Pārējā raksta daļa detalizēti apraksta federatÄ«vo balsoÅ”anu un Stellar konsensa protokolu. Ja jums neinteresē detaļas, Å”eit ir vispārējs procesa pārskats.

  1. Mikroshēmas veic federālā balsoÅ”anas raunda par "nominantiem". Federālā balsoÅ”anas raunds nozÄ«mē:
    • Mikroshēma balso par kādu apstiprinājumu, piemēram, "Es piedāvāju V vērtÄ«bu";
    • Mikroshēma klausās balsojumus no dalÄ«bniekiem, lÄ«dz atrod to, kurÅ” var "apstiprināt";
    • Mikroshēma meklē "kvorumu" Å”im apstiprinājumam. Kvorums "apstiprina" nominantu.
  2. Kad mikroshēma var apstiprināt vienu vai vairākus nominantus, tā cenÅ”as "sagatavot" "balsi" caur vairākiem federālā balsoÅ”anas raundiem.
  3. Kad mikroshēma spēj pārbaudÄ«t, ka balss ir gatava, tā cenÅ”as to apstiprināt ar vēl vairāk federālā balsoÅ”anas raundiem.
  4. Kad mikroshēma var apstiprināt balss apstiprinājumu, tā var "eksternalizēt" Ŕīs balss vērtÄ«bu, izmantojot to kā konsensa rezultātu.

Šie soļi ietver vairākus federālā balsoŔanas raundus, kas kopumā veido vienu SCP raundu. Izskatīsim sīkāk, kas notiek katrā solī.

Federālā balsoŔana

Federālā balsoÅ”ana ir procedÅ«ra, lai noteiktu, vai tÄ«kls var saskaņot priekÅ”likumu. BalsoÅ”anas raundā katrai mikroshēmai ir jāizvēlas viena no potenciāli daudzajām iespējamām vērtÄ«bām. ViņŔ to nevar izdarÄ«t, kamēr nav pārliecināts, ka citas mikroshēmas tÄ«klā neizvēlēs citu rezultātu. Lai bÅ«tu pārliecinātas par to, mikroshēmas apmainās ar ziņojumu sprādzieniem Å”urpu turpu, lai katra apstiprinātu, ka kvorums mikroshēmu pieņem to paÅ”u risinājumu. Å Ä« sadaļa skaidro terminus Å”ajā teikumā un to, kā norit visa procedÅ«ra.

Kvorumi un kvoruma griezumi

Sāksim ar kvoruma definēŔanu. Kā mēs iepriekÅ” apspriedām, decentralizētā tÄ«klā ar dinamisku dalÄ«bu nav iespējams iepriekÅ” zināt mikroshēmu skaitu un, lÄ«dz ar to, cik vajag vairākumam. Federālā balsoÅ”ana risina Å”o problēmu, ievieÅ”ot jaunu ideju kvoruma griezuma (quorum slice): neliela vienlÄ«dzÄ«gu mikroshēmu kopums, kuram mikroshēma uzticas, lai nodotu informāciju par balsoÅ”anas stāvokli pārējai tÄ«kla daļai. Katrā mikroshēmā ir sava kvoruma griezuma definÄ«cija (kuram tā faktiski pieder).

Kvoruma veidoÅ”ana sākas ar kvoruma griezumu. Katram mezglam tiek pievienoti tā griezuma mezgli. Tad tiek pievienoti griezuma dalÄ«bnieki Å”o mezglu un tā tālāk. Turpinoties, tiek sastapti arvien vairāk mezglu, kurus nevar pievienot, jo tie jau ir iekļauti griezumā. Kad vairs nav jaunu mezglu, ko pievienot, process apstājas: mēs esam izveidojuÅ”i kvorumu, veicot sākotnējā mezgla kvoruma griezuma ā€˜transitÄ«vo slēgÅ”anu’.

Izprotam Stellar konsensa protokolu
Lai atrastu kvorumu no dotā mezgla…

Izprotam Stellar konsensa protokolu
… pievienojam tā griezuma dalÄ«bniekus…

Izprotam Stellar konsensa protokolu
… tad pievienojam Å”o mezglu griezumu dalÄ«bniekus.

Izprotam Stellar konsensa protokolu
Turpinām, līdz nav palikuŔi mezgli, ko pievienot.

Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu
Nav palikuŔi mezgli, ko pievienot. Tas ir kvorums.

PatiesÄ«bā katrs mezgls var bÅ«t vairāk nekā vienā griezumā. Lai izveidotu kvorumu, izvēlieties tikai vienu no griezumiem un pievienojiet dalÄ«bniekus; pēc tam izvēlieties jebkuru griezumu katram dalÄ«bniekam un pievienojiet dalÄ«bniekus Å”ie griezums un tā tālāk. Tas nozÄ«mē, ka katrs mezgls ir vairāku iespējamo kvorumu dalÄ«bnieks.

Izprotam Stellar konsensa protokolu
Izvēlieties tikai vienu kvoruma griezumu katrā solī.

Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu
Viens iespējams kvorums. Vai alternatÄ«va versija…

Izprotam Stellar konsensa protokolu
… izvēlamies citus griezumus…

Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu
…(ja tas ir iespējams)…

Izprotam Stellar konsensa protokolu
… rada citu kvorumu.

Kā mezgls uzzina, kādos griezumos ir citi mezgli? TieÅ”i tāpat kā par citu mezglu informāciju: no pārraidēm, kuras katrs mezgls pārraida tÄ«klā, kad mainās tā balsoÅ”anas stāvoklis. Katrs raidÄ«jums ietver informāciju par sÅ«tÄ«tāja mezgla griezumiem. Tehniskajā dokumentā SCP nav norādÄ«ts komunikācijas mehānisms. Realizācijas parasti izmanto gossip protokolu lai nodroÅ”inātu ziņojumu pārraidi visā tÄ«klā.

Jāatgādina, ka nefedervatÄ«vajā Bizantijas vienoÅ”anās sistēmā kvorums tiek noteikts kā visu mezglu vairākums. Bizantijas vienoÅ”anās sistēma ir izstrādāta, ņemot vērā jautājumu: cik negodÄ«gu mezglu sistēma spēj izturēt? N mezglu sistēmā, kas projektēta izdzÄ«voÅ”anai pie f kļūdām (krāpÅ”anām), mezglam jāspēj panākt progresu, saņemot atbildes no Nāˆ’f dalÄ«bniekiem, jo f no tiem iespējams, ka nedarbojas. Taču, saņemot atbildi no Nāˆ’f dalÄ«bniekiem, var pieņemt, ka visi f dalÄ«bnieki (no kuriem mezgls nav saņēmis atbildi) patiesÄ«bā ir godÄ«gi. Tādējādi ļaunprātÄ«gi ir f no Nāˆ’f dalÄ«bniekiem (no kuriem saņemta atbilde). Lai mezgli nonāktu pie viena konsensa, godÄ«gajiem jābÅ«t vairākumam no pārējiem mezgliem, tas ir, mums nepiecieÅ”ams, lai Nāˆ’f bÅ«tu lielāks par 2f vai N > 3f. Tādēļ parasti sistēma, kas paredzēta izdzÄ«voÅ”anai pie f kļūdām, bÅ«s ar kopējo N=3f+1 mezglu skaitu un kvoruma lielumu 2f+1. TiklÄ«dz piedāvājums pārsniedz kvoruma slieksni, pārējie tÄ«kla dalÄ«bnieki ir pārliecināti, ka jebkuri konkurējoÅ”i piedāvājumi cietÄ«s neveiksmi. Tādējādi tÄ«kls nonāk pie rezultāta.

Taču federatÄ«vajā Bizantijas vienoÅ”anās sistēmā ne tikai nevar bÅ«t vairākuma (jo neviens nezina kopējo tÄ«kla lielumu), bet arÄ« vairākuma jēdziens ir vispārÄ«gi neizdevÄ«gs! Ja dalÄ«ba sistēmā ir atvērta, kāds var izveidot vairākumu, vienkārÅ”i veicot tā saucamo Sivilas uzbrukumu: atkārtoti pievienojoties tÄ«klam caur vairākiem mezgliem. Tādēļ kāpēc tranzitÄ«vā slēgÅ”ana var tikt saukta par kvotu, un kā tā spēj nomākt konkurējoÅ”us piedāvājumus?

Tehniski, nekā! Iedomājieties seÅ”u mezglu tÄ«klu, kur divas trÄ«sdaļas ir izolētas viena otras kvoruma slēgumos. Pirmajai apakÅ”grupai var bÅ«t lēmums, par kuru otrā nekad neuzzinās, un otrādi. Å im tÄ«klam nav veida, kā panākt konsensu (izņemot nejauÅ”i).

Tādēļ SCP prasa, lai federatÄ«vajai balsoÅ”anai (un svarÄ«go pantiņu piemēroÅ”anai) tÄ«kls bÅ«tu ar Ä«paŔību, ko sauc par kvorumu krustpunkti. TÄ«klā ar Å”o Ä«paŔību jebkuri divi kvōrumi, kurus var izveidot, vienmēr sakrÄ«t vismaz vienā mezglā. Lai noteiktu tÄ«kla dominējoÅ”os noskaņojumus, tas ir tikpat labi, kā iegÅ«t vairākumu. IntuitÄ«vi tas nozÄ«mē, ka, ja kāds kvōrums piekrÄ«t apgalvojumam X, neviens cits kvōrums nekad nevarēs piekrist kaut kam citam, jo tam noteikti bÅ«s kāds mezgls no pirmā kvōruma, kas jau ir balsojis par X.

Izprotam Stellar konsensa protokolu
Ja tÄ«klā ir kvōrumu pārklāŔanās…

Izprotam Stellar konsensa protokolu
…tad jebkuri divi kvōrumi, kurus jÅ«s varat izveidot…

Izprotam Stellar konsensa protokolu
…vienmēr bÅ«s pārklāŔanās.

Izprotam Stellar konsensa protokolu

Izprotam Stellar konsensa protokolu

(Protams, pārklājoÅ”ie mezgli var bÅ«t arÄ« bizantijā viltus vai slikti citās attiecÄ«bās. Å ajā gadÄ«jumā kvōrumu pārklāŔanās nesniedz tÄ«klam iespēju piekrist vispār. Tādēļ daudzi rezultāti tehniskajā dokumentā SCP balstās uz skaidri izteiktiem pieņēmumiem, piemēram, ka tÄ«klā joprojām pastāv kvōrumu pārklāŔanās pat pēc slikto mezglu noņemÅ”anas. VienkārŔības labad atstāsim Å”os pieņēmumus neizteiktus pārējā raksta daļā).

Var Ŕķist neloÄ£iski gaidÄ«t, ka tÄ«klā no neatkarÄ«giem mezgliem ir iespējama uzticama kvōrumu pārklāŔanās. Bet ir divi iemesli, kāpēc tas ir tā.

Pirmais iemesls ir paÅ”a interneta esamÄ«ba. Internets ir ideāls neatkarÄ«gu mezglu tÄ«kla piemērs ar kvōrumu pārklāŔanos. Lielākā daļa mezglu internetā savienojas tikai ar dažiem citiem lokāliem mezgliem, bet Å”ie nelielie kopumi pārklājas pietiekami, lai katrs mezgls bÅ«tu pieejams no katra cita mezgla pa vienu vai otru marÅ”rutu.

Otra iemesls ir specifisks Stellar maksājumu tÄ«klam (visbiežāk izmanto SCP). Katrai aktÄ«vai Stellar tÄ«klā ir emitents, un Stellar ieteikumi prasa, lai katram emitentam tiktu iecelti viens vai vairāki mezgli tÄ«klā, lai apstrādātu izsniegÅ”anas pieprasÄ«jumus. JÅ«su interesēs ir tieÅ”i vai netieÅ”i iekļaut Å”os mezglus kvoruma grieÅ”anas grozos katram jÅ«su interesējoÅ”am aktÄ«vam. Pēc tam kvorumi visiem mezgliem, kas ir ieinteresēti konkrētajā aktÄ«vā, bÅ«s satikti vismaz Å”ajos izsniegÅ”anas mezglos. Mezgli, kas ir ieinteresēti vairākos aktÄ«vos, iekļaus savos kvoruma grieÅ”anas grozos visus attiecÄ«go emitentu izsniegÅ”anas mezglus, un viņi centÄ«sies apvienot visus aktÄ«vus kopā. Turklāt jebkuri aktÄ«vi, kas nav savienoti Ŕādā veidā ar citiem tÄ«klā, un nedrÄ«kst bÅ«t saistÄ«ti — tas ir domāts, lai Å”im tÄ«klam nebÅ«tu kvoruma pārklāŔanās (piemēram, dolāra zonā esoÅ”ie bankas dažreiz vēlas tirgoties ar eiro zonas bankām un peso zonas bankām, tāpēc tās ir vienā tÄ«klā, bet nevienam no viņiem nav intereses par atseviŔķu tÄ«klu bērniem, kas tirgo beisbola kartes).

Protams, gaidīŔana kvoruma pārklāŔanās nav garantija. Citas Bizantijas vienoÅ”anās sistēmas sava sarežģītÄ«bas dēļ lielā mērā ir atkarÄ«gas no kvorumu garantijas. SvarÄ«gs SCP jaunums ir tas, ka tas noņem atbildÄ«bu par kvorumu veidoÅ”anu no paÅ”a konsensusa algoritma un pārvada to uz lietojumprogrammu lÄ«meni. Tādējādi, lai gan federatÄ«vā balsoÅ”ana ir pietiekami vispārÄ«ga, lai balsotu par jebkuriem jautājumiem, tās uzticamÄ«ba faktiski ir kritiski atkarÄ«ga no Å”o vērtÄ«bu plaŔāka jēga. Daži hipotētiski lietoÅ”anas veidi var izrādÄ«ties ne tik ērti, lai izveidotu labi savienotus tÄ«klus, kā citi.

BalsoŔana, apstiprināŔana un apstiprinājums

FederatÄ«vās balsoÅ”anas kārtā mezgls opcionalizēti sāk balsot par kādu vērtÄ«bu V. Tas nozÄ«mē, ka tiek izplatÄ«ts tÄ«klā ziņojums: 'Es esmu mezgls N, mani kvoruma sagriezumi Q, un es balsoju par V'. Kad mezgls tā balsos, viņŔ apsola, ka nekad nav balsojis pret V un nekad nebÅ«s.

Vienu laika, no savstarpējiem mezgliem katrs mezgls redz, kā citi balso. TiklÄ«dz mezgls savāks pietiekami daudz Ŕādu ziņojumu, tas var izsekot kvotu griezumiem un mēģināt atrast kvotās. Ja tas redz mezglu kvotu, kas arÄ« balso par V, tas var pāriet uz pieņemÅ”anu V un izplatÄ«t Å”o jauno ziņojumu tÄ«klā: Ā«Es esmu mezgls N, mani kvotu griezumi Q, un es pieņemu VĀ». PieņemÅ”ana nodroÅ”ina spēcÄ«gāku garantiju nekā parasta balsoÅ”ana. Kad mezgls balso par V, tas nekad nevar balsot par citiem variantiem. Bet, ja mezgls pieņem V, neviens mezgls tÄ«klā nekad nepieņems citu variantu (teorema 8 SCP tehniskajā dokumentā to pierāda).

Protams, ir liela iespēja, ka tÅ«lÄ«t neatradÄ«sies kvota mezglu, kas piekristu V. Citi mezgli var balsot par citiem vērtÄ«bām. Bet mezglam ir vēl viens veids, kā pāriet no parasta balsoÅ”anas uz pieņemÅ”anu. N var pieņemt citu vērtÄ«bu W, pat ja nav balsojis par to, un pat ja tas neredz kvotu tai. Lai mainÄ«tu savu balsojumu, pietiek redzēt bloķējoÅ”o kopumu mezglu, kas pieņēmuÅ”i W. BloķējoÅ”ais kopums ir pa vienam mezglam no katra kvotu griezuma N. Kā norādÄ«ts nosaukumā, tas spēj bloķēt jebkuru citu vērtÄ«bu. Ja visi mezgli Ŕādā kopumā pieņem W, tad (saskaņā ar teoremu 8) nekad nebÅ«s iespējams izveidot kvotu, kas pieņem cita vērtÄ«bu, un tāpēc N ir droÅ”i pieņemt W.

Izprotam Stellar konsensa protokolu
Mezgls N ar trim kvotu griezumiem.

Izprotam Stellar konsensa protokolu
B-D-F ir bloķējoÅ”ais kopums N: tas ietver pa vienam mezglam no katra griezuma N.

Izprotam Stellar konsensa protokolu
B-E arÄ« ir bloķējoÅ”ais kopums N, jo E parādās divos N griezumos.

Bet bloķējoÅ”ais kopums nav kvota. BÅ«tu pārāk viegli apmānÄ«t mezglu N, lai tas pieņemtu vēlamo vērtÄ«bu, ja ir pietiekami uzlauzt viens mezgls katrā N griezumā. Tāpēc vērtÄ«bas pieņemÅ”ana nav galÄ«gais balsoÅ”anas beigas. Tā vietā N ir jāapstiprina vērtÄ«bu, tas ir, redzēt kvotu mezglu, kas to pieņem. Ja tas nonāks lÄ«dz Å”im, tad, kā to pierāda SCP tehniskais dokuments (teorema 11), pārējā tÄ«kls arÄ« visbeidzot apstiprinās to paÅ”u vērtÄ«bu, tāpēc N pabeigs federālo balsoÅ”anu ar noteiktu vērtÄ«bu kā rezultātu.

Izprotam Stellar konsensa protokolu
Federālā balsoŔana.

BalsoÅ”ana, lēmumu pieņemÅ”ana un apstiprināŔana ir viens pilns federatÄ«vās balsoÅ”anas aplis. Stellar konsensa protokols apvieno daudzus Ŕādus apļus, lai izveidotu pilnÄ«gu konsensa sistēmu.

Stellar konsensa protokols

Divas vissvarÄ«gākās konsensa sistēmas Ä«paŔības ir droŔība un izturÄ«ba. Konsensa algoritms ir "droÅ”s", ja tas nekad nevar sniegt atŔķirÄ«gus rezultātus dažādiem dalÄ«bniekiem (Boba vēstures kopija nekad nebÅ«s pretrunā ar Kērolas viedokli). "IzturÄ«ba" nozÄ«mē, ka algoritms vienmēr sniegs rezultātu, tas ir, neiestrēgs.

AprakstÄ«tā federatÄ«vās balsoÅ”anas procedÅ«ra ir droÅ”a tādā nozÄ«mē, ka, ja mezgls apstiprina vērtÄ«bu V, neviens cits mezgls neapstiprinās citu vērtÄ«bu. Taču "neapstiprināt citu vērtÄ«bu" nenozÄ«mē, ka tas obligāti apstiprinās kaut ko. DalÄ«bnieki var balsot par tik lielu dažādu vērtÄ«bu skaitu, ka nekas nesasniegs pieņemÅ”anas slieksni. Tas nozÄ«mē, ka federatÄ«vajā balsoÅ”anā trÅ«kst izturÄ«ba.

Stellar konsensa protokols izmanto federatÄ«vo balsoÅ”anu tādā veidā, lai garantētu gan droŔību, gan izturÄ«bu. (DroŔības un izturÄ«bas garantijas SCP ir teorētisks limits. Konstrukcija izvēlas ļoti spēcÄ«gu droŔības garantiju, upurējot nedaudz izturÄ«bu, bet ņemot vērā pietiekamu laiku, konsenss ar augstu varbÅ«tÄ«bu tiks sasniegts). Citiem vārdiem sakot, ideja ir veikt vairākus federatÄ«vos balsojumus par dažādām vērtÄ«bām, lÄ«dz viena no tām pilnÄ«bā iziet cauri visām SCP balsoÅ”anas fāzēm, kas aprakstÄ«tas zemāk.

VērtÄ«bas, par kurām SCP tiecas uz konsensu, var bÅ«t darÄ«jumu vēsture vai pusdienu pasÅ«tÄ«jums vai kas cits, taču svarÄ«gi atzÄ«mēt, ka tās nav tās vērtÄ«bas, kas tiek pieņemtas vai apstiprinātas. Tā vietā federatÄ«vā balsoÅ”ana notiek par apgalvojumiem par Ŕīm vērtÄ«bām..

Pirmie federatÄ«vās balsoÅ”anas apļi notiek izvirzīŔanas posmā (nomination phase), uz apgalvojumu kopuma veida "Es izvirzu V", iespējams, par daudzām dažādām vērtÄ«bām V. IzvirzīŔanas mērÄ·is ir atrast vienu vai vairākus apgalvojumus, kas iziet cauri pieņemÅ”anai un apstiprināŔanai.

Pēc to verifikējamo kandidātu atraÅ”anas SCP pāriet uz balsoÅ”anas posmu, kur mērÄ·is ir atrast kādu biļeti (proti, priekÅ”likuma saturu) un kvorumu, kas var paziņot kommitu par to (commit). Ja kvorums apstiprina biļetes apņemÅ”anos, tās saturs tiek pieņemts kā konsenss. Taču pirms mezgls var balsot par biļetes apņemÅ”anu, tam vispirms jāpārliecina par biļeÅ”u noraidīŔanu ar mazāku skaitÄ«tāja vērtÄ«bu. Å ie soļi — biļeÅ”u noraidīŔana, lai atrastu to, par kuru var apstiprināt apņemÅ”anos — ietver vairākus federatÄ«vos balsoÅ”anas apļus par vairākiem biļeÅ”u paziņojumiem.

Nākamajos segmentos sīkāk aprakstīts izvirzīŔana un balsoŔana.

IzvirzīŔana

IzvirzīŔanas posma sākumā katrs mezgls var patstāvÄ«gi izvēlēties vērtÄ«bu V un balsot par apstiprinājumu "Es izvirzu V". MērÄ·is Å”ajā posmā ir apstiprināt kādas vērtÄ«bas izvirzīŔanu, izmantojot federatÄ«vo balsoÅ”anu.

Iespējams, pietiekams skaits mezglu balso par pietiekami dažādiem paziņojumiem, un nekāds izvirzÄ«jums nevar sasniegt pieņemÅ”anas slieksni. Tādēļ, izņemot savas nominācijas balsis, mezgli "atspoguļo" savu kaimiņu nominācijas. AtspoguļoÅ”ana (echo) nozÄ«mē, ka, ja mezgls balso par izvirzÄ«jumu V, bet redz ziņojumu no kaimiņa, kurÅ” balso par izvirzÄ«jumu W, tad tas tagad balsos gan par izvirzÄ«jumu V, gan W. (Ne visas kaimiņu balsis tiek atspoguļotas izvirzīŔanas laikā, jo tas var novest pie dažādu nominantu plosīŔanās. SCP ietver mehānismu Ŕīs balsis regulēŔanai. ÄŖsumā, ir formula, lai noteiktu "prioritāti" kaimiņam attiecÄ«bā uz mezglu, un balsis tiek atspoguļotas tikai augstprātÄ«giem mezgliem. Jo ilgāk notiek izvirzīŔana, jo zemāks slieksnis, tādēļ mezgls paplaÅ”ina kopumu kaimiņu, kuru balsis tas atspoguļo. Prioritātes formula kā vienu no izejas datiem ietver slotu numuru, tāpēc augstprātÄ«gs vienlÄ«dzÄ«gs mezgls vienam slotam var bÅ«t zema prioritāte citam, un otrādi).

Konceptuāli vienlaicÄ«ga V un W izvirzīŔana ir atseviŔķi federatÄ«vi balsis, katra spējÄ«gi sasniegt akceptēŔanu vai apstiprinājumu. Praksē SCP protokola ziņojumi apvieno Ŕīs atseviŔķās balsis kopā.

Lai gan balsoÅ”ana par V izvirzīŔanu ir solÄ«jums nekad nebalsot pret V izvirzīŔanu, lietojuma lÄ«menÄ« – Å”ajā gadÄ«jumā SCP – tiek noteikts, ko nozÄ«mē "pret". SCP neredz apstiprinājumu, kas pretrunā balsij "Es izvirzu X", proti, nav ziņojuma "Es esmu pret X izvirzīŔanu", tāpēc mezgls var balsot par jebkuru vērtÄ«bu izvirzīŔanu. Daudzas no Ŕīm nominācijām neizdosies, bet, galu galā, mezgls spēs pieņemt vai apstiprināt vienu vai vairākas vērtÄ«bas. Kad nominants ir apstiprināts, viņŔ kļūst par kandidātu.

Izprotam Stellar konsensa protokolu
SCP izvirzīŔana, izmantojot federatÄ«vo balsoÅ”anu. Var bÅ«t daudz "B" vērtÄ«bu, kuras izvirza vienlÄ«dzÄ«gi mezgli un "atspoguļo" mezgls.

Kandidātu izvirzīŔana var novest pie vairāku apstiprināmu kandidātu parādīŔanās. Tāpēc SCP prasa, lai lietojuma lÄ«menis nodroÅ”inātu kādu metodi, lai apvienotu kandidātus vienā kompozÄ«tā (composite). ApvienoÅ”anas metode var bÅ«t jebkura. Galvenais ir tas, ka, ja Ŕī metode ir noteikta, tad katrs mezgls apvienos tos paÅ”us kandidātus. VēlēŔanu sistēmā par pusdienām "apvienoÅ”ana" var nozÄ«mēt vienkārÅ”i atteikÅ”anos no viena no diviem kandidātiem. (Bet noteiktā veidā: katram mezglam jāizvēlas tas pats vērtējums pilnÄ«gai noraidīŔanai. Piemēram, iepriekŔējā izvēle alfabētiskā secÄ«bā). Stellar maksājumu tÄ«klā, kur notiek balsoÅ”ana par darÄ«jumu vēsturi, divu piedāvāto nominantu apvienoÅ”ana nozÄ«mē apvienot darÄ«jumus, kuri tajos iekļauti, un pēdējās no viņu divām laika zÄ«mēm.

Tehniskais apraksts SCP pierāda (teorema 12), ka lÄ«dz izvirzīŔanas fāzes beigām tÄ«kls galu galā sasniedz vienu kompozÄ«tu. Taču ir problēma: federatÄ«vais balsojums ir asimetrisks protokols (kā arÄ« SCP). Citiem vārdiem sakot, mezgli nav saskaņoti laikā, bet tikai ziņojumos, kurus viņi nosÅ«ta. No mezgla viedokļa nav skaidrs, kad ir pabeigta izņemÅ”anas fāze. Un, kaut arÄ« visi mezgli galu galā sasniegs to paÅ”u kompozÄ«tu, tie var izvēlēties dažādus marÅ”rutus Å”ajā ceļā, radot pa ceļam dažādus kandidātus, un nekad nevar pateikt, kurÅ” no tiem ir galÄ«gais.

Bet tas ir kārtÄ«bā. IzņemÅ”ana ir tikai sagatavoÅ”anās. Galvenais ir ierobežot kandidātu skaitu, lai sasniegtu konsensu, kas notiek procesā. balsoÅ”ana (balloting).

Balsosana

Balsu lapa ir pāris , kur counter ir vesels skaitlis, kas sākas ar 1, un value ir kandidāts no izņemÅ”anas posma. Tas var bÅ«t mezga pielaikots kandidāts vai kaimiÅ”a mezga kandidāts, ko ir pieņēmis Å”is mezgls. Aptuveni sakot, balsoÅ”anas procesā notiek atkārtotas centieni panākt, lai tÄ«kls sasniegtu konsensu par kādu kandidātu kādā balsojumā, veicot potenciāli daudzas federatÄ«vas balsoÅ”anas par balsojuma paziņojumiem. SkaitÄ«tāji balsu lapās seko izdarÄ«tajiem mēģinājumiem, un balsu lapas ar augstākiem skaitÄ«tājiem ir prioritāras pār balsu lapām ar zemākiem skaitÄ«tājiem. Ja balsu lapa iesprÅ«dina, sākas jauna balsoÅ”ana, tagad balsu lapā .

Ir svarÄ«gi noŔķirt vērtÄ«bas (piemēram, kāds jābÅ«t pusdienu pasÅ«tÄ«jumam: pica vai salāti), balsu lapas (pāris counter-value) un statements par balsu lapām. SCP kārta ietver vairākas federatÄ«vas balsoÅ”anas kārtas, Ä«paÅ”i par Ŕādām paziņojumiem:

  • Ā«Es esmu gatavs paziņot balsu lapu BĀ» un
  • Ā«Es paziņoju par balsu lapas B apstiprināŔanuĀ»

No Ŕī mezga skata punkta konsenss tiek sasniegts, kad tas atrod balsojumu B, kuru var apstiprināt (proti, atrast kvorumu, kurÅ” pieņem) paziņojumu Ā«Es paziņoju par balsu lapas B apstiprināŔanuĀ». No Ŕī brīža var droÅ”i rÄ«koties saskaņā ar V norādÄ«to vērtÄ«bu - piemēram, veikt Å”o pusdienu pasÅ«tÄ«jumu. To sauc par eksternalizāciju vērtÄ«bas. TiklÄ«dz tiek apstiprināta balsu lapas pieņemÅ”ana, mezgls var bÅ«t droÅ”s, ka jebkurÅ” cits mezgls ir veikusi eksteranlizāciju par Å”o paÅ”u vērtÄ«bu vai obligāti to veiks nākotnē.

Lai gan konceptuāli daudzas federatÄ«vās balsoÅ”anas tiek veiktas par paziņojumiem par daudziem dažādiem biļeteniem, tās apmainās ar ne tik lielu ziņojumu skaitu, jo katrs ziņojums ietver vairākus biļetenus. Tādējādi viens ziņojums veicina daudzu federatÄ«vo balsojumu stāvokli, piemēram: "Es pieņemu biļetenu komitēŔanu diapazonā no lÄ«dz ".

Ko nozīmē termini "sagatavots" (prepared) un "komitēt" (commit)?

Mežs balso par biļetena komitēŔanu, kad tas ir pārliecināts, ka citi meži neveiks biļetenu komitēŔanu ar citiem vērtÄ«bām. PārliecinātÄ«ba par to ir sagatavoÅ”anas paziņojuma mērÄ·is. BalsoÅ”ana, kurā teikts: "Es esmu gatavs biļetena B komitēŔanai", ir solÄ«jums nekad nekomitēt biļetu, kas ir mazāks par B, t.i., ar mazāku skaitÄ«tāju (SCP prasa, lai biļetenu vērtÄ«bas bÅ«tu noteiktā secÄ«bā. Tādējādi biļetens ir mazāks par , ja N1<N2, kā arÄ« ja N1=N2 un V1<V2). Å ie mazākie biļeteni "atcelti" (aborted) sagatavoÅ”anas balsoÅ”anas gaitā, kamēr B tiek uzskatÄ«ts par "sagatavotu".

Kāpēc "Es esmu gatavs biļetena B komitēŔanai" nozÄ«mē "Es solÄ«ju nekad nekomitēt biļetenus, kas ir mazāki par B"? Tāpēc, ka SCP definē abortu kā pretstatu komitēŔanai. BalsoÅ”ana par biļetena sagatavoÅ”anu nozÄ«mē arÄ« balsoÅ”anu par citu biļetenu atcelÅ”anu, un, kā mēs iepriekÅ” apspriedām, balsoÅ”ana par kaut ko vienu ir solÄ«jums nekad nebalsot pret to.

Pirms transformatÄ«vā komitēŔana, mežam vispirms jādod biļetens, kuru tas var apstiprināt kā sagatavotu. Citiem vārdiem sakot, tas veic federatÄ«vo balsoÅ”anu par tēmu "Es esmu gatavs biļetena B komitēŔanai", iespējams, par daudziem dažādiem biļeteniem, lÄ«dz tas atrod to, kuru pieņem kvorums.

NozÄ«mē, kā tiek iegÅ«ti biļeteni balsoÅ”anai? Sākumā mezgls translatē sagatavi balsoÅ”anai par , kur C ir kompozÄ«tkandidāts, izstrādāts izvirzīŔanas stadijā. Tomēr pat pēc balsoÅ”anas sagataves uzsākÅ”anas izvirzīŔana var novest pie jaunu kandidātu parādīŔanās, kuri kļūs par jaunajiem biļeteniem. Turklāt dalÄ«bniekiem var bÅ«t dažādi kandidāti, un viņi var izveidot bloķējoÅ”u kopumu, kas pieņem "Es esmu gatavs apstiprināt biļetenu B2", kas pārliecinās mezglu to pieņemt. Beigās ir laika ierobežojuma mehānisms, kas Ä£enerē jaunus federālo balsoÅ”anas apļus ar jaunajiem biļeteniem ar augstākiem skaitÄ«tājiem, ja paÅ”reizējie biļeteni ir iestrēguÅ”i.

Kad mezgls atrod biļetenu V, kuru var apstiprināt kā sagatavotu, tas translatē jaunu ziņu "Apstiprināt biļetenu V". Å is balsojums informē dalÄ«bniekus, ka mezgls nekad neatteiksies no V. PatiesÄ«bā, ja V ir biļetens , tad "Apstiprināt biļetenu " nozÄ«mē beznosacÄ«juma piekriÅ”anu balsot par katra biļetena gatavÄ«bu no lÄ«dz . Å Ä« papildu nozÄ«me palÄ«dz citiem mezgliem noņemt dalÄ«bnieku ar apstiprināŔanu, ja tie vēl ir agrākajos protokola posmos.

Å ajā posmā joprojām ir svarÄ«gi uzsvērt, ka tās ir asinkronie protokoli. Tikai tāpēc, ka viens mezgls nosÅ«ta balsis par apstiprināŔanu, nenozÄ«mē, ka arÄ« viņa kolēģi to dara. Daži no viņiem joprojām var balsot par paziņojumiem sagatavoÅ”anai balsoÅ”anai, citi, iespējams, jau ir ārējoÅ”i noteikuÅ”i vērtÄ«bu. SCP izskaidro, kā mezglam jāapstrādā katra veida vienādās ziņas neatkarÄ«gi no tās fāzes.

Ja, ja mēs saņemsim ziņojumu "Es paziņoju par apstiprinājumu <N,C>", tam var nebÅ«t pieņemts vai apstiprināts, tad ir iespēja pieņemt vai apstiprināt ziņojumu <N+1,C> vai <N+2,C> — vai, jebkurā gadÄ«jumā, jebkuru biļeti ar C vērtÄ«bu, nevis jebkuru citu, jo mezgls jau ir apsolÄ«jis nekad neatcelt <N,C>. Kad mezgls pārsÅ«ta balsis par apstiprinājumu, tas bÅ«s C vai nekas, atkarÄ«bā no tā, cik tālu konsensuss ir nonācis. Tomēr Å”obrÄ«d tam nav pietiekami, lai ārēji apstiprinātu C. Daži bizantiskie vēstÄ«jumi (kas veido mazāk par kvorumu, pamatojoties uz mÅ«su droŔības pieņēmumiem) var melot mezglam. ApstiprināŔana, tad apstiprināŔana kādam biļetēm (vai biļeÅ”u diapazonam) — tieÅ”i tas dod mezglam pārliecÄ«bu, beidzot apstiprināt C.

Izprotam Stellar konsensa protokolu
Balsu vākÅ”ana SCP caur federatÄ«vo balsoÅ”anu. Nav parādÄ«ts: jebkurā brÄ«dÄ« var darboties taimeris, palielinot skaitÄ«tāju biļetē (un, iespējams, radot jaunu kompozÄ«tu no papildu izvirzÄ«tajiem kandidātiem).

Un tas ir viss! TiklÄ«dz tÄ«kls nonāk pie konsensusa, tas ir gatavs to darÄ«t atkal un atkal. Stellar maksājumu tÄ«klā tas notiek apmēram reizi 5 sekundēs: sasniegums, kas prasa gan droŔību, gan izturÄ«bu, ko garantē SCP.

SCP var sasniegt to, balstoties uz vairākām federatÄ«vā balsojuma kārtām. FederatÄ«vais balsojums ir kļuvis iespējams pateicoties kvoruma griezuma koncepcijai: vienādu mezglu kopām, kurām katrs mezgls ir nolēmis uzticēties kā savam (subjektÄ«vam) kvorumam. Å Ä« konfigurācija nozÄ«mē, ka ir iespējams sasniegt konsensusu pat atvērtās dalÄ«bas tÄ«klā ar bizantiskais krāpÅ”anas gadÄ«jumiem.

Tālākā lasīŔana

  • OriÄ£inālo tehnisko dokumentu par SCP var atrast Å”eit, bet Å”eit specifikāciju projekts tās Ä«stenoÅ”anai.
  • Protokola SCP oriÄ£inālais autors Deivids Maziers vienkārÅ”oti (bet tomēr tehniski) skaidro to Å”eit.
  • Iespējams, jÅ«s bijāt pārsteigti, neredzot Å”ajā rakstā terminus "ieguve" vai "darba pierādÄ«jums". SCP neizmanto Ŕīs metodes, taču dažādi citi konsensusa algoritmi to izmanto. Zeins VÄ«zersprÅ«ns ir uzrakstÄ«jis pieejamu konsensusa algoritmu apskatu.
  • Solis pa solim apraksts vienkārŔā tÄ«klā, kas sasniedz konsensusu viena pilna SCP kārtā.
  • LasÄ«tājiem, kuri ir ieinteresēti SCP Ä«stenojumos: skatiet C++ kodu, ko izmanto Stellar maksājumu tÄ«kls, vai Go kods, ko es uzrakstÄ«ju labākai SCP izpratnei.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster