Proof of Work – come funziona

Quando parliamo di mining, facciamo riferimento ad un puzzle crittografico molto difficile da risolvere. Ma cos’è questo puzzle alla fine dei conti?

Questo ha a che fare con la prova di lavoro ( proof of work) che il miner deve compiere per poter risolvere il puzzle.

La proof of work sono di fatto dei dati che richiedono molta potenza computazionale per essere elaborati ma possono poi essere verificati velocemente. Grazie a questo i dati presenti nella blockchain sono immutabili.

Perchè i miner ci mettono così tanta enfasi ?

La proof of work è un meccanismo per creare un consenso valido d globale: dal momento in cui tutti i nodi hanno la stessa copia della blockchain, tutti i nodi devono trovarsi d’accordo sulle condizioni che garantiscono la veridicità dei dati. In altre parole: se il contenuto in un blocco è facilmente modificabile, allora chiunque potrebbe alterarlo, mentre se ogni blocco è minato con un complesso calcolo matematico, è molto più difficile per chiunque modificare quel blocco o in generale la blockchain. O meglio, ci vorrebbe un notevole dispendio di risorse.

Vediamo più nel dettaglio la proof of work

Creiamo un elenco di blocchi, dove gli stessi sono collegati li uni aglj altri tramite un codice di identificazione. Ogni blocco contiene i seguenti dati:

    • identificazione del codice del precedente blocco  (PREV)
    • nome di chi invia (SENDER)
    • nome di chi riceve (RECEIVER)
    • Quantita di bitcoin o parti di esso (AMOUNT)

Per complicare le cose, facciamo che ogni codice d’identificazione deve iniziare con 0000 (quattro zeri). Per far questo aggiungiamo un campo dato chiamato NONCE.

Facciamo un esempio

Il primo blocco avrà i seguenti dati (nota che essendo il primo blocco ha codice del precedente blocco uguale a 0 proprio perchè è il primo):

PREV:0
SENDER:john
RECEIVER:jenny
AMOUNT:100
NONCE:1

Adesso copiamo questo blocco di testo ed incolliamolo in uncalcolatore hash come questo e facciamo click su Calculate SHA-256 Hash (fai attenzione agli spazi). L’ hash verrá come segue:
07b01b0f4672f2bc58ef11132df4bc74a4e0dc9f2e07ee5d9a0428d3836bc6cb

Come puoi vedere peró l’hash inziia con b273 e non con 0000 come voluto;  dobbiamo quindi provare a cambiare il campo NONCE e ripetere il calcolo ( cambiando il valore di NONCE da 1 2 cambierá anche il codice hash).

Il nuovo testo del blocco sarà di questo tipo:

PREV:0
SENDER:john
RECEIVER:jenny
AMOUNT:100
NONCE:2

Lanciando il calcolo dell’hask, come in precedenza, avremo quindi:
263172553403d3182866ed4d2e7b588a6932e58d0acaa1fa92958a1f70dfabc5

Anche in questo cask il codice non iniza per 0000! Questo giochino si dovrà ripetere finquando non si troverà il codice hash che inizia per esattamente 0000.

Per semplicità, prima che stai e riprovi tu fin quando diventi matto, ti dó la soluzione: dovrai ripetere lo stesso processo 22683 volte!

Il testo esatto sarà quindi:

PREV:0
SENDER:john
RECEIVER:jenny
AMOUNT:100
NONCE:22683

Hash code: 00000d7d33ebf71c24c15119c925acf9d9d45f8f9972034e2c8b1aabe29163a7

Non si puó fare il processo inverso: ovvero decodificare dall’hash che inzia per 0000 quale sarebbe il valore del NONCE ricercato. È a senso unico. Non si puó fare diversamente da quanto abbiamo appena visto. Provare e riprovare. L’unico modo e cercare di fare più interrogazioni sequenziali ( o a caso).

Ora creiamo una blockchain a partire dal primo blocco che abbiamo creato,sarà di questo tipo:

Se volessi manomettere il primo blocco, altereresti la blockchain ma per ogni blocco successivo dovresti comunque trovare l’hash che inizi per 0000 ancora!

Ecco perchè, quando dopo che vengono creati (minati) un pó di blocchi dopo quello in questione, il blocco stesso diventa molto più sicuro.

Per prassi si tende a fidarsi della verità di un blocco sulla blockchain di bitcoin e definirlo SICURO quando sono stato minati dopo di quello almeno 2/3 blocchi. Questo perchè bisogna tenere in considerazikne fhe la difficoltà di calcolo cresce di volta in volta ed è molto più complicato del nostro semplice esempio.

Rissumendo: per falsificare un blocco e far sì che tutta la rete creda nel tuo blocco fake, allora dovrai tenedenzialmente avete una capacità superiore alla metà di calcolo presente , quindi il classico 50% + 1 ( o detto anche per semplicità 51%) per poter creare più velocemente i blocchi degli altri e rendere approvato di fatto il blocco fake che hai creato. Ecco perchè dovresti avere la potenza per creare 2/3 blocchi di fila (e quindi risolvere il puzzle crittografico) perchè la rete ritenga vero e valido il blocco fake.

È molto molto mooooolto difficile poterlo realizzare. Ma non impossibile – come la maggior parte delle cose in informatica.

La grande sfida del consenso della proof of work è il consumo di energia dispendioso per poter mantenere un sistema sicuro e decentralizzato.

Per dire il vero, si stanno studiando soluzioni per incanalate e sfruttare il calore generato dalle macchine di mining ( schede video) e poter riscaldare interi centri commerciali.

L’incentivo sarà sempre la motivazione di scelta. E questo assunto mai nessuno lo potrà cambiare

3 risposte a “Proof of Work – come funziona”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *