5 min read

Mining e PoW: come funzionano. Corso base ep. 3

Nella terza puntata del corso base sulle crypto ci addentriamo nel mondo degli algoritmi di consenso distribuito. Stavolta parliamo del mining, che permette di rendere sicura la blockchain Bitcoin e di creare nuovi BTC.

Le basi del mining

Sì, sappiamo che con il mining si producono i Bitcoin. Ci sono dei computer, delle “macchine” che consumano energia per mantenere sicura la blockchain, ma esattamente questo processo come funziona? E come viene eseguito?

Lo scopriremo in questo terzo episodio del nostro corso base su Bitcoin, crypto, blockchain e dintorni, dove andiamo a indagare quelli che vengono chiamati “algoritmi di consenso”. Quegli algoritmi che permettono ai vari nodi che fanno parte di un network (da cui dipende la sicurezza della blockchain) di “andare d’accordo” su un’unica soluzione, e soprattutto di rimanere sempre integri, evitando che vengano attaccati e manomessi d’attori malevoli.

È importantissimo quindi studiarli, perché sono i fondamenti sui quali si basa il funzionamento e la sicurezza di Bitcoin e delle altre criptovalute. 

Il mining stesso può essere inteso in sé stesso come il più importante nonché longevo algoritmo di consenso distribuito, e colonna portante del mondo crypto, in quanto è ciò che gli permette di esistere, come fosse il suo cuore  pulsante. E soprattutto, è ciò che gli permette di essere sicuro, in relazione alla blockchain. Senza sicurezza, infatti, una criptovaluta non ha ragion d’essere.

Cercheremo quindi di capire che cos’è un algoritmo di consenso distribuito e a che cosa serve, per poi andare nello specifico esplorando il mondo del proof-of-work (PoW), che di fatto “è” il mining, e uno degli algoritmi di consenso distribuito esistenti nel mondo blockchain. 

L’indovinello dei generali bizantini e la blockchain

Iniziamo da un racconto che  risale a qualche secolo fa. Una sorta di indovinello da risolvere. Ci  sono un insieme di generali bizantini che si devono coordinare per sferrare un attacco a una  roccaforte. C’è un problema: ci possono essere tra questi generali alcuni traditori che non vogliono andare all’attacco.

Un attacco coordinato porterebbe alla vittoria, e se questi traditori iniziassero a instillare del dissenso tra i vari generali c’è il rischio che l’attacco vada a finire in un nulla di fatto. Abbiamo due categorie di attori: i generali che vogliono attaccare e vincere, e i traditori che invece vogliono scappare e salvarsi. 

Questi non sono tutti insieme, non si parlano tutti tra loro. Un traditore potrebbe quindi convincere altri generali della propria versione dei fatti, andando a sabotare l’attacco. Quindi, quale potrebbe essere un metodo per coordinare tutti insieme questi generali ad un obiettivo comune?

Questo è ciò che è passato alla storia come il “problema dei generali bizantini”. Nei sistemi  distribuiti, questo problema è più attuale che mai, in quanto si presenta una moltitudine di nodi da mettere d’accordo su un’unica soluzione. Ovvero la blockchain corretta, la sua versione “giusta” e immune da versioni fallaci che potrebbero comprometterla, andando a falsare le transazioni.

In un sistema centralizzato, mettere d’accordo tutti non è particolarmente difficile, perché c’è il  server centrale che svolge la funzione di “comandante” che impone la sua versione dei fatti.

L’obiettivo è quindi andare a coordinare tutti i nodi verso un’unica soluzione, e ciò è permesso proprio degli algoritmi di consenso distribuito. Tuttavia non è un procedimento banale, e ci sono alcune problematiche. 

La prima è come decidere chi ha ragione in caso di contenziosi. La seconda è riuscire a evitare che degli attori malevoli possano influenzare il processo di consenso. Qualunque esso sia, visto che esiste una varietà di meccanismi non indifferente, sebbene meno rilevanti del proof-of-work (PoW) e il proof-of-stake, ovvero il proof-of-authority, il proof-of-history (Solana) o il proof-of-capacity.

Il proof-of-work (PoW)

Il meccanismo PoW funziona (come si potrebbe intuire) grazie al “lavoro”, che è da intendersi come dimostrazione di un determinato consumo di energia, derivato a sua volta dallo sfruttamento di un tot di potenza di calcolo impegnato in una determinata versione della blockchain. 

Questo lavoro, di conseguenza, funge anche da validazione per ognuno dei nodi che competono nella blockchain, che fanno a gara per “risolvere” un determinato blocco di transazione. 

A questo punto resta da provare che il lavoro svolto per “chiudere” questo blocco sia stato fatto effettivamente, e senza andare ad aggirare il consenso distribuito. In caso contrario, infatti, ognuno potrebbe inventarsi da sé dei blocchi di transazione. 

Per capire come funziona il mining occorre in primo luogo comprendere come funziona l’hash, ovvero una funzione che prende un dato input e lo trasforma in un output (l’hash, appunto), in forma di stringa alfanumerica. Questa non è una striscia casuale, in quanto lo stesso input risulta sempre nello stesso output. In questo modo, non c’è nessun modo a partire dall’hash di risalire all’origine, ma se si conosce quest’ultima, allora si può anche verificare che sia corretto, testando in un secondo momento l’output. 

La funzione si definisce, proprio per questo motivo, “asimmetrica”, perché dall’output non si può risalire all’input. In questo senso, l’unico modo per risalire all’input dall’output è provare infiniti input, finché questo non viene “azzeccato”. Questi passaggi sono fondamentali per comprendere la funzione di hashing, alla base del mining. In parole semplici, si prende un dato, lo si da in pasto alla funzione, e si ottiene un output, da cui è impossibile risalire all’origine se non per infiniti tentativi. 

Il ruolo del miner

Il PoW, in sostanza, chiede tramite questo meccanismo ai miner di risolvere un complesso calcolo probabilistico, e il primo a riuscirci, validando il blocco in questione, ottiene anche la sua ricompensa. Per risolvere il calcolo, i miner di successo utilizzano speciali computer chiamati ASIC, che non fanno altro che provare in continuazione delle combinazioni di numeri e lettere (crittografia SHA-256) fino al momento in cui non viene risolto il problema proposto. 

Tutto ciò, se non fosse ancora chiaro, serve appunto per impedire manomissioni del network, e poiché la validazione comporta spese ingenti in macchinari ed energia elettrica, non sarebbe conveniente agire in modo malevolo, (si perderebbero solo dei soldi). Maggiore è la potenza di calcolo a disposizione, quindi, superiori saranno le possibilità di battere sul tempo tutti gli altri miner. Alla validazione del blocco, il vincitore riceve una certa quantità di Bitcoin come ricompensa, e la soluzione viene distribuita agli altri nodi. È qui che il sistema chiude il cerchio e ha senso: l’incentivo economico spinge a partecipare, e l’emissione di un nuovo blocco crea nuovi BTC, azione nota con il termine “mining” proprio perché, di fatto, si “estraggono” nuovi esemplari della moneta. Oggi, il 90% di questa criptovaluta è già in circolazione. Ogni quattro anni, il fenomeno chiamato halving dimezza l’emissione, e gli ultimi Bitcoin verranno minati nel 2140. 

In sintesi, il proof-of-work richiede come “stake” la potenza computazionale e, di conseguenza, anche un certo dispendio energetico. Chi sostiene questa spesa ha tutto l’interesse a fare le cose per bene e, grazie alla sua costruzione, garantisce che nessuna transazione errata possa farla franca. E alla validazione del blocco, nuovi Bitcoin (o altre crypto) vengono emessi.


bitcoin
Bitcoin (BTC) $ 19,150.66
ethereum
Ethereum (ETH) $ 1,346.21
tether
Tether (USDT) $ 1.00
usd-coin
USD Coin (USDC) $ 1.00
bnb
BNB (BNB) $ 279.49
xrp
XRP (XRP) $ 0.481520
binance-usd
Binance USD (BUSD) $ 1.00
cardano
Cardano (ADA) $ 0.462934
solana
Solana (SOL) $ 33.86
dogecoin
Dogecoin (DOGE) $ 0.066033
polkadot
Polkadot (DOT) $ 6.45
shiba-inu
Shiba Inu (SHIB) $ 0.000012
dai
Dai (DAI) $ 1.00
staked-ether
Lido Staked Ether (STETH) $ 1,340.95
matic-network
Polygon (MATIC) $ 0.770678
tron
TRON (TRX) $ 0.060605
avalanche-2
Avalanche (AVAX) $ 17.93
wrapped-bitcoin
Wrapped Bitcoin (WBTC) $ 19,209.18
uniswap
Uniswap (UNI) $ 5.86
cosmos
Cosmos Hub (ATOM) $ 14.00
ethereum-classic
Ethereum Classic (ETC) $ 29.05
leo-token
LEO Token (LEO) $ 4.26
litecoin
Litecoin (LTC) $ 55.07
okb
OKB (OKB) $ 15.24
chainlink
Chainlink (LINK) $ 7.70
ftx-token
FTX (FTT) $ 24.06
stellar
Stellar (XLM) $ 0.120006
near
NEAR Protocol (NEAR) $ 3.83
crypto-com-chain
Cronos (CRO) $ 0.119073
monero
Monero (XMR) $ 143.70
algorand
Algorand (ALGO) $ 0.374000
bitcoin-cash
Bitcoin Cash (BCH) $ 120.72
flow
Flow (FLOW) $ 1.72
apecoin
ApeCoin (APE) $ 5.60
terra-luna
Terra Luna Classic (LUNC) $ 0.000246
vechain
VeChain (VET) $ 0.023325
filecoin
Filecoin (FIL) $ 5.74
chain-2
Chain (XCN) $ 0.077838
internet-computer
Internet Computer (ICP) $ 6.14
quant-network
Quant (QNT) $ 120.32
hedera-hashgraph
Hedera (HBAR) $ 0.063158
chiliz
Chiliz (CHZ) $ 0.258337
tezos
Tezos (XTZ) $ 1.52
the-sandbox
The Sandbox (SAND) $ 0.911468
frax
Frax (FRAX) $ 1.00
decentraland
Decentraland (MANA) $ 0.725868
eos
EOS (EOS) $ 1.23
axie-infinity
Axie Infinity (AXS) $ 13.14
theta-token
Theta Network (THETA) $ 1.13
elrond-erd-2
Elrond (EGLD) $ 48.60