Proof-of-Stake su Cosmos Network, spiegato al mio cane
Cosmos.network è un progetto che permette a chiunque abbia una conoscenza basilare della programmazione in Go, di creare una propria blockchain basata sul protocollo di consenso Proof-of-Stake (PoS). Tale protocollo, molto semplicemente, fonda il suo funzionamento sulla dimostrazione del possesso di un certo quantitativo di token (Atom nel caso di Cosmos) per permettere la validazione dei blocchi che compongono la blockchain stessa. Per capire meglio come funziona nella realtà, facciamo un esempio pratico.
Supponiamo che la nostra blockchain sia composta dal numero di nodi minimo, ovvero 4, e chiamiamo questi nodi Alice, Bob, Charlie e Denver. Quello che succederà durante il normale funzionamento della blockchain sarà dunque il seguente:
- Generazione di un blocco.
Ogni 6 secondi deve essere generato un nuovo blocco. Tale blocco conterrà tutte le transazioni avvenute a partire dalla generazione del blocco precedente. Se non viene eseguita nessuna transazione, il blocco sarà comunque generato vuoto.
Per generare il blocco, un nodo deve essere scelto come forgiatore. Vedremo in seguito come tale scelta viene fatta, ma supponiamo che venga scelto a caso Bob. - Validazione del blocco generato.
Tutti i nodi all'interno della blockchain dovranno validare il nodo generato, garantendo che le transazioni contenute al suo interno siano corrette e siano state create correttamente.
Nel nostro caso, il blocco deve essere dunque validato da Alice, Charlie e Denver. - Distribuzione del premio.
Se il blocco è validato da tutti i nodi, allora chi ha generato tale blocco riceve un premio. Tutti i nodi, in cambio del loro sforzo di validazione, ricevono in ogni caso un ammontare di token.
Bob dunque riceverà un premio leggermente più sostanzioso (+4%), ma anche Alice, Charlie e Denver avranno una loro ricompensa.
Come è possibile intuire, il passo più importante è dunque quello di determinare equamente chi debba generare un blocco. Se infatti tale generatore è sempre la stessa persona (lo stesso nodo), tutto il guadagno andrà a lui, rendendo l’intero sistema poco equo.
Per risolvere questo problema, Cosmos ha implementato l’algoritmo di scelta casuale. Secondo tale sistema, il nodo generatore viene scelto tra tutti i nodi presenti tenendo in considerazione anche il quantitativo di Atom che egli possiede. Per rendere tale sistema il più equo possibile, il quantitativo di token posseduti influisce solo in parte sul risultato dell’estrazione, e garantisce a tutti (anche a coloro che hanno molti pochi token) di essere estratti. Per capire meglio, facciamo un altro esempio pratico.
Ipotizziamo che la nostra blockchain di prima abbia la seguente distribuzione di token:
- Alice possiede 100 token
- Bob possiede 75 token
- Charlie possiede 30 token
- Denver possiede 2 token
Secondo quanto detto, Alice avrà una probabilità decisamente più alta di Denver di venire estratta come generatore, ma Denver non deve preoccuparsi di questo in quanto il sistema garantisce anche a lui di essere estratto prima o poi.
La quantità di token che un nodo mette in gioco per aumentare la probabilità di venire estratto come generatore del blocco successivo si chiama stake.
I validatori e lo slashing
Attraverso gli esempi visti, abbiamo implicitamente introdotto una delle due figure principali di una blockchain che utilizza il protocollo Proof of Stake: il validatore.
Un validatore è un nodo che mette in gioco uno stake per poter essere estratto come nodo generatore e, in ogni caso, valida i blocchi generati.
Tale compito è di fondamentale importanza per la blockchain stessa in quanto senza i validatori essa non potrebbe esistere. E’ anche fondamentale capire come sia vitale che i validatori svolgano correttamente il loro compito. Se infatti un validatore dovesse iniziare a validare transazioni errate, o peggio ancora dovesse mettersi in combutta con altri per alterare la storia della blockchain, sarebbe un disastro. Per tale motivo all'interno di Cosmos esiste il sistema di slashing dello stake.
Lo slashing è quel sistema per cui, nel caso in cui un validatore non si comporti correttamente, parte del suo stake viene bruciato (slash).
I delegatori e il bonding
Come abbiamo visto, i validatori vengono estratti in base al numero di token che possiedono. Per far sì che l’intera blockchain funzioni, è quindi necessario che vi sia un quantitativo sufficiente di token in stake perenne. Se così non fosse, infatti, la blockchain si arresterebbe in quanto non sarebbe possibile determinare i generatori dei blocchi. Se però si dovessero utilizzare solamente i token posseduti dai validatori stessi, nessuno vorrebbe ricoprire questo compito. Bisogna infatti pensare che un validatore spesso sostiene un investimento in termini di hardware (server, connessione ad internet, etc.) e di tempo necessario ad installare tutto. Se dovesse anche acquistare i token, il lavoro di validazione risulterebbe scarsamente conveniente in termini economici, se non addirittura sconveniente.
Per risolvere questo problema, Cosmos ha introdotto la possibilità a chiunque possegga degli Atom di diventare un delegatore.
Un delegatore è un qualsiasi possessore di Atom che presta i suoi token per accrescere lo stake di un validatore, in cambio una ricompensa.
Il processo mediante cui un delegatore presta i propri Atom ad un validatore viene detto bonding.
All'interno di qualsiasi blockchain creata con Cosmos, nel caso in cui si possiedano dei token di quella blockchain (gli Atom nel caso di Cosmos stesso), è infatti possibile prestare i propri token ad uno dei validatori per accrescere il suo stake e farlo risultare avvantaggiato nell'estrazione per il ruolo di generatore di un blocco. Tale prestito viene ripagato da parte del validatore con la suddivisione tra tutti i suoi delegatori del guadagno che esso riceve in seguito alla generazione del blocco e alla validazione dei blocchi generati dagli altri validatori.
Per incentivare i possessori di Atom a mettere in stake i propri token, Cosmos ha inoltre introdotto un sistema di inflazione per cui nel caso in cui gli Atom in stake siano minori dei 2/3 degli Atom totalmente circolanti, il loro valore scende anche del 20% all'anno. Così facendo, nessun possessore di Atom ha il vantaggio a tenerli senza delegarli ma, anzi, mettendoli all'interno di uno stake ha la possibilità di aumentare il proprio ammontare di token e quindi anche il valore del proprio investimento.
In sostanza, dunque, il Proof-of-Stake su Cosmos funziona come segue.
- Chiunque possegga un Atom delega il valore che desidera ad uno o più validatori.
- Uno dei validatori viene estratto come generatore del blocco, ed esegue il suo dovere.
- Gli altri validatori della rete controllano che il blocco generato sia valido.
- Se tutto è corretto, il generatore riceve un compenso per il proprio lavoro.
Altrimenti, esso perde parte del proprio stake. - Se ogni validatore esegue il proprio lavoro correttamente, esso riceve un guadagno. Altrimenti viene sottoposto allo slashing del proprio stake.
Ovviamente, gli ultimi due punti sono condivisi tra il validatore e i suoi delegatori.
Nel caso in cui un validatore subisca uno slash del proprio stake, anche i delegatori perderanno parte del proprio patrimonio. D’altra parte, se il validatore esegue il suo lavoro correttamente, essi riceveranno una ricompensa proporzionale al loro impegno all'interno del validatore stesso.
E’ bene notare come, molto spesso, i validatori trattengano una quota della ricompensa (una commissione) prima di distribuire il ricavato del lavoro ai propri delegatori. Tale quota è decisa unilateralmente da parte del validatore e viene utilizzata da esso per mantenere il servizio e ripagare i costi hardware, software e di utilizzo dell’intero sistema.
Considerazioni finali
Se per caso siete dei possessori di Atom, personalmente vi consiglio di metterli in stake prima possibile. Come abbiamo visto in precedenza, infatti, nel caso in cui voi li teneste fermi potreste rischiare che il loro valore scenda. Se li mettete in stake, invece, potrete avere un ricavo anche del 9% annuo sul vostro investimento (considerando un validatore con un 10% di commissioni e un’inflazione del 10% all'anno).
Se siete pronti per questo passo, vi consiglio di leggere le FAQ per i delegatori, disponibile a questo indirizzo: Guida a Cosmos — FAQ per i delegatori.
Inoltre, vi faccio presente che il primo validatore in Italia, Commercio.network, attualmente applica una commissione del 10%. Potete trovare maggiori informazioni sul suo sito web e sulla pagina del validatore su Lunie.io.
Spero che questa piccola introduzione vi sia stata utile a capire un po’ meglio come funziona Cosmos.network e in generale l’algoritmo di consenso Proof-of-Stake. Se tutto ciò vi è sembrato interessante, fatemelo sapere nei commenti! Buono staking! 🚀