Il mining è il processo utilizzato per generare nuovi bitcoin e per confermare e inserire le transazioni all’interno della Blockchain.

Una delle caratteristiche fondamentali di Bitcoin è la decentralizzazione. Bitcoin non è controllato da nessuno, è completamente indipendente da organi centralizzati come governi, banche e altri istituzioni. Non esiste alcuna autorità che può interferire con le transazioni. Quest’ultime sono infatti impossibili da manipolare, è impossibile imporre spese aggiuntive o sottrarre denaro agli utenti contro il loro volere. Inoltre, tutte le transazioni Bitcoin vengono pubblicamente archiviate all’interno di un enorme registro contabile informatico conosciuto con il nome di Blockchain. Ma se questo sistema non è controllato da nessuno, chi decide quanti bitcoin sono in circolazione? In che modo le transazioni vengono verificate e inserite all’interno della Blockchain? Tutto questo è possibile grazie a quel processo che viene identificato con il nome di mining.
In questo articolo cercheremo di chiarire le due funzioni principali del mining, ovvero:

  • Conferma e verifica delle transazioni
  • Generazione di nuovi bitcoin

Conferma e verifica delle transazioni

Prima di incominciare tenete a mente questi due concetti:

  • Quando si effettua un pagamento tramite carta di credito, un’azienda verifica e registra la transazione. Questa terza parte garantisce un sistema efficiente ma basato sulla fiducia che questa azienda svolga il suo compito correttamente. In Bitcoin al contrario non vi è nessuna autorità centrale di controllo e le transazioni vengono verificate e confermate da una parte del Network stesso, creando così un sistema trustless.
  • A differenza delle valute fiduciarie (USD, JPY, EUR ecc.), che vengono stampate dalle banche centrali, Bitcoin non può essere stampato da nessuno. Bitcoin, ha un limite massimo programmato di 21 milioni e la loro emissione è prevedibile.

Per capire come funziona il mining analizzeremo il processo di conferma e verifica di una transazione Bitcoin step by step.

Step 1. Invio di una transazione
Come menzionato precedentemente in Bitcoin non esistono terze parti o autorità centrali che controllano e verificano che le transazioni vengano eseguite in modo corretto.
Ma allora cosa succede quando eseguo una transazione Bitcoin?
Nel momento in cui si decide di inviare bitcoin, la transazione viene trasmessa a tutta la rete tramite il wallet e viene successivamente confermata e inserita nella Blockchain grazie al lavoro svolto dai miners. Invece tutte le transazioni che restano in “attesa di conferma” sono raggruppate in un insieme di transazioni non confermate (pool of unconfirmed transactions).

Step 2.Costituire dei blocchi
I miners quindi selezionano le transazioni ancora in attesa di conferma e le raggruppano in un “blocco”.  Un blocco è formato quindi da un insieme di transazioni (al momento non confermate) e da altri metadati. Ogni miner può selezionare a piacimento le transazioni da includere in un blocco e allo stesso tempo diversi miner possono selezionare le stesse transazioni formando teoricamente blocchi identici.

Step 3. Aggiungere dei blocchi alla Blockchain
Dopo aver creato il loro blocco di transazioni i miner devono riuscire a inserirlo all’interno della Blockchain in modo tale che tutti gli altri partecipanti del Network registrino le transazioni che sono state selezionate dal miner in questione. Per aggiungere il blocco alla Blockchain, i miners, devono trovare un codice segreto per ogni blocco di transazioni creato. Questo codice segreto viene trovato risolvendo un problema matematico molto complesso che è unico per ogni blocco di transazioni, quindi ogni miner lavorerà su un problema diverso, unico per il blocco che hanno costruito.

[Miners: è un nodo speciale della rete Bitcoin che fornisce la sua potenza computazionale per confermare e inserire le transazioni all’interno della Blockchain. Ognuno di noi può essere un miner, l’unica cosa di cui si ha bisogno è del materiale specifico e scaricare il software Bitcoin.]

Come vengono scelte le transazioni?
Prima di aggiungere una transazione al blocco, un miner deve verificare se la transazione è idonea per essere eseguita in base alla cronologia registrata sulla blockchain. Se il saldo del portafoglio del mittente ha fondi sufficienti in base allo storico delle transazioni registrate, la transazione è considerata valida e può essere aggiunta al blocco. Di norma, i miners danno la priorità alle transazioni che hanno un costo di transazione elevato, in quanto ciò fornisce loro una ricompensa maggiore (vedi più avanti).
La risoluzione del problema matematico richiede una potenza computazionale molto elevata e quindi è un processo che richiede il consumo di grandi quantità di energia elettrica. Questo processo viene definito Proof of Work.

Che cos’è la Proof of Work
Il codice segreto che i miner cercano di trovare per aggiungere i blocchi alla Blockchain non è altro che un hash dei dati che si trovano all’interno del blocco che solitamente inizia con una serie di zero.
Definizione di funzione hash: Una funzione di hash è un algoritmo matematico che permette di mascherare dei dati di lunghezza arbitraria in una stringa binaria di dimensione fissa. Una funzione di hash prende una stringa di input di numeri e lettere (letteralmente qualsiasi stringa di lettere casuali, numeri e/o simboli) e la trasforma in una nuova stringa di 32 cifre formata da lettere e numeri casuali. Questa stringa di 32 cifre è l’output hash. Se viene modificato un numero o una lettera nella stringa di input, anche l’output dell’hash cambierà in modo imprevedibile. Tuttavia, la stessa stringa di input darà sempre la stessa stringa di output.
Nel nostro caso, i dati all’interno del blocco rappresentano l’input hash. Quando questi dati vengono fatti passare attraverso la funzione di hash restituiscono l’hash output. Una condizione della Blockchain Bitcoin è che un blocco può essere aggiunto alla Blockchain solo se il suo hash output (codice segreto) inizia con un certo numero di zeri. Ma cosa succede se l’hash output non corrisponde al codice segreto? In questo caso i miner continuano a cambiare un dato (nonce) incluso all’interno del blocco che gli permette così di ottenere un nuovo hash output. Questo processo viene ripetuto finché l’output trovato non soddisfa le condizioni per aggiungere il blocco alla Blockchain. Questo codice segreto comincia con una serie di zeri in base alla difficoltà del blocco (spiegazione più avanti).

Il nonce, la difficoltà del blocco e il target
Il calcolo eseguito dai miner viene spesso presentato come un complesso problema matematico ma come avete potuto notare di complesso c’è ben poco. I miner stanno semplicemente indovinando un dato, il nonce, facendo una serie di tentativi casuali consecutivi. Il nonce non è altro che un numero naturale intero compreso tra 0 e 4.294.967.296. I miners quindi non stanno risolvendo problemi matematici complessi ma piuttosto stanno indovinando a caso. Per indovinare questo dato i computer devono provare e riprovare a inserire numeri naturali diversi finché non trovano la soluzione adatta,  questo procedimento viene fatto molto velocemente e richiede un enorme quantitativo di energia misurato in hashing power/secondo. Il Network inoltre è stato impostato in modo tale che i blocchi vengano aggiunti alla blockchain in media ogni 10 minuti senza considerare il numero dei miner presenti nel Network. Questo è possibile grazie alla difficoltà del blocco. La difficoltà del blocco è un parametro che regola appunto la difficoltà dei calcoli eseguiti dai miner. Se infatti l’hashing power dovesse aumentare (aumento del numero dei miners) la difficoltà  si regolerà automaticamente per garantire che la produzione dei blocchi rimanga costante nel tempo (ogni 10 minuti). Ma come viene stabilito il valore del codice segreto necessario a risolvere i blocchi? Questo numero si chiama target. Questo valore determina appunto il livello di difficoltà del Network. Più il target è piccolo più la difficoltà è grande.
Riassumendo: i miner per aggiungere dei blocchi alla Blockchain generano dei numeri casuali (hash output) con la speranza che uno di questi sia inferiore o uguale al target stabilito. Il target è calcolato in base alla difficoltà dei blocchi che dipende a sua volta dal numero di miner presenti nel Network. Visto che questo dato è variabile, ogni 2 settimane (in verità 2016 blocchi) il target, e quindi la difficoltà, vengono ricalcolati per mantenere costante la produzione dei blocchi ogni 10 minuti.

Step 4. Diffusione del blocco
Il miner che trova la soluzione necessaria per aggiungere il blocco alla Blockchain diffonde il blocco e la soluzione a tutti gli altri miner in modo tale che possano verificarla.

Step 5. Accettazione del blocco
Per verificare la validità del blocco gli altri miners controlleranno i dati inseriti facendoli passare per la funzione di hash e verificheranno che la risposta ottenuta corrisponda alla soluzione trovata dal miner allo step 4.
Se è valida, i miners aggiorneranno la loro versione della Blockchain includendo questo nuovo blocco e diffondendolo a tutti gli altri nodi del Network. Il nome “Proof of Work” (Prova del Lavoro) deriva proprio da questo procedimento. La soluzione rappresenta la prova del lavoro svolto da un miner, ovvero l’energia e il denaro spesi per trovare questa soluzione.

Questo è il processo di verifica delle transazioni e di aggiunta dei blocchi alla Blockchain.
Vediamo ora come avviene la generazione di nuovi bitcoin

I miner consumano energia e quindi spendono denaro in risorse ed infrastrutture per garantire che Bitcoin sia un sistema sicuro e permettere a tutti noi di effettuare degli scambi monetari.
Ma per quale motivo lo fanno?
La ragione è semplice, hanno un incentivo economico.
I miner infatti contribuiscono alla comunità Bitcoin confermando ogni transazione e assicurando la loro legittimità in cambio di una ricompensa. Questo premio viene assegnato al miner che riesce a generare la sequenza di hash corretta che gli permette di aggiungere un nuovo blocco alla Blockchain. Attualmente il premio consiste nella creazione di 12,5 bitcoin (circa 48.000$) + le commissioni di ogni transazione inclusa nel blocco. Questa ricompensa è destinata a diminuire nel corso degli anni fino a quando l’ultimo bitcoin non sarà prodotto. Precisamente la ricompensa viene dimezzata ogni 210 000 blocchi prodotti (più o meno 4 anni), questo fenomeno prende il nome di halving. Il primo si è verificato nel 2012 e ha ridotto la ricompensa da 50 a 25 bitcoin. Il secondo è avvenuto nel 2016 trasformando la ricompensa negli attuali 12,5 bitcoin.
Il prossimo halving è previsto per il 24 Maggio 2020 e ridurrà la ricompensa del blocco a 6,25 btc. Il termine è previsto per il 2140, anno in cui verrà minato il 21milionesimo bitcoin. Questo sistema è stato teorizzato proprio per fornire a Bitcoin la caratteristica che lo ha reso una riserva di valore paragonabile all’oro: la scarsità.