5 min read

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

Di Davide Grammatica

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.


X

Vuoi essere sempre sul pezzo?

Iscriviti alla newsletter. Niente spam, promesso!

Se ti iscrivi c'è un regalo per te: una guida completa per i prossimi airdrop!

bitcoin
Bitcoin (BTC) $ 27,237.30
ethereum
Ethereum (ETH) $ 1,843.02
tether
Tether (USDT) $ 1.00
bnb
BNB (BNB) $ 308.13
usd-coin
USD Coin (USDC) $ 1.00
xrp
XRP (XRP) $ 0.473102
cardano
Cardano (ADA) $ 0.376274
staked-ether
Lido Staked Ether (STETH) $ 1,840.97
dogecoin
Dogecoin (DOGE) $ 0.072548
matic-network
Polygon (MATIC) $ 0.923272
solana
Solana (SOL) $ 20.48
tron
TRON (TRX) $ 0.077104
polkadot
Polkadot (DOT) $ 5.40
litecoin
Litecoin (LTC) $ 89.28
binance-usd
Binance USD (BUSD) $ 1.00
shiba-inu
Shiba Inu (SHIB) $ 0.000009
avalanche-2
Avalanche (AVAX) $ 14.47
dai
Dai (DAI) $ 1.00
wrapped-bitcoin
Wrapped Bitcoin (WBTC) $ 27,238.30
uniswap
Uniswap (UNI) $ 5.05
chainlink
Chainlink (LINK) $ 6.50
leo-token
LEO Token (LEO) $ 3.51
cosmos
Cosmos Hub (ATOM) $ 10.59
the-open-network
Toncoin (TON) $ 1.93
okb
OKB (OKB) $ 46.93
monero
Monero (XMR) $ 153.31
ethereum-classic
Ethereum Classic (ETC) $ 18.25
stellar
Stellar (XLM) $ 0.088200
bitcoin-cash
Bitcoin Cash (BCH) $ 114.10
internet-computer
Internet Computer (ICP) $ 4.90
true-usd
TrueUSD (TUSD) $ 1.00
filecoin
Filecoin (FIL) $ 4.53
lido-dao
Lido DAO (LDO) $ 1.99
aptos
Aptos (APT) $ 8.46
hedera-hashgraph
Hedera (HBAR) $ 0.052492
crypto-com-chain
Cronos (CRO) $ 0.060631
arbitrum
Arbitrum (ARB) $ 1.19
near
NEAR Protocol (NEAR) $ 1.64
quant-network
Quant (QNT) $ 102.53
vechain
VeChain (VET) $ 0.020194
ggtkn
GGTKN (GGTKN) $ 0.111153
apecoin
ApeCoin (APE) $ 3.25
algorand
Algorand (ALGO) $ 0.151389
the-graph
The Graph (GRT) $ 0.120482
the-sandbox
The Sandbox (SAND) $ 0.551168
paxos-standard
Pax Dollar (USDP) $ 1.00
frax
Frax (FRAX) $ 0.999929
edgecoin-2
Edgecoin (EDGT) $ 0.999955
eos
EOS (EOS) $ 0.904194
render-token
Render (RNDR) $ 2.67