La Proof-of-Work è l’algoritmo che regola il processo di consenso alla base del mining di Bitcoin: cos’è e come funziona.
Il primo utilizzo della Proof of Work risale al 1997, quando Adam Back decise di implementarla nel progetto Hashcash. L’obiettivo era prevenire gli attacchi denial-of-service (DoS) e lo spam nelle email.
Nel 2004 Hal Finney, cypherpunk e creatore di PGP 2.0, introduce le Reusable Proofs of Work (RPOW), che rende trasferibile la prova di lavoro di HashCash, permettendo per la prima volta la creazione di una moneta digitale basata su proof-of-work che può essere scambiata tra gli utenti. L’applicazione di tale idea sarà cruciale per lo sviluppo successivo di Bitcoin.
La Proof-of-Work, in italiano ‘prova di lavoro’, richiede la prova che una determinata quantità di ‘lavoro’, in termini di risorse energetiche e tecnologiche, sia stata svolta per poter acquisire il diritto di aggiungere un blocco alla blockchain di Bitcoin e quindi ottenere una ricompensa monetaria nota come block reward. Tale dinamica è in netto contrasto con il sistema delle valute fiat che possono essere create senza alcun costo associato e sulla base delle decisioni prese dalle banche centrali.
Per comprendere nel dettaglio come si ottiene il diritto di scrivere un blocco sulla blockchain, consulta l’approfondimento sul mining.
Come funziona?
Per poter aggiungere un blocco alla blockchain, i miner concorrono tra di loro in una sfida globale che può essere equiparata a un continuo lancio di dadi. Per scrivere un blocco occorre trovare la corretta Proof-of-Work, cioè la soluzione a un quesito matematico che diventa più difficile all’aumentare della potenza di calcolo presente sulla rete.
Quello che si richiede ai miner è trovare un numero chiamato nonce che, insieme all’hash dell’ultimo blocco minato, dopo l’applicazione della funzione matematica SHA-256, produca un hash inferiore a un determinato limite prestabilito dai nodi della rete: non esiste una formula matematica per trovare subito la soluzione. L’unico modo è quello di fare più prove possibili fino a quando non si trova un valore compatibile. Tali tentativi, seppur teoricamente possano essere fatti anche a mano (come dimostrato in questo video), vengono effettuati con delle macchine note come ASIC, dotate di chip altamente specializzati.
Per calcolare la soluzione richiesta, le macchine ASIC eseguono funzioni dette di hash: provano tutte le combinazioni possibili fino al momento in cui un miner trova il valore corretto. Il procedimento si ripete ogni 10 minuti circa.
Più funzioni di hash, vale a dire più tentativi è in grado di svolgere un miner nel minor tempo possibile, più possibilità ha di trovare la soluzione prima degli altri e poter così scrivere il nuovo blocco della blockchain.
Trovata la soluzione, il miner trasmette il blocco ai nodi limitrofi che, a loro volta, lo condividono con i propri peer attraverso il gossip protocol fino al momento in cui il blocco raggiunge tutti i nodi del network. La rete può così verificare crittograficamente il lavoro svolto dal miner: se il blocco viene considerato valido dal resto dei nodi del network, viene aggiunto alla blockchain e il miner riceve come ricompensa la block subsidy, in aggiunta alle commissioni di tutte le transazioni contenute nel blocco.
L’aggiustamento della difficoltà
La difficoltà richiesta per risolvere il quesito matematico è gestita in modo tale da garantire che ogni nuovo blocco venga trovato mediamente ogni 10 minuti. Ogni 2.016 blocchi, circa due settimane, il parametro della difficoltà viene modificato dai nodi della rete in base al tempo impiegato per minare i precedenti 2.016 blocchi. All’aumentare dell’hashrate presente sulla rete, la difficoltà aumenta in modo proporzionale, e viceversa. La variazione della difficoltà è chiamata difficulty adjustment.
Occorre notare che se la difficoltà dell’indovinello rimanesse sempre la stessa, con l’aumentare dell’hashrate la soluzione verrebbe trovata in minor tempo, con la conseguente emissione di più bitcoin. Al contrario, con la diminuzione della potenza di calcolo si minerebbero meno blocchi e verrebbero così prodotti meno bitcoin.
Più potenza di calcolo = più sicurezza
La Proof-of-Work rappresenta la dimostrazione crittografica che un miner ha completato il lavoro necessario per trovare un hash compatibile con la difficoltà stabilita dai nodi. L’hash vincente diventa l’hash del blocco appena minato e costituirà il punto di partenza per la successiva verifica della Proof-of-Work del blocco successivo. Tale processo crea una catena, dove l’hash di ciascun blocco deriva dall’hash del blocco precedente, sommato al nonce. Ciò comporta che per modificare un determinato blocco è necessario violare anche tutti quelli successivi, aumentando progressivamente la potenza computazionale richiesta per attaccare la rete Bitcoin. Per convenzione si considera inviolabile un blocco quando questo ne ha almeno cinque davanti (quindi il sestultimo blocco).
La rete Bitcoin è protetta dalla potenza computazionale impiegata per trovare la Proof-of-Work dei blocchi. Se aumenta la difficoltà necessaria per il mining di ciascun blocco, aumenta la sicurezza della rete. Maggiore è l’hashrate sulla rete, maggiore è la sicurezza di Bitcoin.