{"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\/it\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","title":{"rendered":"Approfondiamo il protocollo di consenso di Stellar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/09b61160286ae40c21269e1590fc2b92.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl protocollo di consenso Stellar \u00e8 stato descritto per la prima volta in <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">un articolo scientifico<\/a><\/noindex> di David Mazieres nel 2015. Si tratta di un \"sistema federativo di consenso bizantino\", che consente a reti di calcolo decentralizzate senza leader di raggiungere efficacemente un consenso su qualsiasi decisione. La rete di pagamento Stellar utilizza il Stellar Consensus Protocol (SCP) per mantenere una storia delle transazioni concordata, visibile a tutti i partecipanti.<\/p>\n<p>Si ritiene che i protocolli di consenso siano difficili da comprendere. L'SCP \u00e8 pi\u00f9 semplice della maggior parte di essi, ma conserva comunque questa reputazione \u2014 in parte a causa della errata idea che il \u201cvoto federativo\u201d, dedicato alla prima met\u00e0 dell'articolo scientifico, sia l'SCP. Ma non \u00e8 cos\u00ec! \u00c8 solo un importante mattone costruttivo, utilizzato nella seconda met\u00e0 dell'articolo per costruire <i>il reale<\/i> protocollo di consenso Stellar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIn questo articolo parleremo brevemente di cosa sia un \"sistema di accordo\", cosa possa renderlo \"bizantino\" e perch\u00e9 realizzare un sistema bizantino come \u201cfederativo\u201d. Successivamente, spiegheremo la procedura di voto federativo descritta nell'articolo sul SCP e, infine, spiegheremo il protocollo SCP stesso.<\/p>\n<h1>Sistemi di accordo<\/h1>\n<p>\nIl sistema di accordi consente a un gruppo di partecipanti di giungere a un consenso su un determinato argomento, ad esempio, cosa ordinare per pranzo.<\/p>\n<p>Noi di Interstellar abbiamo implementato il nostro sistema di accordo per il pranzo: ordiniamo ci\u00f2 che dice il nostro manager operativo, John. \u00c8 un sistema di accordo semplice ed efficace. Ci fidiamo tutti di John e crediamo che ogni giorno trover\u00e0 qualcosa di interessante e nutriente.<\/p>\n<p>Ma cosa succede se John abusa della nostra fiducia? Pu\u00f2 decidere da solo che tutti dobbiamo diventare vegani. Tra una settimana o due, probabilmente lo deporremo e faremo assumere i poteri a Elizabeth. Ma improvvisamente, lei ama l'avocado con le acciughe e pensa che tutti debbano diventare cos\u00ec. Il potere corrompe. \u00c8 meglio quindi trovare un metodo pi\u00f9 democratico: un modo per assicurarsi che vengano considerate le diverse preferenze, garantendo al contempo un risultato tempestivo e univoco, per evitare che nessuno ordini il pranzo o che cinque persone facciano ordini diversi, o che la discussione si protragga fino a sera.<\/p>\n<p>Sembrerebbe che la soluzione sia semplice: fare un voto! Ma questa \u00e8 un'impressione ingannevole. Chi raccoglier\u00e0 le schede e comunicher\u00e0 i risultati? E perch\u00e9 gli altri dovrebbero fidarsi di ci\u00f2 che dir\u00e0? Forse possiamo <i>prima<\/i> votare per un leader di cui ci fidiamo per dirigere il voto \u2014 ma chi guider\u00e0 questo <i>primo<\/i> voto? E se non riuscissimo a metterci d'accordo su un leader? O se ci accordassimo, e questo leader rimanesse bloccato a una riunione o andasse in malattia?<\/p>\n<p>Problemi simili si incontrano nelle reti informatiche distribuite. Tutti i partecipanti o nodi devono concordare una soluzione, ad esempio chi \u00e8 responsabile per aggiornare un file condiviso o per prelevare un compito dalla coda di elaborazione. Nella rete di criptovalute, i nodi devono spesso scegliere quale sia la storia completa tra diverse versioni possibili che a volte sono in conflitto. Questo consenso di rete garantisce al destinatario che la moneta \u00e8 (a) valida (non contraffatta) e (b) non \u00e8 stata spesa altrove. Garantisce anche che il destinatario possa spendere le monete in futuro, poich\u00e9 il nuovo destinatario avr\u00e0 le stesse garanzie per le stesse ragioni.<\/p>\n<p>Qualsiasi sistema di consenso in una rete di calcolo distribuito deve essere a prova di guasto: deve fornire risultati coerenti, nonostante errori come linee di comunicazione lente, nodi non responsivi e ordine errato dei messaggi. <i>Bizantino<\/i> il sistema degli accordi \u00e8 ulteriormente resistente agli errori \"bizantini\": a nodi che forniscono informazioni false, sia per errore che per tentativi deliberati di compromettere il sistema o ottenere un vantaggio. La resilienza \"bizantina\" \u00e8 la capacit\u00e0 di fidarsi della decisione collettiva, anche quando alcuni membri del gruppo possono mentire o in altro modo non seguire le regole di decisione, prende il nome da <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\">una storia sui generali dell'Impero Bizantino<\/a><\/noindex>, che cercavano di coordinare un attacco. <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\">Una buona descrizione<\/a><\/noindex> di Anthony Stevens.<\/p>\n<p>Consideriamo Alice, una proprietaria di criptovalute, che deve scegliere tra acquistare un delizioso gelato da Bob e pagare un debito a Carol. Potrebbe essere che Alice voglia pagare entrambi contemporaneamente, spendendo fraudolentemente la stessa moneta. Per farlo, deve convincere il computer di Bob che la moneta non \u00e8 mai stata pagata a Carol, e convincere il computer di Carol che la moneta non \u00e8 mai stata pagata a Bob. Un sistema di accordi bizantini rende praticamente impossibile questo, utilizzando una forma di regola della maggioranza chiamata <i>quorum<\/i>. Un nodo in una rete di questo tipo rifiuta di passare a una determinata versione della storia finch\u00e9 non vede che un numero sufficiente di nodi peer-to-peer \u2014 un quorum \u2014 \u00e8 d'accordo su tale transizione. Non appena ci\u00f2 avviene, formeranno un blocco elettorale sufficientemente grande per costringere gli altri nodi della rete ad accettare la loro decisione. Alice pu\u00f2 costringere alcuni nodi a mentire a suo nome, ma se la rete \u00e8 sufficientemente grande, il suo tentativo sar\u00e0 soppressato dai voti dei nodi onesti.<\/p>\n<p>Quanti nodi servono per formare un quorum? Almeno la maggioranza, e pi\u00f9 precisamente, una maggioranza qualificata per combattere gli errori e le frodi. Ma per contare la maggioranza, \u00e8 necessario conoscere il numero totale di partecipanti. Negli uffici di Interstellar o nelle elezioni distrettuali, questi numeri sono facilmente accessibili. Ma se il vostro gruppo \u00e8 una rete poco definita, in cui i nodi possono entrare e uscire a piacimento senza coordinarsi con un centro, allora \u00e8 necessario <i>federativa<\/i> sistema di consenso bizantino in grado di definire i quorum non da una lista predefinita di nodi, ma dinamicamente, da un'istantanea in costante cambiamento e inevitabilmente incompleta dei nodi in un determinato momento.<\/p>\n<p>Pu\u00f2 sembrare impossibile creare un quorum dal punto di vista di un singolo nodo in una rete estesa, ma \u00e8 possibile. Un tale quorum pu\u00f2 persino garantire risultati di votazioni decentralizzate. Il documento tecnico SCP mostra come farlo tramite una procedura chiamata <i>votazione federativa<\/i>.<\/p>\n<h1>Per i pi\u00f9 impazienti<\/h1>\n<p>\nIl resto dell'articolo descrive in modo pi\u00f9 dettagliato la votazione federativa e il protocollo di consenso Stellar. Se non sei interessato ai dettagli, ecco una panoramica generale del processo.<\/p>\n<ol>\n<li>I nodi conducono round di voto federativo sui 'nominati'. Un round di voto federativo implica:\n<ul>\n<li>Il nodo vota per una qualsiasi affermazione, ad esempio, 'Propongo il valore V';\n<\/li>\n<li>Il nodo ascolta le voci dei peer finch\u00e9 non trova quella che pu\u00f2 'accettare';\n<\/li>\n<li>Il nodo cerca un 'quorum' per questa affermazione. Il quorum 'conferma' il nominato.<\/li>\n<\/ul>\n<\/li>\n<li>Non appena il nodo pu\u00f2 confermare uno o pi\u00f9 candidati, cerca di \"preparare\" il \"ballottaggio\" attraverso diversi turni di voto federativo.\n<\/li>\n<li>Quando il nodo \u00e8 in grado di verificare la prontezza del ballottaggio, cerca di commetterlo con l'ausilio di un numero maggiore di turni di voto federativo.\n<\/li>\n<li>Una volta che il nodo pu\u00f2 confermare il commit del ballottaggio, pu\u00f2 \"esternalizzare\" il valore di questo ballottaggio, utilizzandolo come risultato del consenso.<\/li>\n<\/ol>\n<p>\nQuesti passaggi includono diversi turni di voto federativo, che insieme formano un turno SCP. Vediamo pi\u00f9 nel dettaglio cosa accade a ogni passo.<\/p>\n<h1>Voto federativo<\/h1>\n<p>\nIl voto federativo \u00e8 la procedura per decidere se la rete pu\u00f2 accordarsi su una proposta. Nel turno di voto, ogni nodo deve scegliere uno dei potenziali molteplici valori. Non pu\u00f2 farlo finch\u00e9 non \u00e8 certo che gli altri nodi della rete non sceglieranno un altro risultato. Per esserne certi, i nodi scambiano una raffica di messaggi avanti e indietro affinch\u00e9 ognuno. <i>ha confermato<\/i>, che <i>quorum<\/i> nodi <i>accetta<\/i> lo stesso <i>soluzione<\/i>. Il resto di questa sezione spiega i termini in questa frase e come avviene l'intera procedura.<\/p>\n<h1>Quorum e slice di quorum<\/h1>\n<p>\nIniziamo con la definizione di quorum. Come discusso in precedenza, in una rete decentralizzata con adesioni dinamiche, non \u00e8 possibile conoscere in anticipo il numero di nodi e, di conseguenza, quanti sono necessari per la maggioranza. Il voto federato risolve questo problema introducendo una nuova idea <i>slice di quorum<\/i> (quorum slice): un piccolo insieme di nodi peer che un nodo considera affidabili per la trasmissione delle informazioni sullo stato del voto al resto della rete. Ogni nodo definisce il proprio slice di quorum (di cui diventa membro di fatto).<\/p>\n<p>La formazione del quorum inizia dallo slice di quorum. Per ciascun nodo, vengono aggiunti i nodi del suo slice. Successivamente, vengono aggiunti i membri degli slice <i>di questi nodi<\/i> e cos\u00ec via. Man mano che si procede, si incontrano sempre pi\u00f9 nodi che non si possono aggiungere perch\u00e9 sono gi\u00e0 inclusi nello slice. Quando non ci sono pi\u00f9 nuovi nodi da aggiungere, il processo si interrompe: abbiamo formato il quorum attraverso la \u00abchiusura transitiva\u00bb (transitive closure) dello slice di quorum del nodo iniziale.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6991e3f9a22d920e4a5e9c161f32dee1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Per trovare il quorum da un certo nodo...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/52b3d435a8f4a67b56deb43c83fee828.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... aggiungiamo i membri della sua fetta...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/0820e9ca560caf9ebfa92db8e7a1da85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... poi aggiungiamo i membri delle fette di questi nodi.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/539933eb3c279fa7da68fc9049516fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Continuiamo finch\u00e9 non ci sono pi\u00f9 nodi da aggiungere.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/48058639262412514641063a10503a01.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/d068fb06f35337ae68c35b4606f329ae.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Non ci sono pi\u00f9 nodi da aggiungere. Questo \u00e8 il quorum.<\/i><\/p>\n<p>In realt\u00e0, ogni nodo pu\u00f2 far parte di pi\u00f9 di una fetta. Per formare un quorum, seleziona solo una delle fette e aggiungi membri; poi scegli qualsiasi fetta per ciascuno dei membri e aggiungi membri <i>questo<\/i> della fetta e cos\u00ec via. Questo significa che ogni nodo \u00e8 membro di molti possibili quorums.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/3427406c132cfd1cd174b856a1239908.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Seleziona solo una fetta di quorum a ogni passaggio.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/79a8728890ecb36b2e127b1b76c44fc8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/22fe0422c73cdf5fb5416e389934c5c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/60379efdde3b88fb9c86de6c5b4a0b62.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Un possibile quorum. Oppure un\u2019alternativa\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/341f1e897be1474ee2d67324da2134b1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... scegliamo altre fette...<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/8a6d605050b075bf935e6151bd1cbe2c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di 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=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6343f774104454d62e7c8681bf25dbcb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>... crea un altro quorum.<\/i><\/p>\n<p>Come fa un nodo a sapere in quali fette si trovano gli altri nodi? Proprio come con altre informazioni sugli altri nodi: dalle trasmissioni che ogni nodo invia in rete quando cambia il suo stato di voto. Ogni trasmissione include informazioni sulle fette del nodo mittente. Nel documento tecnico SCP non \u00e8 specificato il meccanismo di comunicazione. Le implementazioni di solito utilizzano <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">il protocollo gossip<\/a><\/noindex> per garantire la trasmissione dei messaggi in tutta la rete.<\/p>\n<p>Ricordiamo che nel sistema di accordo bizantino non federativo, il quorum \u00e8 definito come la maggioranza di tutti i nodi. Il sistema di accordo bizantino \u00e8 progettato in relazione alla domanda: quanti nodi disonesti pu\u00f2 tollerare il sistema? In un sistema con N nodi, progettato per sopravvivere a f guasti (impostori), un nodo deve essere in grado di progredire ricevendo risposte da N\u2212f peer, poich\u00e9 f di essi potrebbero non funzionare. Tuttavia, ricevendo risposte da N\u2212f peer, si pu\u00f2 presumere che tutti f peer (da cui il nodo non ha ricevuto risposta) siano in realt\u00e0 onesti. Pertanto, i malintenzionati sono f tra i N\u2212f peer (da cui \u00e8 stata ricevuta la risposta). Affinch\u00e9 i nodi raggiungano un consenso, la maggioranza degli altri nodi deve essere onesta; quindi, abbiamo bisogno che N\u2212f sia maggiore di 2f, ovvero N &gt; 3f. Quindi, in genere, un sistema progettato per sopravvivere a f guasti avr\u00e0 un totale di N=3f+1 nodi e una dimensione del quorum di 2f+1. Una volta che la proposta supera la soglia del quorum, gli altri membri della rete sono convinti che qualsiasi proposta concorrente fallir\u00e0. Cos\u00ec, la rete converge verso il risultato.<\/p>\n<p>Nella federativa sistema bizantino di accordi, non solo non pu\u00f2 esserci una maggioranza (perch\u00e9 nessuno conosce la grandezza complessiva della rete), ma il concetto stesso di maggioranza \u00e8 completamente inutile! Se l'appartenenza al sistema \u00e8 aperta, qualcuno pu\u00f2 ottenere la maggioranza semplicemente lanciando un attacco Sybil: connettersi ripetutamente alla rete attraverso diversi nodi. Allora, perch\u00e9 il chiusura transitiva del taglio pu\u00f2 essere chiamato <i>quorum<\/i>, e come riesce a sopprimere le proposte concorrenti?<\/p>\n<p>Tecnicamente, non c'\u00e8 modo! Immagina una rete di sei nodi, dove due terne sono isolate nei loro propri tagli di quorum. Il primo sottoinsieme pu\u00f2 prendere una decisione di cui il secondo non sentir\u00e0 mai parlare, e viceversa. In questa rete non c'\u00e8 modo di raggiungere il consenso (se non per caso).<\/p>\n<p>Pertanto, lo SCP richiede che per il voto federativo (e per l'applicazione delle importanti teoremi dell'articolo) la rete debba possedere una propriet\u00e0 chiamata <i>intersezione dei quorumi<\/i>. Nella rete con questa propriet\u00e0, qualsiasi due quorum che possono essere costruiti si sovrappongono sempre in almeno un nodo. Per determinare le tendenze predominanti della rete, questo \u00e8 altrettanto efficace che avere una maggioranza. Intuitivamente, significa che se un qualsiasi quorum concorda con l'affermazione X, nessun altro quorum potr\u00e0 mai concordare su qualcos'altro, poich\u00e9 includer\u00e0 necessariamente un nodo del primo quorum che ha gi\u00e0 votato per X.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/5b0aeec99e285b4bbeb92ec5b8dfe69d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Se nella rete ci sono sovrapposizioni di quorum\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bdb3866cb02fb5991446f0cb0fa5a4fd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 allora qualsiasi due quorum che puoi costruire\u2026<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/29ee8d1ce9fba6c5c24386ce1c1c639b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>\u2026 si sovrapporranno sempre.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6f1ef2b9896669c10fd19f1acd52db70.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6849569e849ac3b5487d31e0bf22a596.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(Naturalmente, i nodi sovrapposti potrebbero risultare bizantini-bugiosi o scadenti in altri aspetti. In questo caso, l'intersezione dei quorum non aiuta affatto la rete a raggiungere un consenso. Per questo motivo, molti risultati nel documento tecnico SCP si basano su assunzioni esplicite, come che nella rete rimanga un'intersezione di quorum <i>anche dopo la rimozione dei nodi cattivi<\/i>. Per semplicit\u00e0, lasciamo queste assunzioni <i>implicite<\/i> nel resto dell'articolo).<\/p>\n<p>Potrebbe sembrare irragionevole aspettarsi che una rete di nodi indipendenti possa ottenere un affidabile incrocio di quorum. Ma ci sono due motivi per cui \u00e8 cos\u00ec.<\/p>\n<p>Il primo motivo \u00e8 l'esistenza stessa di Internet. Internet \u00e8 un esempio ideale di rete di nodi indipendenti con incroci di quorum. La maggior parte dei nodi in Internet si connette solo con alcuni altri nodi locali, ma questi piccoli gruppi si sovrappongono abbastanza da garantire che ogni nodo sia accessibile da ogni altro nodo tramite uno qualsiasi dei percorsi disponibili.<\/p>\n<p>La seconda ragione \u00e8 specifica per la rete di pagamento Stellar (il suo uso pi\u00f9 comune \u00e8 SCP). Ogni attivo nella rete Stellar ha un emittente, e le raccomandazioni di Stellar richiedono che ogni emittente nomini uno o pi\u00f9 nodi in rete per gestire le richieste di rimborso. \u00c8 nel tuo interesse includere direttamente o indirettamente questi nodi nei quorum per ogni attivo che ti interessa. In tal modo, i quorum per tutti i nodi interessati a un determinato attivo si sovrapporranno almeno in questi nodi di rimborso. I nodi interessati a pi\u00f9 attivi includeranno nei loro quorum tutti i nodi di rimborso degli emittenti corrispondenti e cercheranno di unire insieme tutti gli attivi. Inoltre, qualsiasi attivo che non sia collegato in questo modo ad altri nella rete, e <i>non deve essere collegato<\/i> \u2014 \u00e8 progettato in modo tale che non ci siano sovrapposizioni di quorum in questa rete (per esempio, le banche nella zona del dollaro a volte vogliono commerciare con le banche nella zona euro e con le banche nella zona del peso, quindi si trovano nella stessa rete, ma a nessuno di loro interessa una rete distinta di bambini che commerciano carte da baseball).<\/p>\n<p>Certo, <i>l'attesa<\/i> l'intersezione dei quorum non \u00e8 <i>una garanzia<\/i>. Altre complesse sistemi di accordo bizantino devono la loro complessit\u00e0 in larga parte alla garanzia dei quorum. Un'importante novit\u00e0 dello SCP \u00e8 che si libera della responsabilit\u00e0 di creare i quorum dal proprio algoritmo di consenso e lo porta a livello applicativo. Pertanto, anche se il voto federato \u00e8 piuttosto comune per votare su qualsiasi questione, la sua affidabilit\u00e0 dipende in modo critico da un significato pi\u00f9 ampio di questi valori. Alcuni ipotetici tipi di utilizzo possono rivelarsi meno adatti a creare reti ben collegate rispetto ad altri.<\/p>\n<h1>Votazione, adozione e conferma<\/h1>\n<p>\nNel turno di voto federato, un nodo inizia opzionalmente a votare per un certo valore V. Questo significa trasmettere in rete il messaggio: \u00abIo sono il nodo N, i miei tagli di quorum Q, e voto per V\u00bb. Quando un nodo vota in questo modo, promette di non aver mai votato contro V e di non farlo mai.<\/p>\n<p>Nei trasferimenti da nodi peer-to-peer ogni nodo vede come votano gli altri. Una volta che un nodo raccoglie un numero sufficiente di tali messaggi, pu\u00f2 tracciare le sezioni di quorum e cercare di trovare i quorum. Se vede un quorum di pari che votano anche per V, pu\u00f2 passare a <i>accettare<\/i> V e trasmettere questo nuovo messaggio nella rete: \u00abIo sono il nodo N, le mie sezioni di quorum sono Q, e accetto V\u00bb. L'accettazione fornisce una garanzia pi\u00f9 forte rispetto a un semplice voto. Quando un nodo vota per V, non pu\u00f2 mai votare per altre opzioni. Ma se un nodo accetta V, nessun nodo nella rete accetter\u00e0 mai un'altra opzione (teorema 8 nel documento tecnico SCP lo dimostra).<\/p>\n<p>Naturalmente, \u00e8 probabile che non si trovi immediatamente un quorum di nodi che siano d'accordo su V. Altri nodi possono votare per altri valori. Ma per un nodo c'\u00e8 un altro modo per passare da un semplice voto all'accettazione. N pu\u00f2 accettare un altro valore W, anche se non ha votato per esso, e anche se non vede un quorum per esso. Per farlo basta vedere <i>un insieme bloccante<\/i> nodi che accettano W. Un insieme bloccante \u00e8 costituito da un nodo di ciascuno dei tagli di quorumi N. Come suggerisce il nome, pu\u00f2 <i>bloccare<\/i> qualsiasi altro valore. Se tutti i nodi in tale insieme accettano W, allora (secondo il teorema 8) non sar\u00e0 mai possibile formare un quorum che accetti un valore diverso, e quindi \u00e8 sicuro accettare W anche per N.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/6dd4ec5595ab863daf684fec670d83a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Nodo N con tre tagli di quorumi.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/b65e32160570af2883eef9990a74e3bd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-D-F \u00e8 un insieme bloccante per N: include un nodo di ciascuno dei tagli N.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/7e17b4a9ee83aac7fa2b68b2f9fae066.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>B-E \u00e8 anch'esso un insieme bloccante per N, perch\u00e9 E appare in due tagli di N.<\/i><\/p>\n<p>Ma un insieme bloccante non \u00e8 un quorum. Sarebbe troppo facile ingannare il nodo N affinch\u00e9 accetti un valore desiderato, se bastasse compromettere solo un nodo in ciascuno dei sottogruppi N. Pertanto, accettare un valore non significa ancora che il voto sia terminato. Invece, N deve confermare il valore, cio\u00e8 vedere un quorum di nodi che lo accettano. Se arriva a questo punto, come dimostra il documento tecnico SCP (nella Teorema 11), l'intero resto della rete alla fine confermer\u00e0 lo stesso valore, quindi N concluder\u00e0 il voto federativo con un valore specifico come risultato.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/bd68dc5172460c17fa2de54fcc0d9017.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Voto federativo.<\/i><\/p>\n<p>Il processo di voto, accettazione e conferma costituisce un intero ciclo di voto federativo. Il protocollo di consenso Stellar unisce molti di questi cicli per creare un sistema di consenso completo.<\/p>\n<h1>Protocollo di consenso Stellar<\/h1>\n<p>\nLe due propriet\u00e0 pi\u00f9 importanti di un sistema di consenso sono <i>sicurezza<\/i> e <i>resilienza<\/i>Un algoritmo di consenso \u00e8 \u00absicuro\u00bb se non pu\u00f2 mai restituire risultati diversi a partecipanti diversi (una copia della storia di Bob non contraddir\u00e0 mai quella di Carol). La \u00abvitalit\u00e0\u00bb significa che l'algoritmo fornir\u00e0 sempre un risultato, ovvero non si bloccher\u00e0.<\/p>\n<p>La procedura di voto federato descritta <i>\u00e8 sicura<\/i> nel senso che se un nodo conferma il valore V, nessun altro nodo confermer\u00e0 un altro valore. Tuttavia, \u00abnon confermare un altro valore\u00bb non significa che debba necessariamente confermare qualcosa. I partecipanti possono votare per un numero cos\u00ec elevato di valori diversi che nessuno raggiunga la soglia di accettazione. Questo significa che nel voto federato manca <i>resilienza<\/i>.<\/p>\n<p>Il protocollo di consenso Stellar utilizza il voto federato in modo da garantire sia la sicurezza che la resilienza. (Le garanzie di sicurezza e resilienza del SCP hanno un limite teorico. La costruzione sceglie un'ottima garanzia di sicurezza, sacrificando una leggera riduzione della resilienza, ma tenendo conto di un tempo sufficiente, il consenso sar\u00e0 raggiunto con alta probabilit\u00e0). In breve, l'idea \u00e8 quella di svolgere pi\u00f9 votazioni federate su diversi valori finch\u00e9 uno di essi non attraversi completamente tutte le fasi di votazione SCP, descritte di seguito.<\/p>\n<p>I valori di cui il SCP cerca il consenso possono essere una cronologia di transazioni o un ordine per il pranzo, o qualcos'altro, ma \u00e8 importante notare che questi non sono i valori che vengono accettati o confermati. Invece, il voto federato avviene su <i>affermazioni su questi valori<\/i>.<\/p>\n<p>I primi turni di voto federato si svolgono nella <i>fase di proposizione<\/i> (fase di nominazione), in cui si raccolgono proposte del tipo 'Io nomino V', potenzialmente per molti significati diversi di V. L'obiettivo della nomination \u00e8 quello di trovare una o pi\u00f9 proposte che possano passare all'approvazione e conferma.<\/p>\n<p>Dopo aver trovato candidati verificabili, SCP passa alla fase di voto, dove l'obiettivo \u00e8 trovare un <i>ballottaggio<\/i> (cio\u00e8 un contenitore per il valore proposto) e un quorum che possa dichiarare <i>commit<\/i> per esso (commit). Se il quorum effettua il commit del ballottaggio, il suo valore viene accettato come consenso. Ma prima che un nodo possa votare per il commit del ballottaggio, deve prima confermare <i>l'annullamento<\/i> di tutti i ballottaggi con un valore di contatore inferiore. Questi passaggi\u2014annullare i ballottaggi per trovare quello per cui si pu\u00f2 confermare il commit\u2014comprendono diversi round di voto federativo su pi\u00f9 proposte di ballottaggio.<\/p>\n<p>Nei prossimi capitoli si descrivono pi\u00f9 dettagliatamente la nomination e il voto.<\/p>\n<h1>Nomination<\/h1>\n<p>\nAll'inizio della fase di candidatura, ogni nodo pu\u00f2 scegliere spontaneamente un valore V e votare per l'approvazione con \"Propongo V\". L'obiettivo di questa fase \u00e8 confermare la candidatura di un certo valore attraverso un voto federativo.<\/p>\n<p>\u00c8 possibile che un numero sufficiente di nodi voti per affermazioni abbastanza diverse, e quindi nessuna proposta possa raggiungere la soglia di approvazione. Pertanto, oltre a trasmettere i propri voti di nomina, i nodi \"riflettono\" le nomine dei loro pari. Il riflesso (echo) significa che se un nodo vota per la proposta V, ma vede un messaggio da un vicino che vota per la proposta W, allora voter\u00e0 ora sia per V che per W. (Non tutti i voti dei pari vengono riflessi durante la nomina, poich\u00e9 ci\u00f2 potrebbe portare a un'esplosione di diversi nominati. SCP include un meccanismo per regolare questi voti. In breve, esiste una formula per determinare il \"priorit\u00e0\" di un pari dal punto di vista di un nodo, e vengono riflessi solo i voti dei nodi di alta priorit\u00e0. Quanto pi\u00f9 a lungo dura la nomina, tanto pi\u00f9 bassa \u00e8 la soglia, quindi il nodo espande l'insieme di pari i cui voti rifletter\u00e0. La formula di priorit\u00e0 include il numero di slot come uno degli input, quindi un nodo peer di alta priorit\u00e0 per uno slot pu\u00f2 essere di bassa priorit\u00e0 per un altro, e viceversa).<\/p>\n<p>Concettualmente, iliziare parallelamente sia V che W rappresenta voti federativi distinti, ognuno capace di raggiungere l'adozione o la conferma. Nella pratica, i messaggi del protocollo SCP raggruppano questi voti separati.<\/p>\n<p>Sebbene votare per la candidatura di V implichi una promessa di non votare mai contro, a livello applicativo \u2014 in questo caso SCP \u2014 viene definito cosa significa \"contro\". SCP non vede un'affermazione che contraddica il voto \"Io propongo X\", cio\u00e8 non c'\u00e8 messaggio \"Io sono contro la proposta di X\", quindi il nodo pu\u00f2 votare per la proposta di qualsiasi valore. Molte di queste nomination non porteranno a nulla, ma alla fine il nodo sar\u00e0 in grado di adottare o confermare uno o pi\u00f9 valori. Una volta che il candidato \u00e8 confermato, diventa <i>candidato<\/i>.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/794f55d076ec3e1773c49d32e29c084d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Proposta di SCP tramite voto federativo. Possono esserci molti valori \u201cB\u201d proposti da nodi peer e \u201criflessi\u201d da un nodo.<\/i> <\/p>\n<p>La nomina dei candidati pu\u00f2 portare all'emergere di pi\u00f9 candidati confermabili. Pertanto, SCP richiede che il livello applicativo fornisca un metodo per unire i candidati in uno solo. <i>composito<\/i> (composite). Il metodo di unione pu\u00f2 essere qualsiasi. L'importante \u00e8 che, se questo metodo \u00e8 deterministico, ogni nodo unisca gli stessi candidati. Nel sistema di votazione per il pranzo, 'unione' pu\u00f2 semplicemente significare scartare uno dei due candidati. (Ma in modo deterministico: ogni nodo deve scegliere lo stesso valore per il reset. Ad esempio, una scelta precedente in ordine alfabetico). Nella rete di pagamento Stellar, dove avviene la votazione sulla cronologia delle transazioni, unire due candidati proposti implica unire le transazioni che contengono e le ultime delle loro due tempistiche.<\/p>\n<p>La descrizione tecnica di SCP dimostra (teorema 12) che alla fine della fase di proposizione la rete converge infine verso un unico composito. Ma c'\u00e8 un problema: il voto federativo \u00e8 un protocollo asincrono (come SCP). In altre parole, i nodi non sono sincronizzati temporalmente, ma solo in base ai messaggi che inviano. Dal punto di vista del nodo non \u00e8 chiaro quando <i>sia terminata<\/i> la fase di proposizione. E sebbene tutti i nodi alla fine raggiungano lo stesso composito, possono seguire percorsi diversi lungo il cammino, creando lungo il percorso diversi candidati compositi, e non possono mai dire quale di essi sia finale.<\/p>\n<p>Ma va bene cos\u00ec. La proposizione \u00e8 solo una preparazione. L'importante \u00e8 limitare il numero di candidati per raggiungere il consenso, che avviene nel processo di <i>votazione<\/i> (balloting).<\/p>\n<h1>Votazione<\/h1>\n<p>\nUn bollettino \u00e8 una coppia , dove counter \u00e8 un numero intero che inizia da 1 e value \u00e8 un candidato dell fase di nomina. Questo pu\u00f2 essere un candidato del nodo stesso o un candidato di un nodo vicino accettato da questo nodo. In altre parole, durante le elezioni si compiono tentativi ripetuti per far s\u00ec che la rete raggiunga un consenso su un candidato in un determinato bollettino attraverso la realizzazione di potenziali molteplici votazioni federative riguardanti le dichiarazioni sui bollettini. I contatori nei bollettini tengono traccia dei tentativi effettuati e i bollettini con contatori pi\u00f9 alti hanno priorit\u00e0 rispetto a quelli con contatori pi\u00f9 bassi. Se il bollettino  si blocca, si avvia una nuova votazione, ora sul bollettino .<\/p>\n<p>\u00c8 importante distinguere <i>i valori<\/i> (per esempio, cosa dovrebbe essere ordinato per il pranzo: pizza o insalate), <i>i bollettini<\/i> (la coppia counter-value) e <i>le dichiarazioni<\/i> sui bollettini. Un round SCP comprende diversi round di votazione federativa, in particolare riguardo a queste dichiarazioni:<\/p>\n<ul>\n<li>\"Sono pronto per il commit del bollettino B\" e\n<\/li>\n<li>\"Dichiaro il commit del bollettino B\"<\/li>\n<\/ul>\n<p>\nDal punto di vista di questo nodo, il consenso si raggiunge quando trova il bollettino B, per il quale pu\u00f2 confermare (cio\u00e8 trovare un quorum favorevole) l'affermazione \"Dichiaro il commit del bollettino B\". Da quel momento in poi, \u00e8 possibile agire in base al valore indicato in B \u2014 ad esempio, effettuare questo ordine per il pranzo. Questo processo \u00e8 chiamato <i>esterna-lizzazione<\/i> del valore. Una volta confermato l'accettazione del bollettino, il nodo pu\u00f2 essere certo che qualsiasi altro nodo ha esternalizzato lo stesso valore o lo far\u00e0 sicuramente in futuro.<\/p>\n<p>Sebbene concettualmente molte votazioni federative vengano effettuate su dichiarazioni di vari bollettini, non scambiano un numero cos\u00ec elevato di messaggi, poich\u00e9 ogni messaggio incapsula una serie di bollettini. Un singolo messaggio, quindi, avanza lo stato immediatamente di molte votazioni federative, ad esempio: \"Accetto il commit dei bollettini nell'intervallo da  a \".<\/p>\n<p>Cosa significano i termini \"preparato\" (prepared) e \"commit\" (commit)?<\/p>\n<p>Un nodo vota per il commit della busta quando \u00e8 convinto che altri nodi non eseguiranno commit di buste con altri valori. Essere convinti di questo \u00e8 l'obiettivo della preparazione della dichiarazione. Il voto che afferma: \"Sono pronto per il commit della busta B\" \u00e8 una promessa di non effettuare mai un commit della busta inferiore a B, cio\u00e8 con un contatore minore (SCP richiede che i valori nelle buste abbiano un certo ordine. Pertanto, la busta  \u00e8 inferiore a  se N1&lt;N2, e anche se N1=N2 e V1&lt;V2). Queste buste minori vengono &quot;annullate&quot; (aborted) durante il voto preparatorio, mentre B \u00e8 considerata &quot;preparata&quot;.<\/p>\n<p>Perch\u00e9 \"Sono pronto per il commit della busta B\" significa \"Prometto di non permettere mai commit di buste inferiori a B\"? Perch\u00e9 SCP definisce abort come l'opposto di commit. Il voto per la preparazione della busta implica anche il voto per annullare alcune altre buste, e, come abbiamo discusso in precedenza, votare per una cosa implica promettere di non votare mai contro di essa.<\/p>\n<p>Prima di trasmettere il commit, il nodo deve prima trovare la scheda che pu\u00f2 convalidare come preparata. In altre parole, conduce una votazione federativa sulla questione \"Sono pronto a fare il commit della scheda B\", possibilmente per molte diverse schede, fino a trovare quella che accetta il quorum.<\/p>\n<p>Da dove provengono le schede per la preparazione al voto? Innanzitutto, il nodo trasmette la preparazione al voto per , dove C \u00e8 un candidato composito prodotto nella fase di nomina. Tuttavia, anche dopo l'inizio della preparazione al voto, la nomina pu\u00f2 portare alla comparsa di ulteriori candidati, che diventeranno nuove schede. Nel frattempo, i peer possono avere candidati diversi e possono formare un insieme bloccante che accetta \"Sono pronto a fare il commit della scheda B2\", convincendo anche il nodo ad accettarlo. Infine, esiste un meccanismo di timeout che genera nuovi turni di votazione federativa su nuove schede con contatori pi\u00f9 elevati, se le schede attuali si sono bloccate.<\/p>\n<p>Non appena un nodo trova un bollettino B che pu\u00f2 confermare come preparato, trasmette un nuovo messaggio \"Commit del bollettino B\". Questa votazione comunica ai peer che il nodo non abbandoner\u00e0 mai B. In effetti, se B rappresenta un bollettino , allora \"Commit del bollettino \" implica un consenso incondizionato a votare per la prontezza di ogni bollettino da  a . Questo valore aggiuntivo aiuta gli altri nodi a raggiungere il peer con il commit, se sono ancora nelle fasi precedenti del protocollo.<\/p>\n<p>In questa fase \u00e8 opportuno sottolineare ancora una volta che si tratta di protocolli asincroni. Solo perch\u00e9 un nodo invia voti per il commit, non significa che i suoi pari lo facciano altrettanto. Alcuni di essi potrebbero essere ancora impegnati a votare sulle dichiarazioni per la preparazione al voto, altri potrebbero aver gi\u00e0 esternalizzato il valore. SCP spiega come un nodo dovrebbe gestire ogni tipo di messaggio peer-to-peer indipendentemente dalla sua fase.<\/p>\n<p>Se il messaggio \"Annuncio il commit \" non pu\u00f2 essere accettato o confermato, c'\u00e8 la possibilit\u00e0 di accettare o confermare il messaggio  o  \u2014 o, in ogni caso, qualsiasi bollettino con valore C, e non con altri, poich\u00e9 il nodo ha gi\u00e0 promesso di non annullare mai . Al momento in cui il nodo trasmette i voti per il commit, sar\u00e0 C o nulla, a seconda di quanto lontano si spinger\u00e0 il consenso. Tuttavia, questo non \u00e8 ancora sufficiente per il nodo per esternalizzare C. Alcuni festini bizantini (costituenti meno del quorum, basandosi sulle nostre assunzioni di sicurezza) possono mentire al nodo. Accettare, e poi confermare, un bollettino (o un intervallo di bollettini) \u00e8 ci\u00f2 che d\u00e0 al nodo la certezza di esternalizzare infine C.<\/p>\n<p><img decoding=\"async\" alt=\"Approfondiamo il protocollo di consenso di Stellar\" src=\"\/wp-content\/uploads\/2019\/03\/c59f036bb8aa189bb3d4540f54121391.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Votazione SCP tramite voto federato. Non mostrato: in qualsiasi momento potrebbe scattare un timer, aumentando il conteggio nel bollettino (e, possibilmente, generare un nuovo composito da ulteriori candidati proposti).<\/i> <\/p>\n<p>E questo \u00e8 tutto! Una volta che la rete raggiunge il consenso, \u00e8 pronta a farlo di nuovo e di nuovo. Nella rete di pagamenti Stellar, questo avviene circa ogni 5 secondi: un risultato che richiede sia sicurezza che resilienza, garantite dallo SCP.<\/p>\n<p>Lo SCP riesce a raggiungere questo obiettivo basandosi su pi\u00f9 turni di voto federato. Il voto federato \u00e8 reso possibile grazie al concetto di tagli di quorum: set di nodi peer-to-peer a cui ogni nodo ha deciso di affidarsi come parte del proprio quorum (soggettivo). Questa configurazione significa che si pu\u00f2 raggiungere il consenso anche in una rete con adesione aperta e inganni bizantini.<\/p>\n<h1>Ulteriore lettura<\/h1>\n<p><\/p>\n<ul>\n<li>Il documento tecnico originale dello SCP pu\u00f2 essere trovato <noindex><a rel=\"nofollow\" href=\"https:\/\/www.stellar.org\/papers\/stellar-consensus-protocol.pdf\">qui<\/a><\/noindex>, e <noindex><a rel=\"nofollow\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-mazieres-dinrg-scp\/\">qui<\/a><\/noindex> progetto di specifiche per la sua implementazione.\n<\/li>\n<li>L\u2019autore originale del protocollo SCP, David Mazieres, spiega in modo semplificato (ma comunque tecnico) <noindex><a rel=\"nofollow\" href=\"http:\/\/www.scs.stanford.edu\/~dm\/blog\/simplified-scp.html\">qui<\/a><\/noindex>.\n<\/li>\n<li>Potresti essere sorpreso di non trovare in questo articolo i termini \"mining\" o \"proof of work\". Lo SCP non utilizza questi metodi, ma alcuni altri algoritmi di consenso lo fanno. Zain Waiserspoon ha scritto una accessibile <noindex><a rel=\"nofollow\" href=\"https:\/\/hackernoon.com\/a-hitchhikers-guide-to-consensus-algorithms-d81aae3eb0e3\">panoramica degli algoritmi di consenso<\/a><\/noindex>.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\/blob\/master\/Lunch.md\">Descrizione passo-passo<\/a><\/noindex> una rete semplice che raggiunge il consenso in un unico round completo di SCP.\n<\/li>\n<li>Per i lettori interessati alle implementazioni di SCP: vedi. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/stellar\/stellar-core\/tree\/master\/src\/scp\">codice C++<\/a><\/noindex>, utilizzato dalla rete di pagamento Stellar, oppure <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bobg\/scp\">codice Go<\/a><\/noindex>, che ho scritto per una migliore comprensione di SCP.<\/li>\n<\/ul>\n<p>Fonte: <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 4.9.10 - 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 \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.\" \/>\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\/it\/blog\/razbiraemsya-v-protokole-konsensusa-stellar\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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 \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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Scopriamo il protocollo di consenso Stellar | ProHoster","description":"Il protocollo di consenso Stellar \u00e8 stato descritto per la prima volta nell'articolo scientifico di David Mazi\u00e8res nel 2015. Si tratta di un 'sistema federato di consenso bizantino' che permette a reti di calcolo decentralizzate senza leader di raggiungere efficacemente un consenso su qualsiasi decisione. La rete di pagamento Stellar utilizza il Stellar Consensus Protocol (SCP) per mantenere una cronologia coerente delle transazioni che tutti i partecipanti possono vedere. Si ritiene che i protocolli di consenso siano difficili da comprendere.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/razbiraemsya-v-protokole-konsensusa-stellar","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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 \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.","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30047","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=30047"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30047\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=30047"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=30047"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=30047"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}