{"id":30047,"date":"2019-10-31T21:33:25","date_gmt":"2019-10-31T18:33:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\/"},"modified":"2019-10-31T21:33:25","modified_gmt":"2019-10-31T18:33:25","slug":"razbiraemsya-v-protokole-konsensusa-stellar","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Utforskar Stellar-konsensusprotokollet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStellar-konsensusprotokollet beskrevs f\u00f6rst av <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">en vetenskaplig artikel<\/a><\/noindex> David Mazieres 2015. Det \u00e4r ett \"federativt system f\u00f6r bysantinsk \u00f6verenskommelse\" som g\u00f6r det m\u00f6jligt f\u00f6r decentraliserade datan\u00e4tverk utan ledare att effektivt n\u00e5 enighet om en viss l\u00f6sning. Betalningsn\u00e4tverket Stellar anv\u00e4nder Stellar Consensus Protocol (SCP) f\u00f6r att h\u00e5lla en samst\u00e4mmig transaktionshistorik som alla deltagare ser.<\/p>\n<p>Det anses att konsensusprotokoll \u00e4r sv\u00e5ra att f\u00f6rst\u00e5. SCP \u00e4r enklare \u00e4n de flesta av dem men delar \u00e4nd\u00e5 detta rykte \u2013 delvis p\u00e5 grund av den felaktiga id\u00e9n att \"federativ omr\u00f6stning\", som den f\u00f6rsta delen av den vetenskapliga artikeln \u00e4gnar sig \u00e5t, \u00e4r SCP. Men s\u00e5 \u00e4r det inte! Det \u00e4r bara en viktig byggsten som i den andra delen av artikeln anv\u00e4nds f\u00f6r att skapa <i>det faktiska<\/i> Stellar konsensusprotokollet.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nI denna artikel kommer vi kortfattat att f\u00f6rklara vad ett \"\u00f6verenkommelse-system\" \u00e4r, vad som kan g\u00f6ra det \"bysantinskt\" och varf\u00f6r man b\u00f6r g\u00f6ra ett bysantinskt system \"federativt\". Vi kommer sedan att f\u00f6rklara den federativa omr\u00f6stningsproceduren som beskrivs i artikeln om SCP och slutligen f\u00f6rklara sj\u00e4lva SCP-protokollet.<\/p>\n<h1>\u00d6verenskommelse-system<\/h1>\n<p>\nEtt \u00f6verenskommelse-system g\u00f6r det m\u00f6jligt f\u00f6r en grupp deltagare att enas om ett visst \u00e4mne, till exempel vad man ska best\u00e4lla till lunch.<\/p>\n<p>Vi p\u00e5 Interstellar har implementerat v\u00e5rt eget system f\u00f6r lunch\u00f6verenskommelse: vi best\u00e4ller det som v\u00e5r operativa chef John s\u00e4ger. Det \u00e4r ett enkelt och effektivt \u00f6verenskommelse-system. Vi litar alla p\u00e5 John och tror att han varje dag kommer att hitta n\u00e5got intressant och n\u00e4ringsrikt.<\/p>\n<p>Men vad h\u00e4nder om John missbrukar v\u00e5rt f\u00f6rtroende? Han kan ensidigt besluta att vi alla ska bli veganer. Inom en vecka eller tv\u00e5 kommer vi sannolikt att avs\u00e4tta honom och \u00f6verf\u00f6ra makten till Elizabeth. Men t\u00e4nk om hon \u00e4lskar avokado med ansjovis och tycker att alla borde bli s\u00e5dana. Makten korrumperar. D\u00e4rf\u00f6r \u00e4r det b\u00e4ttre att hitta n\u00e5gon mer demokratisk metod: n\u00e5got s\u00e4tt att se till att olika preferenser blir beaktade, samtidigt som en snabb och tydlig l\u00f6sning s\u00e4kerst\u00e4lls s\u00e5 att ingen best\u00e4ller lunch eller fem personer g\u00f6r olika best\u00e4llningar, eller att diskussionen drar ut p\u00e5 tiden till kv\u00e4llen.<\/p>\n<p>Det verkar vara en enkel l\u00f6sning: att h\u00e5lla en omr\u00f6stning! Men det \u00e4r en bedr\u00e4glig uppfattning. Vem ska samla in r\u00f6stsedlar och rapportera resultaten? Och varf\u00f6r ska de andra tro p\u00e5 vad han s\u00e4ger? Kanske kan vi <i>f\u00f6rst<\/i> r\u00f6sta p\u00e5 en ledare som vi litar p\u00e5 f\u00f6r att leda omr\u00f6stningen \u2013 men vem ska leda detta <i>f\u00f6rsta<\/i> omr\u00f6stning? Vad h\u00e4nder om vi inte kan enas om en ledare? Eller om vi enas, men den ledaren sitter fast i ett m\u00f6te eller blir sjuk?<\/p>\n<p>Liknande problem uppst\u00e5r i distribuerade datan\u00e4tverk. Alla deltagare eller noder m\u00e5ste enas om n\u00e5gon form av beslut, till exempel vems tur det \u00e4r att uppdatera en gemensam fil eller h\u00e4mta en uppgift fr\u00e5n en k\u00f6. I ett kryptovalutan\u00e4tverk m\u00e5ste noderna g\u00e5ng p\u00e5 g\u00e5ng v\u00e4lja hur den fullst\u00e4ndiga historien ser ut bland flera m\u00f6jliga versioner, som ibland konfliktar. Detta n\u00e4tverksbeslut garanterar f\u00f6r mottagaren att myntet \u00e4r (a) giltigt (inte falskt) och (b) \u00e4nnu inte anv\u00e4nt n\u00e5gon annanstans. Det garanterar ocks\u00e5 att han kan spendera mynten i framtiden, eftersom den nya mottagaren kommer att ha samma garantier av samma sk\u00e4l.<\/p>\n<p>Vilken som helst beslutssystem i ett distribuerat databehandlingsn\u00e4tverk m\u00e5ste vara felfritt: det ska ge konsekventa resultat trots fel som l\u00e5ngsamma kommunikationslinjer, icke-reagerande noder och felaktig ordning av meddelanden. <i>Byzantinska<\/i> \u00f6verenskommelser \u00e4r dessutom motst\u00e5ndskraftiga mot \"byzantinska\" fel: noder som ger felaktig information, antingen p\u00e5 grund av misstag eller i ett avsiktligt f\u00f6rs\u00f6k att undergr\u00e4va systemet eller f\u00e5 n\u00e5gon f\u00f6rdel. \"Byzantinsk\" felfrihet \u2013 f\u00f6rm\u00e5gan att lita p\u00e5 en gruppbeslut, \u00e4ven n\u00e4r vissa medlemmar i gruppen kan ljuga eller avvika fr\u00e5n beslutsreglerna \u2013 har f\u00e5tt sitt namn fr\u00e5n <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B2%D0%B8%D0%B7%D0%B0%D0%BD%D1%82%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">ber\u00e4ttelsen om generalerna i det Byzantinska imperiet<\/a><\/noindex>, som f\u00f6rs\u00f6kte koordinera en attack. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/coinmonks\/a-note-from-anthony-if-you-havent-already-please-read-the-article-gaining-clarity-on-key-787989107969\">Ett bra beskriving<\/a><\/noindex> av Anthony Stevens.<\/p>\n<p>L\u00e5t oss betrakta kryptovaluta\u00e4garen Alice, som m\u00e5ste v\u00e4lja mellan att k\u00f6pa god glass fr\u00e5n Bob eller betala sin skuld till Carol. Kanske vill Alice betala b\u00e5da samtidigt, genom att bedr\u00e4gligt spendera samma mynt. F\u00f6r att g\u00f6ra detta m\u00e5ste hon \u00f6vertyga Bobs dator om att myntet aldrig har betalats till Carol, och \u00f6vertyga Carols dator om att myntet aldrig har betalats till Bob. Det byzantinska konsensusprotokollet g\u00f6r detta i praktiken om\u00f6jligt, genom att anv\u00e4nda en form av majoritetsregel som kallas <i>kvorum<\/i>. En nod i ett s\u00e5dant n\u00e4tverk avst\u00e5r fr\u00e5n att g\u00e5 vidare till en specifik version av historien, tills den ser att ett tillr\u00e4ckligt antal j\u00e4mst\u00e4llda noder \u2013 kvorum \u2013 \u00e4r eniga om att g\u00f6ra s\u00e5. N\u00e4r detta intr\u00e4ffar kommer de att bilda en tillr\u00e4ckligt stor valblock f\u00f6r att tvinga de \u00e5terst\u00e5ende noderna i n\u00e4tverket att acceptera deras beslut. Alice kan f\u00e5 vissa noder att ljuga \u00e5 hennes v\u00e4gnar, men om n\u00e4tverket \u00e4r tillr\u00e4ckligt stort kommer hennes f\u00f6rs\u00f6k att kv\u00e4vas av r\u00f6sterna fr\u00e5n de \u00e4rliga noderna.<\/p>\n<p>Hur m\u00e5nga noder kr\u00e4vs f\u00f6r ett kvorum? \u00c5tminstone en majoritet, n\u00e4rmare best\u00e4mt en kvalificerad majoritet f\u00f6r att hantera fel och bedr\u00e4geri. Men f\u00f6r att r\u00e4kna ut majoriteten m\u00e5ste man veta det totala antalet deltagare. P\u00e5 kontoret Interstellar eller i distriktsval \u00e4r dessa siffror l\u00e4tta att ta reda p\u00e5. Men om din grupp \u00e4r ett svagt definierat n\u00e4tverk d\u00e4r noder kan g\u00e5 in och ut efter eget val utan samordning med en central myndighet, s\u00e5 kr\u00e4vs det en <i>federativ<\/i> byzantinsk konsensusprotokoll som kan fastst\u00e4lla kvorum inte fr\u00e5n en f\u00f6rutbest\u00e4md lista av noder, utan dynamiskt, fr\u00e5n en st\u00e4ndigt f\u00f6r\u00e4nderlig och ofr\u00e5nkomligt ofullst\u00e4ndig \u00f6gonblicksbild av noder vid ett visst tillf\u00e4lle.<\/p>\n<p>Det kan verka om\u00f6jligt att skapa ett kvorum ur ett sikt av en enda nod i ett stort n\u00e4tverk, men det \u00e4r m\u00f6jligt. Ett s\u00e5dant kvorum kan till och med garantera resultaten av decentraliserad r\u00f6stning. Ett tekniskt dokument, SCP, visar hur detta kan g\u00f6ras med en procedur som kallas <i>federerad r\u00f6stning<\/i>.<\/p>\n<h1>F\u00f6r de ot\u00e5liga<\/h1>\n<p>\nDen resterande delen av artikeln beskriver mer detaljerat den federerade r\u00f6stningen och Stellar-konsensusprotokollet. Om du inte \u00e4r intresserad av detaljerna, h\u00e4r \u00e4r en allm\u00e4n \u00f6versikt \u00f6ver processen.<\/p>\n<ol>\n<li>Noder genomf\u00f6r federala r\u00f6stningsrundor f\u00f6r 'nomineringarna'. En federativ r\u00f6stningsrunda inneb\u00e4r:\n<ul>\n<li>Noden r\u00f6star f\u00f6r ett p\u00e5st\u00e5ende, till exempel 'Jag f\u00f6resl\u00e5r v\u00e4rdet V';\n<\/li>\n<li>Noden lyssnar p\u00e5 r\u00f6ster fr\u00e5n deltagarna tills den hittar n\u00e5gon som kan 'acceptera';\n<\/li>\n<li>Noden letar efter ett 'kvorum' f\u00f6r detta p\u00e5st\u00e5ende. Kvorum 'bekr\u00e4ftar' nominanten.<\/li>\n<\/ul>\n<\/li>\n<li>N\u00e4r noden kan bekr\u00e4fta en eller flera kandidater f\u00f6rs\u00f6ker den att 'f\u00f6rbereda' en 'r\u00f6stsedel' genom flera rundor av federativ r\u00f6stning.\n<\/li>\n<li>N\u00e4r noden \u00e4r redo att kontrollera r\u00f6stsedelns beredskap f\u00f6rs\u00f6ker den att \u00e5ta sig den med hj\u00e4lp av ytterligare rundor av federativ r\u00f6stning.\n<\/li>\n<li>N\u00e4r noden kan bekr\u00e4fta engagemanget av r\u00f6stsedeln kan den 'exteralisera' v\u00e4rdet av denna r\u00f6stsedel, genom att anv\u00e4nda den som resultat av konsensus.<\/li>\n<\/ol>\n<p>\nDessa steg inkluderar flera rundor av federativ r\u00f6stning, som tillsammans utg\u00f6r en runda av SCP. L\u00e5t oss titta n\u00e4rmare p\u00e5 vad som h\u00e4nder i varje steg.<\/p>\n<h1>Federativ r\u00f6stning<\/h1>\n<p>\nFederativ r\u00f6stning \u00e4r en procedur f\u00f6r att fastst\u00e4lla om n\u00e4tverket kan enas om ett f\u00f6rslag. I r\u00f6stningsrundan m\u00e5ste varje nod v\u00e4lja ett av flera potentiellt m\u00f6jliga v\u00e4rden. Den kan inte g\u00f6ra detta f\u00f6rr\u00e4n den \u00e4r s\u00e4ker p\u00e5 att andra noder i n\u00e4tverket inte v\u00e4ljer ett annat resultat. F\u00f6r att vara s\u00e4kra p\u00e5 detta, utbyter noderna en str\u00f6m av meddelanden fram och tillbaka s\u00e5 att varje <i>av<\/i>, att <i>kvorum<\/i> noder <i>accepterar<\/i> samma <i>beslutet<\/i>. \u00d6vriga delar av detta avsnitt f\u00f6rklarar villkoren i detta p\u00e5st\u00e5ende och hur hela proceduren g\u00e5r till.<\/p>\n<h1>Kvorum och kvorumskivor<\/h1>\n<p>\nL\u00e5t oss b\u00f6rja med att definiera kvorum. Som vi diskuterade ovan, i ett decentraliserat n\u00e4tverk med dynamiskt medlemskap, \u00e4r det om\u00f6jligt att p\u00e5 f\u00f6rhand veta antalet noder och d\u00e4rmed hur m\u00e5nga som beh\u00f6vs f\u00f6r majoritet. Federativ r\u00f6stning l\u00f6ser detta problem genom att introducera en ny id\u00e9 <i>kvorumskiva<\/i> (quorum slice): en liten upps\u00e4ttning av likv\u00e4rdiga noder som noden litar p\u00e5 f\u00f6r att f\u00f6rmedla information om r\u00f6stningsstatus till den resterande delen av n\u00e4tverket. Varje nod definierar sin egen kvorumskiva (medlem i denna blir den faktiskt).<\/p>\n<p>Formandet av ett kvorum b\u00f6rjar med att sk\u00e4ra kvorum. F\u00f6r varje nod l\u00e4ggs noderna i dess snitt till. D\u00e4refter l\u00e4ggs medlemmarna i sk\u00e4rningen till. <i>dessa noder<\/i> och s\u00e5 vidare. Efterhand dyker fler noder upp som du inte kan l\u00e4gga till eftersom de redan ing\u00e5r i snittet. N\u00e4r det inte finns n\u00e5gra nya noder kvar att l\u00e4gga till, avslutas processen: vi har bildat ett kvorum genom \"transitiv st\u00e4ngning\" av det ursprungliga nodens kvorumssk\u00e4rning.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>F\u00f6r att hitta kvorum fr\u00e5n en given nod \u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 l\u00e4gger vi till medlemmarna i dess snitt \u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 sedan l\u00e4gger vi till medlemmarna i snitt av dessa noder.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vi forts\u00e4tter tills det inte finns n\u00e5gra fler noder att l\u00e4gga till.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Det finns inga fler noder att l\u00e4gga till. Detta \u00e4r ett kvorum.<\/i><\/p>\n<p>Egentligen kan varje nod ing\u00e5 i mer \u00e4n ett snitt. F\u00f6r att bilda ett kvorum, v\u00e4lj bara ett av snitten och l\u00e4gg till medlemmarna; v\u00e4lj sedan vilket snitt som helst f\u00f6r var och en av medlemmarna och l\u00e4gg till medlemmarna. <i>detta<\/i> snitt och s\u00e5 vidare. Det betyder att varje nod \u00e4r medlem i ett antal m\u00f6jliga kvorum.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>V\u00e4lj bara ett snitt av kvorum vid varje steg.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Ett m\u00f6jligt kvorum. Eller ett alternativ \u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 vi v\u00e4ljer andra snitt \u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(n\u00e4r det \u00e4r m\u00f6jligt)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 skapar ett annat kvorum.<\/i><\/p>\n<p>Hur f\u00e5r en nod veta i vilka snitt de andra noderna ing\u00e5r? P\u00e5 samma s\u00e4tt som annan information om andra noder: fr\u00e5n de s\u00e4ndningar som varje nod \u00f6verf\u00f6r i n\u00e4tverket n\u00e4r dess r\u00f6stningsstatus \u00e4ndras. Varje s\u00e4ndning inneh\u00e5ller information om snitt av den s\u00e4ndande noden. Den tekniska dokumentationen SCP specificerar inte kommunikationsmekanismen. Implementationer anv\u00e4nder vanligtvis <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip-protokollet<\/a><\/noindex> f\u00f6r garanterad \u00f6verf\u00f6ring av meddelanden \u00f6ver hela n\u00e4tverket.<\/p>\n<p>Vi p\u00e5minner om att i det icke-federativa bysantinska konsensus-systemet definieras kvorum som en majoritet av alla noder. Det bysantinska konsensus-systemet \u00e4r utformat med fr\u00e5gan i \u00e5tanke: hur m\u00e5nga ohederliga noder kan systemet tolerera? I ett system med N noder, som \u00e4r konstruerat f\u00f6r att \u00f6verleva vid f misslyckanden (bedr\u00e4gerier), m\u00e5ste en nod kunna uppn\u00e5 framsteg genom att f\u00e5 svar fr\u00e5n N\u2212f peers, eftersom f av dem kanske inte fungerar. Men efter att ha f\u00e5tt svar fr\u00e5n N\u2212f peers, kan man anta att alla f peers (fr\u00e5n vilka noden inte fick svar) faktiskt \u00e4r \u00e4rliga. S\u00e5ledes \u00e4r f av N\u2212f peers (fr\u00e5n vilka svar har mottagits) skadliga. F\u00f6r att noder ska n\u00e5 ett gemensamt konsensus, m\u00e5ste en majoritet av de \u00e5terst\u00e5ende noderna vara \u00e4rliga, vilket inneb\u00e4r att vi beh\u00f6ver att N\u2212f \u00e4r st\u00f6rre \u00e4n 2f eller N &gt; 3f. S\u00e5ledes kommer ett system som \u00e4r designat f\u00f6r att \u00f6verleva vid f misslyckanden vanligtvis att ha totalt N=3f+1 noder och en kvorumstorlek p\u00e5 2f+1. N\u00e4r ett f\u00f6rslag passerar kvorumtr\u00f6skeln \u00f6vertygas de \u00f6vriga medlemmarna i n\u00e4tverket om att alla konkurrerande f\u00f6rslag kommer att misslyckas. S\u00e5 n\u00e4tverket konvergerar mot resultatet.<\/p>\n<p>Men i det federativa bysantinska konsensus-systemet kan det inte bara finnas n\u00e5gon majoritet (eftersom ingen vet den totala storleken p\u00e5 n\u00e4tverket), utan vuxf\u00e4rsen av majoritet \u00e4r helt v\u00e4rdel\u00f6s! Om medlemskap i systemet \u00e4r \u00f6ppet, s\u00e5 kan n\u00e5gon f\u00e5 en majoritet bara genom att genomf\u00f6ra en s\u00e5 kallad Sybil-attack: genom att upprepade g\u00e5nger g\u00e5 med i n\u00e4tverket via flera noder. S\u00e5 varf\u00f6r kan det transitiva st\u00e4ngandet av sk\u00e4rningen kallas <i>kvorum<\/i>, och hur kan det undertrycka konkurrerande f\u00f6rslag?<\/p>\n<p>Tekniskt sett, p\u00e5 inget s\u00e4tt! F\u00f6rest\u00e4ll dig ett n\u00e4tverk av sex noder, d\u00e4r tv\u00e5 grupper av tre \u00e4r isolerade i varandras kvorumsk\u00e4rningar. Den f\u00f6rsta undergruppen kan fatta ett beslut som den andra aldrig kommer att h\u00f6ra talas om, och vice versa. F\u00f6r detta n\u00e4tverk finns det inget s\u00e4tt att uppn\u00e5 konsensus (f\u00f6rutom av en tillf\u00e4llighet).<\/p>\n<p>D\u00e4rf\u00f6r kr\u00e4ver SCP att f\u00f6r federativ r\u00f6stning (och f\u00f6r att till\u00e4mpa viktiga teoremer i artikeln) m\u00e5ste n\u00e4tverket ha en egenskap som kallas <i>sk\u00e4rning av kvorum<\/i>. I n\u00e4tverk med den h\u00e4r egenskapen \u00f6verlappar alltid tv\u00e5 quorum som kan byggas \u00f6ver minst en nod. F\u00f6r att avg\u00f6ra det dominerande sentimentet i n\u00e4tverket \u00e4r detta lika bra som att ha majoriteten. Intuitivt betyder det att om n\u00e5got quorum h\u00e5ller med om p\u00e5st\u00e5ende X, s\u00e5 kan inget annat quorum n\u00e5gonsin h\u00e5lla med om n\u00e5got annat, eftersom det n\u00f6dv\u00e4ndigtvis kommer att inkludera en nod fr\u00e5n det f\u00f6rsta quorum som redan har r\u00f6stat f\u00f6r X.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Om det finns \u00f6verlappningar mellan quorum i n\u00e4tverket\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026d\u00e5 kommer varje tv\u00e5 quorum som du kan bygga\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026alltid att \u00f6verlappa.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Naturligtvis kan \u00f6verlappande noder visa sig vara byzantinskt bedr\u00e4gliga eller d\u00e5liga p\u00e5 andra s\u00e4tt. I s\u00e5 fall hj\u00e4lper \u00f6verlappningen mellan quorum inte n\u00e4tverket att enas \u00f6verhuvudtaget. Av denna anledning baseras m\u00e5nga resultat i den tekniska SCP-dokumentationen p\u00e5 tydligt uttalade antaganden, som att det finns kvar \u00f6verlappande quorum i n\u00e4tverket <i>\u00e4ven efter borttagning av d\u00e5liga noder<\/i>. F\u00f6r enkelhetens skull l\u00e5ter vi dessa antaganden <i>vara underf\u00f6rst\u00e5dda<\/i> under resten av artikeln).<\/p>\n<p>Det kan verka orimligt att f\u00f6rv\u00e4nta sig att det ska finnas p\u00e5litlig \u00f6verlappning mellan quorum i ett n\u00e4tverk av oberoende noder. Men det finns tv\u00e5 sk\u00e4l till varf\u00f6r det \u00e4r s\u00e5.<\/p>\n<p>Det f\u00f6rsta sk\u00e4let \u00e4r existensen av sj\u00e4lva internet. Internet \u00e4r ett perfekt exempel p\u00e5 ett n\u00e4tverk av oberoende noder med \u00f6verlappande quorum. De flesta noder i internet kopplas endast till n\u00e5gra f\u00e5 andra lokala noder, men dessa sm\u00e5 m\u00e4ngder \u00f6verlappar tillr\u00e4ckligt f\u00f6r att varje nod ska vara tillg\u00e4nglig fr\u00e5n varje annan nod via en eller annan rutt.<\/p>\n<p>Den andra anledningen \u00e4r specifik f\u00f6r betalningsn\u00e4tverket Stellar (den mest utbredda anv\u00e4ndningen av SCP). Varje tillg\u00e5ng i Stellar-n\u00e4tverket har en utf\u00e4rdare, och Stellar-rekommendationerna kr\u00e4ver att varje utf\u00e4rdare utser en eller flera noder i n\u00e4tverket f\u00f6r att hantera inl\u00f6senf\u00f6rfr\u00e5gningar. Det ligger i ditt intresse att direkt eller indirekt inkludera dessa noder i kvorumskurvorna f\u00f6r varje tillg\u00e5ng som intresserar dig. D\u00e5 kommer kvorum f\u00f6r alla noder som \u00e4r intresserade av den aktuella tillg\u00e5ngen att \u00f6verlappa sig \u00e5tminstone i dessa inl\u00f6sennoder. Noder som \u00e4r intresserade av flera tillg\u00e5ngar kommer att inkludera i sina kvorumskurvor alla inl\u00f6sennoder f\u00f6r de aktuella utf\u00e4rdarna, och de kommer att str\u00e4va efter att centralisera alla tillg\u00e5ngar. Dessutom, alla tillg\u00e5ngar som inte \u00e4r kopplade p\u00e5 det s\u00e4ttet till andra i n\u00e4tverket, <i>ska inte vara kopplade<\/i> \u2014 det \u00e4r utformat s\u00e5 att det inte finns n\u00e5got \u00f6verlapp mellan kvorum i detta n\u00e4tverk (till exempel vill banker i dollarzonen ibland handla med banker i eurozonen och banker i pesozonen, s\u00e5 de \u00e4r i ett och samma n\u00e4tverk, men ingen av dem bryr sig om ett separat n\u00e4tverk av barn som handlar med baseballkort).<\/p>\n<p>Sj\u00e4lvklart, <i>\u00e4r f\u00f6rv\u00e4ntningen<\/i> av \u00f6verlappande kvorum inte <i>en garanti<\/i>. Andra byzantinska konsensussystem har mycket att tacka sin komplexitet f\u00f6r att s\u00e4kerst\u00e4lla kvorum. En viktig innovation med SCP \u00e4r att det avl\u00e4gsnar ansvaret f\u00f6r att skapa kvorum fr\u00e4n konsensusalgoritmen och flyttar det till applikationsniv\u00e5n. S\u00e5ledes, \u00e4ven om federativ r\u00f6stning \u00e4r ganska allm\u00e4n f\u00f6r r\u00f6stning i vilka fr\u00e5gor som helst, beror dess tillf\u00f6rlitlighet i verkligheten kritiskt p\u00e5 en bredare f\u00f6rst\u00e5else av dessa v\u00e4rden. Vissa hypotetiska anv\u00e4ndningsomr\u00e5den kan visa sig vara mindre bekv\u00e4ma f\u00f6r att skapa v\u00e4l sammanl\u00e4nkade n\u00e4tverk \u00e4n andra.<\/p>\n<h1>R\u00f6stning, antagande och bekr\u00e4ftelse<\/h1>\n<p>\nI rundan av federativ r\u00f6stning b\u00f6rjar en nod valfritt att r\u00f6sta f\u00f6r ett visst v\u00e4rde V. Detta inneb\u00e4r att s\u00e4nda ett meddelande i n\u00e4tverket: \"Jag \u00e4r nod N, mina kvorumskurvor Q, och jag r\u00f6star f\u00f6r V\". N\u00e4r en nod r\u00f6star p\u00e5 detta s\u00e4tt lovar den att den aldrig har r\u00f6stat emot V och aldrig kommer att g\u00f6ra det.<\/p>\n<p>I s\u00e4ndningar fr\u00e5n peer-noder ser varje nod hur andra r\u00f6star. S\u00e5 snart en nod samlar tillr\u00e4ckligt med s\u00e5dana meddelanden kan den sp\u00e5ra urval av kvorum och f\u00f6rs\u00f6ka hitta kvorum. Om den ser ett kvorum av peers som ocks\u00e5 r\u00f6star f\u00f6r V kan den g\u00e5 vidare till <i>antagande<\/i> av V och s\u00e4nda detta nya meddelande till n\u00e4tverket: \"Jag \u00e4r nod N, mina kvorumskivor Q, och jag accepterar V\". Antagande ger en starkare garanti \u00e4n enkel r\u00f6stning. N\u00e4r en nod r\u00f6star f\u00f6r V kan den aldrig r\u00f6sta f\u00f6r andra alternativ. Men om en nod accepterar V, kommer ingen nod i n\u00e4tverket n\u00e5gonsin att acceptera ett annat alternativ (teorem 8 i det tekniska dokumentet SCP bevisar detta).<\/p>\n<p>Sj\u00e4lvklart \u00e4r chansen h\u00f6g att det inte omedelbart kommer att finnas ett kvorum av noder som h\u00e5ller med V. Andra noder kan r\u00f6sta f\u00f6r andra v\u00e4rden. Men f\u00f6r noden finns det ocks\u00e5 ett annat s\u00e4tt att g\u00e5 fr\u00e5n enkel r\u00f6stning till antagande. N kan acceptera ett annat v\u00e4rde W, \u00e4ven om den inte har r\u00f6stat f\u00f6r det, och \u00e4ven om den inte ser n\u00e5got kvorum f\u00f6r det. F\u00f6r att \u00e4ndra sin r\u00f6st r\u00e4cker det med att se <i>ett blockerande m\u00e4ngd<\/i> noder som har antagit W. Det blockerande m\u00e4ngden \u00e4r en nod fr\u00e5n varje urval av kvorum N. Som namnet antyder \u00e4r det kapabelt att <i>blockera<\/i> alla andra v\u00e4rden. Om alla noder i en s\u00e5dan m\u00e4ngd accepterar W, kommer det (enligt teorem 8) aldrig att kunna bildas ett kvorum som accepterar ett annat v\u00e4rde, och d\u00e4rf\u00f6r \u00e4r det ocks\u00e5 s\u00e4kert f\u00f6r N att acceptera W.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nod N med tre kvorumskivor.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F \u00e4r ett blockerande m\u00e4ngd f\u00f6r N: det inkluderar en nod fr\u00e5n varje urval av N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E \u00e4r ocks\u00e5 ett blockerande m\u00e4ngd f\u00f6r N, eftersom E f\u00f6rekommer i tv\u00e5 urval av N.<\/i><\/p>\n<p>Men det blockerande m\u00e4ngden \u00e4r inte ett kvorum. Det skulle vara f\u00f6r l\u00e4tt att lura nod N att acceptera r\u00e4tt v\u00e4rde om det r\u00e4ckte med att hacka en nod i varje urval av N. S\u00e5 att acceptera ett v\u00e4rde \u00e4r \u00e4nnu inte slutet p\u00e5 r\u00f6stningen. Ist\u00e4llet m\u00e5ste N bekr\u00e4fta v\u00e4rdet, det vill s\u00e4ga se ett kvorum av noder som accepterar det. Om den n\u00e5r s\u00e5 l\u00e5ngt, bevisar det tekniska dokumentet SCP (i teorem 11), att resten av n\u00e4tverket ocks\u00e5 slutligen kommer att bekr\u00e4fta samma v\u00e4rde, s\u00e5 N avslutar den federativa r\u00f6stningen med ett visst v\u00e4rde som resultat.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Federativ r\u00f6stning.<\/i><\/p>\n<p>R\u00f6stningsprocessen, beslutet och bekr\u00e4ftelsen utg\u00f6r en fullst\u00e4ndig runda av federativ r\u00f6stning. Stellar-konsensusprotokollet samlar flera s\u00e5dana rundor f\u00f6r att skapa ett fullst\u00e4ndigt konsensus-system.<\/p>\n<h1>Stellar-konsensusprotokollet<\/h1>\n<p>\nTv\u00e5 av de mest viktiga egenskaperna hos ett konsensus-system \u00e4r <i>s\u00e4kerhet<\/i> och <i>resilience<\/i>. En konsensus-algoritm \u00e4r \"s\u00e4ker\" om den aldrig kan ge olika resultat till olika deltagare (Bobs historik kommer aldrig att mots\u00e4ga Carols). \"Resilience\" inneb\u00e4r att algoritmen alltid ger ett resultat, det vill s\u00e4ga den fastnar aldrig.<\/p>\n<p>Den beskrivna proceduren f\u00f6r federativ r\u00f6stning <i>\u00e4r s\u00e4ker<\/i> i den meningen att om en nod bekr\u00e4ftar v\u00e4rdet V, s\u00e5 kommer ingen annan nod att bekr\u00e4fta ett annat v\u00e4rde. Men \"inte bekr\u00e4fta ett annat v\u00e4rde\" inneb\u00e4r inte att den n\u00f6dv\u00e4ndigtvis bekr\u00e4ftar n\u00e5got. Deltagarna kan r\u00f6sta f\u00f6r s\u00e5 m\u00e5nga olika v\u00e4rden att inget n\u00e5r tr\u00f6skeln f\u00f6r godk\u00e4nnande. Detta inneb\u00e4r att det i den federativa r\u00f6stningen saknas <i>resilience<\/i>.<\/p>\n<p>Stellar-konsensusprotokollet anv\u00e4nder federativ r\u00f6stning p\u00e5 ett s\u00e4tt som garanterar b\u00e5de s\u00e4kerhet och resilience. (S\u00e4kerhets- och resilientgarantierna i SCP har en teoretisk gr\u00e4ns. Konstruktionen v\u00e4ljer en mycket stark s\u00e4kerhetsgaranti, men offrar en liten del av resilienten, men med tillr\u00e4cklig tid kommer konsensus med h\u00f6g sannolikhet att uppn\u00e5s). Sammanfattningsvis handlar id\u00e9n om att genomf\u00f6ra flera federativa r\u00f6stningar om flera v\u00e4rden, tills ett av dem passerar genom alla faser av SCP-r\u00f6stning som beskrivs nedan.<\/p>\n<p>De v\u00e4rden som SCP str\u00e4var efter att n\u00e5 konsensus om kan vara historik av transaktioner eller en lunchbest\u00e4llning, eller n\u00e5got annat, men det \u00e4r viktigt att notera att detta inte \u00e4r de v\u00e4rden som antas eller bekr\u00e4ftas. Ist\u00e4llet sker den federativa r\u00f6stningen om <i>p\u00e5st\u00e5enden om dessa v\u00e4rden<\/i>.<\/p>\n<p>De f\u00f6rsta rundorna av den federativa r\u00f6stningen \u00e4ger rum i <i>nomineringen<\/i> (nomineringens fas), p\u00e5 en upps\u00e4ttning p\u00e5st\u00e5enden som \"Jag nominerar V\", m\u00f6jligtvis f\u00f6r m\u00e5nga olika v\u00e4rden V. M\u00e5let med nomineringen \u00e4r att hitta ett eller flera p\u00e5st\u00e5enden som g\u00e5r igenom godk\u00e4nnande och bekr\u00e4ftelse.<\/p>\n<p>Efter att ha funnit bekr\u00e4ftade kandidater g\u00e5r SCP vidare till r\u00f6stningssteget, d\u00e4r m\u00e5let \u00e4r att hitta n\u00e5gon <i>r\u00f6stsedel<\/i> (det vill s\u00e4ga en beh\u00e5llare f\u00f6r det f\u00f6reslagna v\u00e4rdet) och en kvorum som kan deklarera <i>commit<\/i> f\u00f6r det (commit). Om kvorum fattar beslut om r\u00f6stsedeln, accepterar dess v\u00e4rde som konsensus. Men innan en nod kan r\u00f6sta f\u00f6r att godk\u00e4nna r\u00f6stsedeln, m\u00e5ste den f\u00f6rst bekr\u00e4fta <i>annullering<\/i> av alla r\u00f6stsedlar med ett l\u00e4gre r\u00e4knarv\u00e4rde. Dessa steg \u2013 annullering av r\u00f6stsedlar f\u00f6r att hitta den som kan bekr\u00e4fta commit \u2013 inkluderar flera rundor av federativ r\u00f6stning om flera p\u00e5st\u00e5enden om r\u00f6stsedlar.<\/p>\n<p>I de f\u00f6ljande avsnitten beskrivs nominering och r\u00f6stning i detalj.<\/p>\n<h1>Nominering<\/h1>\n<p>\nI b\u00f6rjan av nomineringssteget kan varje nod spontant v\u00e4lja v\u00e4rdet V och r\u00f6sta f\u00f6r p\u00e5st\u00e5endet \"Jag nominerar V\". M\u00e5let i detta steg \u00e4r att bekr\u00e4fta nomineringen av n\u00e5got v\u00e4rde genom federativ r\u00f6stning.<\/p>\n<p>Det kan h\u00e4nda att tillr\u00e4ckligt m\u00e5nga noder r\u00f6star f\u00f6r tillr\u00e4ckligt olika p\u00e5st\u00e5enden, och ingen nominering kan n\u00e5 antagningsgr\u00e4nsen. D\u00e4rf\u00f6r, f\u00f6rutom att s\u00e4nda sina egna nomineringar, \"\u00e5terspeglar\" noder nomineringar fr\u00e5n sina grannar. \u00c5terspegling (echo) betyder att om en nod r\u00f6star f\u00f6r nomineringen V, men ser ett meddelande fr\u00e5n en granne som r\u00f6stade f\u00f6r nomineringen W, s\u00e5 kommer den nu att r\u00f6sta f\u00f6r b\u00e5de nomineringen V och W. (Inte alla r\u00f6ster fr\u00e5n grannar \u00e5terspeglas under nomineringen, eftersom detta kan leda till en explosion av olika kandidater. SCP inkluderar en mekanism f\u00f6r att reglera dessa r\u00f6ster. Kort sagt, det finns en formel f\u00f6r att best\u00e4mma \"prioriteten\" f\u00f6r en granne ur nodens perspektiv, och r\u00f6sterna fr\u00e5n endast h\u00f6gt prioriterade noder \u00e5terspeglas. Ju l\u00e4ngre nomineringen p\u00e5g\u00e5r, desto l\u00e4gre blir tr\u00f6skeln, s\u00e5 noden utvidgar upps\u00e4ttningen grannar vars r\u00f6ster den kommer att \u00e5terspegla. I prioriteringsformeln ing\u00e5r slotnumret som en av indata, s\u00e5 en h\u00f6gt prioriterad grannnod f\u00f6r en slot kan vara l\u00e5gt prioriterad f\u00f6r en annan, och vice versa).<\/p>\n<p>Konceptuellt \u00e4r det att f\u00f6resl\u00e5 b\u00e5de V och W parallellt separata federativa r\u00f6ster, d\u00e4r varje r\u00f6st f\u00f6rm\u00e5nsar att n\u00e5 ett antagande eller godk\u00e4nnande. I praktiken packar SCP-protokollets meddelanden dessa separata r\u00f6ster tillsammans.<\/p>\n<p>\u00c4ven om r\u00f6standet f\u00f6r att f\u00f6resl\u00e5 V \u00e4r ett l\u00f6fte att aldrig r\u00f6sta emot f\u00f6rslaget V, definieras vad \"emot\" betyder p\u00e5 applikationsniv\u00e5 - i det h\u00e4r fallet SCP. SCP ser inget p\u00e5st\u00e5ende som mots\u00e4ger r\u00f6stningen \"Jag f\u00f6resl\u00e5r X\", det vill s\u00e4ga det finns inget meddelande \"Jag \u00e4r emot att f\u00f6resl\u00e5 X\", s\u00e5 noden kan r\u00f6sta f\u00f6r att f\u00f6resl\u00e5 valfria v\u00e4rden. M\u00e5nga av dessa nomineringar leder ingenstans, men i slut\u00e4ndan kan noden acceptera eller bekr\u00e4fta ett eller flera v\u00e4rden. N\u00e4r en nominerad har bekr\u00e4ftats, blir den <i>en kandidat<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>F\u00f6resl\u00e5 SCP med federativ r\u00f6stning. Det kan finnas m\u00e5nga v\u00e4rden \"B\" f\u00f6reslagna av j\u00e4mlika noder och \"\u00e5terspeglade\" av en nod.<\/i> <\/p>\n<p>F\u00f6reslagna kandidater kan leda till att flera bekr\u00e4ftade kandidater framtr\u00e4der. D\u00e4rf\u00f6r kr\u00e4ver SCP att applikationsniv\u00e5n tillhandah\u00e5ller n\u00e5gon metod f\u00f6r att kombinera kandidater till en <i>komposit<\/i> (composite). Kombinationmetoden kan vara vilken som helst. Det viktigaste \u00e4r att om denna metod \u00e4r deterministisk, s\u00e5 kommer varje nod att kombinera samma kandidater. I en lunchr\u00f6stningssystem kan \"kombination\" helt enkelt inneb\u00e4ra att man avst\u00e5r fr\u00e5n en av de tv\u00e5 kandidaterna. (Men p\u00e5 ett deterministiskt s\u00e4tt: varje nod m\u00e5ste v\u00e4lja samma v\u00e4rde f\u00f6r att avbryta. Till exempel, en tidigare val i alfabetisk ordning). I Stellar betalningsn\u00e4tverket, d\u00e4r r\u00f6standet om transaktionshistorik \u00e4ger rum, inneb\u00e4r en sammanslagning av tv\u00e5 f\u00f6reslagna nomineringar en kombination av de transaktioner de inneh\u00e5ller och de senaste av deras tv\u00e5 tidsst\u00e4mplar.<\/p>\n<p>Den tekniska beskrivningen av SCP bevisar (teorem 12), att vid slutet av f\u00f6reslagningsfasen konvergerar n\u00e4tverket slutligen till en komposit. Men det finns ett problem: federativ r\u00f6stning \u00e4r ett asynkront protokoll (precis som SCP). Med andra ord koordineras inte noderna tidsm\u00e4ssigt, utan bara genom de meddelanden de skickar. Fr\u00e5n nodens synvinkel \u00e4r det oklart n\u00e4r <i>det avslutades<\/i> utdragningsfas. Och \u00e4ven om alla noder i slut\u00e4ndan kommer att n\u00e5 samma sammans\u00e4ttning, kan de v\u00e4lja olika v\u00e4gar p\u00e5 denna v\u00e4g och skapa olika sammanslagna kandidater l\u00e4ngs v\u00e4gen, och de kan aldrig s\u00e4ga vilken av dem som \u00e4r den definitiva.<\/p>\n<p>Men det \u00e4r okej. Utdragning \u00e4r bara f\u00f6rberedelse. Det viktigaste \u00e4r att begr\u00e4nsa antalet kandidater f\u00f6r att n\u00e5 konsensus, vilket sker under processen <i>r\u00f6stning<\/i> (balloting).<\/p>\n<h1>R\u00f6stning<\/h1>\n<p>\nEn r\u00f6st \u00e4r ett par , d\u00e4r counter \u00e4r ett heltal som b\u00f6rjar p\u00e5 1 och value \u00e4r en kandidat fr\u00e5n steg f\u00f6r utdragning. Det kan vara nodens egen kandidat eller en kandidat fr\u00e5n en granndnod som denna nod har accepterat. Grovt sett g\u00f6rs flera f\u00f6rs\u00f6k under r\u00f6stningen f\u00f6r att f\u00e5 n\u00e4tverket att n\u00e5 konsensus om en kandidat i en viss r\u00f6stning genom att genomf\u00f6ra potentiellt m\u00e5nga federerade valomr\u00f6stningar om r\u00f6stningsutl\u00e5tanden. R\u00e4knare i r\u00f6stningar sp\u00e5rar gjorda f\u00f6rs\u00f6k, och r\u00f6stningar med h\u00f6gre r\u00e4knare har f\u00f6retr\u00e4de framf\u00f6r r\u00f6stningar med l\u00e4gre r\u00e4knare. Om r\u00f6sten  fastnar, p\u00e5b\u00f6rjas en ny omr\u00f6stning, nu p\u00e5 r\u00f6sten .<\/p>\n<p>Det \u00e4r viktigt att s\u00e4rskilja <i>v\u00e4rden<\/i> (till exempel vad best\u00e4llning av lunch ska vara: pizza eller sallad), <i>r\u00f6ster<\/i> (par counter-value) och <i>uttalandena<\/i> om r\u00f6ster. SCP-omg\u00e5ngen omfattar flera omg\u00e5ngar av federationr\u00f6stning, s\u00e4rskilt om s\u00e5dana uttalanden:<\/p>\n<ul>\n<li>\u00abJag \u00e4r redo att bekr\u00e4fta r\u00f6stning B\u00bb och\n<\/li>\n<li>\u00abJag deklarerar bekr\u00e4ftelse av r\u00f6stning B\u00bb<\/li>\n<\/ul>\n<p>\nUr denna nodes perspektiv uppn\u00e5s konsensus n\u00e4r den hittar r\u00f6sten B, f\u00f6r vilken den kan bekr\u00e4fta (det vill s\u00e4ga hitta en kvorum som accepterar) uttalandet \u00abJag deklarerar bekr\u00e4ftelse av r\u00f6stning B\u00bb. Fr\u00e5n den punkten kan man s\u00e4kert agera p\u00e5 v\u00e4rdet angivet i B - till exempel, g\u00f6ra denna lunchbest\u00e4llning. Detta kallas <i>externalisering<\/i> av v\u00e4rdet. N\u00e4r bekr\u00e4ftelse om godk\u00e4nnande av r\u00f6sten har bekr\u00e4ftats kan noden vara s\u00e4ker p\u00e5 att vilken annan nod som helst har genomf\u00f6rt externaliseringen av samma v\u00e4rde eller kommer att g\u00f6ra det i framtiden.<\/p>\n<p>\u00c4ven om konceptuellt m\u00e5nga federativa omr\u00f6stningar genomf\u00f6rs baserat p\u00e5 utsagor om olika r\u00f6stber\u00e4ttiganden, utbyter de inte s\u00e5 m\u00e5nga meddelanden, eftersom varje meddelande inkapslar ett antal r\u00f6stber\u00e4ttiganden. Ett meddelande fr\u00e4mjar s\u00e5ledes tillst\u00e5ndet f\u00f6r m\u00e5nga federativa omr\u00f6stningar samtidigt, till exempel: \"Jag accepterar r\u00f6stber\u00e4ttiganden i intervallet fr\u00e5n  till .\"<\/p>\n<p>Vad betyder termerna \"f\u00f6rberedd\" (prepared) och \"kommitt\u00e9\" (commit)?<\/p>\n<p>Noden r\u00f6star f\u00f6r att godk\u00e4nna r\u00f6stber\u00e4ttigandet n\u00e4r den \u00e4r \u00f6vertygad om att andra noder inte kommer att godk\u00e4nna r\u00f6stber\u00e4ttiganden med andra v\u00e4rden. \u00d6vertygelsen om detta \u00e4r m\u00e5let med att f\u00f6rbereda statementet. En omr\u00f6stning som s\u00e4ger: \"Jag \u00e4r redo att godk\u00e4nna r\u00f6stber\u00e4ttigandet B\" \u00e4r ett l\u00f6fte om att aldrig godk\u00e4nna ett r\u00f6stber\u00e4ttigande med ett v\u00e4rde mindre \u00e4n B, dvs. med en l\u00e4gre r\u00e4knare (SCP kr\u00e4ver att v\u00e4rdena i r\u00f6stber\u00e4ttigandena har en best\u00e4md ordning. D\u00e4rf\u00f6r \u00e4r r\u00f6stber\u00e4ttigandet  mindre \u00e4n  om N1&lt;N2, och \u00e4ven om N1=N2 och V1&lt;V2). Dessa mindre r\u00f6stber\u00e4ttiganden &quot;avbryts&quot; (aborted) under den f\u00f6rberedande omr\u00f6stningen, medan B anses vara &quot;f\u00f6rberedd&quot;.<\/p>\n<p>Varf\u00f6r betyder \"Jag \u00e4r redo att godk\u00e4nna r\u00f6stber\u00e4ttigandet B\" \"Jag lovar att aldrig till\u00e5ta godk\u00e4nnande av r\u00f6stber\u00e4ttiganden mindre \u00e4n B\"? F\u00f6r att SCP definierar abort som motsatsen till commit. En omr\u00f6stning f\u00f6r att f\u00f6rbereda r\u00f6stber\u00e4ttigandet inneb\u00e4r ocks\u00e5 en omr\u00f6stning f\u00f6r att avbryta vissa andra r\u00f6stber\u00e4ttiganden, och som vi diskuterade tidigare, att r\u00f6sta f\u00f6r n\u00e5got inneb\u00e4r ett l\u00f6fte att aldrig r\u00f6sta emot det.<\/p>\n<p>Innan noden kan s\u00e4nda en godk\u00e4nnandeaktion m\u00e5ste den f\u00f6rst hitta ett r\u00f6stber\u00e4ttigande som den kan bekr\u00e4fta som f\u00f6rberett. Med andra ord, den genomf\u00f6r en federativ omr\u00f6stning p\u00e5 temat \"Jag \u00e4r redo att godk\u00e4nna r\u00f6stber\u00e4ttigandet B\", m\u00f6jligtvis f\u00f6r m\u00e5nga olika r\u00f6stber\u00e4ttiganden, tills den hittar ett som accepterar kvorum.<\/p>\n<p>Varifr\u00e5n kommer valsedlarna f\u00f6r r\u00f6stningsf\u00f6rberedelser? F\u00f6rst s\u00e4nder noden ut f\u00f6rberedelser f\u00f6r r\u00f6stning f\u00f6r &lt;1,C&gt;, d\u00e4r C \u00e4r en kompositkandidat som producerades p\u00e5 nomineringsteget. Men \u00e4ven efter att f\u00f6rberedelserna f\u00f6r r\u00f6stningen har b\u00f6rjat kan nomineringen leda till nya kandidater som blir nya valsedlar. Under tiden kan deltagarna ha olika kandidater och de kan bilda en blockerande m\u00e4ngd som accepterar \"Jag \u00e4r redo att commit-a valsedel B2\", vilket \u00f6vertygar noden att ocks\u00e5 acceptera den. Slutligen finns det en timeoutmekanism som genererar nya omg\u00e5ngar av federerad r\u00f6stning p\u00e5 nya valsedlar med h\u00f6gre r\u00e4knare, om de aktuella valsedlarna har fastnat.<\/p>\n<p>S\u00e5 snart noden hittar valsedel B, som kan bekr\u00e4ftas som f\u00f6rberedd, s\u00e4nder den ut ett nytt meddelande \"Commit av valsedel B\". Denna r\u00f6stning meddelar deltagarna att noden aldrig kommer att avst\u00e5 fr\u00e5n B. Faktiskt, om B representerar valsedeln &lt;N,C&gt;, s\u00e5 betyder \"Commit av valsedel &lt;N,C&gt;\" ovillkorligt samtycke att r\u00f6sta f\u00f6r beredskapen f\u00f6r varje valsedel fr\u00e5n &lt;N,C&gt; till &lt;\u221e, s&gt;. Detta extra v\u00e4rde hj\u00e4lper andra noder att hinna ikapp med deltagaren med commit, om de fortfarande \u00e4r p\u00e5 tidigare steg i protokollet.<\/p>\n<p>Vid detta steg \u00e4r det v\u00e4rt att betona igen att detta \u00e4r asynkrona protokoll. Bara f\u00f6r att en nod skickar r\u00f6ster f\u00f6r commit betyder det inte att dess kollegor ocks\u00e5 g\u00f6r det. Vissa av dem kan fortfarande r\u00f6sta p\u00e5 p\u00e5st\u00e5enden f\u00f6r r\u00f6stningsf\u00f6rberedelser, medan andra kanske redan har externt v\u00e4rderat betydelsen. SCP f\u00f6rklarar hur en nod ska hantera varje typ av peer-to-peer-meddelande oavsett dess fas.<\/p>\n<p>Om meddelandet \"Jag meddelar kommitt\u00e9n &lt;N,C&gt;\" inte kan accepteras eller bekr\u00e4ftas, finns det en m\u00f6jlighet att meddelandet &lt;N+1, C&gt; eller &lt;N+2, C&gt; accepteras eller bekr\u00e4ftas \u2014 eller, i alla fall, vilket som helst meddelande med v\u00e4rdet C, och inte n\u00e5got annat, eftersom noden redan har lovat att aldrig avbryta &lt;N,C&gt;. Vid den tidpunkt d\u00e5 noden s\u00e4nder r\u00f6ster f\u00f6r kommitt\u00e9n, kommer det att vara C eller ingenting, beroende p\u00e5 hur l\u00e5ngt konsensus g\u00e5r. Men detta \u00e4r inte tillr\u00e4ckligt f\u00f6r noden att externt bekr\u00e4fta C. Vissa byzantinska pizzer (som utg\u00f6r mindre \u00e4n quorum, baserat p\u00e5 v\u00e5ra antaganden om s\u00e4kerhet) kan ljuga f\u00f6r noden. Att acceptera och sedan bekr\u00e4fta ett visst meddelande (eller en rad meddelanden) \u2014 det \u00e4r vad som ger noden f\u00f6rtroende f\u00f6r slutligen att externalisera C.<\/p>\n<p><img decoding=\"async\" alt=\"Utforskar Stellar-konsensusprotokollet\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>R\u00f6stning av SCP genom federativ r\u00f6stning. Ej visat: n\u00e4r som helst kan en timer aktiveras, vilket \u00f6kar r\u00e4knaren i omr\u00f6stningen (och eventuellt skapa en ny sammans\u00e4ttning av ytterligare f\u00f6reslagna kandidater).<\/i> <\/p>\n<p>Och det \u00e4r allt! S\u00e5 snart n\u00e4tverket har n\u00e5tt konsensus \u00e4r det redo att g\u00f6ra det igen och igen. I Stellar betalningsn\u00e4tverket sker detta ungef\u00e4r var 5:e sekund: en prestation som kr\u00e4ver b\u00e5de s\u00e4kerhet och livskraft, garanterad av SCP.<\/p>\n<p>SCP kan uppn\u00e5 detta genom att f\u00f6rlita sig p\u00e5 flera omg\u00e5ngar av federativ r\u00f6stning. Federativ r\u00f6stning blev m\u00f6jlig genom konceptet av quorum-skikt: upps\u00e4ttningar av likaber\u00e4ttigade noder som varje nod har beslutat att lita p\u00e5 som en del av sin (subjektiva) quorum. Denna konfiguration inneb\u00e4r att man kan n\u00e5 konsensus \u00e4ven i ett \u00f6ppet medlemsn\u00e4tverk med byzantinska bedr\u00e4gerier.<\/p>\n<h1>Vidare l\u00e4sning<\/h1>\n<p><\/p>\n<ul>\n<li>Det ursprungliga tekniska dokumentet f\u00f6r SCP kan hittas <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">h\u00e4r<\/a><\/noindex>, och <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">). Ett typiskt exempel p\u00e5 anv\u00e4ndning:<\/a><\/noindex> specifikationsprojektet f\u00f6r dess implementering.\n<\/li>\n<li>Den ursprungliga f\u00f6rfattaren av SCP-protokollet, David Mazieres, f\u00f6rklarar det f\u00f6renklat (men \u00e4nd\u00e5 tekniskt) <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">h\u00e4r<\/a><\/noindex>.\n<\/li>\n<li>Du har kanske blivit f\u00f6rv\u00e5nad \u00f6ver att inte hitta termerna \"gruvdrift\" eller \"arbetsbevis\" i denna artikel. SCP anv\u00e4nder inte dessa metoder, men vissa andra konsensusalgoritmer g\u00f6r. Zayne Witherspoon har skrivit en tillg\u00e4nglig <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">\u00f6versikt \u00f6ver konsensusalgoritmer<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Steg-f\u00f6r-steg-beskrivning<\/a><\/noindex> en enkel n\u00e4tverksmodell som n\u00e5r konsensus under en fullst\u00e4ndig runda av SCP.\n<\/li>\n<li>F\u00f6r l\u00e4sare som \u00e4r intresserade av implementationer av SCP: se. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">C++-kod<\/a><\/noindex>, som anv\u00e4nds av betalningsn\u00e4tverket Stellar, eller <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">Go-kod<\/a><\/noindex>, som jag skrev f\u00f6r att b\u00e4ttre f\u00f6rst\u00e5 SCP.<\/li>\n<\/ul>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043d\u0430\u0443\u0447\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0414\u044d\u0432\u0438\u0434\u0430 \u041c\u0430\u0437\u044c\u0435\u0440\u0430 \u0432 2015 \u0433\u043e\u0434\u0443. \u042d\u0442\u043e \u00ab\u0444\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0437\u0430\u043d\u0442\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0435\u0442\u044f\u043c \u0431\u0435\u0437 \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e. \u041f\u043b\u0430\u0442\u0451\u0436\u043d\u0430\u044f \u0441\u0435\u0442\u044c Stellar \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Stellar Consensus Protocol (SCP) \u0434\u043b\u044f \u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0438\u0434\u044f\u0442 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438. \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0442\u0440\u0443\u0434\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-30047","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:33:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Vi utforskar konsensusprotokollet Stellar | ProHoster","description":"Konsensusprotokollet Stellar beskrevs f\u00f6rsta g\u00e5ngen i.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar | ProHoster","og:description":"\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 Stellar \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432.","og:url":"https:\/\/prohoster.info\/sv\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:33:25+00:00","article:modified_time":"2019-10-31T18:33:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30047","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 23:34:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:43:15","updated":"2026-01-20 23:34:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}