
Stellar-konsensusprotokollet beskrevs först av David Mazieres 2015. Det Àr ett "federativt system för bysantinsk överenskommelse" som gör det möjligt för decentraliserade datanÀtverk utan ledare att effektivt nÄ enighet om en viss lösning. BetalningsnÀtverket Stellar anvÀnder Stellar Consensus Protocol (SCP) för att hÄlla en samstÀmmig transaktionshistorik som alla deltagare ser.
Det anses att konsensusprotokoll Ă€r svĂ„ra att förstĂ„. SCP Ă€r enklare Ă€n de flesta av dem men delar Ă€ndĂ„ detta rykte â delvis pĂ„ grund av den felaktiga idĂ©n att "federativ omröstning", som den första delen av den vetenskapliga artikeln Ă€gnar sig Ă„t, Ă€r SCP. Men sĂ„ Ă€r det inte! Det Ă€r bara en viktig byggsten som i den andra delen av artikeln anvĂ€nds för att skapa det faktiska Stellar konsensusprotokollet.
I denna artikel kommer vi kortfattat att förklara vad ett "överenkommelse-system" Àr, vad som kan göra det "bysantinskt" och varför man bör göra ett bysantinskt system "federativt". Vi kommer sedan att förklara den federativa omröstningsproceduren som beskrivs i artikeln om SCP och slutligen förklara sjÀlva SCP-protokollet.
Ăverenskommelse-system
Ett överenskommelse-system gör det möjligt för en grupp deltagare att enas om ett visst Àmne, till exempel vad man ska bestÀlla till lunch.
Vi pÄ Interstellar har implementerat vÄrt eget system för lunchöverenskommelse: vi bestÀller det som vÄr operativa chef John sÀger. Det Àr ett enkelt och effektivt överenskommelse-system. Vi litar alla pÄ John och tror att han varje dag kommer att hitta nÄgot intressant och nÀringsrikt.
Men vad hÀnder om John missbrukar vÄrt förtroende? Han kan ensidigt besluta att vi alla ska bli veganer. Inom en vecka eller tvÄ kommer vi sannolikt att avsÀtta honom och överföra makten till Elizabeth. Men tÀnk om hon Àlskar avokado med ansjovis och tycker att alla borde bli sÄdana. Makten korrumperar. DÀrför Àr det bÀttre att hitta nÄgon mer demokratisk metod: nÄgot sÀtt att se till att olika preferenser blir beaktade, samtidigt som en snabb och tydlig lösning sÀkerstÀlls sÄ att ingen bestÀller lunch eller fem personer gör olika bestÀllningar, eller att diskussionen drar ut pÄ tiden till kvÀllen.
Det verkar vara en enkel lösning: att hĂ„lla en omröstning! Men det Ă€r en bedrĂ€glig uppfattning. Vem ska samla in röstsedlar och rapportera resultaten? Och varför ska de andra tro pĂ„ vad han sĂ€ger? Kanske kan vi först rösta pĂ„ en ledare som vi litar pĂ„ för att leda omröstningen â men vem ska leda detta första omröstning? Vad hĂ€nder om vi inte kan enas om en ledare? Eller om vi enas, men den ledaren sitter fast i ett möte eller blir sjuk?
Liknande problem uppstÄr i distribuerade datanÀtverk. Alla deltagare eller noder mÄste enas om nÄgon form av beslut, till exempel vems tur det Àr att uppdatera en gemensam fil eller hÀmta en uppgift frÄn en kö. I ett kryptovalutanÀtverk mÄste noderna gÄng pÄ gÄng vÀlja hur den fullstÀndiga historien ser ut bland flera möjliga versioner, som ibland konfliktar. Detta nÀtverksbeslut garanterar för mottagaren att myntet Àr (a) giltigt (inte falskt) och (b) Ànnu inte anvÀnt nÄgon annanstans. Det garanterar ocksÄ att han kan spendera mynten i framtiden, eftersom den nya mottagaren kommer att ha samma garantier av samma skÀl.
Vilken som helst beslutssystem i ett distribuerat databehandlingsnĂ€tverk mĂ„ste vara felfritt: det ska ge konsekventa resultat trots fel som lĂ„ngsamma kommunikationslinjer, icke-reagerande noder och felaktig ordning av meddelanden. Byzantinska överenskommelser Ă€r dessutom motstĂ„ndskraftiga mot "byzantinska" fel: noder som ger felaktig information, antingen pĂ„ grund av misstag eller i ett avsiktligt försök att undergrĂ€va systemet eller fĂ„ nĂ„gon fördel. "Byzantinsk" felfrihet â förmĂ„gan att lita pĂ„ en gruppbeslut, Ă€ven nĂ€r vissa medlemmar i gruppen kan ljuga eller avvika frĂ„n beslutsreglerna â har fĂ„tt sitt namn frĂ„n , som försökte koordinera en attack. av Anthony Stevens.
LĂ„t oss betrakta kryptovalutaĂ€garen Alice, som mĂ„ste vĂ€lja mellan att köpa god glass frĂ„n Bob eller betala sin skuld till Carol. Kanske vill Alice betala bĂ„da samtidigt, genom att bedrĂ€gligt spendera samma mynt. För att göra detta mĂ„ste hon övertyga Bobs dator om att myntet aldrig har betalats till Carol, och övertyga Carols dator om att myntet aldrig har betalats till Bob. Det byzantinska konsensusprotokollet gör detta i praktiken omöjligt, genom att anvĂ€nda en form av majoritetsregel som kallas kvorum. En nod i ett sĂ„dant nĂ€tverk avstĂ„r frĂ„n att gĂ„ vidare till en specifik version av historien, tills den ser att ett tillrĂ€ckligt antal jĂ€mstĂ€llda noder â kvorum â Ă€r eniga om att göra sĂ„. NĂ€r detta intrĂ€ffar kommer de att bilda en tillrĂ€ckligt stor valblock för att tvinga de Ă„terstĂ„ende noderna i nĂ€tverket att acceptera deras beslut. Alice kan fĂ„ vissa noder att ljuga Ă„ hennes vĂ€gnar, men om nĂ€tverket Ă€r tillrĂ€ckligt stort kommer hennes försök att kvĂ€vas av rösterna frĂ„n de Ă€rliga noderna.
Hur mÄnga noder krÀvs för ett kvorum? à tminstone en majoritet, nÀrmare bestÀmt en kvalificerad majoritet för att hantera fel och bedrÀgeri. Men för att rÀkna ut majoriteten mÄste man veta det totala antalet deltagare. PÄ kontoret Interstellar eller i distriktsval Àr dessa siffror lÀtta att ta reda pÄ. Men om din grupp Àr ett svagt definierat nÀtverk dÀr noder kan gÄ in och ut efter eget val utan samordning med en central myndighet, sÄ krÀvs det en federativ byzantinsk konsensusprotokoll som kan faststÀlla kvorum inte frÄn en förutbestÀmd lista av noder, utan dynamiskt, frÄn en stÀndigt förÀnderlig och ofrÄnkomligt ofullstÀndig ögonblicksbild av noder vid ett visst tillfÀlle.
Det kan verka omöjligt att skapa ett kvorum ur ett sikt av en enda nod i ett stort nÀtverk, men det Àr möjligt. Ett sÄdant kvorum kan till och med garantera resultaten av decentraliserad röstning. Ett tekniskt dokument, SCP, visar hur detta kan göras med en procedur som kallas federerad röstning.
För de otÄliga
Den resterande delen av artikeln beskriver mer detaljerat den federerade röstningen och Stellar-konsensusprotokollet. Om du inte Àr intresserad av detaljerna, hÀr Àr en allmÀn översikt över processen.
- Noder genomför federala röstningsrundor för 'nomineringarna'. En federativ röstningsrunda innebÀr:
- Noden röstar för ett pÄstÄende, till exempel 'Jag föreslÄr vÀrdet V';
- Noden lyssnar pÄ röster frÄn deltagarna tills den hittar nÄgon som kan 'acceptera';
- Noden letar efter ett 'kvorum' för detta pÄstÄende. Kvorum 'bekrÀftar' nominanten.
- NÀr noden kan bekrÀfta en eller flera kandidater försöker den att 'förbereda' en 'röstsedel' genom flera rundor av federativ röstning.
- NÀr noden Àr redo att kontrollera röstsedelns beredskap försöker den att Äta sig den med hjÀlp av ytterligare rundor av federativ röstning.
- NÀr noden kan bekrÀfta engagemanget av röstsedeln kan den 'exteralisera' vÀrdet av denna röstsedel, genom att anvÀnda den som resultat av konsensus.
Dessa steg inkluderar flera rundor av federativ röstning, som tillsammans utgör en runda av SCP. LÄt oss titta nÀrmare pÄ vad som hÀnder i varje steg.
Federativ röstning
Federativ röstning Ă€r en procedur för att faststĂ€lla om nĂ€tverket kan enas om ett förslag. I röstningsrundan mĂ„ste varje nod vĂ€lja ett av flera potentiellt möjliga vĂ€rden. Den kan inte göra detta förrĂ€n den Ă€r sĂ€ker pĂ„ att andra noder i nĂ€tverket inte vĂ€ljer ett annat resultat. För att vara sĂ€kra pĂ„ detta, utbyter noderna en ström av meddelanden fram och tillbaka sĂ„ att varje av, att kvorum noder accepterar samma beslutet. Ăvriga delar av detta avsnitt förklarar villkoren i detta pĂ„stĂ„ende och hur hela proceduren gĂ„r till.
Kvorum och kvorumskivor
LÄt oss börja med att definiera kvorum. Som vi diskuterade ovan, i ett decentraliserat nÀtverk med dynamiskt medlemskap, Àr det omöjligt att pÄ förhand veta antalet noder och dÀrmed hur mÄnga som behövs för majoritet. Federativ röstning löser detta problem genom att introducera en ny idé kvorumskiva (quorum slice): en liten uppsÀttning av likvÀrdiga noder som noden litar pÄ för att förmedla information om röstningsstatus till den resterande delen av nÀtverket. Varje nod definierar sin egen kvorumskiva (medlem i denna blir den faktiskt).
Formandet av ett kvorum börjar med att skÀra kvorum. För varje nod lÀggs noderna i dess snitt till. DÀrefter lÀggs medlemmarna i skÀrningen till. dessa noder och sÄ vidare. Efterhand dyker fler noder upp som du inte kan lÀgga till eftersom de redan ingÄr i snittet. NÀr det inte finns nÄgra nya noder kvar att lÀgga till, avslutas processen: vi har bildat ett kvorum genom "transitiv stÀngning" av det ursprungliga nodens kvorumsskÀrning.

För att hitta kvorum frĂ„n en given nod âŠ

⊠lĂ€gger vi till medlemmarna i dess snitt âŠ

⊠sedan lÀgger vi till medlemmarna i snitt av dessa noder.

Vi fortsÀtter tills det inte finns nÄgra fler noder att lÀgga till.


Det finns inga fler noder att lÀgga till. Detta Àr ett kvorum.
Egentligen kan varje nod ingÄ i mer Àn ett snitt. För att bilda ett kvorum, vÀlj bara ett av snitten och lÀgg till medlemmarna; vÀlj sedan vilket snitt som helst för var och en av medlemmarna och lÀgg till medlemmarna. detta snitt och sÄ vidare. Det betyder att varje nod Àr medlem i ett antal möjliga kvorum.

VĂ€lj bara ett snitt av kvorum vid varje steg.



Ett möjligt kvorum. Eller ett alternativ âŠ

⊠vi vĂ€ljer andra snitt âŠ


âŠ(nĂ€r det Ă€r möjligt)âŠ

⊠skapar ett annat kvorum.
Hur fÄr en nod veta i vilka snitt de andra noderna ingÄr? PÄ samma sÀtt som annan information om andra noder: frÄn de sÀndningar som varje nod överför i nÀtverket nÀr dess röstningsstatus Àndras. Varje sÀndning innehÄller information om snitt av den sÀndande noden. Den tekniska dokumentationen SCP specificerar inte kommunikationsmekanismen. Implementationer anvÀnder vanligtvis för garanterad överföring av meddelanden över hela nÀtverket.
Vi pĂ„minner om att i det icke-federativa bysantinska konsensus-systemet definieras kvorum som en majoritet av alla noder. Det bysantinska konsensus-systemet Ă€r utformat med frĂ„gan i Ă„tanke: hur mĂ„nga ohederliga noder kan systemet tolerera? I ett system med N noder, som Ă€r konstruerat för att överleva vid f misslyckanden (bedrĂ€gerier), mĂ„ste en nod kunna uppnĂ„ framsteg genom att fĂ„ svar frĂ„n Nâf peers, eftersom f av dem kanske inte fungerar. Men efter att ha fĂ„tt svar frĂ„n Nâf peers, kan man anta att alla f peers (frĂ„n vilka noden inte fick svar) faktiskt Ă€r Ă€rliga. SĂ„ledes Ă€r f av Nâf peers (frĂ„n vilka svar har mottagits) skadliga. För att noder ska nĂ„ ett gemensamt konsensus, mĂ„ste en majoritet av de Ă„terstĂ„ende noderna vara Ă€rliga, vilket innebĂ€r att vi behöver att Nâf Ă€r större Ă€n 2f eller N > 3f. SĂ„ledes kommer ett system som Ă€r designat för att överleva vid f misslyckanden vanligtvis att ha totalt N=3f+1 noder och en kvorumstorlek pĂ„ 2f+1. NĂ€r ett förslag passerar kvorumtröskeln övertygas de övriga medlemmarna i nĂ€tverket om att alla konkurrerande förslag kommer att misslyckas. SĂ„ nĂ€tverket konvergerar mot resultatet.
Men i det federativa bysantinska konsensus-systemet kan det inte bara finnas nÄgon majoritet (eftersom ingen vet den totala storleken pÄ nÀtverket), utan vuxfÀrsen av majoritet Àr helt vÀrdelös! Om medlemskap i systemet Àr öppet, sÄ kan nÄgon fÄ en majoritet bara genom att genomföra en sÄ kallad Sybil-attack: genom att upprepade gÄnger gÄ med i nÀtverket via flera noder. SÄ varför kan det transitiva stÀngandet av skÀrningen kallas kvorum, och hur kan det undertrycka konkurrerande förslag?
Tekniskt sett, pÄ inget sÀtt! FörestÀll dig ett nÀtverk av sex noder, dÀr tvÄ grupper av tre Àr isolerade i varandras kvorumskÀrningar. Den första undergruppen kan fatta ett beslut som den andra aldrig kommer att höra talas om, och vice versa. För detta nÀtverk finns det inget sÀtt att uppnÄ konsensus (förutom av en tillfÀllighet).
DÀrför krÀver SCP att för federativ röstning (och för att tillÀmpa viktiga teoremer i artikeln) mÄste nÀtverket ha en egenskap som kallas skÀrning av kvorum. I nÀtverk med den hÀr egenskapen överlappar alltid tvÄ quorum som kan byggas över minst en nod. För att avgöra det dominerande sentimentet i nÀtverket Àr detta lika bra som att ha majoriteten. Intuitivt betyder det att om nÄgot quorum hÄller med om pÄstÄende X, sÄ kan inget annat quorum nÄgonsin hÄlla med om nÄgot annat, eftersom det nödvÀndigtvis kommer att inkludera en nod frÄn det första quorum som redan har röstat för X.

Om det finns överlappningar mellan quorum i nĂ€tverketâŠ

âŠdĂ„ kommer varje tvĂ„ quorum som du kan byggaâŠ

âŠalltid att överlappa.


(Naturligtvis kan överlappande noder visa sig vara byzantinskt bedrÀgliga eller dÄliga pÄ andra sÀtt. I sÄ fall hjÀlper överlappningen mellan quorum inte nÀtverket att enas överhuvudtaget. Av denna anledning baseras mÄnga resultat i den tekniska SCP-dokumentationen pÄ tydligt uttalade antaganden, som att det finns kvar överlappande quorum i nÀtverket Àven efter borttagning av dÄliga noder. För enkelhetens skull lÄter vi dessa antaganden vara underförstÄdda under resten av artikeln).
Det kan verka orimligt att förvÀnta sig att det ska finnas pÄlitlig överlappning mellan quorum i ett nÀtverk av oberoende noder. Men det finns tvÄ skÀl till varför det Àr sÄ.
Det första skÀlet Àr existensen av sjÀlva internet. Internet Àr ett perfekt exempel pÄ ett nÀtverk av oberoende noder med överlappande quorum. De flesta noder i internet kopplas endast till nÄgra fÄ andra lokala noder, men dessa smÄ mÀngder överlappar tillrÀckligt för att varje nod ska vara tillgÀnglig frÄn varje annan nod via en eller annan rutt.
Den andra anledningen Ă€r specifik för betalningsnĂ€tverket Stellar (den mest utbredda anvĂ€ndningen av SCP). Varje tillgĂ„ng i Stellar-nĂ€tverket har en utfĂ€rdare, och Stellar-rekommendationerna krĂ€ver att varje utfĂ€rdare utser en eller flera noder i nĂ€tverket för att hantera inlösenförfrĂ„gningar. Det ligger i ditt intresse att direkt eller indirekt inkludera dessa noder i kvorumskurvorna för varje tillgĂ„ng som intresserar dig. DĂ„ kommer kvorum för alla noder som Ă€r intresserade av den aktuella tillgĂ„ngen att överlappa sig Ă„tminstone i dessa inlösennoder. Noder som Ă€r intresserade av flera tillgĂ„ngar kommer att inkludera i sina kvorumskurvor alla inlösennoder för de aktuella utfĂ€rdarna, och de kommer att strĂ€va efter att centralisera alla tillgĂ„ngar. Dessutom, alla tillgĂ„ngar som inte Ă€r kopplade pĂ„ det sĂ€ttet till andra i nĂ€tverket, ska inte vara kopplade â det Ă€r utformat sĂ„ att det inte finns nĂ„got överlapp mellan kvorum i detta nĂ€tverk (till exempel vill banker i dollarzonen ibland handla med banker i eurozonen och banker i pesozonen, sĂ„ de Ă€r i ett och samma nĂ€tverk, men ingen av dem bryr sig om ett separat nĂ€tverk av barn som handlar med baseballkort).
SjÀlvklart, Àr förvÀntningen av överlappande kvorum inte en garanti. Andra byzantinska konsensussystem har mycket att tacka sin komplexitet för att sÀkerstÀlla kvorum. En viktig innovation med SCP Àr att det avlÀgsnar ansvaret för att skapa kvorum frÀn konsensusalgoritmen och flyttar det till applikationsnivÄn. SÄledes, Àven om federativ röstning Àr ganska allmÀn för röstning i vilka frÄgor som helst, beror dess tillförlitlighet i verkligheten kritiskt pÄ en bredare förstÄelse av dessa vÀrden. Vissa hypotetiska anvÀndningsomrÄden kan visa sig vara mindre bekvÀma för att skapa vÀl sammanlÀnkade nÀtverk Àn andra.
Röstning, antagande och bekrÀftelse
I rundan av federativ röstning börjar en nod valfritt att rösta för ett visst vÀrde V. Detta innebÀr att sÀnda ett meddelande i nÀtverket: "Jag Àr nod N, mina kvorumskurvor Q, och jag röstar för V". NÀr en nod röstar pÄ detta sÀtt lovar den att den aldrig har röstat emot V och aldrig kommer att göra det.
I sÀndningar frÄn peer-noder ser varje nod hur andra röstar. SÄ snart en nod samlar tillrÀckligt med sÄdana meddelanden kan den spÄra urval av kvorum och försöka hitta kvorum. Om den ser ett kvorum av peers som ocksÄ röstar för V kan den gÄ vidare till antagande av V och sÀnda detta nya meddelande till nÀtverket: "Jag Àr nod N, mina kvorumskivor Q, och jag accepterar V". Antagande ger en starkare garanti Àn enkel röstning. NÀr en nod röstar för V kan den aldrig rösta för andra alternativ. Men om en nod accepterar V, kommer ingen nod i nÀtverket nÄgonsin att acceptera ett annat alternativ (teorem 8 i det tekniska dokumentet SCP bevisar detta).
SjÀlvklart Àr chansen hög att det inte omedelbart kommer att finnas ett kvorum av noder som hÄller med V. Andra noder kan rösta för andra vÀrden. Men för noden finns det ocksÄ ett annat sÀtt att gÄ frÄn enkel röstning till antagande. N kan acceptera ett annat vÀrde W, Àven om den inte har röstat för det, och Àven om den inte ser nÄgot kvorum för det. För att Àndra sin röst rÀcker det med att se ett blockerande mÀngd noder som har antagit W. Det blockerande mÀngden Àr en nod frÄn varje urval av kvorum N. Som namnet antyder Àr det kapabelt att blockera alla andra vÀrden. Om alla noder i en sÄdan mÀngd accepterar W, kommer det (enligt teorem 8) aldrig att kunna bildas ett kvorum som accepterar ett annat vÀrde, och dÀrför Àr det ocksÄ sÀkert för N att acceptera W.

Nod N med tre kvorumskivor.

B-D-F Àr ett blockerande mÀngd för N: det inkluderar en nod frÄn varje urval av N.

B-E Àr ocksÄ ett blockerande mÀngd för N, eftersom E förekommer i tvÄ urval av N.
Men det blockerande mÀngden Àr inte ett kvorum. Det skulle vara för lÀtt att lura nod N att acceptera rÀtt vÀrde om det rÀckte med att hacka en nod i varje urval av N. SÄ att acceptera ett vÀrde Àr Ànnu inte slutet pÄ röstningen. IstÀllet mÄste N bekrÀfta vÀrdet, det vill sÀga se ett kvorum av noder som accepterar det. Om den nÄr sÄ lÄngt, bevisar det tekniska dokumentet SCP (i teorem 11), att resten av nÀtverket ocksÄ slutligen kommer att bekrÀfta samma vÀrde, sÄ N avslutar den federativa röstningen med ett visst vÀrde som resultat.

Federativ röstning.
Röstningsprocessen, beslutet och bekrÀftelsen utgör en fullstÀndig runda av federativ röstning. Stellar-konsensusprotokollet samlar flera sÄdana rundor för att skapa ett fullstÀndigt konsensus-system.
Stellar-konsensusprotokollet
TvÄ av de mest viktiga egenskaperna hos ett konsensus-system Àr sÀkerhet och resilience. En konsensus-algoritm Àr "sÀker" om den aldrig kan ge olika resultat till olika deltagare (Bobs historik kommer aldrig att motsÀga Carols). "Resilience" innebÀr att algoritmen alltid ger ett resultat, det vill sÀga den fastnar aldrig.
Den beskrivna proceduren för federativ röstning Àr sÀker i den meningen att om en nod bekrÀftar vÀrdet V, sÄ kommer ingen annan nod att bekrÀfta ett annat vÀrde. Men "inte bekrÀfta ett annat vÀrde" innebÀr inte att den nödvÀndigtvis bekrÀftar nÄgot. Deltagarna kan rösta för sÄ mÄnga olika vÀrden att inget nÄr tröskeln för godkÀnnande. Detta innebÀr att det i den federativa röstningen saknas resilience.
Stellar-konsensusprotokollet anvÀnder federativ röstning pÄ ett sÀtt som garanterar bÄde sÀkerhet och resilience. (SÀkerhets- och resilientgarantierna i SCP har en teoretisk grÀns. Konstruktionen vÀljer en mycket stark sÀkerhetsgaranti, men offrar en liten del av resilienten, men med tillrÀcklig tid kommer konsensus med hög sannolikhet att uppnÄs). Sammanfattningsvis handlar idén om att genomföra flera federativa röstningar om flera vÀrden, tills ett av dem passerar genom alla faser av SCP-röstning som beskrivs nedan.
De vÀrden som SCP strÀvar efter att nÄ konsensus om kan vara historik av transaktioner eller en lunchbestÀllning, eller nÄgot annat, men det Àr viktigt att notera att detta inte Àr de vÀrden som antas eller bekrÀftas. IstÀllet sker den federativa röstningen om pÄstÄenden om dessa vÀrden.
De första rundorna av den federativa röstningen Àger rum i nomineringen (nomineringens fas), pÄ en uppsÀttning pÄstÄenden som "Jag nominerar V", möjligtvis för mÄnga olika vÀrden V. MÄlet med nomineringen Àr att hitta ett eller flera pÄstÄenden som gÄr igenom godkÀnnande och bekrÀftelse.
Efter att ha funnit bekrĂ€ftade kandidater gĂ„r SCP vidare till röstningssteget, dĂ€r mĂ„let Ă€r att hitta nĂ„gon röstsedel (det vill sĂ€ga en behĂ„llare för det föreslagna vĂ€rdet) och en kvorum som kan deklarera commit för det (commit). Om kvorum fattar beslut om röstsedeln, accepterar dess vĂ€rde som konsensus. Men innan en nod kan rösta för att godkĂ€nna röstsedeln, mĂ„ste den först bekrĂ€fta annullering av alla röstsedlar med ett lĂ€gre rĂ€knarvĂ€rde. Dessa steg â annullering av röstsedlar för att hitta den som kan bekrĂ€fta commit â inkluderar flera rundor av federativ röstning om flera pĂ„stĂ„enden om röstsedlar.
I de följande avsnitten beskrivs nominering och röstning i detalj.
Nominering
I början av nomineringssteget kan varje nod spontant vÀlja vÀrdet V och rösta för pÄstÄendet "Jag nominerar V". MÄlet i detta steg Àr att bekrÀfta nomineringen av nÄgot vÀrde genom federativ röstning.
Det kan hÀnda att tillrÀckligt mÄnga noder röstar för tillrÀckligt olika pÄstÄenden, och ingen nominering kan nÄ antagningsgrÀnsen. DÀrför, förutom att sÀnda sina egna nomineringar, "Äterspeglar" noder nomineringar frÄn sina grannar. à terspegling (echo) betyder att om en nod röstar för nomineringen V, men ser ett meddelande frÄn en granne som röstade för nomineringen W, sÄ kommer den nu att rösta för bÄde nomineringen V och W. (Inte alla röster frÄn grannar Äterspeglas under nomineringen, eftersom detta kan leda till en explosion av olika kandidater. SCP inkluderar en mekanism för att reglera dessa röster. Kort sagt, det finns en formel för att bestÀmma "prioriteten" för en granne ur nodens perspektiv, och rösterna frÄn endast högt prioriterade noder Äterspeglas. Ju lÀngre nomineringen pÄgÄr, desto lÀgre blir tröskeln, sÄ noden utvidgar uppsÀttningen grannar vars röster den kommer att Äterspegla. I prioriteringsformeln ingÄr slotnumret som en av indata, sÄ en högt prioriterad grannnod för en slot kan vara lÄgt prioriterad för en annan, och vice versa).
Konceptuellt Àr det att föreslÄ bÄde V och W parallellt separata federativa röster, dÀr varje röst förmÄnsar att nÄ ett antagande eller godkÀnnande. I praktiken packar SCP-protokollets meddelanden dessa separata röster tillsammans.
Ăven om röstandet för att föreslĂ„ V Ă€r ett löfte att aldrig rösta emot förslaget V, definieras vad "emot" betyder pĂ„ applikationsnivĂ„ - i det hĂ€r fallet SCP. SCP ser inget pĂ„stĂ„ende som motsĂ€ger röstningen "Jag föreslĂ„r X", det vill sĂ€ga det finns inget meddelande "Jag Ă€r emot att föreslĂ„ X", sĂ„ noden kan rösta för att föreslĂ„ valfria vĂ€rden. MĂ„nga av dessa nomineringar leder ingenstans, men i slutĂ€ndan kan noden acceptera eller bekrĂ€fta ett eller flera vĂ€rden. NĂ€r en nominerad har bekrĂ€ftats, blir den en kandidat.

FöreslÄ SCP med federativ röstning. Det kan finnas mÄnga vÀrden "B" föreslagna av jÀmlika noder och "Äterspeglade" av en nod.
Föreslagna kandidater kan leda till att flera bekrÀftade kandidater framtrÀder. DÀrför krÀver SCP att applikationsnivÄn tillhandahÄller nÄgon metod för att kombinera kandidater till en komposit (composite). Kombinationmetoden kan vara vilken som helst. Det viktigaste Àr att om denna metod Àr deterministisk, sÄ kommer varje nod att kombinera samma kandidater. I en lunchröstningssystem kan "kombination" helt enkelt innebÀra att man avstÄr frÄn en av de tvÄ kandidaterna. (Men pÄ ett deterministiskt sÀtt: varje nod mÄste vÀlja samma vÀrde för att avbryta. Till exempel, en tidigare val i alfabetisk ordning). I Stellar betalningsnÀtverket, dÀr röstandet om transaktionshistorik Àger rum, innebÀr en sammanslagning av tvÄ föreslagna nomineringar en kombination av de transaktioner de innehÄller och de senaste av deras tvÄ tidsstÀmplar.
Den tekniska beskrivningen av SCP bevisar (teorem 12), att vid slutet av föreslagningsfasen konvergerar nÀtverket slutligen till en komposit. Men det finns ett problem: federativ röstning Àr ett asynkront protokoll (precis som SCP). Med andra ord koordineras inte noderna tidsmÀssigt, utan bara genom de meddelanden de skickar. FrÄn nodens synvinkel Àr det oklart nÀr det avslutades utdragningsfas. Och Àven om alla noder i slutÀndan kommer att nÄ samma sammansÀttning, kan de vÀlja olika vÀgar pÄ denna vÀg och skapa olika sammanslagna kandidater lÀngs vÀgen, och de kan aldrig sÀga vilken av dem som Àr den definitiva.
Men det Àr okej. Utdragning Àr bara förberedelse. Det viktigaste Àr att begrÀnsa antalet kandidater för att nÄ konsensus, vilket sker under processen röstning (balloting).
Röstning
En röst Àr ett par , dÀr counter Àr ett heltal som börjar pÄ 1 och value Àr en kandidat frÄn steg för utdragning. Det kan vara nodens egen kandidat eller en kandidat frÄn en granndnod som denna nod har accepterat. Grovt sett görs flera försök under röstningen för att fÄ nÀtverket att nÄ konsensus om en kandidat i en viss röstning genom att genomföra potentiellt mÄnga federerade valomröstningar om röstningsutlÄtanden. RÀknare i röstningar spÄrar gjorda försök, och röstningar med högre rÀknare har företrÀde framför röstningar med lÀgre rÀknare. Om rösten fastnar, pÄbörjas en ny omröstning, nu pÄ rösten .
Det Àr viktigt att sÀrskilja vÀrden (till exempel vad bestÀllning av lunch ska vara: pizza eller sallad), röster (par counter-value) och uttalandena om röster. SCP-omgÄngen omfattar flera omgÄngar av federationröstning, sÀrskilt om sÄdana uttalanden:
- «Jag Àr redo att bekrÀfta röstning B» och
- «Jag deklarerar bekrÀftelse av röstning B»
Ur denna nodes perspektiv uppnÄs konsensus nÀr den hittar rösten B, för vilken den kan bekrÀfta (det vill sÀga hitta en kvorum som accepterar) uttalandet «Jag deklarerar bekrÀftelse av röstning B». FrÄn den punkten kan man sÀkert agera pÄ vÀrdet angivet i B - till exempel, göra denna lunchbestÀllning. Detta kallas externalisering av vÀrdet. NÀr bekrÀftelse om godkÀnnande av rösten har bekrÀftats kan noden vara sÀker pÄ att vilken annan nod som helst har genomfört externaliseringen av samma vÀrde eller kommer att göra det i framtiden.
Ăven om konceptuellt mĂ„nga federativa omröstningar genomförs baserat pĂ„ utsagor om olika röstberĂ€ttiganden, utbyter de inte sĂ„ mĂ„nga meddelanden, eftersom varje meddelande inkapslar ett antal röstberĂ€ttiganden. Ett meddelande frĂ€mjar sĂ„ledes tillstĂ„ndet för mĂ„nga federativa omröstningar samtidigt, till exempel: "Jag accepterar röstberĂ€ttiganden i intervallet frĂ„n till ."
Vad betyder termerna "förberedd" (prepared) och "kommitté" (commit)?
Noden röstar för att godkĂ€nna röstberĂ€ttigandet nĂ€r den Ă€r övertygad om att andra noder inte kommer att godkĂ€nna röstberĂ€ttiganden med andra vĂ€rden. Ăvertygelsen om detta Ă€r mĂ„let med att förbereda statementet. En omröstning som sĂ€ger: "Jag Ă€r redo att godkĂ€nna röstberĂ€ttigandet B" Ă€r ett löfte om att aldrig godkĂ€nna ett röstberĂ€ttigande med ett vĂ€rde mindre Ă€n B, dvs. med en lĂ€gre rĂ€knare (SCP krĂ€ver att vĂ€rdena i röstberĂ€ttigandena har en bestĂ€md ordning. DĂ€rför Ă€r röstberĂ€ttigandet mindre Ă€n om N1<N2, och Ă€ven om N1=N2 och V1<V2). Dessa mindre röstberĂ€ttiganden "avbryts" (aborted) under den förberedande omröstningen, medan B anses vara "förberedd".
Varför betyder "Jag Àr redo att godkÀnna röstberÀttigandet B" "Jag lovar att aldrig tillÄta godkÀnnande av röstberÀttiganden mindre Àn B"? För att SCP definierar abort som motsatsen till commit. En omröstning för att förbereda röstberÀttigandet innebÀr ocksÄ en omröstning för att avbryta vissa andra röstberÀttiganden, och som vi diskuterade tidigare, att rösta för nÄgot innebÀr ett löfte att aldrig rösta emot det.
Innan noden kan sÀnda en godkÀnnandeaktion mÄste den först hitta ett röstberÀttigande som den kan bekrÀfta som förberett. Med andra ord, den genomför en federativ omröstning pÄ temat "Jag Àr redo att godkÀnna röstberÀttigandet B", möjligtvis för mÄnga olika röstberÀttiganden, tills den hittar ett som accepterar kvorum.
VarifrÄn kommer valsedlarna för röstningsförberedelser? Först sÀnder noden ut förberedelser för röstning för <1,C>, dÀr C Àr en kompositkandidat som producerades pÄ nomineringsteget. Men Àven efter att förberedelserna för röstningen har börjat kan nomineringen leda till nya kandidater som blir nya valsedlar. Under tiden kan deltagarna ha olika kandidater och de kan bilda en blockerande mÀngd som accepterar "Jag Àr redo att commit-a valsedel B2", vilket övertygar noden att ocksÄ acceptera den. Slutligen finns det en timeoutmekanism som genererar nya omgÄngar av federerad röstning pÄ nya valsedlar med högre rÀknare, om de aktuella valsedlarna har fastnat.
SĂ„ snart noden hittar valsedel B, som kan bekrĂ€ftas som förberedd, sĂ€nder den ut ett nytt meddelande "Commit av valsedel B". Denna röstning meddelar deltagarna att noden aldrig kommer att avstĂ„ frĂ„n B. Faktiskt, om B representerar valsedeln <N,C>, sĂ„ betyder "Commit av valsedel <N,C>" ovillkorligt samtycke att rösta för beredskapen för varje valsedel frĂ„n <N,C> till <â, s>. Detta extra vĂ€rde hjĂ€lper andra noder att hinna ikapp med deltagaren med commit, om de fortfarande Ă€r pĂ„ tidigare steg i protokollet.
Vid detta steg Àr det vÀrt att betona igen att detta Àr asynkrona protokoll. Bara för att en nod skickar röster för commit betyder det inte att dess kollegor ocksÄ gör det. Vissa av dem kan fortfarande rösta pÄ pÄstÄenden för röstningsförberedelser, medan andra kanske redan har externt vÀrderat betydelsen. SCP förklarar hur en nod ska hantera varje typ av peer-to-peer-meddelande oavsett dess fas.
Om meddelandet "Jag meddelar kommittĂ©n <N,C>" inte kan accepteras eller bekrĂ€ftas, finns det en möjlighet att meddelandet <N+1, C> eller <N+2, C> accepteras eller bekrĂ€ftas â eller, i alla fall, vilket som helst meddelande med vĂ€rdet C, och inte nĂ„got annat, eftersom noden redan har lovat att aldrig avbryta <N,C>. Vid den tidpunkt dĂ„ noden sĂ€nder röster för kommittĂ©n, kommer det att vara C eller ingenting, beroende pĂ„ hur lĂ„ngt konsensus gĂ„r. Men detta Ă€r inte tillrĂ€ckligt för noden att externt bekrĂ€fta C. Vissa byzantinska pizzer (som utgör mindre Ă€n quorum, baserat pĂ„ vĂ„ra antaganden om sĂ€kerhet) kan ljuga för noden. Att acceptera och sedan bekrĂ€fta ett visst meddelande (eller en rad meddelanden) â det Ă€r vad som ger noden förtroende för slutligen att externalisera C.

Röstning av SCP genom federativ röstning. Ej visat: nÀr som helst kan en timer aktiveras, vilket ökar rÀknaren i omröstningen (och eventuellt skapa en ny sammansÀttning av ytterligare föreslagna kandidater).
Och det Àr allt! SÄ snart nÀtverket har nÄtt konsensus Àr det redo att göra det igen och igen. I Stellar betalningsnÀtverket sker detta ungefÀr var 5:e sekund: en prestation som krÀver bÄde sÀkerhet och livskraft, garanterad av SCP.
SCP kan uppnÄ detta genom att förlita sig pÄ flera omgÄngar av federativ röstning. Federativ röstning blev möjlig genom konceptet av quorum-skikt: uppsÀttningar av likaberÀttigade noder som varje nod har beslutat att lita pÄ som en del av sin (subjektiva) quorum. Denna konfiguration innebÀr att man kan nÄ konsensus Àven i ett öppet medlemsnÀtverk med byzantinska bedrÀgerier.
Vidare lÀsning
- Det ursprungliga tekniska dokumentet för SCP kan hittas , och specifikationsprojektet för dess implementering.
- Den ursprungliga författaren av SCP-protokollet, David Mazieres, förklarar det förenklat (men ÀndÄ tekniskt) .
- Du har kanske blivit förvÄnad över att inte hitta termerna "gruvdrift" eller "arbetsbevis" i denna artikel. SCP anvÀnder inte dessa metoder, men vissa andra konsensusalgoritmer gör. Zayne Witherspoon har skrivit en tillgÀnglig .
- en enkel nÀtverksmodell som nÄr konsensus under en fullstÀndig runda av SCP.
- För lÀsare som Àr intresserade av implementationer av SCP: se. , som anvÀnds av betalningsnÀtverket Stellar, eller , som jag skrev för att bÀttre förstÄ SCP.
KĂ€lla: habr.com
