Questo articolo fa parte di una serie di introduzione ai concetti della blockchain. Nei primi due articoli è stato dedicato spazio alla descrizione di ciò che è blockchain e al suo funzionamento.
Prima di passare a comprendere quali siano le possibili applicazioni in campo economico e sociale è necessario approfondire un ulteriore aspetto, probabilmente quello che si è fatto sentire maggiormente sinora oltre all’esistenza delle crypto: si parla del mining. Il mining, letteralmente ‘attività di estrazione’, è ciò che rende possibile la creazione e la stabilizzazione della blockchain. D’altra parte è ciò che permette ai minatori di essere remunerati in criptovaluta.
Per inciso si rammenta che esistono più criptovalute in virtù dell’esistenza di più blockchain con differenti caratteristiche. Anche se molte applicazioni di blockchain possono effettivamente basarsi su blockchain private con differenti caratteristiche e funzionalità per costruzione, le applicazioni che si basano su blokchain pubbliche, o permissionless ̧ dipendono anch’esse dalle loro differenti caratteristiche.
Ma come funziona il mining? E come mai quindi è possibile tramite esso ottenere remunerazione?
Per rispondere a quanto sopra verrà utilizzato un esempio pragmatico.
Per semplicità si analizzerà un caso in cui l’attività centrale da iscrivere nella catena è proprio la transazione di informazioni finanziarie, ovvero di scambio di moneta, ma già qui si ricorda che è solo uno dei tanti casi di possibile applicazione, come si vedrà nel prosieguo degli articoli.
Ipotizziamo di essere parte di un gruppo di 10 persone in un’isola deserta che decidano di rendicontare tutti gli scambi di valuta che vengono effettuati inter nos. Ci procuriamo quindi un registro in cui inscriveremo le transazioni finanziarie derivanti dai nostri scambi, che sarà detenuto da Anna, la quale senza dubbio è la persona più responsabile ed onesta del gruppo.
Ad esempio, partendo da un “bilancio” iniziale di 10 monete a testa:
- Anna cede 3 monete a Bob
- Grunk cede 2 monete a Bob
- Claire cede 5 monete a John
Durante la notte Grunk, malintenzionato, decide di rubare il registro ad Anna e di manometterlo in suo favore, determinando la seguente situazione:
- Anna cede 3 monete a Grunk
- Dave cede 2 monete a Bob
- Claire cede 5 monete a John
Il giorno dopo Anna se ne rende conto e cerca di aumentare la sicurezza del registro, frapponendo fra gli input e gli output (o anche hash) del processo di inscrizione della transazione una cosiddetta funzione hash.
La funzione hash è quella funzione crittografica su cui si basa l’algoritmo di consenso ed il cui funzionamento sarà espresso qualitativamente poco sotto. Di fatti, anche se nel prossimo articolo sarà possibile approfondire la dinamica propria della crittografia in oggetto, in effetti sinora avevamo parlato di blockchain come un registro di transazioni immutabile e distribuito (cfr il precedente articolo Criptovalute e blockchain, un'introduzione). Alla base di tutto ciò si cela la crittografia di cui sopra ed un sistema crittografico a chiave pubblica e privata.
Il nostro registro si presenta ora in questo modo:
- 84911216498e3125bca94c51b151a7401a64fd86c8a81e26218d5dbd3d04a2ac
- 65516c1f42477a88e5684434a0d236c1456d17da61328f9e4374c02ae0b7e97f
- 6056188cd45dd14349e023b1bd98b84b0094172144f69c0cde98b36d507c8b5d
L’aspetto finale sarà il seguente:
- Anna cede 3 monete a Bob “84911216498e3125bca94c51b151a7401a64fd86c8a81e26218d5dbd3d04a2ac”
- Grunk cede 2 monete a Bob “65516c1f42477a88e5684434a0d236c1456d17da61328f9e4374c02ae0b7e97f”
- Claire cede 5 monete a Jhon “6056188cd45dd14349e023b1bd98b84b0094172144f69c0cde98b36d507c8b5d”
In tal maniera sarà molto semplice per Anna verificare la veridicità delle transazioni in quanto la funzione hash per sua struttura determina un output che varia radicalmente anche se l’input varia in maniera letteralmente marginale. La transazione, al termine del periodo di controllo, sarà inscritta e validata solamente se ci sarà consenso fra la stringa input e quello che dovrebbe essere l'output corrispondente dato l’algoritmo hash selezionato.
Si veda:
- Anna cede 3 monete a Bob “84911216498e3125bca94c51b151a7401a64fd86c8a81e26218d5dbd3d04a2ac”
- Anna cede 3 monete a Bob! “ab1bb1ee4ed21d11e74497168a5f3a2454162a0ffe6283dc66bcc8bba39f789e”
- Anna cede 5 monete a Bob “baffab75dd6acde2daf739f5e14e48bc4949c6a6e2c92cd1b2e581601a005680”
Grunk però, ingengnandosi, riesce a comprendere come operi la funzione in oggetto ed a modificare correttamente le stringhe input coerentemente con la variazione delle stringhe output, in maniera tale da non rendere individuabile la correzione tramite il confronto fra la corretta stringa output e la corrispondente input. Anna deve aumentare il livello di difesa al fine rendere stabile il registro, pertanto decide di legare le transazioni all’hash della transazione precedente, in maniera da legare temporalmente le transazioni le une con le altre. Il risultato sarà il seguente:
- “Anna cede 3 monete a Bob”→“84911216498e3125bca94c51b151a7401a64fd86c8a81e26218d5dbd3d04a2ac”
- “Anna cede 3 monete a Claire (più) 84911216498e3125bca94c51b151a7401a64fd86c8a81e26218d5dbd3d04a2ac”→“8ccf51a317d80540d40ccc8e568c8d8c57d79b564847f26fc74c4d65d10150d7”
- “Claire cede 2 monete a John (più) 8ccf51a317d80540d40ccc8e568c8d8c57d79b564847f26fc74c4d65d10150d7”→“fc86291334e4f99cc38dbdca3c611374e71a680ab44c0127aae6296c55e87527”
- “John cede 1 moneta a Grunk (più) fc86291334e4f99cc38dbdca3c611374e71a680ab44c0127aae6296c55e87527”→”8dc41867f565b2c3af75d7a246acbf7fe63319029068f5385e7934faf39f4205”
In questo momento, per modificare una qualsiasi transazione, sarebbe necessario modificare l’integrità delle transazioni nel registro, in quanto tutte sono adesso legate fra loro in ordine cronologico.
Ammettiamo che Grunk riesca a comprendere l’algoritmo del nostro registro ed a modificare le transazioni in suo favore: Anna, anche in questo caso, riesce a complicargli la situazione, apponendo un valore casuale alla stringa inscrivenda nel registro tale per cui debba esserci un certo numero di “0” prima dell”hash”. Detto valore, chiamato nonce, complica decisamente i calcoli che dovranno essere fatti per poter modificare coerentemente con l’algoritmo di consenso tutta la catena di transazioni.
A titolo di esempio, senza avere una corrispondenza effettiva come sopra:
- Anna cede 3 monete a Bob 159
- Grunk cede 2 monete a Bob 789
- Claire cede 5 monete a Jhon 962
Per la capacità di calcolo attuale, un sistema siffatto risulta tendenzialmente impossibile da "battere". La sicurezza della catena è notevolmente aumentata nel momento in cui la capacità di calcolo dedicata non è solamente sita in un hardware, ma in un sistema di hardware dislocati per il mondo che vengono utilizzati nel processo.
Inoltre, ogni nodo della catena detiene una copia delle transazioni: ciò significa che è possibile per esso verificarle anche se il sistema è stato violato in un qualche punto, in quanto ogni nodo potrà validare ogni transazione e decidere, secondo la coerenza con l’algoritmo di consenso, se iscriverla nel registro o meno. L’impossibilità di invertire la funzione rende implicitamente la transazione immutabile una volta inscritta nel registro. Oltre a questo, la transazione risulta essere approvata da tutti i nodi.
Infatti, se un qualsiasi nodo decidesse di violare il registro, modificando i dati al suo interno, ognuno degli stessi nodi verrebbe a conoscenza della violazione, proprio come Anna e Grunk più sopra. Il risultato sarebbe la mancata inscrizione all’interno del registro.
È proprio qui che si apprezza la validità del processo di mining. L’attività di estrazione infatti è tesa proprio a garantire il processo sopra descritto. Per incentivare la condivisione della capacità di calcolo necessaria si promette un incentivo ai validatori: una volta individuato il nonce corretto (all’interno di un determinato intervallo accettato) si concede una quantità di criptovaluta come ricompensa su un conto apposito, ovvero su un wallet.
Ed è qui che si collega quanto anticipato nell’articolo precedente al riguardo degli algoritmi di consenso citati. Esistono infatti più metodi per poter estrarre la critpovaluta secondo il processo di mining ed essi sono divisi tendenzialmente in due grandi modelli (cfr supra), ovvero il Proof-of-Work ed il Proof-of- Stake.
Le differenze fra i due, come già accennato, sono fondamentali:
nel primo si ha una più alta probabilità di ottenere la ricompensa quanto più alta è la capacità di calcolo, determinata con un tasso di hash (hashrate).
Questo è anche il motivo per cui dapprima, agli inizi, era possibile minare ad esempio bitcoin con una capacità di calcolo irrisoria, anche con il computer di casa, mentre negli ultimi tempi sarebbero necessari interi palazzi arredati con appositi terminali adeguatamente strutturati. Questo sistema può essere anche considerato insostenibile, dato che la capacità di calcolo risulta essere crescente (e quindi anche i costi), oltre che l’energia necessaria per attivare il tutto.
Il problema è stato aggirato grazie al secondo algoritmo di consenso, che prevede una quantità stabile in termini di hashrate, cambiando totalmente le logiche di remunerazione. Infatti, il minatore che pone in garanzia la più grande proporzione di criptovaluta, in questo sistema sarà più probabilmente scelto per validare la transazione. Se ad esempio, nel sistema Ethereum (dove da poco siamo passati proprio al PoS), su un totale di cripto posta a garanzia, pena della frode la perdita della stessa, possediamo la metà di essa, per ogni transazione saremmo selezionati e remunerati da un algoritmo pseudo-casuale, ma l’hashrate necessario sarà sempre costante.
A questo punto abbiamo molte informazioni sulla blockchain:
nel prossimo articolo, il quarto per questa serie, si presenteranno le principali criptovalute e soprattutto le principali applicazioni negli svariati mondi possibili di questa tecnologia rivoluzionaria.
[…] concetti di distribuzione, trasparenza e decentralizzazione (confronta articolo 1, articolo 2, articolo 3), ma solo sulle caratteristiche principali della […]