Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli

Stellar'i konsensusprotokoll kirjeldati esmakordselt teadusartiklis David Mazier'i poolt 2015. aastal. See on "föderatiivne bĂŒtsantsi konsensus", mis vĂ”imaldab detsentraliseeritud arvutusvĂ”rkudel ilma liidriteta tĂ”husalt jĂ”uda konsensuseni mis tahes otsuse osas. Stellar'i maksevĂ”rk kasutab Stellar Consensus Protocol (SCP) koosseisuliste tehingute ajaloos, mida kĂ”ik osalised nĂ€evad.

Peetakse, et konsensusprotokollid on keerulised arusaamiseks. SCP on lihtsam kui enamik neist, kuid jagab siiski seda mainet – osaliselt vale arusaama tĂ”ttu, et "föderatiivne hÀÀletamine", millele teadusartikli esimene pool keskendub, on SCP. Kuid see pole tĂ”si! See on vaid oluline ehituskivi, mida teises osas artiklit kasutatakse Stellar'i konsensusprotokolli loomisel. reaalne Stellar'i konsensusprotokoll.

Selles artiklis anname lĂŒhikese ĂŒlevaate sellest, mis on "kokkuleppete sĂŒsteem", mis vĂ”ib muuta selle "bĂŒtsantsi" ja miks muuta bĂŒtsantsi sĂŒsteem "föderatiivseks". SeejĂ€rel selgitame föderatiivset hÀÀletusprotsessi, mis on kirjeldatud SCP artiklis, ja lĂ”puks selgitame SCP protokolli ennast.

Kokkuleppete sĂŒsteemid

Kokkuleppete sĂŒsteem vĂ”imaldab grupil osaleda konsensusel mingis kĂŒsimuses, nĂ€iteks selle ĂŒle, mida lĂ”unaks tellida.

Meie ettevĂ”ttes Interstellar oleme rakendanud oma lĂ”unasöögi kokkuleppete sĂŒsteemi: tellime seda, mida ĂŒtleb meie operatsioonijuht John. See on lihtne ja tĂ”hus kokkuleppete sĂŒsteem. Me kĂ”ik usaldame Johni ja usume, et ta igal pĂ€eval leiab midagi huvitavat ja toitvat.

Aga mis siis, kui John vÀÀrkasutab meie usaldust? Ta vĂ”ib ĂŒksi otsustada, et meil kĂ”igil peaks olema vegan dieedile. NĂ€dala vĂ”i kahe pĂ€rast tĂ”enĂ€oliselt kukutame ta ja anname volitused Elizabethile. Kuid Ă€kki talle meeldivad avokaadod anĆĄoovistega ja ta arvab, et kĂ”ik peaksid olema sellised. VĂ”im rikub. SeetĂ”ttu on parem leida mĂ”ni demokraatlikum meetod: mingi viis, et tagada erinevate eelistuste arvestamine, samas tagades Ă”igeaegne ja ĂŒhemĂ”tteline tulemus, et ei juhtuks, et keegi ei telli lĂ”unat vĂ”i viis inimest esitavad erinevaid tellimusi vĂ”i arutelu venib Ă”htuni.

Tundub, et lahendus on lihtne: korraldada hÀÀletus! Kuid see on petlik mulje. Kes hakkab hÀÀli koguma ja tulemusi teatama? Ja miks peaksid teised uskuma seda, mida ta ĂŒtleb? VĂ”ib-olla saame esiteks hÀÀletada liidri poolt, kellele usaldame hÀÀletamise juhtimise - aga kes juhib seda esimest hÀÀletust? Mis juhtub, kui me ei leia liidrit? VĂ”i kui leppime kokku, aga see liider jÀÀb koosolekule vĂ”i jÀÀb haigeks?

Sarnased probleemid esinevad jaotatud arvutivĂ”rkudes. KĂ”ik osalised vĂ”i sĂ”lmed peavad kokku leppima mingisuguses lahenduses, nĂ€iteks kelle kord on ĂŒhist faili uuendada vĂ”i vĂ”tta ĂŒlesanne töötlemise jĂ€rjekorrast. KrĂŒptovaluuta vĂ”rgus peavad sĂ”lmed korduvalt valima, milline tundub tĂ€iuslik ajalugu, erinevate vĂ”imalike versioonide hulgast, mis mĂ”nikord konfliktivad. See vĂ”rguleping tagab vastuvĂ”tjale, et mĂŒnt on (a) kehtiv (mitte vale) ja (b) pole veel kuskil mujal kasutatud. See tagab ka, et ta saab mĂ”nes tulevikus mĂŒnti kasutada, kuna uuel vastuvĂ”tjal on samad garantiid samadel pĂ”hjustel.

IgapĂ€evane konsensusvĂ”ime jaotatud arvutivĂ”rgus peab olema rikkevastupidine: see peab andma jĂ€rjepidevaid tulemusi, hoolimata vigadest, nagu aeglased sidekanalid, mitte reageerivad sĂ”lmed ja vale sĂ”numite jĂ€rjekord. BĂŒtsantsi konsensus sĂŒsteem on tĂ€iendavalt vastupidav 'bĂŒtsantsi' vigadele: sĂ”lmed, mis annavad vale teavet, olgu see siis vea tĂ”ttu vĂ”i tahtlikul katsel sĂŒsteemi kahjustada vĂ”i mingit eelist saada. 'BĂŒtsantsi' tĂ”rkedetaolek - vĂ”ime usaldada grupi otsust, isegi kui mĂ”ned grupi liikmed vĂ”ivad valetada vĂ”i muul viisil reegleid rikkuda - on saanud nime BĂŒtsantsi imperaatorite kindralite jutustusest, kes ĂŒritasid rĂŒnnakut koordineerida. Hea kirjeldus on Anthony Stevenilt.

Kujutame ette krĂŒptomĂŒndi omanikku Alice'it, kes peab valima Bobilt maitsva jÀÀtise ostmise ja Carolile vĂ”la tasumise vahel. VĂ”ib-olla tahab Alice mĂ”lemale korraga maksta, petturlikult kulutades sama mĂŒnti. Selleks peab ta veenma Bobi arvutit, et mĂŒnt ei ole kunagi Carolile makstud, ning veenma Caroli arvutit, et mĂŒnt ei ole kunagi Bobile makstud. Bytsantsi kokkuleppe sĂŒsteem muudab selle tegelikult vĂ”imatuks, rakendades enamusreegel, mida nimetatakse kvorumiks. Selles jaringanis keeldub sĂ”lm sellest, et liikuda kindla ajalooversiooni suunas, kuni nad ei nĂ€e, et piisavalt palju vĂ”rdsete liikmete sĂ”lmi — kvorum — on sellise muutuse suhtes nĂ”us. Kui see juhtub, moodustavad nad piisavalt suure valijabloki, et sundida ĂŒlejÀÀnud vĂ”rgu sĂ”lmi nende otsusega nĂ”ustuma. Alice vĂ”ib sundida mĂ”nda sĂ”lme valetama tema nimel, kuid kui vĂ”rk on piisavalt suur, siis tema katse purustatakse ausate sĂ”lmede hÀÀltega.

Kui palju sĂ”lmi on vajalik kvorumi saavutamiseks? VĂ€hemalt enamus, tĂ€psemalt kvalifitseeritud enamus kahjustuste ja pettuste vastu vĂ”itlemiseks. Kuid enama arvutamiseks on vajalik teada osalejate koguarv. Interstellar kontoris vĂ”i ringhÀÀletustel on need numbrid kergesti teada. Kuid kui teie rĂŒhm on halvasti mÀÀratletud vĂ”rk, kuhu sĂ”lmed vĂ”ivad vabalt siseneda ja lahkuda ilma keskusega kooskĂ”lastamata, siis on vajalik federatiivne bytsantsi leppimise sĂŒsteem, mis suudab kvorumeid mÀÀrata mitte eelnevalt mÀÀratletud sĂ”lmede loendist, vaid dĂŒnaamiliselt, pidevalt muutuva ja paratamatult mittetĂ€ieliku sĂ”lmede hetkeseisust.

VĂ”ib tunduda vĂ”imatu luua kvorum ĂŒksiku sĂ”lme vaatepunktist ulatuslikus vĂ”rgus, kuid see on vĂ”imalik. Selline kvorum vĂ”ib isegi tagada detsentraliseeritud hÀÀletamise tulemusi. Tehniline dokument SCP nĂ€itab, kuidas seda teha protseduuri kaudu, mida nimetatakse federatiivseks hÀÀletamiseks.

Patsientide jaoks

Artiklis on ĂŒksikasjalikumalt kĂ€sitletud federatiivset hÀÀletamist ja Stellar konsensuse protokolli. Kui te ei ole huvitatud detailidest, siis siin on protsessi ĂŒldine ĂŒlevaade.

  1. SĂ”lm teostab föderaalse hÀÀletamise voorusid «nomineeritud» ĂŒle. Föderaalne hÀÀletamine tĂ€hendab:
    • SĂ”lm hÀÀletab mingi ettepaneku poolt, nĂ€iteks «Ma pakun vĂ€lja V vÀÀrtuse»;
    • SĂ”lm kuulab hÀÀli, kuni leiab sellise, mis suudab «vastu vĂ”tta»;
    • SĂ”lm otsib selle ettepaneku jaoks «kvoraumi». Kvoraum «kinnitab» kandidaati.
  2. Kui sĂ”lm suudab kinnitada ĂŒht vĂ”i mitut kandidaati, proovib ta «valimisse» viia lĂ€bi mitu vooru föderaalsest hÀÀletamisest.
  3. Kui sÔlm suudab kontrollida valimise valmidust, proovib ta seda kinnitada veelgi rohkemate föderaalse hÀÀletamise voorude abil.
  4. Kui sÔlm suudab kinnitada valimise kommitti, saab ta «eksternaliseerida» selle hÀÀletuse vÀÀrtuse, kasutades seda konsensuse tulemuseks.

Need sammud hĂ”lmavad mitmeid föderaalse hÀÀletamise voorusid, mis tervikuna moodustavad ĂŒhe SCP vooru. Uurime lĂ€hemalt, mis toimub igal sammul.

Föderaalne hÀÀletamine

Föderaalne hÀÀletamine on protseduur, millega mÀÀratakse, kas vĂ”rk suudab kokku leppida ettepanekus. HÀÀletamisvoorus peab iga sĂ”lm valima ĂŒhe potentsiaalselt paljusid vÀÀrtusi. Ta ei saa seda teha, kuni ei ole kindel, et teised vĂ”rgu sĂ”lmed ei vali teistsugust tulemust. Selle kinnitamiseks vahetavad sĂ”lmed eemal ja tagasi hulk sĂ”numeid, et igaĂŒks kinnitaks, et kvoraum sĂ”lmed vastuvĂ”tavad sama otsuse. Selle jaotise ĂŒlejÀÀnud osa selgitab selles lauses esinevaid mĂ”isteid ja kuidas kogu protseduur toimub.

Kvoraumid ja kvoraumi lÔigud

Alustame kvoraumi mÀÀratlemisest. Nagu me eespool arutasime, ei ole detsentraliseeritud vĂ”rgus, millel on dĂŒnaamiline liikmelisus, vĂ”imalik ette teada sĂ”lmede arvu ja seega, kui palju on vajalik enamuse jaoks. Föderaalne hÀÀletamine lahendab selle probleemi, esitades uue idee kvoraumi lĂ”ik (quorum slice): vĂ€ike rĂŒhm vĂ”rdvÀÀrseid sĂ”lmi, kellele sĂ”lm usaldab teabe edastamise hÀÀletamise seisundi kohta ĂŒlejÀÀnud vĂ”rgus. Iga sĂ”lm mÀÀratleb oma kvoraumi lĂ”igu (mille liikmeks ta tegelikult saab). (quorum slice): vĂ€ike rĂŒhm vĂ”rdsest sĂ”lmedest, kellele sĂ”lm usaldab teabe edastamise hÀÀlte oleku kohta ĂŒlejÀÀnud vĂ”rgustikule. Iga sĂ”lm mÀÀratleb oma kvorumi lĂ”ike (mille liikmeks ta tegelikult saab).

Kvorumi kujundamine algab kvorumi lÔikest. Iga sÔlm lisab oma lÔike sÔlmed. SeejÀrel lisatakse lÔikede liikmed. nende sÔlmede ja nii edasi. Protsessi jÀtkudes satub jÀrjest rohkem sÔlmi, mida te ei saa lisada, kuna nad on juba lÔikes. Kui uusi sÔlmi lisamiseks enam ei ole, katkeb protsess: oleme kujundanud kvorumi algsest sÔlmest 'transitiivne sulgemine' (transitive closure) kvorumi lÔike kaudu.

Uurime Stellar'i konsensusprotokolli
Kuidas leida kvorum antud sÔlmest


Uurime Stellar'i konsensusprotokolli

 lisame tema lÔike liikmed


Uurime Stellar'i konsensusprotokolli

 seejÀrel lisame nende sÔlmede lÔikede liikmed.

Uurime Stellar'i konsensusprotokolli
JÀtkame, kuni ei jÀÀ enam sÔlmi lisamiseks.

Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli
SÔlmi lisamiseks ei ole. See on kvorum.

Tegelikult vĂ”ib iga sĂ”lm kuuluda rohkem kui ĂŒhte lĂ”ikesse. Kvorumi kujundamiseks valige ainult ĂŒks lĂ”ige ja lisage liikmed; seejĂ€rel valige iga liikme jaoks ĂŒkskĂ”ik milline lĂ”ige ja lisage liikmed. selle lĂ”ike jne. See tĂ€hendab, et iga sĂ”lm on osa paljusid vĂ”imalikke kvorumeid.

Uurime Stellar'i konsensusprotokolli
Valige igal sammul ainult ĂŒks kvorumi lĂ”ike.

Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli
Üks vĂ”imalik kvorum. VĂ”i alternatiivne variant


Uurime Stellar'i konsensusprotokolli

 valime teised lÔiked


Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli

 (kui see on vÔimalik)


Uurime Stellar'i konsensusprotokolli

 loob teise kvorumi.

Kuidas sÔlm saab teada, millistes lÔikedes teised sÔlmed on? Samamoodi nagu muud teavet teiste sÔlmede kohta: edastustest, mida iga sÔlm edastab vÔrgus, kui tema hÀÀlteenindus muutub. Iga edastus sisaldab teavet saatva sÔlme lÔikede kohta. Tehnilises dokumendis SCP ei ole mÀÀratud suhtlemismehhanismi. Tavalised rakendused kasutavad tavaliselt Gossip-protokolli teadete usaldusvÀÀrseks edastamiseks kogu vÔrgus.

Tulet meelde, et mittefederatiivses BĂŒtsantsi konsensus-sĂŒsteemis mÀÀratakse kvoorum kĂ”ikide sĂ”lmede enamuse jĂ€rgi. BĂŒtsantsi konsensus-sĂŒsteem on vĂ€lja töötatud kĂŒsimuse osas: kui palju ebaausaid sĂ”lmi suudab sĂŒsteem taluda? N sĂ”lmest koosnevas sĂŒsteemis, mis on projekteeritud taluma f riket (petmist), peab sĂ”lm olema suuteline saavutama edusamme, saades vastuse N−f peerilt, kuna f neist ei pruugi funktsioneerida. Kuid kui saadakse vastus N−f peerilt, vĂ”ib eeldada, et kĂ”ik f peerid (kellest sĂ”lm vastust ei saanud) on tegelikult ausad. Seega on pahatahtlikud f N−f peerist (kellest vastus on saadud). Selleks, et sĂ”lmed jĂ”uaksid ĂŒhe konsensuse, peab aus olema enamus ĂŒlejÀÀnud sĂ”lmedest, st meil on vaja, et N−f oleks suurem kui 2f vĂ”i N > 3f. Seega on tavaliselt sĂŒsteem, mis on kavandatud taluma f riket, kokku N=3f+1 sĂ”lme ja kvoorumi suurus 2f+1. Kui ettepanek ĂŒletab kvoorumi lĂ€ve, on ĂŒlejÀÀnud vĂ”rgu liikmed veendunud, et kĂ”ik konkurentsivĂ”imelised ettepanekud ebaĂ”nnestuvad. Nii et vĂ”rk jĂ”uab tulemuseni.

Kuid federatiivses BĂŒtsantsi konsensus-sĂŒsteemis ei saa mitte ainult olla enamus (kuna keegi ei tea vĂ”rgu ĂŒldsuuret), vaid enesestmĂ”istetav enamus kontseptsioon on tĂ€iesti kasutu! Kui sĂŒsteemis on liikmelisus avatud, vĂ”ib keegi saavutada enamus, lĂ€bides nii öelda Sivilia rĂŒnnaku: korduvalt liitudes vĂ”rku lĂ€bi mitme sĂ”lme. Nii et miks vĂ”ib transitiivne sulgemine lĂ”iget nimetada kvorumiks, ja kuidas see suudab summutada konkurentsivĂ”imelisi ettepanekuid?

Tehniliselt, mitte kuidagi! Kujutage ette kuue sÔlmega vÔrku, kus kaks kolmikest on teineteise kvoorumi lÔigetes isoleeritud. Esimene alagrupp vÔib teha otsuse, millest teine kunagi ei kuule, ja vastupidi. Selle vÔrgu jaoks ei ole vÔimalik konsensusele jÔuda (kui mitte juhuslikult).

SeetĂ”ttu nĂ”uab SCP, et federatiivse hÀÀletamise puhul (ja oluliste teoreemide rakendamiseks) peaks vĂ”rgus olema omadus, mida nimetatakse kvoorumite ĂŒhiseks olemiseks. VĂ”rgus, millel on see omadus, kattuvad alati vĂ€hemalt ĂŒhes sĂ”lmes igasugused kaks kvoorumi, mida saab koostada. Ülevaatlikult tĂ€hendab see, et kui mĂ”ni kvoorum nĂ”ustub vĂ€itega X, ei saa ĂŒkski teine kvoorum kunagi nĂ”ustuda millegi muuga, kuna see peab kindlasti sisaldama mĂ”nda sĂ”lme esimesest kvoorumist, mis on juba hÀÀletanud X poolt.

Uurime Stellar'i konsensusprotokolli
Kui vĂ”rgus on kvoorumite ĂŒhisosa


Uurime Stellar'i konsensusprotokolli

siis kattuvad alati igasugused kaks kvoorumi, mida saate koostada


Uurime Stellar'i konsensusprotokolli

kattuvad alati.

Uurime Stellar'i konsensusprotokolli

Uurime Stellar'i konsensusprotokolli

(Loomulikult vĂ”ivad kattuvad sĂ”lmed olla viinapatsivĂ”rgud vĂ”i muul viisil halvad. Sel juhul ei aita kvoorumite ĂŒhinemine vĂ”rgu nĂ”usoleku saamiseks ĂŒldse. SeetĂ”ttu pĂ”hinevad paljud tulemused tehnilises dokumendis SCP selgelt vĂ€ljendatud oletustel, et vĂ”rgu sees on kvoorumite ĂŒhisosa, isegi pĂ€rast halbadest sĂ”lmedest vabanemist. Lihtsuse huvides jĂ€tame need oletused viidatud artikli ĂŒlejÀÀnud osas).

VĂ”ib tunduda ebamugav oodata, et sĂ”ltumatute sĂ”lmede vĂ”rgus on vĂ”imalik usaldusvÀÀrne kvoorumite ĂŒhinemine. Kuid selleks on kaks pĂ”hjust.

Esimene pĂ”hjus on interneti olemasolu. Internet on ideaalne nĂ€ide sĂ”ltumatute sĂ”lmede vĂ”rgust, kus on kvoorumite ĂŒhinemine. Enamik interneti sĂ”lmedest on ĂŒhendatud ainult mĂ”ne teiste kohaliku sĂ”lmega, kuid need vĂ€ikesed kogud kattuvad piisavalt, et iga sĂ”lm oleks ligipÀÀsetav igast teisest sĂ”lmest igasuguste marsruutide kaudu.

Teine pĂ”hjus on spetsiifiline Stellar maksevĂ”rgu jaoks (kĂ”ige levinum rakendus SCP). Igal varal Stellar vĂ”rgus on emitent ja Stellar'i soovitused nĂ”uavad, et iga emitent mÀÀraks ĂŒhe vĂ”i mitu sĂ”lme, mis kĂ€sitlevad lunastamisettepanekute töötlemist. Teie huvides on otse vĂ”i kaudselt kaasata need sĂ”lmed iga huvipakkuva vara kvoorumitesse. SeelĂ€bi kattuvad kĂ”ikide sĂ”lmede kvoorumid, mis on huvitatud konkreetsest varast, vĂ€hemalt nendes lunastussĂ”lmedes. SĂ”lmed, mis on huvitatud mitmest varast, kaasavad oma kvoorumisse kĂ”ik vastavate emitentide lunastussĂ”lmed, ning nad pĂŒĂŒdlevad kokku liita kĂ”ik varad. Lisaks ei tohi kĂ”ik varad, mis pole omavahel seotud, vĂ”rgu sees olla seotud — see on mĂ”eldud nii, et selle vĂ”rgu kvoorumid ei kattuks (nĂ€iteks dollari piirkonna pangad soovivad mĂ”nikord kaubelda euro piirkonna ja pesotoo pangandussektoriga, seega on nad samas vĂ”rgus, kuid keegi neist ei huvita eraldi vĂ”rku, kus kaupleb lastetooteid, nagu nĂ€iteks pesapallikaardid).

Muidugi, oodates kvoorumite kattumist ei ole garantii. Teised byzantium'i kokkuleppe sĂŒsteemid oma keerukuses on suures osas sĂ”ltuvad kvoorumite garantii olemasolust. SCP oluline uuendus on see, et see vabastab kvoorumite loomise vastutuse konsensusalgoritmist ja viib selle rakenduse tasandile. Seega, kuigi föderaalne hÀÀletamine on piisavalt tavaline igasuguste kĂŒsimuste hÀÀletamiseks, sĂ”ltub selle usaldusvÀÀrsus kriitiliselt nende tĂ€henduste laiemast kontekstist. MĂ”ned hĂŒpoteetilised kasutusvĂ”imalused vĂ”ivad osutuda mitte nii mugavaks hĂ€sti seotud vĂ”rkude loomisel kui teised.

HÀÀletamine, vastuvÔtmine ja kinnitamine

Föderaalse hÀÀletamise voorus hakkab sĂ”lm valikuliselt hÀÀletama mingi vÀÀrtuse V poolt. See tĂ€hendab, et see edastab vĂ”rgus sĂ”numi: „Mina olen sĂ”lm N, minu kvoorumid Q ja ma hÀÀletan V poolt.” Kui sĂ”lm hÀÀletab sellisel viisil, lubab ta, et ei ole kunagi hÀÀletanud V vastu ja ei hÀÀleta kunagi.

Peer nodes see how others vote in broadcasts. Once a node gathers enough of these messages, it can track quorum slices and attempt to find quorums. If it sees a quorum of peers also voting for V, it can proceed to acceptance of V and broadcast this new message to the network: "I am node N, my quorum slice is Q, and I accept V." Acceptance provides a stronger guarantee than simple voting. When a node votes for V, it can never vote for other options. But if a node accepts V, no node in the network will ever accept another option (Theorem 8 in the SCP technical document proves this).

Of course, there is a high likelihood that a quorum of nodes agreeing on V won’t be found right away. Other nodes might vote for other values. But there is another way for the node to move from simple voting to acceptance. N can accept another value W, even if it did not vote for it, and even if it does not see a quorum for it. To change its vote, it is enough to see a blocking set of nodes that have accepted W. A blocking set consists of one node from each of the quorum slices of N. As the name suggests, it is capable of blocking any other value. If all nodes in such a set accept W, then (by Theorem 8) it will never be possible to form a quorum that accepts any other value, and therefore it is also safe for N to accept W.

Uurime Stellar'i konsensusprotokolli
Node N with three quorum slices.

Uurime Stellar'i konsensusprotokolli
B-D-F is a blocking set for N: it includes one node from each slice of N.

Uurime Stellar'i konsensusprotokolli
B-E is also a blocking set for N because E appears in two slices of N.

But a blocking set is not a quorum. It would be too easy to trick node N into accepting a desired value if it were sufficient to compromise just one node in each of the slices of N. Therefore, accepting a value is not the end of voting. Instead, N must confirm the value, meaning it must see a quorum of nodes accepting it. If it goes that far, then, as the SCP technical document proves (in Theorem 11), the rest of the network will also ultimately confirm the same value, thus N will conclude the federated voting with a determined value as the result.

Uurime Stellar'i konsensusprotokolli
Federated voting.

HÀÀletusprotsess ja kinnitamine moodustab ĂŒhe tĂ€iskĂ€igu föderatiivse hÀÀletuse raames. Stellar konsensuse protokoll ĂŒhendab palju selliseid kĂ€ike, et luua tĂ€iuslik konsensus sĂŒsteem.

Stellar konsensuse protokoll

Kaks kĂ”ige olulisemat omadust konsensus sĂŒsteemis — turvalisus ja vastupidavus. Konsensusalgoritm on 'turvaline', kui see ei saa kunagi anda erinevaid tulemusi erinevatele osalejatele (Bob'i ajalugu ei saa kunagi olla vastuolus Caroliga). 'Vastupidavus' tĂ€hendab, et algoritm annab alati tulemuse, s.t ei jÀÀ kinni.

Kirjeldatud föderatiivse hÀÀletuse protseduur on turvaline selles mĂ”ttes, et kui sĂ”lm kinnitab vÀÀrtuse V, siis ei kinnita ĂŒkski teine sĂ”lm teist vÀÀrtust. Kuid 'ei kinnita teist vÀÀrtust' ei tĂ€henda, et see peab tingimata midagi kinnitama. Osalejad vĂ”ivad hÀÀletada nii palju erinevate vÀÀrtuste ĂŒle, et miski ei saavuta nĂ”usoleku lĂ€ve. See tĂ€hendab, et föderatiivses hÀÀletuses puudub vastupidavus.

Stellar konsensuse protokoll kasutab föderatiivset hÀÀletust nii, et tagab nii turvalisuse kui ka vastupidavuse. (Turvalisuse ja vastupidavuse garantiidel on teoreetiline piir. Konstruktsioon valib vĂ€ga tugeva turvalisuse garanteerimise, ohverdades veidi vastupidavuse, kuid arvestades piisavalt pika aja jooksul saab konsensus vĂ€ga tĂ”enĂ€oliselt saavutatud). LĂŒhidalt öeldes seisneb idee selles, et korraldatakse mitu föderatiivset hÀÀletust mitmete vÀÀrtuste ĂŒle, kuni ĂŒks neist lĂ€bib tĂ€ielikult kĂ”ik allpool kirjeldatud SCP hÀÀletamise etapid.

VÀÀrtused, mille ĂŒle SCP konsensust peab saavutama, vĂ”ivad olla tehingute ajalugu vĂ”i lĂ”unatellimus vĂ”i miski muu, kuid oluline on mĂ€rkida, et need ei ole vÀÀrtused, mis on aktsepteeritud vĂ”i kinnitatud. Selle asemel toimub föderatiivne hÀÀletus vĂ€idete ĂŒle nende vÀÀrtuste kohta.

Esimesed föderatiivse hÀÀletuse kĂ€igud toimuvad nimetamise etapis (nomination phase), koos komplekti vĂ€idete tĂŒĂŒbiga 'Mina esitan V', vĂ”imalusel paljude erinevate vÀÀrtuste V jaoks. Nimetamise eesmĂ€rk on leida ĂŒks vĂ”i mitu vĂ€idet, mis lĂ€bivad aktsepteerimise ja kinnitamise.

PĂ€rast kinnitatud kandidaatide leidmist liigub SCP hÀÀletamise etappi, kus eesmĂ€rk on leida teatud hÀÀlteprotsess (st ettepaneku vÀÀrtuse konteiner) ja kvoorum, mis vĂ”ib vĂ€ljendada komiteed selle jaoks (commit). Kui kvoorum teeb komitee hÀÀletamise, aktsepteeritakse selle vÀÀrtus konsensuseks. Kuid enne, kui sĂ”lm saab hÀÀletada komitee ĂŒle, peab ta enne kinnitama kĂ”igi madalama vÀÀrtuse hÀÀletuste tĂŒhistamise. Need sammud - hÀÀletuste tĂŒhistamine, et leida see, millele saab komiteed kinnitada - hĂ”lmavad mitmeid ringe föderatiivset hÀÀletamist mitmete hÀÀletuste avalduste ĂŒle. JĂ€rgmistes osades kirjeldatakse lĂ€hemalt esitamist ja hÀÀletamist.

Esitamine

Esitamise etapi alguses saab iga sÔlm vabatahtlikult valida vÀÀrtuse V ja hÀÀletada selle kinnitamise eest "Mina esitan V". Selles etapis on eesmÀrk kinnitada teatud vÀÀrtuse esitamine föderatiivse hÀÀletamise teel.

VĂ”ib-olla hÀÀletab piisav arv sĂ”lmi piisavalt erinevate avalduste ĂŒle, ja ĂŒkski esitus ei saavuta vastuvĂ”tmise kĂŒnnist. SeetĂ”ttu, lisaks enda nominatsioonihÀÀlte edastamisele, "peegeldavad" sĂ”lmed oma naabrite nominatsioone. Peegeldamine (echo) tĂ€hendab, et kui sĂ”lm hÀÀletab V esitamise poolt, kuid nĂ€eb naabri hÀÀletust W esitamise poolt, siis hÀÀletab ta nĂŒĂŒd nii V kui ka W esitamise poolt. (KĂ”ik naabrite hÀÀled ei kajastu esitamise ajal, kuna see vĂ”ib pĂ”hjustada erinevate nominantide plahvatuse. SCP sisaldab nende hÀÀlte reguleerimise mehhanismi. LĂŒhidalt öeldes, on olemas valem "prioriteedi" mÀÀramiseks sĂ”lme vaatenurgast, ning peegeldatakse ainult kĂ”rge prioriteediga sĂ”lmede hÀÀli. Mida kauem esitamine kestab, seda madalam on kĂŒnnis, seetĂ”ttu laiendab sĂ”lm naabrite kogumit, kelle hÀÀli ta peegeldab. Prioriteedi valem sisaldab ĂŒhe sisendina sloti numbrit, seega vĂ”ib kĂ”rge prioriteediga peer ĂŒhe sloti puhul olla madala prioriteediga teisel, ja vastupidi).

VĂ”ib juhtuda, et piisav arv sĂ”lmi hÀÀletab piisavalt erinevate ettepanekute eest, ja ĂŒkski ettepanek ei suuda saavutada vastuvĂ”tmise kĂŒnnist. SeetĂ”ttu peegeldavad sĂ”lmed oma naabrite ettepanekute hÀÀli lisaks oma nomineerimishÀÀlte edastamisele. Peegeldamine tĂ€hendab, et kui sĂ”lm hÀÀletab ettepaneku V poolt, kuid nĂ€eb sĂ”numit naabrilt, kes hÀÀletab ettepaneku W poolt, siis hakkab see nĂŒĂŒd hÀÀletama nii V kui ka W ettepaneku poolt. (KĂ”ik naabri hÀÀled ei pruugi peegelduda hÀÀletamise ajal, kuna see vĂ”ib pĂ”hjustada erinevate nominentide plahvatuse. SCP hĂ”lmab nende hÀÀlte reguleerimise mehhanismi. LĂŒhidalt öeldes on olemas valem, mis mÀÀrab „prioriteedi” naabri suhtes sĂ”lme vaatepunktist, ja peegeldatakse vaid kĂ”rgprioriteediliste sĂ”lmede hÀÀli. Mida pikemalt hÀÀletamine kestab, seda madalam on kĂŒnnis, seega laiendab sĂ”lm naabrite komplekti, kelle hÀÀli ta peegeldab. Prioriteedi valem sisaldab ĂŒhe sisenemise andmena ka ajakonverentsi numbrit, seega vĂ”ib kĂ”rge prioriteediga vĂ”rgu sĂ”lm ĂŒhe ajakonverentsi jaoks olla madala prioriteediga teise jaoks ja vastupidi).

Konceptsiooniliselt on nii V kui W esitlemine eraldi föderatiivsed hÀÀled, mis igaĂŒhega eraldi suudavad saavutada aktsepteerimise vĂ”i kinnitamise. Praktikas pakivad SCP protokolli sĂ”numid need eraldi hÀÀled kokku.

Kuigi hÀÀletamine V esitlemise poolt tĂ€hendab, et ei tohi kunagi hÀÀletada V esitlemise vastu, mÀÀratletakse rakendustasandil – antud juhul SCP – see, mida tĂ€hendab 'vastu'. SCP ei nĂ€e kinnitust, mis oleks vastuolus hÀÀletusega 'Ma esitan X', st ei ole sĂ”numit 'Ma olen X esitlemise vastu', seetĂ”ttu saab sĂ”lm hÀÀletada mis tahes vÀÀrtuste esitlemise poolt. Paljusid neist nominatsioonidest ei viida kuigi kaugele, kuid lĂ”ppkokkuvĂ”ttes suudab sĂ”lm aktsepteerida vĂ”i kinnitada ĂŒhte vĂ”i mitut vÀÀrtust. Kui nominant on kinnitatud, siis ta saab kandidaadiks.

Uurime Stellar'i konsensusprotokolli
SCP esitlemine föderatiivse hÀÀletuse kaudu. VĂ”ib esitada palju vÀÀrtusi “B”, mille on esitanud vĂ”rdsete Ă”igustega sĂ”lmed ja mis on 'peegeldatud' sĂ”lme kaudu.

Kandidaatide esitamine vĂ”ib viia mitme kinnitatava kandidaadi tekkimiseni. SeetĂ”ttu nĂ”uab SCP, et rakendustasand pakuks mingit meetodit kandidaatide ĂŒhendamiseks ĂŒhte komposiiti (composite). Ühendamismeetod vĂ”ib olla mis tahes. Peaasi on see, et kui see meetod on mÀÀratletud, siis ĂŒhendavad kĂ”ik sĂ”lmed samu kandidaate. ToitlustussĂŒsteemi hÀÀletamisel vĂ”ib 'ĂŒhendamine' tĂ€hendada lihtsalt ĂŒhe kahest kandidaadist loobumist. (Kuid mÀÀratletud viisil: iga sĂ”lm peab valima sama vÀÀrtuse tĂŒhistamiseks. NĂ€iteks varasem valik tĂ€hestikulises jĂ€rjekorras). Stellar'i maksevĂ”rgus, kus toimub tehingute ajaloo hÀÀletamine, tĂ€hendab kahe esitatud nominandi ĂŒhendamine tehingute ĂŒhendamist, mida nad sisaldavad, ja nende kahe viimase aja tempot.

Tehniline kirjeldus SCP tĂ”estab (teoreem 12), et esitlemise faasi lĂ”puks jĂ”uab vĂ”rk lĂ”puks ĂŒhe komposiidi poole. Kuid probleem on: föderatiivne hÀÀletamine on asĂŒnkroonne protokoll (nagu ka SCP). TeisisĂ”nu, sĂ”lmed ei koordineeru ajaliselt, vaid ainult saatmise kaudu saadud sĂ”numite kaudu. SĂ”lme seisukohalt ei ole selge, millal protsess lĂ”ppes ettepanekufaas. Ja kuigi kĂ”ik sĂ”lmed jĂ”uavad lĂ”puks sama komposiitini, vĂ”ivad nad selle tee jooksul valida erinevaid marsruute, luues erinevaid koostisosade kandidaate, ning ei suuda kunagi öelda, kumb neist on lĂ”plik.

Aga see on okei. Ettepanek on vaid ettevalmistus. Peamine on piirduda kandidaatide arvuga, et saavutada konsensus, mis toimub protsessi kÀigus. hÀÀletamine (balloting).

HÀÀletamine

HÀÀletus on paar <counter,value>, kus counter on tĂ€isarv, mis algab numbrist 1, ja value on kandidaat ettepanekufaasist. See vĂ”ib olla kas sĂ”lme enda kandidaat vĂ”i naaber sĂ”lme kandidaat, mille see sĂ”lm on aktsepteerinud. Üldiselt ettevĂ”etakse hÀÀletamisel mitmeid katseid, et jĂ”uda konsensusele mingi kandidaadi ĂŒle teatud hÀÀletuses, viies lĂ€bi potentsiaalselt paljusid föderaalseid hÀÀletusi hÀÀletuse avalduste ĂŒle. HÀÀletuse arvutid jĂ€lgivad tehtud katseid, ja suuremate arvu vÀÀrtustega hÀÀletused eelistavad vĂ€iksema arvu vÀÀrtusi. Kui hÀÀletus <counter,value> takerdub, algab uus hÀÀletamine, nĂŒĂŒd hÀÀletusel <counter+1,value>.

On oluline eristada mÔisted (nÀiteks, kuidas peaks lÔunaks tellima: pitsat vÔi salateid), hÀÀletusi (paar counter-value) ja hÀlbed hÀÀletuste kohta. SCP voor sisaldab mitmeid ringe föderaalses hÀÀletamises, sealhulgas selliste vÀidete osas:

  • „Olen valmis hÀÀletuse B kinnitamiseks“ ja
  • „Kannan ette hÀÀletust B“

Antud sĂ”lme vaatenurgast saavutatakse konsensus, kui see leiab hÀÀletuse B, mille osas ta vĂ”ib kinnitada (st leida kvoorumi, mis aktsepteerib) vĂ€idet „Kannan ette hÀÀletust B“. Sellest hetkest alates on ohutu tegutseda vÀÀrtuse pĂ”hjal, mis on mÀÀratud B-sse — nĂ€iteks esitada see lĂ”unatellimus. Seda nimetatakse eksternaliseerimiseks vÀÀrtuseks. Kui hÀÀletuse aktsepteerimine on kinnitatud, vĂ”ib sĂ”lm olla kindel, et iga teine sĂ”lm on eksternaliseerinud sama vÀÀrtuse vĂ”i kindlasti teeb seda tulevikus.

Kuigi kontseptuaalselt viiakse paljusid föderatiivseid hÀÀletusi lĂ€bi mitmete erinevate valimiste avalduste alusel, vahetatakse neid mitte nii suure hulga sĂ”numitega, kuna iga sĂ”num kapseldab mitmeid valimisi. Üks sĂ”num edastab seega korraga paljude föderatiivsete hÀÀletuste oleku, nĂ€iteks: „Ma aktsepteerin valimiste kommitte vahemikus <min,V> kuni <max,V>.”

Mida tĂ€hendavad terminid „valmistatud” (prepared) ja „kommit” (commit)?

SĂ”lm hÀÀletab valimiste kommiti poolt, kui ta on veendunud, et teised sĂ”lmed ei tee valimiste kommitte teiste vÀÀrtustega. Veendumine selles on avalduse ettevalmistamise eesmĂ€rk. HÀÀletamine, milles öeldakse: „Ma olen valmis valimiste kommitiks B,” on lubadus, et kunagi ei toimu valimiste kommitit, mille vÀÀrtus on vĂ€iksem kui B, st vĂ€iksema loenduri (SCP nĂ”uab, et valimistel oleks kindel jĂ€rjekord. Seega on valimine <N1,V1> vĂ€iksem kui <N2,V2>, kui N1<N2, samuti kui N1=N2 ja V1<V2). Need vĂ€iksemad valimised „tĂŒhistatakse” (aborted) ettevalmistava hÀÀletuse kĂ€igus, samas kui B loetakse „valmistatud”.

Miks tĂ€hendab „Ma olen valmis valimiste kommitiks B” „Luban, et kunagi ei luba valimiste kommitte, mille vÀÀrtus on vĂ€iksem kui B”? Sest SCP mÀÀratleb tĂŒhistamise (abort) kommiti vastandina. HÀÀletamine valimiste ettevalmistamise ĂŒle eeldab samuti hÀÀletamist mĂ”nede teiste valimiste tĂŒhistamise ĂŒle ja nagu me varem arutasime, on hÀÀletamine ĂŒhe asja ĂŒle lubadus, et kunagi ei hÀÀletata selle vastu.

Enne kui sĂ”lm edastab kommiti, peab ta esmalt leidma valimise, mille ta saab kinnitada kui ettevalmistatud. TeisisĂ”nu hÀÀletab ta föderatiivse hÀÀletuse teemal „Ma olen valmis valimiste kommitiks B”, vĂ”ib-olla paljude erinevate valimiste puhul, kuni leiab sellise, mis aktsepteerib kvoorumi.

Kust tulevad hÀÀletamiseks ettevalmistatavad vÀljaanded? Esiteks edastab sÔlm ettevalmistuse hÀÀletamiseks , kus C on kandideeriv komplekt, mis on loodud kandidaate esitamise etapil. Siiski vÔib isegi pÀrast hÀÀletamiseks ettevalmistuse algust kandidaadi esitamine tuua juurde uusi kandidaate, kes muutuvad uueks vÀljaanneteks. Samuti vÔivad osalistel olla erinevad kandidaatid ja nad vÔivad luua blokeeriva komplekti, mis aktsepteerib "Olen valmis hÀÀletama vÀljaande B2", mis veenab sÔlme ka selle aktsepteerima. LÔpuks on olemas ajavÀlja mehhanism, mis genereerib uusi ringe föderaalse hÀÀletamise jaoks uute vÀljaannetega, millel on kÔrgemad loendurid, kui praegused vÀljaanded on kinni jÀÀnud.

Niipea kui sĂ”lm leiab vĂ€ljaande B, mille vĂ”ib kinnitada kui ettevalmistatud, edastab ta uue sĂ”numi "Kinnita vĂ€ljaanne B". See hÀÀletamine ĂŒtleb osalistele, et sĂ”lm ei loobu kunagi B-st. Tegelikult, kui B esindab vĂ€ljaannet , siis "Kinnita vĂ€ljaanne " tĂ€hendab tingimusteta nĂ”usolekut hÀÀletada kĂ”igi vĂ€ljaannete ettevalmistuse eest alates kuni . See lisavÀÀrtus aitab teistel sĂ”lmedel osalistega sammu pidada, kui nad on veel protokolli varasemates etappides.

Selles etapis on oluline rĂ”hutada, et tegemist on asĂŒnkroonsete protokollidega. Ainult sellepĂ€rast, et ĂŒks sĂ”lm saadab hÀÀli kinnitamiseks, ei tĂ€henda, et tema eakaaslased seda ka teevad. MĂ”ned neist vĂ”ivad endiselt hÀÀletada ettepanekute seadmiseks, teised on vĂ”ib-olla juba vÀÀrtuse eksternaaliseerinud. SCP selgitab, kuidas sĂ”lm peab iga tĂŒĂŒpi omavahelise sĂ”numi töötlemisega tegema sĂ”ltumata selle faasist.

Kui sĂ”num "Ma kuulutan vĂ€lja commit <N,C>" ei saa olla aktsepteeritud vĂ”i kinnitatud, siis on tĂ”enĂ€osus aktsepteerida vĂ”i kinnitada sĂ”numit <N+1, C> vĂ”i <N+2, C> — vĂ”i igal juhul mis tahes bulleti, mille vÀÀrtus on C, mitte miski muu, kuna sĂ”lme on juba lubanud kunagi mitte tĂŒhistada <N,C>. Siis kui sĂ”lm edastab hÀÀli commit'i jaoks, on see C vĂ”i mitte midagi, sĂ”ltuvalt sellest, kui kaugele konsensus jĂ”uab. Siiski on sellest sĂ”lm veel liiga vĂ€he, et C-d vĂ€ljastada. MĂ”ned bĂŒtsantsi parteid (moodustades vĂ€hem kui kvoorumi, tuginedes meie ohutuse eeldustele) vĂ”ivad sĂ”lme petta. Miski teatud bulleti (vĂ”i bulletite vahemiku) aktsepteerimine ja seejĂ€rel kinnitamine — see annab sĂ”lmele lĂ”puks kindluse C vĂ€ljastamiseks.

Uurime Stellar'i konsensusprotokolli
SCP hÀÀletamine föderaalse hÀÀletamise kaudu. Mitte kuvatud: igal ajal vĂ”ib sisse lĂŒlituda taimer, suurendades hÀÀletuse arvu (ja vĂ”imalusel luues uusi komposiite tĂ€iendavatest kandidaatidest).

Ja see on kÔik! Kui vÔrk on jÔudnud konsensusele, on see valmis seda tegema jÀlle ja jÀlle. Stellar maksevÔrgus toimub see umbes iga 5 sekundi jÀrel: saavutus, mis nÔuab nii turvalisust kui ka vastupidavust, mida SCP tagab.

SCP vĂ”ib seda saavutada, tuginedes mitmele föderaalsele hÀÀletamise ringile. Föderaalne hÀÀletamine sai vĂ”imalikuks tĂ€nu kvoorumi lĂ”ike kontseptsioonile: rĂŒhmadesse kuuluvad vĂ”rdsed sĂ”lmed, kellele iga sĂ”lmotsustas usaldada kui osa oma (subjektiivsest) kvoorumist. See konfiguratsioon tĂ€hendab, et isegi avatud liikmelisusega ja bĂŒtsantsi petmisega vĂ”rgus on vĂ”imalik saavutada konsensus.

Edasi lugemiseks

  • Algset tehnilist dokumenti SCP kohta vĂ”ib leida siin, vaid siit projekti spetsifikatsioonide jaoks selle rakendamiseks.
  • Protokolli SCP originaalautor David Mazieres selgitab seda lihtsustatud (kuid siiski tehniliselt) viisil siin.
  • VĂ”ib-olla ĂŒllatas teid see, et te ei leidnud seda artiklit otsinguterminite "kaevandamine" vĂ”i "töö tĂ”endamine". SCP ei kasuta neid meetodeid, kuid mĂ”ned teised konsensuse algoritmid kasutavad. Zane Wizerspoon kirjutas ligipÀÀsetava ĂŒlevaate konsensuse algoritmidest.
  • Samm-sammult kirjeldus lihtsast vĂ”rgust, mis saavutab konsensuse SCP ĂŒhes tĂ€isringis.
  • SCP rakenduste vastu huvituvatele lugejatele: vt. C++ kood, mida Stellar maksevĂ”rk kasutab, vĂ”i Go kood, mille ma kirjutasin SCP parema mĂ”istmise jaoks.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster