Proof-of-stake (PoS)
Ultima modifica: @Herbie_23(opens in a new tab), 3 settembre 2024
La Proof of Stake (PoS) è alla base del meccanismo di consenso di Ethereum. Ethereum ha attivato il suo meccanismo di Proof of Stake nel 2022 perché è più sicuro, consuma meno energia ed è migliore per implementare nuove soluzioni di ridimensionamento rispetto all'architettura di Proof of Work precedente.
Prerequisiti
Per capire meglio questa pagina ti consigliamo di leggere i meccanismi di consenso.
Cos'è la proof-of-stake (PoS)?
Proof-of-stake è un modo per dimostrare che i validatori hanno messo qualcosa di valore nella rete che può essere distrutto se agiscono in maniera disonesta. Nel proof-of-stake di Ethereum, i validatori mettono esplicitamente in stakaing il capitale sotto forma di ETH, in un contratto intelligente su Ethereum. Il validatore è poi responsabile di verificare che i nuovi blocchi propagati sulla rete siano validi e, occasionalmente, di creare e propagare nuovi blocchi. Se prova a frodare la rete (ad esempio proponendo blocchi multipli quando dovrebbe inviarne uno o inviando attestazioni conflittuali) alcuni o tutti i suoi ETH in staking possono venire distrutti.
Validatori
Per partecipare come validatore, un utente deve depositare 32 ETH nel contratto di deposito ed eseguire tre software separati: un client di esecuzione, un client di consenso e un client del validatore. Depositando i propri ETH, l'utente si unisce alla coda di attivazione che limita la frequenza di partecipazione alla rete dei nuovi validatori. Una volta attivati, i validatori ricevono nuovi blocchi dai pari sulla rete di Ethereum. Le transazioni inviate nel blocco sono eseguite nuovamente per controllare che i cambiamenti dello stato di Ethereum proposti siano validi e che la firma del blocco sia controllata. Il validatore invia poi nella rete un voto (detto attestazione) a favore di quel blocco.
Se con il proof-of-work la tempistica dei blocchi è determinata dalla difficoltà di mining, nel proof-of-stake il ritmo invece è fisso. Il tempo in Ethereum di proof-of-stake è diviso in slot (12 secondi) ed epoche (32 slot). In ogni slot viene selezionato casualmente un validatore come propositore di blocchi. Questo validatore è responsabile della creazione di un nuovo blocco e del suo invio ad altri nodi sulla rete. Inoltre, in ogni slot, è scelto casualmente un comitato di validatori, i cui voti sono usati per determinare la validità del blocco proposto. Dividere le impostazioni del validatore in comitati è importante per mantenere gestibile il carico della rete. I comitati suddividono la serie di validatori affinché ogni validatore attivo attesti in ogni epoca ma non in ogni slot.
Come viene eseguita una transazione nel PoS di Ethereum
Di seguito è fornita una spiegazione completa dell'esecuzione di una transazione nel proof-of-stake di Ethereum.
- Un utente crea e firma una transazione con la propria chiave privata. Ciò, solitamente, è gestito da un portafoglio o da una libreria come ether.js(opens in a new tab), web3js(opens in a new tab), web3py(opens in a new tab), ecc., ma, alla base, l'utente sta facendo una richiesta a un nodo utilizzando l'API JSON-RPC di Ethereum. L'utente definisce l'importo di carburante che è disposto a pagare come mancia a un validatore per incoraggiarlo a includere la transazione in un blocco. Le mance sono pagate al validatore bruciando la commissione di base.
- La transazione è inviata a un client di esecuzione di Ethereum che ne verifica la validità. Ciò significa assicurarsi che il mittente abbia abbastanza ETH per realizzare la transazione e che l'abbia firmata con la chiave corretta.
- Se la transazione è valida, il client di esecuzione la aggiunge al proprio mempool locale (elenco di transazioni in sospeso) e inoltre la trasmette agli altri nodi sulla rete di gossip del livello di esecuzione. Quando gli altri nodi ricevono la transazione, la aggiungono anche al proprio mempool locale. Gli utenti avanzati potrebbero astenersi dalla trasmissione della propria transazione, inoltrandola piuttosto a costruttori di blocchi specializzati, come Flashbots Auction(opens in a new tab). Ciò consente loro di organizzare le transazioni nei blocchi successivi per il massimo profitto (MEV).
- Uno dei nodi del validatore sulla rete è il propositore del blocco per lo slot corrente, selezionato precedentemente in modo pseudo-casuale utilizzando RANDAO. Questo nodo è responsabile per la costruzione e trasmissione del blocco successivo da aggiungere alla blockchain di Ethereum e di aggiornare lo stato globale. Il nodo si compone di tre parti: un client di esecuzione, un client di consenso e un client di validazione. Il client di esecuzione raggruppa le transazioni dal mempool locale in un "payload di esecuzione" e le esegue localmente per generare un cambiamento di stato. Questa informazione è passata al client di consenso, dove il payload di esecuzione è impacchettato come parte di un "blocco Beacon" che contiene anche informazioni su ricompense, sanzioni, tagli, attestazioni, ecc., che consentono alla rete di concordare sulla sequenza di blocchi alla testa della catena. La comunicazione tra i client di esecuzione e di consenso è descritta più nel dettaglio in Connettere i client di consenso e di esecuzione.
- Gli altri nodi ricevono il nuovo blocco Beacon sulla rete di gossip del livello di consenso. Lo passano al proprio client di esecuzione, dove le transazioni sono rieseguite localmente per garantire che il cambiamento di stato proposto sia valido. Il client di validazione, poi, attesta che il blocco è valido e che è il blocco successivo logico nella sua visione della catena (ossia che si basa sulla catena con il maggior peso di attestazioni, come definito dalle regole di scelta della diramazione). Il blocco è aggiunto al database locale in ogni nodo che lo attesta.
- La transazione è considerabile "finalizzata" se è diventata parte di una catena con un "collegamento di super-maggioranza" tra due punti di controllo. I punti di controllo si trovano all'inizio di ogni epoca ed esistono per rendere conto del fatto che solo un sottoinsieme di validatori attivi attesta in ogni slot, ma tutti i validatori attivi attestano attraverso ogni epoca. Perciò è solo tra epoche che si può dimostrare un "collegamento di super-maggioranza" (è qui che il 66% degli ETH totali in staking sulla rete concorda su due punti di controllo).
Ulteriori dettagli sulla finalità si possono trovare di seguito.
Finalità
Una transazione ha "finalità" nelle reti distribuite quando fa parte di un blocco che non può cambiare senza bruciare un consistente quantitativo di ETH. Su Ethereum di proof-of-stake, questo è gestito usando i blocchi di "punto di controllo". Il primo blocco in ogni epoca è un punto di controllo. I validatori votano per le coppie di punti di controllo che considerano valide. Se una coppia di punti di controllo attrae voti che rappresentano almeno due terzi degli ETH in staking totali, i punti di controllo sono aggiornati. Il più recente dei due (target), diventa "giustificato". Il primo dei due è già giustificato perché era il "target" nell'epoca precedente. Ora è aggiornato a "finalizzato".
Per annullare un blocco finalizzato, un utente malevolo dovrebbe impegnarsi a perdere almeno un terzo dell'offerta totale di ETH in staking. Il motivo esatto di ciò è spiegato in questo post del blog dell'Ethereum Foundation(opens in a new tab). Poiché la finalità richiede una maggioranza di due terzi, un utente malevolo potrebbe impedire alla rete di raggiungere la finalità votando con un terzo dello stake totale. Esiste un meccanismo per difendersi da questa eventualità: la fuga d'inattività(opens in a new tab). Questa si attiva ogni volta che la catena non riesce a finalizzare per più di quattro epoche. La fuga d'inattività disperde gli ETH messi in staking dai validatori che votano contro la maggioranza, consentendo a quest'ultima di ottenere nuovamente la maggioranza di due terzi e di finalizzare la catena.
Sicurezza cripto-economica
Gestire un validatore è un impegno. Il validatore deve mantenere hardware e connettività sufficienti per partecipare alla validazione e proposta dei blocchi. In cambio, il validatore è pagato in ETH (il suo saldo di staking aumenta). D'altra parte, la partecipazione come validatore apre anche nuove strade attraverso le quali gli utenti potrebbero attaccare la rete per profitto personale o sabotaggio. Per impedirlo, i validatori perdono le ricompense in ETH se non partecipano quando richiesto e il loro stake esistente può essere distrutto se si comportano in modo disonesto. Due comportamenti principali sono considerabili disonesti: proporre diversi blocchi in uno slot singolo (equivoco) e inviare attestazioni contraddittorie.
L'importo di ETH oggetto di slashing dipende da quanti validatori sono oggetto sanzionati in contemporanea. Questa è nota come la "sanzione di correlazione"(opens in a new tab) e può essere minore (circa l'1% dello stake se viene tagliato un singolo validatore) oppure può comportare la distruzione del 100% dello stake del validatore (taglio di massa). Viene imposto a metà di un periodo di uscita forzata che inizia con una sanzione immediata (fino a 1 ETH) al Giorno 1, la sanzione di correlazione al Giorno 18 e, infine, espulsione dalla rete al Giorno 36. Ogni giorno ricevono modeste sanzioni d'attestazione perché sono presenti sulla rete ma non inviano voti. Tutto questo significa che un attacco coordinato sarebbe molto costoso per un utente malevolo.
Scelta della biforcazione
Quando la rete opera in modo ottimale ed onesto, c'è sempre e solo un nuovo blocco alla testa della catena e tutti i validatori attestano quel blocco. È però possibile che i validatori abbiano una visione differente della testa della catena, a causa della latenza della rete o perché un propositore di blocchi ha equivocato. I client di consenso necessitano quindi di un algoritmo per decidere quale favorire. L'algoritmo usato in Ethereum di proof-of-stake è detto LMD-GHOST(opens in a new tab) e funziona identificando la biforcazione avente il peso di attestazioni maggiore nella sua storia.
Proof-of-stake e sicurezza
La minaccia di un attacco 51%(opens in a new tab) esiste ancora sul proof-of-stake, come già nel proof-of-work, ma è ancora più rischiosa per gli utenti malevoli. Un utente malevolo necessiterebbe del 51% degli ETH in staking. Potrebbe poi usare le proprie attestazioni per garantire che la propria biforcazione preferita sia quella con le maggiori attestazioni accumulate. Il 'peso' delle attestazioni accumulate è ciò che i client di consenso usano per determinare la catena corretta, così l'utente malevolo potrebbe rendere canonica la propria biforcazione. Tuttavia, un punto di forza del proof-of-stake rispetto al proof-of-work è che la community gode di una flessibilità nel preparare un contrattacco. Ad esempio, i validatori onesti potrebbero decidere di continuare a costruire sulla catena di minoranza e ignorare la biforcazione dell'utente malevolo, incoraggiando app, borse e pool a fare lo stesso. Potrebbero anche decidere di rimuovere forzatamente l'utente malevolo dalla rete e di distruggerne gli ETH in staking. Si tratta di difese economiche forti contro un attacco 51%.
Oltre agli attacchi del 51%, i malintenzionati potrebbero anche tentare altri tipi di attività malevole, come:
- attacchi a lungo raggio (sebbene il gadget di finalità neutralizzi questo vettore di attacco)
- "reorg" a corto raggio (sebbene il potenziamento del propositore e le scadenze dell'attestazione lo mitighino)
- attacchi di rimbalzo e bilanciamento (anch'essi mitigati dal potenziamento del propositore, fermo restando comunque che sono stati dimostrati solo in condizioni di rete idealizzate)
- attacchi valanga (neutralizzati dalla regola degli algoritmi di scelta della biforcazione, di considerare solo l'ultimo messaggio)
In generale è stato dimostrato che il proof-of-stake, come implementato su Ethereum, è più sicuro economicamente rispetto al proof-of-work.
Pro e contro
Pro | Contro |
---|---|
Lo staking rende più semplice per le persone partecipare alla protezione della rete, promuovendo la decentralizzazione. Il nodo del validatore può essere eseguito su un normale laptop. I pool di staking consentono agli utenti di mettere in staking senza avere 32 ETH. | Il proof-of-stake è più giovane e meno testato rispetto al proof-of-work |
Lo staking è più decentralizzato. Non valgono le stesse economie di scala del mining proof-of-work. | Il proof-of-stake è più complesso da implementare del proof-of-work |
Il proof-of-stake offre una maggiore sicurezza cripto-economica rispetto al proof-of-work | Gli utenti devono far funzionare tre parti di software per partecipare al proof-of-stake di Ethereum. |
È richiesta una minore emissione di nuovi ETH per incentivare i partecipanti alla rete |
Confronto con proof-of-work
Originariamente Ethereum utilizzava il proof-of-work, ma è passata al proof-of-stake nel settembre 2022. Il PoS offre svariati vantaggi rispetto al PoW, come ad esempio:
- migliore efficienza energetica, non serve consumare molta energia sui calcoli di proof-of-work
- minori barriere d'accesso, requisiti hardware ridotti: non serve hardware di alto livello per avere la possibilità di creare nuovi blocchi
- minore rischio di centralizzazione: il proof-of-stake dovrebbe portare un maggior numero di nodi alla rete
- a causa del basso requisito energetico è necessaria una minore emissione di ETH per incentivare la partecipazione
- le sanzioni economiche per comportamenti scorretti rendono gli attacchi di tipo 51% più costosi per un utente malevolo, rispetto al proof-of-work
- la community può ricorrere al recupero sociale di una catena onesta, qualora un attacco 51% dovesse superare le difese cripto-economiche.
Letture consigliate
- Domande Frequenti sul Proof-of-Stake(opens in a new tab) Vitalik Buterin
- Cos'è il Proof of Stake(opens in a new tab) ConsenSys
- Cos'è il Proof of Stake e perché è importante(opens in a new tab) Vitalik Buterin
- Perché il Proof of Stake (Nov 2020)(opens in a new tab) Vitalik Buterin
- Proof of Stake: come ho imparato ad amare la soggettività debole(opens in a new tab) Vitalik Buterin
- Attacco e difesa del proof-of-stake di Ethereum(opens in a new tab)
- Una filosofia di progettazione di Proof of Stake(opens in a new tab) Vitalik Buterin
- Video: Vitalik Buterin spiega il proof-of-stake a Lex Fridman(opens in a new tab)