Proof of Stake & Proof of work

Proof of Stake & Proof of work

Sembrano parole difficili ma il concetto è semplice: dimostrami che ti sei impegnato o che ci tieni veramente a qualcosa ed io ti concederò di compiere una determinata azione o ti darò una ricompensa. 

Volendo tradurre in termini semplicissimi il concetto di Proof of Work e Proof of Stake, potremmo utilizzare proprio questa frase.

Se ci pensi è un principio con cui siamo assolutamente familiari sotto molteplici punti di vista nella nostra vita di tutti i giorni: per accedere ad una certa posizione lavorativa c’è un concorso o un colloquio in cui devi dimostrare di essere idoneo o di tenerci veramente; se fai una gara di abilità di qualsiasi tipo, per poter passare al livello successivo devi portare al giudice la prova di aver completato il livello in cui ti trovi; quando fondi una nuova società potrebbe esserti richiesto di investire del capitale sociale a dimostrazione del tuo impegno verso il progetto che vuoi costruire.

Molto spesso si tratta di una vera e propria gara: chi arriva primo al traguardo e ci mette meno tempo vince, esattamente come accade ad esempio per i finanziamenti a sportello.

INDICE ARGOMENTI

1) Cosa c'entra una gara con la blockchain?

Come abbiamo accennato in questo post, per poter effettuare una transazione su una rete blockchain bisogna pagare una fee (tassa) per validare la transazione e aggiungerla a un blocco. 

Il compito di validare le transazioni, ovvero di controllare che tutti i dati inseriti nella transazione siano corretti e quindi portare successivamente la transazione su blockchain all’interno del blocco (ricordi il nostro esempio dei taxi?) è svolto dai cosiddetti miners, che controllano la correttezza di una transazione, validandola, e aggiungendola, mediante meccanismi di consenso, a un blocco. 

Volendo riprendere l’esempio dei taxi, è come se, prima di salire su un taxi, il tassista (che nel nostro esempio rappresenta un miners) fosse incentivato a verificare che l’assegno che stai trasportando sia valido: che l’indirizzo da cui viene emesso l’assegno sia corretto (ovvero che l’assegno non sia scoperto) che il numero dell’assegno sia valido, che hai i soldi per poter pagare quell’assegno… e ovviamente quanti soldi vuoi dare al tassista per far “entrare” l’assegno nel suo taxi e portarlo su blockchain.

In queste semplici parole stiamo però dicendo che daremo un premio al nostro tassista affinché compia una certa azione. Quale sarà il miner che si aggiudicherà l’onore di prendere la transazione e metterla su blockchain guadagnando il premio in palio? In base a quale meccanismo?

Come abbiamo appena visto potrebbe essere utile introdurre un meccanismo in base al quale i miners devono dimostrare il loro impegno ed interesse per vincere il premio in palio. Se il miner dimostra di aver eseguito un lavoro o di avere l’interesse necessario ad eseguire la transazione, siamo tutti più tranquilli. Ovvero è stato introdotto nel sistema un meccanismo, diffusissimo anche nella realtà, per cui colui che svolge un certo compito, attraverso la prova del suo interesse o impegno, dimostra di essere coinvolto.

Quindi mettiamo i miners in competizione tra di loro e diamo al vincitore il compito di creare un blocco. Questo meccanismo garantisce la sicurezza della blockchain, in quanto un miner se vuole essere ricompensato per il lavoro svolto deve dimostrare il suo impegno e verificare correttamente le transazioni.

2) Dimostrare il proprio impegno

Ma perché è importante che il miner dimostri il suo impegno e in che modo questo meccanismo garantisce la sicurezza di una rete blockchain? Ci sono due variabili in gioco che garantiscono il funzionamento di questo meccanismo: la probabilità che un blocco errato venga accettato dalla rete e il costo di creazione di un blocco. 

a) La prima è estremamente bassa dato che il numero di nodi, che controllano tutti i blocchi aggiunti alla blockchain, è estremamente elevato. È quasi impossibile che nessuno si accorga dell’inserimento di un blocco errato, ed è sufficiente che se ne accorga anche uno solo degli attori coinvolti per ‘sollevare un polverone’, ovvero per farlo notare a tutti gli altri e quindi farlo scartare dall’intera rete (dimostrare che un blocco è stato validato è facile, ma dimostrare che contiene degli “errori” lo è ancora di più!). 

b) Il secondo è invece dovuto o ai costi dell’hardware utilizzato per eseguire la validazione del blocco, più i costi di energia per alimentare l’hardware stesso per il tempo necessario al termine della computazione, oppure al valore che deve essere impegnato come garanzia del fatto che il blocco creato sia effettivamente corretto.

La bassissima probabilità che un blocco errato venga accettato dalla rete e gli elevati costi finanziari connessi con la creazione di un blocco garantiscono la sicurezza della rete, spronando i miner ad impegnarsi per creare correttamente il blocco.

Un miner che decide di imbrogliare, inserendo un blocco errato nella rete, non solo dovrà investire risorse finanziarie e tempo per creare il blocco, ma dovrà anche sperare che il blocco venga accettato dalla rete, e la probabilità che ciò accada è molto bassa; anche se il miner riuscisse ad aggiungere un blocco errato, questo verrà poi scartato dalla rete con alta probabilità, e quindi il miner avrà speso per nulla il suo denaro (ricordiamo che la ricompensa è legata al fatto che il blocco validato rimanga nella catena)

Quindi, ricapitolando, un miner deve impegnarsi per creare correttamente il blocco, senza errori, per non sprecare il proprio denaro.

3) I principali meccanismi di consenso nella tecnologia blockchain

Nel mondo della blockchain ci sono due meccanismi di consenso utilizzati per validare le transazioni e i blocchi: Proof of Work (PoW) e Proof of Stake (PoS).

Entrambi i meccanismi hanno gli stessi scopi, ma i procedimenti utilizzati sono diversi.

Proof of Work (PoW)

La PoW è un algoritmo di consenso, utilizzato in blockchain come Bitcoin o Ethereum, che richiede una potenza computazionale molto elevata, e di conseguenza un grosso dispendio elettrico, per poter risolvere un problema matematico molto complesso, ma molto facile da verificare.

I miners competono tra di loro per trovare la soluzione al problema e validare il blocco, in modo tale da ottenere il premio della validazione (reward). Una volta risolto il problema i miners danno la soluzione agli altri nodi, che prima di aggiungere il blocco ne controllano la correttezza.

Dato che la soluzione è molto facile da verificare, il problema matematico scoraggia attacchi alla rete da parte di un partecipante o gruppo di partecipanti. Infatti, se comunico una soluzione non corretta il blocco non verrà aggiunto alla catena dagli altri nodi, e quindi spreco solo risorse.

È infatti importante ricordare che “la catena più lunga vince”, ovvero che se un utente si trova di fronte a due catene di lunghezza diversa, ovvero uguali fino ad un certo punto, ma con due “code” differenti, sarà spronato a considerare quella più lunga come valida, in quanto in essa è evidente sia stato speso più valore (in termini di energia) e quindi più persone si sono affidate ad essa.

Per attaccare questo sistema, bisognerebbe quindi disporre di una potenza computazionale maggiore di tutti gli altri partecipanti (ovvero più del 50% della potenza computazionale totale dedicata a quella rete) per provare a generare una catena più lunga (e quindi “vincente”) rispetto a quella di tutti gli altri attori onesti (o comunque con interessi in contrasto con quelli che avrebbe l’attore malevolo in questione).

Facciamo un esempio semplice per spiegare meglio come funziona questo meccanismo: una pizzeria decide di promuoversi regalando pizze, ma, per evitare che qualcuno ordini un numero di pizze spropositato rispetto al numero effettivo di commensali, per poter ricevere la pizza dobbiamo prima risolvere un sudoku (il nostro problema matematico difficile da risolvere, ma di cui è molto facile verificare la correttezza) per ogni pizza ordinata. Una volta risolto, quindi dopo aver dato prova del nostro impegno e aver completato il sudoku in maniera corretta, riceviamo la nostra pizza (premio).

Se siamo da soli ed ordiniamo 10 pizze, ci metteremo molto tempo a risolvere i 10 sudoku, mentre saremo piuttosto veloci se fossimo veramente in 10 a dover mangiare. In questo modo la pizzeria ha dunque richiesto una prova, una dimostrazione di lavoro effettuato, in cambio delle pizze regalate.

Ad ogni modo, il modo più veloce per ordinare una pizza è utilizzare l’applicazione Sooneat, la web-app che abbiamo sviluppato come KNOBS. Segui questo link per scoprire il progetto. Ma torniamo alla nostra blockchain

Proof of Stake (PoS)

La PoS è un algoritmo di consenso che, a differenza della PoW, richiede una potenza computazionale decisamente minore, e di conseguenza un consumo elettrico notevolmente inferiore. In questo caso la validazione dei blocchi non viene effettuata tramite la risoluzione di un problema matematico, ma il meccanismo si basa sul fatto che i partecipanti per poter validare un blocco mettono in gioco le proprio monete (stake) e il validatore viene scelto in maniera casuale in base alle monete che ha investito; la quantità di monete che vengono investite non dipendono solo dal partecipante, ma anche dalla rete che impone dei requisiti minimi per poter puntare, ovviamente più monete un utente è disposto ad impegnare, più aumenta la sua possibilità di essere selezionato come validatore.

Per esempio se io decido di impegnare 10 monete e un altro partecipante 30, lui avrà una probabilità di essere selezionato tre volte maggiore alla mia.

Facciamo un esempio semplice per spiegare meglio come funziona questo meccanismo: nella città (rete) blockchain la validazione dei blocchi viene assegnata in maniera casuale tra gli abitanti della città in base alle case (stake) che ogni abitante possiede (e che è disposto a mettere a garanzia del suo operato).

Dunque, più case un abitante possiede (e mette in gioco) più la sua probabilità di essere scelto è elevata, meno case possiede e più bassa sarà la probabilità di essere scelto.

Prendiamo 3 abitanti che decidono di mettere in gioco le proprie case per provare a validare un blocco: Andrea con 4 case, Eleonora con 3 e Alberto con 1. Dopo la selezione come validatore di un abitante, i restanti abitanti non perdono il possesso delle loro case (ossia dello stake messo in gioco).

Ovviamente la probabilità che venga scelto Andrea è maggiore rispetto agli altri abitanti. Mettiamo che Andrea vinca e decida di imbrogliare per aggiungersi soldi, aggiungendo un blocco errato alla rete; al turno successivo viene scelto nuovamente Andrea che decide di imbrogliare ancora. Andrea può continuare ad imbrogliare e aggiungere blocchi errati alla rete, e visto il maggiore stake che mette in gioco c’è più probabilità che venga scelto sempre lui. Ma prima o poi, per probabilità, verrà scelta Eleonora (o anche Alberto), che mediante le prove (è facilmente visibile un imbroglio su blockchain) potrà mostrare ai restanti abitanti le truffe commesse da Andrea, al quale verrebbero tolte le case (il suo stake), che verrebbero quindi consegnate a Eleonora. Per un abitante con poche case è ancora più difficile imbrogliare, in quanto la probabilità che venga scelto è molto bassa.

In questo modo la PoS previene eventuali attacchi alla rete, in quanto imbrogliare non solo non conviene poiché prima o poi si viene smascherati e si perde l’intero stake, ma un abitante con tantissimo stake (che quindi potrebbe imbrogliare avendo un’alta probabilità di essere sempre scelto) non ha nessun vantaggio nell’imbrogliare, anzi vorrà che la rete (città) cresca e si sviluppi in modo corretto, altrimenti i suoi possedimenti (le case) perderanno valore. 

4) PoW vs PoS

Quale di questi due algoritmi è il migliore? 

Non c’è una risposta a questa domanda, i due algoritmi hanno i loro pro e i loro contro, dato che funzionano in maniera diversa.

Pro PoW

  • Previene eventuali attacchi alla rete distribuendo il “potere” di creare e validare blocchi all’interno della rete in maniera proporzionale al potere computazionale dei diversi nodi.
  • Meccanismo molto diffuso nella blockchain e dunque ben rodato. Ha dimostrato di essere funzionante e di riuscire a gestire correttamente tutte le casistiche verificatesi fino ad oggi.

Contro PoW

  • Richiede hardware (in alcuni casi specifici) con un’elevata potenza computazionale ed a volte molto costosi.
  • Grosso consumo elettrico che produce un elevato inquinamento ambientale.
  • Il procedimento di creazione del blocco è lungo, dato che sono richiesti calcoli lunghi e difficili, e la quantità massima di transazioni che possono essere elaborate contemporaneamente è tipicamente bassa.

Pro PoS

  • Non è richiesto l’uso di hardware specifici.
  • Il consumo elettrico come l’inquinamento ambientale sono bassi.
  • Rete più equilibrata, in quanto tutti i partecipanti alla rete hanno la possibilità (seppur minima in alcuni casi) di vincere e validare un blocco.

Contro PoS

  • Chi è ricco diventa più ricco (the rich get richer).
  • Gestione del meccanismo complicata e non completa, regolamentata, sotto tutti i punti di vista.
  • Meccanismo ancora poco diffuso nella blockchain.

 

Sui pro e contro dei due meccanismi di validazione di un blocco all’interno della catena esistono diverse scuole di pensiero ed una discreta letteratura. Per questo motivo riportiamo di seguito alcuni link ad articoli interessanti che trattano questo argomento nello specifico: 

5) La catena più lunga vince

Per chiudere questo articolo introduciamo un ultimo elemento di fondamentale importanza che ci serve per capire un ultimo e delicato concetto.

Come avrai capito leggendo questo articolo, ad ogni miner viene richiesto un impegno di risorse economiche per poter partecipare all’asta ed aggiudicarsi la possibilità di minare un blocco guadagnando le reward e le fee in palio. 

Qualunque sia il protocollo di consenso utilizzato, chi vuole candidarsi al ruolo di miner deve fare di fatto un investimento per avere gli strumenti necessari per partecipare alla gara ( oppure deve investire in stake) aggiudicandosi eventualmente la possibilità di minare un blocco ed ottenere alla fine una ricompensa.

Questo significa che ogni partecipante mette del valore all’interno della catena di blocchi, investe tempo e risorse per ogni blocco che viene minato. Più si allunga la catena, transazione dopo transazione, e più valore viene indirettamente attribuito alla catena stessa, perché significa che esistono delle risorse che vengono impegnate per generare valore ed accrescere la fila di blocchi. 

Cosa succede però quando due diversi attori trovano due soluzioni diverse, ma entrambe valide, e nello stesso momento? Sembra una cosa rara ma in verità capita in continuazione. Il fatto è che i miner che partecipano alla gara sono sparsi in tutto il mondo. I server non sono allineati al millisecondo, esiste sempre un tempo di latenza ed è impossibile stabilire a priori l’ordine temporale corretto di una serie di messaggi, e dunque non è facile capire chi per primo abbia risposto con un blocco valido.

E quindi che cosa succede? Come è possibile risolvere questo problema? Proviamo ad immaginare insieme la situazione e caliamoci nei panni di un miner, ad esempio in una rete che utilizza un meccanismo di consenso PoW.

Grazie al nostro computer ed alla sua fantastica potenza computazionale, partecipiamo alla gara per aggiudicarci le fee (e l’eventuale reward) e cerchiamo di risolvere per primi il puzzle crittografico, ottenendo in questo modo la possibilità di minare un blocco.

Verifichiamo innanzitutto che tutte le informazioni contenuto nel blocco siano corrette: quindi, per esempio, che se un address sta trasferendo del valore verso un nuovo indirizzo abbia le disponibilità per trasferire il valore dichiarato, che il numero del nonce sia corretto … insomma, tutta una serie di verifiche che ci permettono di capire che non stiamo facendo dello sforzo inutile minando delle transazioni non valide. Prima di iniziare il nostro lavoro, però, ci accorgiamo che l’ultimo pezzo della catena a cui dobbiamo aggiungere il nostro blocco non finisce con un blocco singolo ma ha una biforcazione. Da una parte ci sono 2 blocchi e dall’altra parte 1 blocco. 

Com’è successo? Semplicemente due miner hanno risolto un puzzle crittografico con 2 soluzioni entrambe valide e si sono aggiudicati entrambi il diritto di minare un blocco, quasi in contemporanea. Entrambi hanno legato il loro blocco all’ultimo blocco disponibile della catena creando quindi una biforcazione.

La blockchain ha continuato nel suo meccanismo, blockchain must go on, e gli utenti hanno effettuano nuove transazioni. I miner hanno partecipato alla gara ed un nuovo miner si è aggiudicato il diritto di minare la transazione successiva. Il miner aveva scelto quale delle due biforcazioni seguire per minare il suo blocco in maniera casuale.

A questo punto torniamo a noi. Ecco che ci accingiamo a risolvere il puzzle crittografico ma ci troviamo di fronte a questa situazione: un biforcazione che presenta una coda di 2 blocchi da un lato e una coda di 1 blocco dall’altro lato. 

A quale coda cercheremo di legare il nostro blocco? A quella da 2 o a quella da 1? Cosa risponderesti a questa domanda? Intuitivamente verrebbe da legare il nostro blocco alla coda più lunga, quella da 2 blocchi. Ed è esattamente quello che facciamo, ci leghiamo alla catena più lunga trasformandola in una coda da 3 blocchi.

Il miner subito dopo di noi vedrà una catena con una biforcazione da 1 blocco da una parte e 3 blocchi dall’altra. A questo punto legherà il blocco che deve minare alla coda da 3, senza dubbio. Ormai non si tratta più di una biforcazione ma del normale prolungamento della catena principale. Questo è esattamente quello che succede durante una normale attività di blockchain. 

Immaginiamo però a questo punto che arrivi un nuovo miner e si trovi di fronte alla situazione precedente. Anzi, possiamo anche andare un po’ oltre nella linea temporale ed immaginare il miner che arriva nel momento in cui da un lato della biforcazione ci sono 10 blocchi e dall’altra parte un blocco solo.

Avrebbe senso per lui provare ad agganciare il suo blocco alla coda da un blocco solo? Nulla lo vieta, ma non avrebbe alcun senso. Vorrebbe dire, in caso di successo, buttare via il premio guadagnato ed il tempo e le risorse impiegate per aggiudicarsi la possibilità di minare un blocco: ci stiamo collegando ad un binario morto, e le ricompense ottenute varrebbero solo in quella biforcazione ormai in disuso, mentre nella catena principale, quella più lunga, il nostro blocco (e quindi anche le nostre ricompense) non ci sarebbero, come se non fossero mai esistite.

Il binario che sta procedendo spedito è quello da 10 blocchi. Questa è la catena dove gli attori che partecipano al protocollo di consenso stanno investendo e creando valore.

Portiamo all’estremo il nostro esempio per completare il concetto. Immaginiamo ora che tutte le copie di questa blockchain spariscano. Tutti i nodi si inceppano per qualche assurdo motivo e rimangono solo 4 registri disponibili della nostra blockchain.

Tre di questi rappresentano la blockchain alla situazione della prima biforcazione, 1 blocco da una parte ed un blocco dall’altra. Mentre una sola copia riporta la situazione con la biforcazione da 10 blocchi da un lato ed 1 blocco dall’altro. A questo punto si pone il problema: ma qual è la versione corretta? Vince la maggioranza (le 3 copie uguali con biforcazione 1:1) o la catena più lunga (l’unica copia con biforcazione 10:1)?

La risposta corretta è che la catena più lunga vince. Perché? Perché è lì dove gli utenti hanno continuato a creare valore, investendo, e in modo dimostrabile. Non pochi utenti, tra l’altro, ma proprio la maggioranza (o meglio, la maggioranza della potenza computazionale) altrimenti, dal punto di vista statistico, la catena più lunga sarebbe stata l’altra. 

Il concetto alla base di questo ragionamento è quindi il valore. La catena più lunga, essendo la catena con più valore, è la catena corretta, o più corretta rispetto alla catena più corta. È quella in cui hanno creduto la maggior parte degli utenti, ovvero quella su cui è stato creato consenso distribuito, grazie ad un meccanismo decentralizzato.

Share on facebook
Share on twitter

non perderti tutte le news, i nostri report gratuiti e gli aggiornamenti sui trend blockchain