{"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\/pl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Poznajemy protok\u00f3\u0142 konsensusu Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProtok\u00f3\u0142 konsensusu Stellar zosta\u0142 po raz pierwszy opisany w <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">artyku\u0142 naukowy<\/a><\/noindex> David Mazi\u00e8re w 2015 roku. Jest to \"federacyjny system porozumienia bizantyjskiego\", kt\u00f3ry pozwala zdecentralizowanym sieciom obliczeniowym bez lider\u00f3w efektywnie osi\u0105ga\u0107 konsensus w jakiejkolwiek decyzji. Sie\u0107 p\u0142atnicza Stellar wykorzystuje Stellar Consensus Protocol (SCP) do prowadzenia uzgodnionej historii transakcji, kt\u00f3r\u0105 widz\u0105 wszyscy uczestnicy.<\/p>\n<p>Uwa\u017ca si\u0119, \u017ce protoko\u0142y konsensusu s\u0105 trudne do zrozumienia. SCP jest prostszy od wi\u0119kszo\u015bci z nich, ale nadal dzieli t\u0119 reputacj\u0119 \u2014 cz\u0119\u015bciowo z powodu b\u0142\u0119dnego przekonania, \u017ce \"federacyjne g\u0142osowanie\", kt\u00f3remu po\u015bwi\u0119cona jest pierwsza po\u0142owa artyku\u0142u naukowego, jest SCP. Ale to nieprawda! To tylko wa\u017cny element, kt\u00f3ry w drugiej cz\u0119\u015bci artyku\u0142u jest u\u017cywany do stworzenia <i>faktycznego<\/i> protoko\u0142u konsensusu Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nW tym artykule kr\u00f3tko opowiemy, czym jest \"system porozumie\u0144\", co mo\u017ce uczyni\u0107 go \"bizantyjskim\" oraz dlaczego przekszta\u0142ci\u0107 bizantyjskiego systemu na \"federacyjny\". Nast\u0119pnie wyja\u015bnimy procedur\u0119 g\u0142osowania federacyjnego opisan\u0105 w artykule o SCP, a na ko\u0144cu wyja\u015bnimy sam protok\u00f3\u0142 SCP.<\/p>\n<h1>Systemy porozumie\u0144<\/h1>\n<p>\nSystem porozumie\u0144 pozwala grupie uczestnik\u00f3w osi\u0105gn\u0105\u0107 konsensus w jakiej\u015b kwestii, na przyk\u0142ad, co zam\u00f3wi\u0107 na obiad.<\/p>\n<p>My w firmie Interstellar wdro\u017cyli\u015bmy w\u0142asny system porozumienia obiadowego: zamawiamy to, co m\u00f3wi nasz mened\u017cer operacyjny John. To prosty i efektywny system porozumie\u0144. Wszyscy ufamy Johnowi i wierzymy, \u017ce codziennie znajdzie co\u015b interesuj\u0105cego i po\u017cywnego.<\/p>\n<p>Ale co je\u015bli John nadu\u017cyje naszego zaufania? Mo\u017ce jedynie postanowi\u0107, \u017ce wszyscy powinni\u015bmy zosta\u0107 weganami. Za tydzie\u0144 lub dwa prawdopodobnie obalimy go i przeka\u017cemy w\u0142adz\u0119 Elizabeth. Ale nagle ona uwielbia awokado z anchois i my\u015bli, \u017ce wszyscy powinni tacy by\u0107. W\u0142adza psuje. Dlatego lepiej znale\u017a\u0107 bardziej demokratyczn\u0105 metod\u0119: jaki\u015b spos\u00f3b, aby upewni\u0107 si\u0119, \u017ce r\u00f3\u017cne preferencje s\u0105 uwzgl\u0119dnione, zapewniaj\u0105c jednocze\u015bnie terminowy i jednoznaczny wynik, aby unikn\u0105\u0107 sytuacji, w kt\u00f3rej nikt nie zam\u00f3wi obiadu lub pi\u0119\u0107 os\u00f3b z\u0142o\u017cy r\u00f3\u017cne zam\u00f3wienia, lub dyskusja przeci\u0105gnie si\u0119 do wieczora.<\/p>\n<p>Wydaje si\u0119, \u017ce rozwi\u0105zanie jest proste: przeprowadzi\u0107 g\u0142osowanie! Ale to zwodnicze wra\u017cenie. Kto zbiera\u0142by g\u0142osy i informowa\u0142 o wynikach? I dlaczego pozostali mieliby wierzy\u0107 temu, co powie? <i>Najpierw<\/i> mo\u017cemy zag\u0142osowa\u0107 na lidera, kt\u00f3remu ufamy w przeprowadzeniu g\u0142osowania \u2014 ale kto poprowadzi <i>pierwszym<\/i> to g\u0142osowanie? Co je\u015bli nie uda nam si\u0119 wybra\u0107 lidera? Lub je\u017celi si\u0119 zgodzimy, a ten lider utknie na spotkaniu lub zachoruje?<\/p>\n<p>Podobne problemy wyst\u0119puj\u0105 w rozproszonych sieciach komputerowych. Wszyscy uczestnicy lub w\u0119z\u0142y musz\u0105 uzgodni\u0107 jakie\u015b rozwi\u0105zanie, na przyk\u0142ad, czyja kolej jest na aktualizacj\u0119 wsp\u00f3lnego pliku lub pobranie zadania z kolejki przetwarzania. W sieci kryptowalut w\u0119z\u0142y wielokrotnie musz\u0105 wybiera\u0107, jak wygl\u0105da pe\u0142na historia spo\u015br\u00f3d kilku mo\u017cliwych wersji, kt\u00f3re czasami s\u0105 sprzeczne. To porozumienie sieciowe gwarantuje odbiorcy, \u017ce moneta jest (a) wa\u017cna (nie sfa\u0142szowana) i (b) jeszcze nie zosta\u0142a wydana gdzie indziej. Gwarantuje to r\u00f3wnie\u017c, \u017ce b\u0119dzie m\u00f3g\u0142 wyda\u0107 monety w przysz\u0142o\u015bci, poniewa\u017c nowy odbiorca b\u0119dzie mia\u0142 te same gwarancje z tych samych powod\u00f3w.<\/p>\n<p>Ka\u017cdy system uzgodnie\u0144 w rozproszonej sieci komputerowej musi by\u0107 odporny na b\u0142\u0119dy: powinien dostarcza\u0107 sp\u00f3jne wyniki mimo b\u0142\u0119d\u00f3w, takich jak wolne linie komunikacyjne, nieodpowiadaj\u0105ce w\u0119z\u0142y i nieprawid\u0142owa kolejno\u015b\u0107 wiadomo\u015bci. <i>Bizanty\u0144ska<\/i> system uzgodnie\u0144 jest dodatkowo odporny na \"bizanty\u0144skie\" b\u0142\u0119dy: w\u0119z\u0142y, kt\u00f3re podaj\u0105 fa\u0142szywe informacje, czy to z powodu b\u0142\u0119d\u00f3w, czy z zamiarem podwa\u017cenia systemu lub zdobycia jakiej\u015b przewagi. \"Bizanty\u0144ska\" odporno\u015b\u0107 na b\u0142\u0119dy \u2014 mo\u017cliwo\u015b\u0107 zaufania zbiorowemu rozwi\u0105zaniu, nawet gdy niekt\u00f3rzy cz\u0142onkowie grupy mog\u0105 k\u0142ama\u0107 lub w inny spos\u00f3b \u0142ama\u0107 zasady podejmowania decyzji \u2014 nosi nazw\u0119 od <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\">przypowie\u015bci o genera\u0142ach Cesarstwa Bizantyjskiego<\/a><\/noindex>, kt\u00f3rzy pr\u00f3bowali skoordynowa\u0107 atak. <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\">Dobre opisanie<\/a><\/noindex> u Anthony'ego Stevensona.<\/p>\n<p>Rozwa\u017cmy w\u0142a\u015bciciela kryptowaluty Alice, kt\u00f3ra musi wybra\u0107 mi\u0119dzy zakupem smacznych lod\u00f3w od Boba a sp\u0142at\u0105 d\u0142ugu Carol. Mo\u017ce Alice chce zap\u0142aci\u0107 obu jednocze\u015bnie, oszukuj\u0105c, wydaj\u0105c t\u0119 sam\u0105 monet\u0119. Aby to zrobi\u0107, musi przekona\u0107 komputer Boba, \u017ce moneta nigdy nie zosta\u0142a przekazana Carol, i przekona\u0107 komputer Carol, \u017ce moneta nigdy nie zosta\u0142a przekazana Bobowi. Bizantyjski system konsensusu czyni to praktycznie niemo\u017cliwym, stosuj\u0105c form\u0119 zasady wi\u0119kszo\u015bci, zwan\u0105 <i>kwarumem<\/i>. W\u0119ze\u0142 w takiej sieci odmawia przej\u015bcia do okre\u015blonej wersji historii, dop\u00f3ki nie zobaczy, \u017ce odpowiednia liczba r\u00f3wie\u015bniczych w\u0119z\u0142\u00f3w \u2013 kwarum \u2013 zgadza si\u0119 na to przej\u015bcie. Gdy to nast\u0105pi, utworz\u0105 wystarczaj\u0105co du\u017c\u0105 grup\u0119 wyborcz\u0105, aby zmusi\u0107 pozosta\u0142e w\u0119z\u0142y sieci do zaakceptowania ich decyzji. Alice mo\u017ce zmusi\u0107 niekt\u00f3re w\u0119z\u0142y do k\u0142amania w jej imieniu, ale je\u015bli sie\u0107 jest wystarczaj\u0105co du\u017ca, jej pr\u00f3ba zostanie st\u0142umiona g\u0142osami uczciwych w\u0119z\u0142\u00f3w.<\/p>\n<p>Ile w\u0119z\u0142\u00f3w jest potrzebnych do kworum? Jak najmniej, a dok\u0142adniej \u2013 kwalifikowana wi\u0119kszo\u015b\u0107, aby walczy\u0107 z b\u0142\u0119dami i oszustwami. Ale aby obliczy\u0107 wi\u0119kszo\u015b\u0107, trzeba zna\u0107 ca\u0142kowit\u0105 liczb\u0119 uczestnik\u00f3w. W biurze Interstellar lub podczas wybor\u00f3w okr\u0119gowych te liczby s\u0105 \u0142atwe do uzyskania. Ale je\u015bli twoja grupa to s\u0142abo okre\u015blona sie\u0107, w kt\u00f3r\u0105 w\u0119z\u0142y mog\u0105 wchodzi\u0107 i wychodzi\u0107 wed\u0142ug woli, bez zgody centrum, potrzebna jest <i>federacyjna<\/i> system wizantyjskiego konsensusu, zdolny do okre\u015blenia kworum nie z wcze\u015bniej ustalonej listy w\u0119z\u0142\u00f3w, lecz dynamicznie, z ci\u0105gle zmieniaj\u0105cego si\u0119 i nieuchronnie niepe\u0142nego obrazu w\u0119z\u0142\u00f3w w danym momencie.<\/p>\n<p>Mo\u017ce si\u0119 wydawa\u0107 niemo\u017cliwe stworzenie kworum z punktu widzenia jednego w\u0119z\u0142a w rozleg\u0142ej sieci, ale jest to mo\u017cliwe. Takie kworum mo\u017ce nawet zapewni\u0107 wyniki zdecentralizowanego g\u0142osowania. Dokument techniczny SCP pokazuje, jak to zrobi\u0107 za pomoc\u0105 procedury zwanej <i>g\u0142osowaniem federacyjnym<\/i>.<\/p>\n<h1>Dla niecierpliwych<\/h1>\n<p>\nReszta artyku\u0142u szczeg\u00f3\u0142owo opisuje g\u0142osowanie federacyjne i protok\u00f3\u0142 konsensusu Stellar. Je\u015bli nie interesuj\u0105 ci\u0119 szczeg\u00f3\u0142y, oto og\u00f3lny zarys procesu.<\/p>\n<ol>\n<li>W\u0119z\u0142y przeprowadzaj\u0105 rundy federalnego g\u0142osowania na \u00abnominant\u00f3w\u00bb. Runda federalnego g\u0142osowania oznacza:\n<ul>\n<li>W\u0119ze\u0142 g\u0142osuje nad jakim\u015b stwierdzeniem, na przyk\u0142ad \u00abProponuj\u0119 warto\u015b\u0107 V\u00bb;\n<\/li>\n<li>W\u0119ze\u0142 s\u0142ucha g\u0142os\u00f3w uczestnik\u00f3w, a\u017c znajdzie ten, kt\u00f3ry mo\u017ce \u00abzaakceptowa\u0107\u00bb;\n<\/li>\n<li>W\u0119ze\u0142 szuka \u00abkworum\u00bb dla tego stwierdzenia. Kworum \u00abpotwierdza\u00bb nominanta.<\/li>\n<\/ul>\n<\/li>\n<li>Gdy w\u0119ze\u0142 jest w stanie potwierdzi\u0107 jednego lub kilku nominant\u00f3w, stara si\u0119 \u00abprzygotowa\u0107\u00bb \u00abkart\u0119 do g\u0142osowania\u00bb poprzez kilka rund federalnego g\u0142osowania.\n<\/li>\n<li>Gdy w\u0119ze\u0142 jest w stanie sprawdzi\u0107 gotowo\u015b\u0107 karty do g\u0142osowania, stara si\u0119 j\u0105 skommitowa\u0107 za pomoc\u0105 jeszcze wi\u0119kszej liczby rund federalnego g\u0142osowania.\n<\/li>\n<li>Gdy w\u0119ze\u0142 mo\u017ce potwierdzi\u0107 komit karty do g\u0142osowania, mo\u017ce \u00abeksternalizowa\u0107\u00bb warto\u015b\u0107 tej karty, u\u017cywaj\u0105c jej jako wyniku konsensusu.<\/li>\n<\/ol>\n<p>\nTe kroki obejmuj\u0105 kilka rund federalnego g\u0142osowania, kt\u00f3re w sumie tworz\u0105 jedn\u0105 rund\u0119 SCP. Przyjrzyjmy si\u0119 bli\u017cej, co dzieje si\u0119 na ka\u017cdym etapie.<\/p>\n<h1>G\u0142osowanie federalne<\/h1>\n<p>\nG\u0142osowanie federalne to procedura okre\u015blenia, czy sie\u0107 mo\u017ce si\u0119 zgodzi\u0107 na propozycj\u0119. W rundzie g\u0142osowania ka\u017cdy w\u0119ze\u0142 musi wybra\u0107 jedn\u0105 z potencjalnie wielu mo\u017cliwych warto\u015bci. Nie mo\u017ce tego zrobi\u0107, dop\u00f3ki nie b\u0119dzie pewien, \u017ce inne w\u0119z\u0142y w sieci nie wybior\u0105 innego wyniku. Aby by\u0107 co do tego pewnymi, w\u0119z\u0142y wymieniaj\u0105 si\u0119 strumieniem wiadomo\u015bci tam i z powrotem, tak aby ka\u017cdy <i>potwierdzi\u0142<\/i>, nawet bez optymalizacji pod takie zadania, wygrywa i na obcym terenie: <i>kworum<\/i> w\u0119ze\u0142 <i>przyjmuje<\/i> to samo <i>decyzj\u0119<\/i>. Reszta tej sekcji wyja\u015bnia poj\u0119cia w tym stwierdzeniu oraz jak przebiega ca\u0142a procedura.<\/p>\n<h1>Kworum i przekroje kworum<\/h1>\n<p>\nZacznijmy od definicji kworum. Jak om\u00f3wili\u015bmy wcze\u015bniej, w zdecentralizowanej sieci z dynamicznym cz\u0142onkostwem niemo\u017cliwe jest z g\u00f3ry okre\u015blenie liczby w\u0119z\u0142\u00f3w i, w zwi\u0105zku z tym, ile potrzeba do wi\u0119kszo\u015bci. G\u0142osowanie federalne rozwi\u0105zuje ten problem, wprowadzaj\u0105c now\u0105 ide\u0119 <i>przekroju kworum<\/i> (quorum slice): ma\u0142y zestaw r\u00f3wnego poziomu w\u0119z\u0142\u00f3w, kt\u00f3rym w\u0119ze\u0142 ufa w przekazywaniu informacji o stanie g\u0142osowania w pozosta\u0142ej cz\u0119\u015bci sieci. Ka\u017cdy w\u0119ze\u0142 definiuje w\u0142asny przekr\u00f3j kworum (cz\u0142onkiem kt\u00f3rego staje si\u0119 de facto).<\/p>\n<p>Formowanie kworum zaczyna si\u0119 od przekroju kworum. Do ka\u017cdego w\u0119z\u0142a dodawane s\u0105 w\u0119z\u0142y jego przekroju. Nast\u0119pnie dodawane s\u0105 cz\u0142onkowie przekroj\u00f3w <i>tych w\u0119z\u0142\u00f3w<\/i> i tak dalej. W miar\u0119 post\u0119pu pojawia si\u0119 coraz wi\u0119cej w\u0119z\u0142\u00f3w, kt\u00f3rych nie mo\u017cna doda\u0107, poniewa\u017c zosta\u0142y ju\u017c uwzgl\u0119dnione w wycinku. Kiedy nie ma ju\u017c nowych w\u0119z\u0142\u00f3w do dodania, proces si\u0119 zatrzymuje: stworzyli\u015bmy quorum poprzez \u201ezamkni\u0119cie przechodnie\u201d (transitive closure) wycinka quorum pocz\u0105tkowego w\u0119z\u0142a.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Aby znale\u017a\u0107 quorum z danego w\u0119z\u0142a\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 dodajemy cz\u0142onk\u00f3w jego wycinka\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 nast\u0119pnie dodajemy cz\u0142onk\u00f3w wycink\u00f3w tych w\u0119z\u0142\u00f3w.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Kontynuujemy, a\u017c nie zostan\u0105 w\u0119z\u0142y do dodania.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nie ma ju\u017c w\u0119z\u0142\u00f3w do dodania. To quorum.<\/i><\/p>\n<p>W rzeczywisto\u015bci ka\u017cdy w\u0119ze\u0142 mo\u017ce nale\u017ce\u0107 do wi\u0119cej ni\u017c jednego wycinka. Aby utworzy\u0107 quorum, wybierz tylko jeden z wycink\u00f3w i dodaj cz\u0142onk\u00f3w; nast\u0119pnie wybierz dowolny wycinek dla ka\u017cdego z cz\u0142onk\u00f3w i dodaj cz\u0142onk\u00f3w wycinka i tak dalej. Oznacza to, \u017ce ka\u017cdy w\u0119ze\u0142 jest cz\u0142onkiem wielu mo\u017cliwych quorum. <i>tego<\/i> Wybierz tylko jeden wycinek quorum na ka\u017cdym etapie.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jedno mo\u017cliwe quorum. Lub alternatywna opcja\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 wybieramy inne wycinki\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026(gdy to mo\u017cliwe)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/865567aa370605b7cf10da3457c3d158.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>&#8230;(\u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e)\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Jak w\u0119ze\u0142 dowiaduje si\u0119, w jakich wycinkach znajduj\u0105 si\u0119 inne w\u0119z\u0142y? Tak samo jak inne informacje o innych w\u0119z\u0142ach: z przekaz\u00f3w, kt\u00f3re ka\u017cdy w\u0119ze\u0142 przesy\u0142a do sieci, kiedy jego stan g\u0142osowania si\u0119 zmienia. Ka\u017cdy przekaz zawiera informacje o wycinkach w\u0119z\u0142a wysy\u0142aj\u0105cego. W technicznym dokumencie SCP nie opisano mechanizmu komunikacji. Realizacje zazwyczaj wykorzystuj\u0105<\/i><\/p>\n<p>protok\u00f3\u0142 gossip <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">do gwarantowanej transmisji wiadomo\u015bci w ca\u0142ej sieci.<\/a><\/noindex> \u0434\u043b\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u0432\u0441\u0435\u0439 \u0441\u0435\u0442\u0438.<\/p>\n<p>Przypomnijmy, \u017ce w niefederacyjnej bizantyjskiej systemie uzgodnie\u0144 kworum definiowane jest jako wi\u0119kszo\u015b\u0107 wszystkich w\u0119z\u0142\u00f3w. Bizantyjski system uzgodnie\u0144 zosta\u0142 zaprojektowany z perspektywy pytania: ile nieuczciwych w\u0119z\u0142\u00f3w jest w stanie wytrzyma\u0107 system? W systemie z N w\u0119z\u0142ami, zaprojektowanym do przetrwania przy f awariach (oszustwach), w\u0119ze\u0142 musi by\u0107 w stanie osi\u0105gn\u0105\u0107 post\u0119p, otrzymuj\u0105c odpowiedzi od N\u2212f peer\u00f3w, poniewa\u017c f z nich mo\u017ce nie dzia\u0142a\u0107. Jednak otrzymuj\u0105c odpowiedzi od N\u2212f peer\u00f3w, mo\u017cna za\u0142o\u017cy\u0107, \u017ce wszystkie f peer\u00f3w (od kt\u00f3rych w\u0119ze\u0142 nie otrzyma\u0142 odpowiedzi) s\u0105 w rzeczywisto\u015bci uczciwe. Tak wi\u0119c z\u0142o\u015bliwe s\u0105 f z N\u2212f peer\u00f3w (od kt\u00f3rych otrzymano odpowiedzi). Aby w\u0119z\u0142y dosz\u0142y do jednomy\u015blno\u015bci, uczciwa wi\u0119kszo\u015b\u0107 musi pochodzi\u0107 od pozosta\u0142ych w\u0119z\u0142\u00f3w, a wi\u0119c potrzebujemy, aby N\u2212f by\u0142o wi\u0119ksze ni\u017c 2f, czyli N &gt; 3f. Tak wi\u0119c system, zaprojektowany do przetrwania przy f awariach, zwykle b\u0119dzie mia\u0142 \u0142\u0105cznie N=3f+1 w\u0119z\u0142\u00f3w i rozmiar kworum 2f+1. Gdy tylko propozycja przekroczy pr\u00f3g kworum, pozosta\u0142e cz\u0142ony sieci s\u0105 przekonane, \u017ce wszelkie konkurencyjne propozycje ponios\u0105 pora\u017ck\u0119. Tak wi\u0119c sie\u0107 zbiega do wyniku.<\/p>\n<p>Jednak w federacyjnej bizantyjskiej systemie uzgodnie\u0144 nie tylko nie mo\u017ce by\u0107 wi\u0119kszo\u015bci (poniewa\u017c nikt nie zna og\u00f3lnego rozmiaru sieci), ale koncepcja wi\u0119kszo\u015bci jest ca\u0142kowicie bezu\u017cyteczna! Je\u015bli cz\u0142onkostwo w systemie jest otwarte, kto\u015b mo\u017ce zdoby\u0107 wi\u0119kszo\u015b\u0107, po prostu przeprowadzaj\u0105c tak zwan\u0105 atak Sybilli: wielokrotnie przy\u0142\u0105czaj\u0105c si\u0119 do sieci przez kilka w\u0119z\u0142\u00f3w. Dlaczego wi\u0119c przechodnie zamkni\u0119cie przekroju mo\u017cna nazwa\u0107 <i>kwarumem<\/i>, i jak on jest w stanie t\u0142umi\u0107 konkurencyjne propozycje?<\/p>\n<p>Technicznie rzecz bior\u0105c, w \u017caden spos\u00f3b! Wyobra\u017acie sobie sie\u0107 z sze\u015bcioma w\u0119z\u0142ami, w kt\u00f3rej dwie tr\u00f3jki s\u0105 odizolowane w przekroju kworum od siebie. Pierwsza podgrupa mo\u017ce podj\u0105\u0107 decyzj\u0119, o kt\u00f3rej druga nigdy nie us\u0142yszy, i odwrotnie. Dla tej sieci nie ma sposobu na osi\u0105gni\u0119cie konsensusu (chyba \u017ce przypadkowo).<\/p>\n<p>Dlatego SCP wymaga, aby dla g\u0142osowania federacyjnego (i zastosowania wa\u017cnych twierdze\u0144 artyku\u0142u) sie\u0107 mia\u0142a w\u0142a\u015bciwo\u015b\u0107 nazywan\u0105 <i>przeci\u0119ciem kworum.<\/i>W sieci o tej w\u0142a\u015bciwo\u015bci ka\u017cde dwa kworum, kt\u00f3re mo\u017cna zbudowa\u0107, zawsze pokrywaj\u0105 si\u0119 przynajmniej w jednym w\u0119\u017ale. Dla okre\u015blenia dominuj\u0105cych nastroj\u00f3w w sieci jest to tak samo skuteczne, jak posiadanie wi\u0119kszo\u015bci. Intuicyjnie oznacza to, \u017ce je\u015bli jakiekolwiek kworum zgadza si\u0119 z twierdzeniem X, \u017cadne inne kworum nigdy nie mo\u017ce zgodzi\u0107 si\u0119 z czym\u015b innym, poniewa\u017c musi zawiera\u0107 jaki\u015b w\u0119ze\u0142 z pierwszego kworum, kt\u00f3re ju\u017c zag\u0142osowa\u0142o za X.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Je\u015bli w sieci istnieje przeci\u0119cie kworum\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 wtedy ka\u017cde dwa kworum, kt\u00f3re mo\u017cesz skonstruowa\u0107\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 zawsze b\u0119d\u0105 si\u0119 przecina\u0107.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Oczywi\u015bcie, nak\u0142adaj\u0105ce si\u0119 w\u0119z\u0142y mog\u0105 okaza\u0107 si\u0119 bizantyjskimi oszustami lub z\u0142ymi w innych aspektach. W takim przypadku przeci\u0119cie kworum w og\u00f3le nie pomaga sieci osi\u0105gn\u0105\u0107 zgody. Z tego powodu wiele wynik\u00f3w w dokumencie technicznym SCP opiera si\u0119 na wyra\u017anie wyra\u017conych za\u0142o\u017ceniach, takich jak to, \u017ce w sieci pozosta\u0142o przeci\u0119cie kworum <i>nawet po usuni\u0119ciu z\u0142ych w\u0119z\u0142\u00f3w<\/i>. Dla uproszczenia pozostawimy te za\u0142o\u017cenia <i>nijakimi<\/i> w reszcie artyku\u0142u).<\/p>\n<p>Mo\u017ce si\u0119 wydawa\u0107 nierozs\u0105dne oczekiwa\u0107, \u017ce w sieci niezale\u017cnych w\u0119z\u0142\u00f3w mo\u017cliwe jest niezawodne przeci\u0119cie kworum. Ale s\u0105 dwie przyczyny, dla kt\u00f3rych tak si\u0119 dzieje.<\/p>\n<p>Pierwsza przyczyna to istnienie samego internetu. Internet to idealny przyk\u0142ad sieci niezale\u017cnych w\u0119z\u0142\u00f3w z przeci\u0119ciem kworum. Wi\u0119kszo\u015b\u0107 w\u0119z\u0142\u00f3w w internecie \u0142\u0105czy si\u0119 tylko z kilkoma innymi lokalnymi w\u0119z\u0142ami, ale te ma\u0142e zbiory pokrywaj\u0105 si\u0119 na tyle, \u017ce ka\u017cdy w\u0119ze\u0142 jest dost\u0119pny z ka\u017cdego innego w\u0119z\u0142a za pomoc\u0105 jakiej\u015b trasy.<\/p>\n<p>Druga przyczyna jest specyficzna dla sieci p\u0142atniczej Stellar (najbardziej rozpowszechnione zastosowanie SCP). Ka\u017cdy aktyw w sieci Stellar ma swojego emitenta, a wytyczne Stellar wymagaj\u0105, aby ka\u017cdy emitent wyznaczy\u0142 jeden lub kilka w\u0119z\u0142\u00f3w w sieci do obs\u0142ugi \u017c\u0105da\u0144 wykupu. W Twoim interesie jest bezpo\u015brednio lub po\u015brednio w\u0142\u0105czenie tych w\u0119z\u0142\u00f3w do przekroj\u00f3w kworum dla ka\u017cdego interesuj\u0105cego Ci\u0119 aktywu. W ten spos\u00f3b kworumy dla wszystkich w\u0119z\u0142\u00f3w zainteresowanych danym aktywem b\u0119d\u0105 pokrywa\u0107 si\u0119 przynajmniej w tych w\u0119z\u0142ach wykupu. W\u0119z\u0142y zainteresowane wieloma aktywami b\u0119d\u0105 w\u0142\u0105cza\u0107 do swoich przekroj\u00f3w kworum wszystkie w\u0119z\u0142y wykupu odpowiednich emitent\u00f3w i b\u0119d\u0105 d\u0105\u017cy\u0107 do \u0142\u0105czenia wszystkich aktyw\u00f3w. Dodatkowo, wszelkie aktywa, kt\u00f3re nie s\u0105 w ten spos\u00f3b powi\u0105zane z innymi w sieci, i <i>nie musz\u0105 by\u0107 powi\u0105zane<\/i> \u2014 jest to zaplanowane, aby w tej sieci nie by\u0142o pokrywania si\u0119 kworum (na przyk\u0142ad banki w obszarze dolara czasami chc\u0105 handlowa\u0107 z bankami w obszarze euro i bankami z obszaru peso, dlatego znajduj\u0105 si\u0119 w tej samej sieci, ale nikt z nich nie interesuje si\u0119 osobn\u0105 sieci\u0105 dzieci handluj\u0105cych kartami baseballowymi).<\/p>\n<p>Oczywi\u015bcie, <i>oczekiwanie<\/i> pokrywania si\u0119 kworum nie jest <i>gwarancj\u0105<\/i>. Inne bizantyjskie systemy zg\u00f3d z powodu swojej z\u0142o\u017cono\u015bci w du\u017cej mierze s\u0105 zobowi\u0105zane do zapewnienia kworum. Wa\u017cnym innowacyjnym rozwi\u0105zaniem SCP jest to, \u017ce przenosi odpowiedzialno\u015b\u0107 za tworzenie kworum z samego algorytmu konsensusu na poziom aplikacji. W ten spos\u00f3b, chocia\u017c g\u0142osowanie federacyjne jest do\u015b\u0107 powszechne w g\u0142osowaniach w dowolnych sprawach, jego niezawodno\u015b\u0107 krytycznie zale\u017cy od szerszego znaczenia tych warto\u015bci. Niekt\u00f3re hipotetyczne zastosowania mog\u0105 okaza\u0107 si\u0119 mniej wygodne do tworzenia dobrze powi\u0105zanych sieci ni\u017c inne.<\/p>\n<h1>G\u0142osowanie, przyj\u0119cie i potwierdzenie<\/h1>\n<p>\nW rundzie g\u0142osowania federacyjnego w\u0119ze\u0142 opcjonalnie zaczyna g\u0142osowa\u0107 na pewn\u0105 warto\u015b\u0107 V. Oznacza to rozprzestrzenienie w sieci wiadomo\u015bci: \u201eJestem w\u0119z\u0142em N, moje przekroje kworum Q, i g\u0142osuj\u0119 na V\u201d. Kiedy w\u0119ze\u0142 g\u0142osuje w ten spos\u00f3b, obiecuje, \u017ce nigdy nie g\u0142osowa\u0142 przeciwko V i nigdy nie b\u0119dzie.<\/p>\n<p>W transmisjach od w\u0119z\u0142\u00f3w peer-to-peer ka\u017cdy w\u0119ze\u0142 widzi, jak g\u0142osuj\u0105 inne w\u0119z\u0142y. Gdy w\u0119ze\u0142 zbierze wystarczaj\u0105c\u0105 liczb\u0119 takich wiadomo\u015bci, mo\u017ce \u015bledzi\u0107 przekroje kworum i spr\u00f3bowa\u0107 znale\u017a\u0107 kworuma. Je\u015bli widzi kworum w\u0119z\u0142\u00f3w, kt\u00f3re r\u00f3wnie\u017c g\u0142osuj\u0105 na V, mo\u017ce przej\u015b\u0107 do <i>akceptacji<\/i> V i przes\u0142a\u0107 now\u0105 wiadomo\u015b\u0107 do sieci: \u201eJestem w\u0119z\u0142em N, moje przekroje kworum Q i akceptuj\u0119 V\u201d. Akceptacja zapewnia silniejsze gwarancje ni\u017c proste g\u0142osowanie. Kiedy w\u0119ze\u0142 g\u0142osuje na V, nigdy nie mo\u017ce g\u0142osowa\u0107 na inne opcje. Ale je\u015bli w\u0119ze\u0142 akceptuje V, \u017caden w\u0119ze\u0142 w sieci nigdy nie zaakceptuje innej opcji (twierdzenie 8 w dokumencie technicznym SCP to udowadnia).<\/p>\n<p>Oczywi\u015bcie, istnieje du\u017ce prawdopodobie\u0144stwo, \u017ce od razu nie znajdzie si\u0119 kworum w\u0119z\u0142\u00f3w, kt\u00f3re zgodz\u0105 si\u0119 na V. Inne w\u0119z\u0142y mog\u0105 g\u0142osowa\u0107 na inne warto\u015bci. Ale dla w\u0119z\u0142a istnieje jeszcze jeden spos\u00f3b, aby przej\u015b\u0107 od prostego g\u0142osowania do akceptacji. N mo\u017ce zaakceptowa\u0107 inn\u0105 warto\u015b\u0107 W, nawet je\u015bli na ni\u0105 nie g\u0142osowa\u0142 i nawet je\u015bli nie widzi dla niej kworum. Aby zmieni\u0107 sw\u00f3j g\u0142os, wystarczy zobaczy\u0107 <i>blokuj\u0105c\u0105 zbi\u00f3r<\/i> w\u0119z\u0142\u00f3w, kt\u00f3re zaakceptowa\u0142y W. Blokuj\u0105cy zbi\u00f3r to po jednym w\u0119\u017ale z ka\u017cdego z przekroj\u00f3w kworum N. Jak sama nazwa wskazuje, jest on w stanie <i>blokowa\u0107<\/i> jak\u0105kolwiek inn\u0105 warto\u015b\u0107. Je\u015bli wszystkie w\u0119z\u0142y w takim zbiorze akceptuj\u0105 W, to (zgodnie z twierdzeniem 8) nigdy nie uda si\u0119 utworzy\u0107 kworum akceptuj\u0105cego inn\u0105 warto\u015b\u0107, a zatem dla N r\u00f3wnie\u017c bezpiecznie jest zaakceptowa\u0107 W.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>W\u0119ze\u0142 N z trzema przekrojami kworum.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F to blokuj\u0105cy zbi\u00f3r dla N: zawiera po jednym w\u0119\u017ale z ka\u017cdego z przekroj\u00f3w N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E jest r\u00f3wnie\u017c blokuj\u0105cym zbiorem dla N, poniewa\u017c E pojawia si\u0119 w dw\u00f3ch przekrojach N.<\/i><\/p>\n<p>Jednak blokuj\u0105cy zbi\u00f3r to nie kworum. By\u0142oby zbyt \u0142atwo oszuka\u0107 w\u0119ze\u0142 N, aby zaakceptowa\u0142 po\u017c\u0105dan\u0105 warto\u015b\u0107, je\u015bli wystarczy\u0142oby zhakowa\u0107 tylko jeden w\u0119ze\u0142 w ka\u017cdym z przekroj\u00f3w N. Dlatego akceptacja warto\u015bci to jeszcze nie koniec g\u0142osowania. Zamiast tego N musi potwierdzi\u0107 warto\u015b\u0107, tj. zobaczy\u0107 kworum w\u0119z\u0142\u00f3w, kt\u00f3re j\u0105 akceptuj\u0105. Je\u015bli dojdzie tak daleko, to, jak udowadnia dokument techniczny SCP (w twierdzeniu 11), pozosta\u0142a cz\u0119\u015b\u0107 sieci r\u00f3wnie\u017c ostatecznie potwierdzi t\u0119 sam\u0105 warto\u015b\u0107, w zwi\u0105zku z czym N zako\u0144czy g\u0142osowanie federacyjne z okre\u015blon\u0105 warto\u015bci\u0105 jako wynikiem.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>G\u0142osowanie federacyjne.<\/i><\/p>\n<p>Proces g\u0142osowania, podejmowania decyzji i zatwierdzania dzia\u0142a jako jedna pe\u0142na runda g\u0142osowania federacyjnego. Protok\u00f3\u0142 konsensusu Stellar \u0142\u0105czy wiele takich rund, aby stworzy\u0107 kompletny system konsensusu.<\/p>\n<h1>Protok\u00f3\u0142 konsensusu Stellar<\/h1>\n<p>\nDwie najwa\u017cniejsze cechy systemu konsensusu to <i>bezpiecze\u0144stwo<\/i> i <i>odporno\u015b\u0107<\/i>. Algorytm konsensusu jest \"bezpieczny\", je\u015bli nigdy nie mo\u017ce da\u0107 r\u00f3\u017cnych wynik\u00f3w r\u00f3\u017cnym uczestnikom (kopie historii Boba nigdy nie b\u0119d\u0105 sprzeczne z Keri). \"Odporno\u015b\u0107\" oznacza, \u017ce algorytm zawsze wygeneruje wynik, czyli nie utknie.<\/p>\n<p>Opisana procedura g\u0142osowania federacyjnego <i>jest bezpieczna<\/i> w tym sensie, \u017ce je\u015bli w\u0119ze\u0142 zatwierdzi warto\u015b\u0107 V, \u017caden inny w\u0119ze\u0142 nie zatwierdzi innej warto\u015bci. Jednak \"nie zatwierdzi innej warto\u015bci\" nie oznacza, \u017ce na pewno co\u015b zatwierdzi. Uczestnicy mog\u0105 g\u0142osowa\u0107 na tak wiele r\u00f3\u017cnych warto\u015bci, \u017ce \u017cadna z nich nie osi\u0105gnie progu akceptacji. Oznacza to, \u017ce w g\u0142osowaniu federacyjnym brakuje <i>odporno\u015b\u0107<\/i>.<\/p>\n<p>Protok\u00f3\u0142 konsensusu Stellar wykorzystuje g\u0142osowanie federacyjne w taki spos\u00f3b, aby zapewni\u0107 zar\u00f3wno bezpiecze\u0144stwo, jak i odporno\u015b\u0107. (Gwarancje bezpiecze\u0144stwa i odporno\u015bci SCP maj\u0105 teoretyczny limit. Konstrukcja wybiera bardzo siln\u0105 gwarancj\u0119 bezpiecze\u0144stwa, po\u015bwi\u0119caj\u0105c nieznacznie odporno\u015b\u0107, ale bior\u0105c pod uwag\u0119 wystarczaj\u0105cy czas, z du\u017cym prawdopodobie\u0144stwem osi\u0105gni\u0119ty zostanie konsensus). Kr\u00f3tko m\u00f3wi\u0105c, idea polega na przeprowadzaniu kilku g\u0142osowa\u0144 federacyjnych na temat r\u00f3\u017cnych warto\u015bci, a\u017c jedna z nich przejdzie przez wszystkie etapy g\u0142osowania SCP opisane poni\u017cej.<\/p>\n<p>Warto\u015bci, wobec kt\u00f3rych SCP d\u0105\u017cy do konsensusu, mog\u0105 by\u0107 histori\u0105 transakcji, zam\u00f3wieniem obiadu lub czymkolwiek innym, ale istotne jest, aby zauwa\u017cy\u0107, \u017ce to nie te warto\u015bci s\u0105 przyjmowane ani potwierdzane. Zamiast tego g\u0142osowanie federacyjne odbywa si\u0119 w odniesieniu do <i>twierdze\u0144 dotycz\u0105cych tych warto\u015bci<\/i>.<\/p>\n<p>Pierwsze rundy g\u0142osowania federacyjnego odbywaj\u0105 si\u0119 na <i>etapie nominacji<\/i> (nomination phase), w zestawie twierdze\u0144 typu \"Nominuj\u0119 V\", by\u0107 mo\u017ce dla wielu r\u00f3\u017cnych warto\u015bci V. Celem nominacji jest znalezienie jednego lub kilku twierdze\u0144, kt\u00f3re przejd\u0105 przez akceptacj\u0119 i potwierdzenie.<\/p>\n<p>Po znalezieniu potwierdzonych kandydat\u00f3w, SCP przechodzi do etapu g\u0142osowania, kt\u00f3rego celem jest znalezienie pewnego <i>lokalu wyborczego<\/i> (czyli pojemnika na proponowan\u0105 warto\u015b\u0107) oraz kworum, kt\u00f3re mo\u017ce og\u0142osi\u0107 <i>commitu<\/i> jego (commit). Je\u015bli kworum zatwierdzi lokal wyborczy, jego warto\u015b\u0107 uznaje si\u0119 za konsensus. Jednak zanim w\u0119ze\u0142 b\u0119dzie m\u00f3g\u0142 zag\u0142osowa\u0107 za zatwierdzeniem lokalu wyborczego, musi najpierw potwierdzi\u0107 <i>odwo\u0142anie<\/i> wszystkich lokali wyborczych z mniejsz\u0105 warto\u015bci\u0105 licznika. Te kroki \u2014 odwo\u0142anie lokali wyborczych w celu znalezienia tego, dla kt\u00f3rego mo\u017cna potwierdzi\u0107 zatwierdzenie \u2014 obejmuj\u0105 kilka rund federacyjnego g\u0142osowania na kilka o\u015bwiadcze\u0144 o lokalach wyborczych.<\/p>\n<p>W kolejnych sekcjach dok\u0142adniej opisano wy\u0142anianie i g\u0142osowanie.<\/p>\n<h1>Wy\u0142anianie<\/h1>\n<p>\nNa pocz\u0105tku etapu wy\u0142aniania ka\u017cdy w\u0119ze\u0142 mo\u017ce spontanicznie wybra\u0107 warto\u015b\u0107 V i zag\u0142osowa\u0107 za stwierdzeniem \u201eWy\u0142aniam V\u201d. Celem na tym etapie jest potwierdzenie wy\u0142onienia pewnej warto\u015bci poprzez federacyjne g\u0142osowanie.<\/p>\n<p>Mo\u017ce si\u0119 zdarzy\u0107, \u017ce wystarczaj\u0105ca liczba w\u0119z\u0142\u00f3w g\u0142osuje za wystarczaj\u0105co r\u00f3\u017cnymi o\u015bwiadczeniami, a \u017cadne wy\u0142onienie nie mo\u017ce osi\u0105gn\u0105\u0107 progu przyj\u0119cia. Dlatego opr\u00f3cz transmisji w\u0142asnych g\u0142os\u00f3w nominacyjnych, w\u0119z\u0142y \u201eodzwierciedlaj\u0105\u201d nominacje swoich s\u0105siad\u00f3w. Odzwierciedlenie (echo) oznacza, \u017ce je\u015bli w\u0119ze\u0142 g\u0142osuje za wy\u0142onieniem V, ale widzi wiadomo\u015b\u0107 od s\u0105siada g\u0142osuj\u0105cego za wy\u0142onieniem W, to teraz zag\u0142osuje zar\u00f3wno za wy\u0142onieniem V, jak i W. (Nie wszystkie g\u0142osy s\u0105siad\u00f3w s\u0105 odzwierciedlane podczas wy\u0142aniania, poniewa\u017c mo\u017ce to prowadzi\u0107 do eksplozji r\u00f3\u017cnych nominant\u00f3w. SCP zawiera mechanizm regulacji tych g\u0142os\u00f3w. Kr\u00f3tko m\u00f3wi\u0105c, istnieje formu\u0142a do okre\u015blenia \u201epriorytetu\u201d s\u0105siada z punktu widzenia w\u0119z\u0142a, a odzwierciedlane s\u0105 tylko g\u0142osy w\u0119z\u0142\u00f3w o wysokim priorytecie. Im d\u0142u\u017cej trwa wy\u0142anianie, tym ni\u017cszy pr\u00f3g, dlatego w\u0119ze\u0142 rozszerza zestaw s\u0105siad\u00f3w, kt\u00f3rych g\u0142osy b\u0119dzie odzwierciedla\u0142. Formu\u0142a priorytetu jako jedno z wej\u015b\u0107 uwzgl\u0119dnia numer slotu, wi\u0119c wysoko priorytetowy w\u0119ze\u0142 r\u00f3wnorz\u0119dny dla jednego slotu mo\u017ce by\u0107 nisko priorytetowy dla innego i odwrotnie).<\/p>\n<p>Konceptualnie wyst\u0105pienie r\u00f3wnolegle zar\u00f3wno V, jak i W to oddzielne g\u0142osy federacyjne, ka\u017cdy z nich jest zdolny do osi\u0105gni\u0119cia przyj\u0119cia lub potwierdzenia. W praktyce, komunikaty protoko\u0142u SCP pakuj\u0105 te oddzielne g\u0142osy razem.<\/p>\n<p>Chocia\u017c g\u0142osowanie na wyst\u0105pienie V to obietnica, \u017ce nigdy nie zag\u0142osuje si\u0119 przeciwko wyst\u0105pieniu V, na poziomie aplikacji \u2014 w tym przypadku SCP \u2014 ustala si\u0119, co oznacza \u00abprzeciw\u00bb. SCP nie postrzega twierdzenia sprzecznego z g\u0142osowaniem \u00abPrzedstawiam X\u00bb, co oznacza, \u017ce nie ma komunikatu \u00abJestem przeciw wyst\u0105pieniu X\u00bb, w zwi\u0105zku z czym w\u0119ze\u0142 mo\u017ce g\u0142osowa\u0107 za wyst\u0105pieniem dowolnych warto\u015bci. Wiele z tych nominacji nie prowadzi do niczego, ale ostatecznie w\u0119ze\u0142 b\u0119dzie m\u00f3g\u0142 przyj\u0105\u0107 lub potwierdzi\u0107 jedn\u0105 lub wi\u0119cej warto\u015bci. Gdy tylko nominant zostanie potwierdzony, staje si\u0119 <i>kandydatem<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Wyst\u0105pienie SCP przy u\u017cyciu g\u0142osowania federacyjnego. Mo\u017ce by\u0107 wiele warto\u015bci \u201cB\u201d przedstawionych przez r\u00f3wnorz\u0119dne w\u0119z\u0142y i \u00abodzwierciedlonych\u00bb przez jeden w\u0119ze\u0142.<\/i> <\/p>\n<p>Wyst\u0105pienie kandydat\u00f3w mo\u017ce prowadzi\u0107 do pojawienia si\u0119 kilku potwierdzonych kandydat\u00f3w. Dlatego SCP wymaga, aby poziom aplikacji dostarczy\u0142 jaki\u015b spos\u00f3b \u0142\u0105czenia kandydat\u00f3w w jeden <i>kompozyt<\/i> (composite). Metoda \u0142\u0105czenia mo\u017ce by\u0107 dowolna. Najwa\u017cniejsze, \u017ce je\u015bli ta metoda jest deterministyczna, to ka\u017cdy w\u0119ze\u0142 po\u0142\u0105czy tych samych kandydat\u00f3w. W systemie g\u0142osowania na obiad \u00ab\u0142\u0105czenie\u00bb mo\u017ce oznacza\u0107 po prostu rezygnacj\u0119 z jednego z dw\u00f3ch kandydat\u00f3w. (Ale w spos\u00f3b deterministyczny: ka\u017cdy w\u0119ze\u0142 musi wybra\u0107 t\u0119 sam\u0105 warto\u015b\u0107 do resetu. Na przyk\u0142ad, wcze\u015bniejszy wyb\u00f3r w porz\u0105dku alfabetycznym). W sieci p\u0142atno\u015bci Stellar, gdzie ma miejsce g\u0142osowanie nad histori\u0105 transakcji, \u0142\u0105czenie dw\u00f3ch proponowanych nominant\u00f3w zak\u0142ada po\u0142\u0105czenie transakcji, kt\u00f3re one zawieraj\u0105, oraz ostatnich z ich dw\u00f3ch znacznik\u00f3w czasu.<\/p>\n<p>Techniczny opis SCP dowodzi (twierdzenie 12), \u017ce do ko\u0144ca fazy wyst\u0105pienia sie\u0107 w ko\u0144cu zbiega si\u0119 do jednego kompozytu. Ale jest problem: g\u0142osowanie federacyjne to protok\u00f3\u0142 asynchroniczny (podobnie jak SCP). Innymi s\u0142owy, w\u0119z\u0142y nie s\u0105 skoordynowane czasowo, a jedynie poprzez wiadomo\u015bci, kt\u00f3re wysy\u0142aj\u0105. Z perspektywy w\u0119z\u0142a nie jest jasne, kiedy <i>zako\u0144czy\u0142o si\u0119<\/i> faza zg\u0142aszania. I cho\u0107 wszystkie w\u0119z\u0142y ostatecznie dojd\u0105 do tego samego kompozytu, mog\u0105 wybra\u0107 r\u00f3\u017cne \u015bcie\u017cki na tej drodze, tworz\u0105c po drodze r\u00f3\u017cnych kandydat\u00f3w kompozytowych, i nigdy nie mog\u0105 powiedzie\u0107, kt\u00f3ry z nich jest ostateczny.<\/p>\n<p>Ale to w porz\u0105dku. Zg\u0142aszanie to tylko przygotowanie. Najwa\u017cniejsze jest ograniczenie liczby kandydat\u00f3w w celu osi\u0105gni\u0119cia konsensusu, kt\u00f3ry nast\u0119puje w procesie <i>g\u0142osowania<\/i> (balloting).<\/p>\n<h1>G\u0142osowanie<\/h1>\n<p>\nBilet to para , gdzie counter to liczba ca\u0142kowita, zaczynaj\u0105ca si\u0119 od 1, a value to kandydat z etapu zg\u0142aszania. Mo\u017ce to by\u0107 w\u0142asny kandydat w\u0119z\u0142a lub kandydat z s\u0105siedniego w\u0119z\u0142a, akceptowany przez ten w\u0119ze\u0142. M\u00f3wi\u0105c w uproszczeniu, podczas g\u0142osowania podejmuje si\u0119 wielokrotne pr\u00f3by, aby sie\u0107 osi\u0105gn\u0119\u0142a konsensus w sprawie jakiego\u015b kandydata w danym bilecie, prowadz\u0105c potencjalnie wiele federacyjnych g\u0142osowa\u0144 dotycz\u0105cych twierdze\u0144 o biletach. Liczniki w biletach \u015bledz\u0105 uczynione pr\u00f3by, a bilety z wy\u017cszymi licznikami maj\u0105 priorytet nad biletami z ni\u017cszymi licznikami. Je\u015bli bilet  utknie, rozpoczyna si\u0119 nowe g\u0142osowanie, teraz na bilecie .<\/p>\n<p>Wa\u017cne jest rozr\u00f3\u017cnienie <i>warto\u015bci<\/i> (na przyk\u0142ad, co powinno by\u0107 zam\u00f3wieniem na obiad: pizza czy sa\u0142atki), <i>bilet\u00f3w<\/i> (para counter-value) i <i>o\u015bwiadczenia<\/i> o biletach. Runda SCP obejmuje kilka rund federacyjnego g\u0142osowania, w szczeg\u00f3lno\u015bci w odniesieniu do takich twierdze\u0144 jak:<\/p>\n<ul>\n<li>\u201eJestem got\u00f3w do zatwierdzenia biletu B\u201d i\n<\/li>\n<li>\u201eOg\u0142aszam zatwierdzenie biletu B\u201d<\/li>\n<\/ul>\n<p>\nZ perspektywy danego w\u0119z\u0142a konsensus osi\u0105gany jest, gdy znajduje on bilet B, dla kt\u00f3rego mo\u017ce potwierdzi\u0107 (to znaczy znale\u017a\u0107 kworum akceptuj\u0105ce) twierdzenie \u201eOg\u0142aszam zatwierdzenie biletu B\u201d. Od tego momentu mo\u017cna bezpiecznie dzia\u0142a\u0107 wed\u0142ug warto\u015bci wskazanej w B \u2013 na przyk\u0142ad z\u0142o\u017cy\u0107 to zam\u00f3wienie na obiad. Nazywa si\u0119 to <i>eksternalizacj\u0105<\/i> warto\u015bci. Gdy zatwierdzono akceptacj\u0119 biletu, w\u0119ze\u0142 mo\u017ce by\u0107 pewny, \u017ce ka\u017cdy inny w\u0119ze\u0142 dokona\u0142 eksternalizacji tej samej warto\u015bci lub na pewno dokonana j\u0105 w przysz\u0142o\u015bci.<\/p>\n<p>Chocia\u017c koncepcyjnie wiele federacyjnych g\u0142osowa\u0144 odbywa si\u0119 na podstawie deklaracji odno\u015bnie wielu r\u00f3\u017cnych g\u0142os\u00f3w, wymieniaj\u0105 si\u0119 one nie tak du\u017c\u0105 ilo\u015bci\u0105 wiadomo\u015bci, poniewa\u017c ka\u017cda wiadomo\u015b\u0107 enkapsuluje szereg g\u0142os\u00f3w. Jedna wiadomo\u015b\u0107 zatem promuje stan wielu federacyjnych g\u0142osowa\u0144 jednocze\u015bnie, na przyk\u0142ad: \u201eAkceptuj\u0119 zatwierdzenie g\u0142os\u00f3w w zakresie od  do .\u201d<\/p>\n<p>Co oznaczaj\u0105 terminy \u201eprzygotowany\u201d (prepared) i \u201ezatwierdzenie\u201d (commit)?<\/p>\n<p>W\u0119ze\u0142 g\u0142osuje za zatwierdzeniem g\u0142osu, gdy jest przekonany, \u017ce inne w\u0119z\u0142y nie dokonaj\u0105 zatwierdzenia g\u0142os\u00f3w z innymi warto\u015bciami. Przekonanie w tej kwestii jest celem przygotowania deklaracji. G\u0142osowanie, w kt\u00f3rym m\u00f3wi si\u0119: \u201eJestem got\u00f3w zatwierdzi\u0107 g\u0142os B\u201d, jest obietnic\u0105, \u017ce nigdy nie dokonam zatwierdzenia g\u0142osu o warto\u015bci mniejszej ni\u017c B, tzn. z mniejszym licznikiem (SCP wymaga, aby warto\u015bci w g\u0142osach mia\u0142y okre\u015blon\u0105 kolejno\u015b\u0107. Tak wi\u0119c, g\u0142os  jest mniejszy od , je\u015bli N1&lt;N2, oraz je\u015bli N1=N2 i V1&lt;V2). Te mniejsze g\u0142osy s\u0105 \u201eodrzucane\u201d (aborted) w trakcie przygotowawczego g\u0142osowania, podczas gdy B jest uwa\u017cane za \u201eprzygotowane\u201d.<\/p>\n<p>Dlaczego \u201eJestem got\u00f3w zatwierdzi\u0107 g\u0142os B\u201d oznacza \u201eObiecuj\u0119 nigdy nie dopuszcza\u0107 do zatwierdzenia g\u0142os\u00f3w mniejszych ni\u017c B\u201d? Poniewa\u017c SCP definiuje abort jako przeciwie\u0144stwo commit. G\u0142osowanie na przygotowanie g\u0142osu wi\u0105\u017ce si\u0119 tak\u017ce z g\u0142osowaniem na anulowanie niekt\u00f3rych innych g\u0142os\u00f3w, i, jak omawiali\u015bmy wcze\u015bniej, g\u0142osowanie w jedn\u0105 stron\u0119 to obietnica, \u017ce nigdy nie zag\u0142osuj\u0119 przeciwko temu.<\/p>\n<p>Zanim w\u0119ze\u0142 przeka\u017ce zatwierdzenie, musi najpierw znale\u017a\u0107 g\u0142os, kt\u00f3ry mo\u017ce potwierdzi\u0107 jako przygotowany. Innymi s\u0142owy, przeprowadza federacyjne g\u0142osowanie na temat \u201eJestem got\u00f3w zatwierdzi\u0107 g\u0142os B\u201d, by\u0107 mo\u017ce dla wielu r\u00f3\u017cnych g\u0142os\u00f3w, a\u017c znajdzie ten, kt\u00f3ry akceptuje kworum.<\/p>\n<p>Sk\u0105d pochodz\u0105 biuletyny do przygotowania g\u0142osowania? Najpierw w\u0119ze\u0142 przekszta\u0142ca przygotowanie do g\u0142osowania na , gdzie C to kandydat-kompozyt, stworzony na etapie nominacji. Jednak nawet po rozpocz\u0119ciu przygotowania do g\u0142osowania nominat mo\u017ce prowadzi\u0107 do pojawienia si\u0119 dodatkowych kandydat\u00f3w, kt\u00f3rzy stan\u0105 si\u0119 nowymi biuletynami. Tymczasem piramidy mog\u0105 mie\u0107 r\u00f3\u017cnych kandydat\u00f3w, a oni mog\u0105 stworzy\u0107 zbi\u00f3r blokuj\u0105cy, kt\u00f3ry akceptuje \u201eJestem got\u00f3w do zatwierdzenia biuletynu B2\u201d, co przekona w\u0119ze\u0142 do jego przyj\u0119cia. Wreszcie, istnieje mechanizm czasu oczekiwania, kt\u00f3ry generuje nowe rundy federacyjnego g\u0142osowania na nowych biuletynach z wy\u017cszymi licznikami, je\u015bli obecne biuletyny utkn\u0119\u0142y.<\/p>\n<p>Gdy w\u0119ze\u0142 znajdzie biuletyn B, kt\u00f3ry mo\u017ce potwierdzi\u0107 jako przygotowany, transmituje now\u0105 wiadomo\u015b\u0107 \u201eZatwierd\u017a biuletyn B\u201d. To g\u0142osowanie m\u00f3wi piram, \u017ce w\u0119ze\u0142 nigdy nie wycofa si\u0119 z B. W rzeczywisto\u015bci, je\u015bli B jest biuletynem , to \u201eZatwierd\u017a biuletyn \u201d oznacza bezwarunkow\u0105 zgod\u0119 na g\u0142osowanie za gotowo\u015b\u0107 ka\u017cdego biuletynu od  do . Ta dodatkowa warto\u015b\u0107 pomaga innym w\u0119z\u0142om nadrobi\u0107 zaleg\u0142o\u015bci z piratem podczas zatwierdzania, je\u015bli wci\u0105\u017c znajduj\u0105 si\u0119 na wcze\u015bniejszych etapach protoko\u0142u.<\/p>\n<p>Na tym etapie warto jeszcze raz podkre\u015bli\u0107, \u017ce s\u0105 to protoko\u0142y asynchroniczne. Tylko dlatego, \u017ce jeden w\u0119ze\u0142 wysy\u0142a g\u0142osy na zatwierdzenie, nie oznacza, \u017ce jego r\u00f3wie\u015bnicy r\u00f3wnie\u017c to robi\u0105. Niekt\u00f3rzy z nich mog\u0105 wci\u0105\u017c g\u0142osowa\u0107 w sprawie o\u015bwiadcze\u0144 dotycz\u0105cych przygotowania do g\u0142osowania, inni mog\u0105 ju\u017c zewn\u0119trznie zdefiniowa\u0107 warto\u015b\u0107. SCP wyja\u015bnia, jak w\u0119ze\u0142 powinien obs\u0142ugiwa\u0107 ka\u017cdy typ wiadomo\u015bci r\u00f3wie\u015bniczej niezale\u017cnie od jego fazy.<\/p>\n<p>Je\u015bli wiadomo\u015b\u0107 \u201eOg\u0142aszam zatwierdzenie \u201d nie mo\u017ce by\u0107 przyj\u0119ta lub potwierdzona, istnieje prawdopodobie\u0144stwo przyj\u0119cia lub potwierdzenia wiadomo\u015bci  lub  \u2014 lub, w ka\u017cdym razie, dowolnego biuletynu z warto\u015bci\u0105 C, a nie \u017cadnym innym, poniewa\u017c w\u0119ze\u0142 ju\u017c obieca\u0142 nigdy nie cofn\u0105\u0107 . Kiedy w\u0119ze\u0142 transmituje g\u0142osy na zatwierdzenie, b\u0119dzie to C lub nic, w zale\u017cno\u015bci od tego, jak daleko zajdzie konsensus. Jednak tego wci\u0105\u017c jest niewystarczaj\u0105co, by w\u0119ze\u0142 m\u00f3g\u0142 zewn\u0119trznie przekaza\u0107 C. Niekt\u00f3re bizantyjskie zdrajcy (mniejsza grupa, opieraj\u0105c si\u0119 na naszych za\u0142o\u017ceniach o bezpiecze\u0144stwie) mog\u0105 ok\u0142amywa\u0107 w\u0119ze\u0142. Przyj\u0119cie, a nast\u0119pnie potwierdzenie pewnego biuletynu (lub zakresu biuletyn\u00f3w) \u2014 oto co daje w\u0119z\u0142owi pewno\u015b\u0107, by w ko\u0144cu zewn\u0119trznie przekaza\u0107 C.<\/p>\n<p><img decoding=\"async\" alt=\"Poznajemy protok\u00f3\u0142 konsensusu Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>G\u0142osowanie SCP poprzez federacyjne g\u0142osowanie. Nie pokazano: w ka\u017cdej chwili mo\u017ce zadzia\u0142a\u0107 licznik, zwi\u0119kszaj\u0105c wynik w biuletynie (i by\u0107 mo\u017ce tworz\u0105c nowy kompozyt z dodatkowych zg\u0142oszonych kandydat\u00f3w).<\/i> <\/p>\n<p>I to wszystko! Gdy sie\u0107 osi\u0105gnie konsensus, jest gotowa robi\u0107 to wci\u0105\u017c i wci\u0105\u017c. W sieci p\u0142atno\u015bci Stellar dzieje si\u0119 to co oko\u0142o 5 sekund: wyczyn, kt\u00f3ry wymaga zar\u00f3wno bezpiecze\u0144stwa, jak i odporno\u015bci, gwarantowanych przez SCP.<\/p>\n<p>SCP mo\u017ce to osi\u0105gn\u0105\u0107, opieraj\u0105c si\u0119 na kilku rundach federacyjnego g\u0142osowania. Federacyjne g\u0142osowanie sta\u0142o si\u0119 mo\u017cliwe dzi\u0119ki koncepcji przekroj\u00f3w kworum: zestaw\u00f3w r\u00f3wnorz\u0119dnych w\u0119z\u0142\u00f3w, kt\u00f3rym ka\u017cdy w\u0119ze\u0142 zdecydowa\u0142 si\u0119 ufa\u0107 jako cz\u0119\u015bci swojego (subiektywnego) kworum. Ta konfiguracja oznacza, \u017ce mo\u017cna osi\u0105gn\u0105\u0107 konsensus nawet w sieci z otwartym cz\u0142onkostwem i bizantyjskimi oszustwami.<\/p>\n<h1>Dalsze czytanie<\/h1>\n<p><\/p>\n<ul>\n<li>Oryginalny dokument techniczny SCP mo\u017cna znale\u017a\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">tutaj<\/a><\/noindex>, a <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">tutaj<\/a><\/noindex> projekt specyfikacji dla jego wdro\u017cenia.\n<\/li>\n<li>Oryginalny autor protoko\u0142u SCP, David Mazieres, w spos\u00f3b uproszczony (ale wci\u0105\u017c techniczny) wyja\u015bnia jego <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">tutaj<\/a><\/noindex>.\n<\/li>\n<li>By\u0107 mo\u017ce zdziwi\u0142o ci\u0119, \u017ce w tym artykule nie znalaz\u0142e\u015b termin\u00f3w \u201emining\u201d ani \u201eproof of work\u201d. SCP nie wykorzystuje tych metod, ale niekt\u00f3re inne algorytmy konsensusu je stosuj\u0105. Zain Wiserpoon napisa\u0142 przyst\u0119pny <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">przegl\u0105d algorytm\u00f3w konsensusu<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Opis krok po kroku<\/a><\/noindex> prostej sieci, osi\u0105gaj\u0105cej konsensus podczas jednej pe\u0142nej rundy SCP.\n<\/li>\n<li>Dla czytelnik\u00f3w zainteresowanych realizacjami SCP: zob. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">kod C++<\/a><\/noindex>, u\u017cywanej przez sie\u0107 p\u0142atnicz\u0105 Stellar, lub <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">kod Go<\/a><\/noindex>, kt\u00f3ry napisa\u0142em dla lepszego zrozumienia SCP.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Zg\u0142\u0119biamy protok\u00f3\u0142 konsensusu Stellar | ProHoster","description":"Protok\u00f3\u0142 konsensusu Stellar zosta\u0142 po raz pierwszy opisany w.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}