Introduction
Da ricordare il “The State Machine Replication (SMR) Problem” in Consensus protocols che è importantissimo per comprendere questa parte.
- Storia locale
- Transazioni al singolo noto
Problema del sync fra tutti questi nodi.
Goal of SMR solution in blockchains
Andiamo a considerare alcune proprietĂ di safety e liveness Programmi Concorrenti
- Consistenza i nodi devono essere daccordo su quale transazione mettere prima e dopo â stessa storia per tutte le transazioni. (con la possibilitĂ di alcuni nodi che siano indietro, ma solo prefisso!).
- Liveness che vogliamo dire che tutte le transazioni valide devono essere aggiunte alla fine
Assunzioni per sincrono (4)
- Permissioned, ossia i nodi del nostro modello sono fissi, non possiamo averne di piĂš, non possiamo averne di meno e sono conosciuti.
- Public key infrastructure, Ogni nodo ha una coppia pubblica e privata.
- Synchronous,
- esiste una sorta di stato globale, e tutti i nodi condividono questa informazione. 0, 1, ⌠t.
- I messaggi sono tutti mandati bene, e arrivano esattamente uno step dopo. (mandato al tempo t, arriva a t + 1).
- OnestĂ di tutti i nodi (sarĂ lasciato subito questa assunzione).
4â. Una percentuale dei nodi è bizantina.
Altre di base trattate prima
- esistenza di internet
- Esistenza di crittografia
Si può notare che le ultime due assunzioni sono le stesse piÚ generali definite in Consensus protocols, andremo negli appunti in seguito solamente a rilassare alcune assunzioni di 1 e 2.
La 1 è stata storicamente molto sensata, dato che era pensata per database che comunicassero fra di loro, e chiaramente quello era un settings piÚ controllato, per blockchain vorremmo anche provare rilassare questo.
Bizantine broadcast problem
Questo è un problema molto simile a SMR, tanto che si potrà dimostra che che risolvere SMR si può ridurre a dimostrare BB. Andremo quindi a descrivere questo problema
Faulty/Bizantine Nodes
Alcuni nodi falliscono, anche se non intenzionalmente, per esempio con errori di hardware.
Un nodo che non è onesto (comporta come si dovrebbe comportare) è faulty.
Fault types
- Crash fault (errore del software oppure dellâhardware).
- Omission fault (in cui la trasmissione di informazione importante è fallita, può essere intenzionale o meno)
- Omissione di send-receive
- O altro genere di omissione simile.
- Bizantine fault (un certo insieme di nodi fa come gli pare)
Ă molto importante comprendere questo concetto, dato che sarĂ di base nell’analisi della costruzione di protocolli che funzionino per BB.
In modo intuitivo possiamo intendere un nodo come bizantino sse non si comporta come dovrebbe. E lĂŹ vengono descritte anche 3 cause per il suo non-comportamento corretto.
Descrizione del problema
Un nodo leader e n - 1 nodi non leader. Il leader ha una informazione privata $v ^*$ che deve mandare a tutti. Una soluzione del problema deve soddisfare queste tre caratteristiche
- ValiditĂ ossia se il nodo sender (leader) è onesto, gli altri devono essere d’accordo che il messaggio è $v^*$
- Terminazione non di deve essere deadlock, i nodi devono terminare con qualche risultato.
- Agreement quando termina, tutti i nodi onesti devono essere dâaccordo sullo stesso risultato.
SMR si riduce a BB
Prenderemo in questa soluzione lâidea presente in #Round-Robin leaders, ad avere ad ogni momento un leader.
Allora dato questo leader, utilizziamo BB con leader = sender, e gli altri nodi per mandare il messaggio privato.
Allora questo algoritmo possiede sia liveness che consistency. Liveness per stesso motivo di prima, prima o poi un nodo diventa un leader, quindi riesce ad aggiungere la sua informazione privata.
Consistency perchĂŠ perla soluzione di BB, ogni nodo onesto alla fine sarĂ dâaccordo su quanto deve aggiungere alla sua lista privata. In particolare se il leader è onesto sarĂ esattamente quanto mandato dal sender.
<img src="/images/notes/image/universita/ex-notion/Syncronous model/Untitled.png" style="width: 100%" class="center" alt="image/universita/ex-notion/Syncronous model/Untitled">
<img src="/images/notes/image/universita/ex-notion/Syncronous model/Untitled 1.png" style="width: 100%" class="center" alt="image/universita/ex-notion/Syncronous model/Untitled 1">
Alcune soluzioni
Lazy SMR
Se ogni nodo non comunicasse, ma aggiungesse alla propria lista privata la transazione, questo non funziona. Non câè proprio la consistenza. Non ci si può aspettare che il nodo esterno, la transazione riesca a richiedere allo stesso tempo a tutti i nodi.
Da qui concludiamo che i nodi devono comunicare fra di loro (che è una cosa molto banale).
Round-Robin leaders
Questà è una idea che ogni nodo diventa leader e si mette a coordinare i nodi a turni, in un certo senso è molto simile allâidea presente in Architettura e livelli 1, 2 riguardo le reti ad anello e il passaggio del testimone.
Funzionamento
I nodi diventano leader a seconda del tempo globale. Il nodo leader manda a tutti gli altri la sua lista, gli altri aggiungeranno al proprio alla fine, allâinizio metto le propria (quindi).
Correttezza
Sia consistenza sia liveness vengono soddisfatti. La liveness è soddisfatta perchĂŠ prima o poi il nodo n sarĂ il leader, allora avrĂ lâoccasione di aggiungere alla catena i suoi dati privati.
La consistenza viene soddisfatta perchÊ sotto le assunzioni che abbiamo i messaggi vengono mandati e ricevuti esattamente in uno step di tempo, quindi ogni nodo riesce ad aggiungere alla sua lista privata quello che gli è di interesse.
NecessitĂ dell’onestĂ
Se un nodo non onesto diventa leader, potrebbe mandare un pò della sua lista ad lacuni nodi e niente ad altro (omission fault) e quindi questo rompe tutta la consistenza! Quindi questo metodo funziona solamente nel caso in cui nessun nodo fallisca. Vorremmo però resiste anche al fallimento!
Dolev-Strong protocol
Lâidea generale di questo protocollo è capire se il sender è onesto o meno. Se si riesce a capire questa cosa, allora se è onesto prendo il suo valore, altrimenti metto bottom sulla mia pila
Convincing messages
<img src="/images/notes/image/universita/ex-notion/Syncronous model/Untitled 2.png" style="width: 100%" class="center" alt="image/universita/ex-notion/Syncronous model/Untitled 2">
The protocol

Quel mandare cose è piÚ o meno cercare di capire se il nodo sender ha mandato messaggi contraddittori.
Proof of correctness
PKI (Hexagon proof)
https://groups.csail.mit.edu/tds/papers/Lynch/jacm88.pdf Pease, Shostak, and Lamport [PSL80], and later the proof was simplified by Fischer, Lynch, and Merritt [FLM85].
Questa è una dimostrazione molto importante per quanto riguarda questo modello. Mostra che ci sono delle limitazioni pesanti riguardanti il modello. Come si vedrà in seguito anche in Asynchronous model, ci saranno delle limitazioni in praticamente qualunque modello.
Enunciato
Siano n nodi allâinterno di un modello a comunicazione sincrona in cui non è presente un setting PKI (chiave privata e pubblica), se i nodi bizantini sono $f \geq n / 3$, allora non è possibile avere contemporaneamente terminazione, safety e liveness.
Dimostrazione
Dimostreremo solamente il caso in cui n = 3, poi si dovrebbe estendere senza molto sforzo al caso maggiore generico.
Questa dimostrazione va a contraddizione. Supponiamo di avere un setting a 6 nodi come in figura

I nodi F sono i sender, mentre M e L sono le altre cose.
Ora da notare è che il protocollo può eseguire su questo sistema, cioè anche se era inteso per essere eseguito nel caso $n = 3$, le uniche cose di cui ha bisogno il protocollo è
- Sapere se è un sender o meno
- Il messaggio da inviare se è il sender
- I suoi n - 2 vicini (quindi sapere a chi mandare).
Quindi sotto queste assunzioni il protocollo può eseguire
Allora andiamo a considerare 3 scenari possibili:
Scenario 1 F bizantino
Supponiamo di essere in un sistema a 3, con L, M, F, ma F è il nodo bizantino. F dato che è bizantino può fare cose arbitrarie, in particolare facciamo finta che simuli i nodi Fâ, Mâ, Lâ, F collegati come di sopra.
Allora dato che il nosto protocollo deve soddisfare consistenza, ossia tutti i nodi onesti devono finere per essere dâaccordo su qualcosa, deve essere che nel sistema lâoutput di L = M
Scenario 2 L bizantino
Sistema a 3 dato da L, M, e Fâ, ma in questo caso ora il nodo M simula i nodi M, L, F, Mâ. Per validitĂ del protocollo deve essere che L è d’accordo con lâoutput 1, del sender Fâ.
Scenario 3 M bizantino
Simile al sistema tre nel primo caso, ora L simula L, Fâ, Mâ, Lâ. Quindi per validitĂ M dĂ in output F.
ma allora abbiamo un assurdo perchĂŠ L dovrebbe essere uguale a M, invece l’output è diverso. Quindi questo scenario non può succedere.