Bitcoin
“Great stuff. This is the first real innovation in money since the Bank of England started to issue its promissory notes for gold in the vaults, which then became known as banknotes. I believe an open source currency has great potential. A bit like Google becoming the default search engine for many of us.” (Sepp Hasslberger, 12-02-2009)
Sommario
L’utilizzo consapevole di uno strumento necessita molto spesso di uno studio attento e puntuale circa il funzionamento dello stesso, sforzo che diventa via via più impegnativo – ma necessario - man mano che la tecnologia in questione permea e travolge la nostra quotidianità. Come per tutte le nuove tecnologie anche Bitcoin necessita di tempo e studio per la comprensione del suo funzionamento, sforzo che molto spesso non è alla portata dell’utente finale, che viene sopraffatto dalla molteplicità di fonti e dalle informazioni confuse disponibili online.
Questo articolo si pone l’obiettivo di introdurre il lettore a Bitcoin; per fare ciò si procede con la suddivisione dell’articolo in tre sezioni, ognuna riguardante alcuni aspetti fondamentali del protocollo. Nella prima sezione si considerano gli aspetti fondamentali di transazioni e di wallet, elementi che un neofita incontra nel corso della sua sperimentazione della tecnologia. La seconda sezione riguarda l’infrastruttura sulla quale Bitcoin si basa, cioè il network di computer che costituiscono il protocollo. Si tratterà quindi di nodi e dell’importanza di questi ultimi all’interno delle dinamiche di protocollo. La terza sezione si focalizza sul fenomeno del mining, spiegandone le principali caratteristiche.
Transazioni e wallet
La prima sezione si pone l’obiettivo di spiegare il funzionamento delle transazioni bitcoin e dei wallet bitcoin, considerati il primo punto di contatto tra il neofita e il protocollo. Prima di procedere è necessaria però una prima precisazione di carattere terminologico.
Bitcoin è un software distribuito, installato in decine di migliaia di computer sparsi per il globo, i quali collaborano per mantenere un registro di transazioni tra gli utenti. Le transazioni sono denominate grazie all’utilizzo di una valuta interna al protocollo. Spesso la parola Bitcoin è utilizzata per definire lo stesso network di computer e non solo il software, paragonando il sistema ad un metodo di pagamento. La parola “Bitcoin” viene spesso utilizzata in modo intercambiabile con la parola blockchain; Bitcoin è anche la valuta interna, l’asset alternativo di investimento noto a tutti.
La difficoltà nel definire univocamente Bitcoin dà vita ad una doverosa distinzione di carattere terminologico che viene utilizzata anche all’interno del presente articolo. Si utilizza la parola Bitcoin (con la B maiuscola) alludendo al protocollo, al network di computer e più in generale alla blockchain Bitcoin. La parola bitcoin (con la b minuscola) indica strettamente lo strumento monetario utilizzato all’interno della blockchain, l’asset alternativo ad oggi molto noto, appunto il bitcoin (BTC). Nel corso degli anni si è diffusa la consuetudine che riconosce nella parola bitcoin un appellativo per riferirsi non solo ad un’unità intera di valuta bitcoin, ma anche ad ogni sua frazione o quantità superiore all’unità; di fatto riferendosi ad una transazione bitcoin si allude ad una movimentazione di bitcoin di qualsiasi dimensione o entità indipendentemente dal fatto che sia una frazione millesima o decine di bitcoin. Nonostante la sedimentazione di tale consuetudine, ha da poco preso piede l’abitudine di rivolgersi a delle quantità di bitcoin anche utilizzando alcune nomenclature alternative, le quali si basano invece su unità inferiori a 1 bitcon e più precisamente individuano nei satoshi l’unità base della valuta. La tabella di seguito riporta le nomenclature.
Unit | Bitcoin Equivalent | Satoshi Equivalent |
---|---|---|
1 bitcoin (BTC) | 1 bitcoin | 100,000,000 satoshi |
1 millibitcoin (mBTC) | 0.001 bitcoin | 100,000 satoshi |
1 microbitcoin (µBTC) | 0.000001 bitcoin | 100 satoshi |
1 satoshi (sat) | 0.00000001 bitcoin | 1 satoshi |
Come si può notare in tabella, il satoshi è quindi l’unità base, atomica del protocollo e l’unica di fatto utilizzata all’interno del codice del protocollo. Un bitcoin è quindi divisibile in 100 milioni di unità, il che lo rende uno strumento incredibilmente frazionabile. Nonostante questa doverosa premessa di carattere terminologico, nel corso dell’articolo ci si riferirà alla valuta del protocollo Bitcoin utilizzando il termine bitcoin.
Le transazioni
Il primo contatto che un utente ha con Bitcoin è chiaramente il momento nel quale egli entra in possesso di alcuni bitcoin perché li ha acquistati tramite una piattaforma o perché li ha ricevuti in cambio di un pagamento o semplicemente li ha scambiati con un altro utente. Questo trasferimento avviene attraverso una transazione bitcoin, che rappresenta quindi uno spostamento di bitcoin.
Per comprendere al meglio una transazione bitcoin si può considerarla al pari di un pagamento in contanti. Un normale spostamento di denaro in contanti si distingue per alcune caratteristiche:
- La non-divisibilità delle banconote o monete (nonostante la valuta euro sia divisibile fino alla seconda cifra decimale);
- L’assenza di intermediari che prendono parte allo spostamento di denaro. Il contante passa di mano e con esso passa di mano il possesso del contante, con uno scambio che si dice pari-a-pari (peer-to-peer) l’acquirente trasferisce i soldi al commerciante senza bisogno di intermediazione o di enti terzi;
- La irreversibilità del pagamento. In senso stretto, chi possiede la banconota ne è il proprietario. Nel momento in cui cedo i contanti e mi viene offerto il bene o servizio in cambio non è più possibile truffare il commerciante invertendo il pagamento. Ciò invece può accadere per esempio utilizzando carte di credito o alcuni mezzi di pagamento digitali come Paypal.
Le tre proprietà che il contante assume nell’esempio di compravendita appena citato sono individuabili anche in Bitcoin. L’immagine di seguito riporta un esempio di transazione bitcoin.
All’interno dell’immagine sono indicati i vari elementi fondamentali riconoscibili in una transazione bitcoin:
- L’indirizzo di colui che spende i bitcoin. Esso identifica quello che nel precedente esempio è il compratore. In generale non esiste una corrispondenza biunivoca tra indirizzo ed utente, che dunque può avere numerosi indirizzi a sua disposizione;
- L’importo trasferito dal compratore. Rappresenta di fatto un’ipotetica banconota che il compratore porge al commerciante, la quale non può essere quindi spezzettata ma va spesa interamente;
- L’indirizzo del ricevente. Si ipotizzi uno scenario nel quale il compratore voglia acquistare un caffè pur disponendo solo di una banconota da €50 con il costo di un caffè di €1. Una transazione in contanti vedrà il commerciante ricevere la banconota da €50 e porgere €49 al cliente come resto;
- L’importo ricevuto presso il commerciante;
- L’indirizzo del compratore. Nell’esempio precedente il cliente riceve di resto €49 che deposita nuovamente nel suo portafoglio. In questo caso il compratore (colui che ha inviato i fondi) spedisce ad un suo indirizzo il resto;
- L’importo che costituisce il resto della transazione;
- L’identificatore della transazione (txid). Questa stringa alfanumerica è di fatto un numero che identifica univocamente la transazione in questione;
- Timestamp corrispondente approssimativamente a quando la transazione è avvenuta.
L’immagine riporta una transazione scelta casualmente all’interno del sito mempool.space, uno dei tanti blockchain explorer presenti online, siti che permettono di osservare in tempo reale ciò che avviene nella blockchain Bitcoin.
La complessità di una transazione bitcoin va ben oltre i pochi elementi elencati in precedenza, i quali chiaramente sono però fondamentali per capirne il funzionamento. E’ necessario puntualizzare che a livello di protocollo le transazioni non assumono propriamente la forma osservata; la strutture delle transazioni che si possono osservare grazie ad un blockchain explorer sono frutto di semplificazioni grafiche, utili a trasmettere efficacemente i concetti appena spiegati ma inesistenti a livello di codice. Nonostante queste complessità, gli otto punti elencati in precedenza rappresentano tutto ciò di cui l’utente finale necessita per muovere i primi passi nel mondo di Bitcoin.
I wallet
Compresa la forma essenziale di una transazione bitcoin è necessario ora considerare lo strumento fondamentale che un utente utilizza per detenere, inviare e ricevere i bitcoin, cioè un portafoglio bitcoin (wallet). Nel corso del precedente paragrafo si è parlato di “fondi trasferiti” e di “monete” alludendo ad uno spostamento vero e proprio di fondi durante una transazione. Per definire e introdurre i wallet bitcoin è necessario però confutare quanto detto fino ad ora, che risulta impreciso per quanto più comprensibile. Per quanto possa risultare controintuitivo, in Bitcoin non esistono monete e per ciò non esistono movimentazioni di valuta, dunque è necessario ridefinire il significato di transazione alla luce delle nuove conoscenze apprese.
Excursus: la crittografia in Bitcoin
I fondamentali di Bitcoin si ancorano ad una pratica matematica chiamata crittografia, la quale si occupa di studiare tecniche e strategie per rendere sicure informazioni per prevenire l’attacco di individui malintenzionati. Notoriamente la crittografia si occupa di pratiche per nascondere e celare informazioni; ciò è esatto in generale, ma considerando il caso di Bitcoin si osserva che all’interno del protocollo la crittografia viene utilizzata non per celare informazioni bensì per attestare la veridicità e l’originalità di un’informazione, senza però esporla ad osservatori esterni.
Per spiegare il funzionamento di Bitcoin in modo più puntuale è necessario introdurre una tecnica crittografica molto ricorrente in Bitcoin, cioè la crittografia a chiave pubblica. La crittografia a chiave pubblica è una tecnica crittografica che contempla l’esistenza di due chiavi, una chiave privata e una chiave pubblica, tra le quali intercorre una particolare relazione. Entrambe le chiavi sono di fatto dei numeri molto grandi che vengono generati l’uno in modo casuale (la chiave privata) e l’altro, la chiave pubblica, viene derivato dalla chiave privata attraverso complessi passaggi matematici.
Il processo di derivazione della chiave pubblica avviene utilizzando una tecnica crittografica chiamata crittografia a curva ellittica (Elliptic Curve Cryptography – ECC). Addentrarsi nei meandri della crittografia curva ellittica va ben oltre gli scopi di questo articolo, si elencano di seguito solo le principali proprietà che Bitcoin eredita dalla ECC e che utilizza per il suo schema di derivazione delle chiavi.
- L’obiettivo ultimo della crittografia a chiave pubblica è quello di derivare una chiave (pubblica) tramite un procedimento che sia impossibile da invertire, cioè che sia dunque impossibile derivare la chiave privata a partire dalla chiave pubblica.
- ECDSA (Elliptic Curve Digital Signature Algorithm) è l’algoritmo di ECC usato in Bitcoin per generare le chiavi, esso consiste nella costruzione di una curva che contiene tutti i punti che soddisfano l’equazione $y^2 = x^3 + ax + b$. I punti sulla curva in questione, se moltiplicati tra di loro, permettono la creazione di un percorso deterministico che genera un terzo punto sulla curva come risultato.
- In generale, il procedimento di creazione della coppia di chiavi inizia con la scelta di un numero casuale che sarà la chiave privata (k); ottenuto il numero k si procede poi con la scelta di un punto G lungo la curva, che in Bitcoin è fissato e invariato all’interno del codice. L’esecuzione della moltiplicazione $k*G$, che è di fatto la moltiplicazione tra una costante ($k$) e un punto ($G$) da origine ad un secondo punto lungo la curva, chiamato $K$. Il punto $K$, che non è nient altro che la chiave pubblica, è quindi un numero a sua volta generato partendo da $k$ e da $G$. Contrariamente a ciò che succede nell’algebra nota tutti, la moltiplicazione sulla curva ellittica non ammette operatori inversi, per cui, data una $K$ e una $G$, non è possibile effettuare l’operazione inversa $k= \frac{k/G}$. Questa certezza ECDSA permette di rendere pubblica una chiave pubblica senza doversi preoccupare che qualcuno possa ricavarne la corrispondente chiave privata.
Un utilizzatore di Bitcoin incontra inconsapevolmente la crittografia fin dal primo contatto con la tecnologia, contatto che avviene attraverso un wallet bitcoin. Si scopre quindi quale sia effettivamente l’importanza di un wallet bitcoin: un wallet non contiene bitcoin bensì ricopre il ruolo fondamentale di custode delle chiavi.
Concretamente un wallet bitcoin può assumere svariate forme, ciò che è fondamentale però è che esso sia uno strumento idoneo a custodire delle informazioni, che nel caso specifico é appunto un numero (chiave privata $k$). Custodire gelosamente le chiavi – più precisamente la chiave privata - è una proprietà fondamentale per un wallet; da ciò ne deriva che chiunque sia in possesso della chiave privata sia dunque in grado di spendere i fondi collegati a quella chiave, la quale permette appunto di sbloccare i fondi e di spenderli.
Le varie tipologie di wallet presenti ad oggi sul mercato sono le seguenti:
- Hardware wallet. Dispositivo che contiene le chiavi private all’interno di un chip; è simile ad una chiavetta;
- Software wallet. E’ un software scaricabile su un dispositivo, custodisce le chiavi digitalmente.
- Mobile wallet. E’ un software creato per il mercato mobile, utilizzabile quindi tramite smartphone.
E’ importante puntualizzare che questa tassonomia non è l’unica possibile, poichè esistono numerose proprietà che un wallet può avere e secondo cui si possono raggruppare diverse categorie di wallet. La classificazione presentata in precedenza riguarda strettamente le proprietà hardware e software del supporto utilizzato come wallet.
Hands-on
Compreso il ruolo che un wallet ricopre l’utente è ora pronto a creare la sua prima transazione bitcoin, acquistando familiarità con un qualsiasi wallet di cui egli è munito. Al netto delle complessità fino ad ora esplorate, inviare o ricevere dei bitcoin attraverso le più comuni applicazioni mobile è diventato sempre più facile; a questo proposito si illustra brevemente il processo di invio e di ricezione tramite le rispettive schermate dell’applicazione “Bitcoin Wallet”, sviluppata da Bitcoin Wallet Developers e il cui codice è open source e disponibile qui
Il wallet in questione è uno dei più longevi anche se sempre meno utilizzato ad oggi. Tra i wallet mobile più noti ad oggi disponibili raccomandiamo Green.
La schermata in questione è specifica del wallet Bitcoin Wallet, tuttavia ogni wallet mobile ad oggi rispetta gli stessi canoni di interfaccia. Sotto Pay to è necessario inserire l’indirizzo che il ricevente ci ha fornito, tramite il tasto fotocamera in alto a destra è possibile scannerizzare un codice QR che eventualmente il ricevente ci può fornire, esso codifica l’indirizzo dunque è equivalente a immettere manualmente l’indirizzo. Sarà poi necessario inserire l’ammontare da pagare; alcuni wallet danno la possibilità di affiancare i bitcoin con una valuta fiat, ciò permette all’utente di avere la consapevolezza dell’ammontare che sta inviando.
Infine basterà premere il tasto send e transazione sarà ultimata.
Ricevere bitcoin è estremamente facile, è sufficiente fornire alla controparte un nostro indirizzo ed eventualmente inserire l’ammontare richiesto, che quindi verrà in qualche modo codificato all’interno della richiesta di pagamento.
Ad oggi tutti i wallet si occupano autonomamente di generare indirizzi che l’utente sarà in grado di spendere attraverso l’utilizzo di quel wallet e quindi con le chiavi private presenti in esso. Un indirizzo bitoin può essere considerato al pari di un IBAN monouso.
Un esempio di indirizzo bitcoin è 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt7Jvm3
L’ultimo aspetto da considerare è la natura degli indirizzi bitcoin, i quali si presentano come stringhe alfanumeriche apparentemente generate casualmente. Un indirizzo Bitcoin simile a quello riportato sopra viene in realtà generato in modo deterministico a partire dalla chiave pubblica attraverso l’utilizzo di una funzione di hash chiamata SHA256 e di un’altra funzione chiamata RIPEMD160. Il processo matematico che permette di ottenere un indirizzo a partire da una chiave pubblica è ancora una volta irreversibile, dunque non è possibile risalire ad una chiave pubblica conoscendo un indirizzo. Questo percorso deterministico, che parte dalla generazione della chiave privata k come numero casuale, transita per la chiave pubblica K e permette di ottenere un indirizzo, è dunque una garanzia di esclusività del possesso di alcuni fondi sbloccabili tramite la chiave privata.
Nel corso dell’ultimo decennio la tecnologia e la ricerca in Bitcoin hanno compiuto enormi avanzamenti, la cui conseguenza è ovviamente il cambiamento della forma degli indirizzi bitcoin, che non è semplicemente frutto di una mutazione estetica bensì del modo di creare le transazioni a livello di codice. Spiegare le avanzate forme di scripting in Bitcoin va oltre gli scopi di questo articolo, dunque ci si limiterà ad elencare i vari tipi di indirizzi e le loro diverse nomenclature.
- Pay to Public Key Hash (P2PKH): indirizzi iniziano con “1” come
1CK6KHY6MHgYvmTQ4PAafKYDrg1ejbH1cE
- **Pay to Script Hash (P2SH): indirizzi che iniziano con “3” come
3PVaZ57kG1bdGEwQdZtrFCZEh3crBBjvML
- Segwit native address (bech32): indirizzi che iniziano con “bc1” come
bc1q2cyrfmck2ffu2ud3rn5l5a9yv6f0chkp0zpemf
Infrastruttura di Bitcoin
La seconda sezione riguarda l’infrastruttura sulla quale Bitcoin si basa, cioè il network di computer che costituiscono il protocollo. Si tratterà quindi di nodi e dell’importanza di questi ultimi all’interno delle dinamiche di protocollo e della blockchain. Nel corso della prima sezione si è discusso di come la chiave privata conferisca il massimo potere di spesa sui fondi di un wallet, ma allo stesso tempo si è affermato che all’interno di Bitcoin non esistono propriamente delle monete. La chiave privata infatti abilita il wallet a spendere dei fondi che propriamente non esistono fisicamente bensì si trovano su un registro distribuito chiamato blockchain.
Volendo esemplificare la questione si può paragonare la blockchain in un dato momento ad un enorme magazzino pieno di cassette di sicurezza, simili a quelle disponibili nei caveau di una banca. Ogni cassetta di sicurezza è numerata con un’etichetta e il numero indicato nell’etichetta non è nient’altro che l’indirizzo bitcoin dove risiedono i fondi. Ogni cassetta è trasparente poiché chiunque può agevolmente osservare il saldo bitcoin presente in un indirizzo conoscendo l’indirizzo; tuttavia tutte le cassette di sicurezza sono sigillate ed accessibili unicamente attraverso l’apertura di un lucchetto, la cui chiave è cusodita gelosamente dal proprietario di una determinata cassetta. Questa chiave è chiaramente la chiave privata k menzionata precedentemente. Ecco che dunque possedere un chiave privata permette ad un utente di aprire la cassetta di sicurezza il cui indirizzo è stato derivato dalla sua chiave privata k, abilitandolo a spendere i fondi presenti nelle cassette di cui ha la chiave.
Come nel precedente esempio, anche la blockchain è considerabile come un enorme deposito di saldi contabili, spendibili dagli utenti che possiedono le chiavi per sbloccare quei fondi.
Il protocollo Bitcoin, nato per cercare di creare un network monetario libero da autorità centrali, è costruito sulla necessità di diffondere le informazioni a tutti i partecipanti del sistema come ovvia risposta al modello centralista. La soluzione alla ricerca di disintermediazione è quindi la seguente: invece che delegare ad un ente centrale la custodia della cronologia di transazioni, ogni partecipante al protocollo è tenuto a conservare il registro aggiornato sullo stato del sistema, cioè appunto il registro di blocchi e quindi le transazioni. Per raggiungere questo scopo Bitcoin utilizza quindi la tecnologia blockchain e la tecnologia della prova di lavoro o Proof of Work (PoW). Si rimanda la discussione circa la PoW nel paragrafo successivo.
Come appena visto, l’immagazzinamento della cronologia di transazioni è indispensabile per la buona riuscita di un sistema distribuito; in Bitcoin questo compito è svolto dai nodi, unici garanti dell’integrità del protocollo. Un nodo è di fatto una qualsiasi implementazione del software Bitcoin che si occupa di archiviare la cronologia di transazioni avvenute fin dalla nascita del protocollo nel gennaio 2009.
Ad oggi l’implementazione più nota ed utilizzata del software Bitcoin è Bitcoin Core, un client che deriva direttamente dall’implementazione originale di Satoshi Nakamoto. Il software in questione, come del resto le altre implementazioni, si occuperà al primo avvio di connettersi alla rete internet e di consultare tutti gli altri computer facenti parte del network Bitcoin al fine di venire a conoscenza della cronologia di transazioni avvenute fino a quel momento.
Il network Bitcoin opera tramite internet, tessendo un’infrastruttura di connessioni tra i computer che permette loro di scambiarsi dati ed informazioni sullo stato del sistema. Le informazioni in questione vengono propagate all’interno del network e inviate tra i nodi che si mettono in diretto contatto tra di loro, formando una cosiddetta rete peer-to-peer. Questo modello di diffusione dei dati a propagazione permette ai nuovi entranti di scoprire ben presto le informazioni dei quali essi non sono ancora muniti e di mettersi al passo con l’intero sistema.
Effettuata la prima connessione con il network il nodo viene a conoscenza di tutti i blocchi presenti nella blockchain esistente, ripercorrendo tutta la catena dal primo blocco minato e raggiungendo il blocco che in quel momento è l’ultimo componente della blockchain. Un nodo Bitcoin ricopre un ruolo fondamentale all’interno del sistema, svolgendo i seguenti compiti:
- Riceve, valida e propaga le transazioni all’interno del network peer-to-peer;
- Riceve, valida e propaga i blocchi all’interno del network peer-to-peer.
In questo caso validare significa controllare che il blocco o la transazione ricevuta sia conforme alle regole del sistema; solo nel caso di risposta affermativa il nodo procederà poi con il propagare l’informazione e contestualmente aggiungere il blocco ricevuto alla catena di blocchi esistenti.
Le transazioni propagate nel network devono rispettare numerosi parametri, tra i quali:
a. Ogni transazione deve avere almeno un input e un output;
b. Ogni transazione può trasferire al massimo un valore compreso nel range 0 – 21 milioni di bitcoin. Non è possibile trasferire in una transazione più bitcoin di quanti ne potranno mai essere creati;
c. Non è accettabile una transazione nella quale la somma dei valori in input è maggiore della somma dei valori in output, dunque non è possibile spendere più bitcoin di quelli che si utilizzano per la transazione;
d. Ogni input di transazione non può essere già stato speso, ciò significa che utilizzare un input per spendere dei fondi che in realtà sono già stati spesi in un’altra transazione viola le regole;
Esistono numerosissime altre regole sancite dal codice e dal consenso che in quel momento è stato raggiunto all’interno della community; per esempio ogni nodo controlla anche che una transazione sia di dimensione inferiore rispetto alla massima dimesione che può assumere un blocco.
Allo stesso modo, anche i blocchi propagati nel network devono rispettare alcune regole, tra le quali:
a. La dimensione del blocco deve rispettare i limiti di dimensione in vigore in quel momento all’interno del protocollo;
b. Tutte le transazioni all’interno del blocco devono essere valide, quindi verificate seguendo i criteri analizzati in precedenza per le transazioni.
In aggiunta ai diversi compiti fino ad ora elencati, un nodo si occupa generalmente anche della conservazione della blockchain e dunque di memorizzare tutta la sequenza di blocchi minati a partire dal primo. Un nodo che conserva la blockchain Bitcoin nella sua interezza viene chiamato full node, letteralmente nodo pieno, il quale si occupa appunto di immagazzinare tutta la blockchain. Questo compito è diventato sempre più arduo con il passare degli anni, complice la dimensione della blockchain di Bitcoin che ormai necessita di +400GB di archiviazione disponibili.
Il protocollo prevede anche l’esistenza dei cosiddetti nodi SPV (Standard Payment Verification), ai quali non è richiesto di conservare l’intera cronologia della blockchain per funzionare correttamente.
Un’altra importante caratteristica di un nodo è che esso può fungere anche da wallet, permettendo all’utente di conservare i propri fondi e conservare allo stesso tempo la blockchain per conoscere esattamente lo stato del sistema in ogni momento.
Il numero di nodi esistenti all’interno di un sistema come Bitcoin è essenziale ai fini della decentralizzazione del network; più nodi esistono, più la validazione diventa un’attività distribuita, dando vita ad un network decentralizzato e distribuito nel quale un singolo nodo non ha il potere di manomettere il funzionamento dell’intera rete. Al contrario, più il numero di nodi è esiguo, più è alto il rischio che un nodo malintenzionato possa influire sull’intero network, ad esempio propagando blocchi o transazioni invalide ad ignari utenti.
Mining
All’interno di questa sezione ci si focalizza sulla categoria dei minatori (detti anche miner), introducendo quindi al fenomeno del mining e spiegandone le principali caratteristiche. Prima di affrontare questi temi è però indispensabile ricordare la struttura essenziale di una blockchain e alcuni aspetti circa l’offerta di nuovi bitcoin all’interno del protocollo.
La definizione di blockchain richiama appunto una sequenza di blocchi legati indissolubilmente tra loro che si snoda nel tempo e alla quale vengono aggiunti via via più blocchi.
In Bitcoin, gli elementi essenziali all’interno della blockchain sono lo SHA256 e la Proof of Work. Lo SHA256 permette alla catena di blocchi di acquisire un ordine derivante dal vincolo che lega un blocco al suo blocco genitore ed al suo blocco figlio. Ogni blocco tra le altre cose contiene un riferimento al blocco precedente, riferimento che è l’impronta digitale del blocco genitore ricavata proprio grazie a SHA256.
l meccanismo di formazione di una blockchain ricorda molto il processo di formazione delle rocce sedimentarie, le quali si modellano in seguito a fenomeni di deposito di materiali sulla superficie terrestre. Allo stesso modo, una blockchain cresce in dimensione e lunghezza grazie alla continua aggiunta di blocchi all’estremità finale della catena, i quali si sedimentano gli uni sopra gli altri seppellendo i blocchi più antichi. La numerazione dei blocchi parte dal primo blocco chiamato Genesis Block (blocco numero 0) per poi progredire fino all’altra estremità della catena.
Per riferirsi ad un blocco posizionato in un punto della blockchain si richiama la sua altezza (block height), calcolata come la distanza del blocco dal blocco 0.
Un altro fenomeno molto conosciuto riguardante Bitcoin è il cosiddetto halving, cioè il dimezzamento dell’offerta di bitcoin che avviene circa ogni 4 anni o più precisamente ogni 210’000 blocchi.
Questo meccanismo è noto poiché determina il dimezzamento del numero di bitcoin emessi ogni blocco, dando origine ad uno shock di offerta che spesso viene additato come responsabile per l’aumento del prezzo dell’asset bitcoin. Di seguito si richiama lo schema di erogazione dell’offerta di nuovi bitcoin sancito ad oggi all’interno del protocollo.
Un altro elemento fondamentale in Bitcoin è la Proof of Work, essenziale per capire il processo di mining in Bitcoin.
Mantenere il consenso all’interno di un sistema distribuito significa mantenere sincronizzate tutte le copie della blockchain che i numerosi nodi conservano. Al fine di raggiungere questo risultato il protocollo Bitcoin ha elaborato un meccanismo che permette ai partecipanti di contribuire alla costruzione della blockchain attraverso la partecipazione ad una competizione ripetuta simile ad un’asta. L’asta in questione ha come scopo quello di trovare il risultato ad un problema matematico che necessita un notevole sforzo computazionale; nel concreto si tratta della ricerca randomica di un numero che soddisfi particolari caratteristiche definite dal protocollo. La caratteristica distintiva di questo problema è che esso è straordinariamente difficile da risolvere, tuttavia è estremamente facile controllare la veridicità del risultato una volta che il problema viene risolto. Un parallelismo utile ai fini di comprendere il meccanismo si può fare con il gioco del Sudoku, il quale necessita di molte risorse per la risoluzione ma di un tempo relativamente breve per il controllo circa la correttezza della soluzione.
La ricerca della soluzione al problema matematico è appunto il processo di mining, meccanismo di estrazione dei bitcoin che ricorda molto il fenomeno dell’estrazione aurea; gli utenti che svolgono questa attività vengono appunto chiamati miner.
Il processo del mining in realtà inizia prima rispetto al momento nel quale il miner inizia a cercare la soluzione al problema, anche se si tratta di intervalli temporali di qualche secondo. Il primo passaggio svolto dal miner è infatti quello di assemblare un blocco raccogliendo le transazioni ancora non confermate all’interno del network; egli dunque consulta il proprio nodo e osserva quali transazioni sono state propagate di recente nel network per poi selezionare quelle ancora non confermate (cioè non ancora inserite in nessun blocco). Il miner procede poi con l’inserirle all’interno di un blocco – che naturalmente è virtuale, inesistente nella blockchain – allegando ulteriori informazioni come il timestamp e l’hash dell’ultimo blocco presente sulla blockchain in quel momento. L’ulteriore passaggio che egli compie da inizio alla vera e propria ricerca della soluzione, che impiega circa 10 minuti, intervallo stabilito nel codice.
La ricerca della soluzione si concretizza nella continua esecuzione della funzione di hash SHA256 prendendo come input la proposta di blocco appena allestita dal miner, avendo premura di variare leggermente uno dei parametri all’interno della struttura di dati, chiamato nounce. Questa procedura viene effettuata poiché una funzione di hash restituisce sempre lo stesso output se alimentata con lo stesso input, di conseguenza è necessario cambiare sensibilmente l’input per ottenere un diverso output e procedere con la ricerca randomica.
Nel momento in cui il miner in questione trova una soluzione idonea o riceve un blocco propagato dal network con lo stesso blocco genitore (che quindi indica l’aver costruito sulla blockchain esistente e dunque l’aver risolto per primo il problema), egli cesserà immediatamente le operazioni per la risoluzione del problema precedente, procedendo con la creazione di una nuova proposta di blocco da annettere al blocco appena ricevuto. Come si può notare il processo è ripetuto ogni volta che un nuovo blocco viene scoperto, obbligando i miner al lavoro a fermare immediatamente le operazioni in corso e procedere con il nuovo blocco.
L’importanza del mining in Bitcoin non è data solo dal ruolo che ha per l’offerta di nuovi bitcoin, poiché il ruolo di estrazione dei nuovi bitcoin è considerabile secondario rispetto al principale scopo del mining, quello di mantenere ed alimentare la sicurezza del network.
Il mining in Bitcoin contribuisce ad allungare la catena di blocchi includendo le nuove transazioni in blocchi, utilizzando energia e potenza computazionale, entrambe indispensabili in gran quantità durante il processo del mining. L’ovvia conseguenza di ciò è una blockchain alla quale partecipano sempre più miner, intenti ad accaparrarsi il premio di emissione dei blocchi, cioè nuovi bitcoin. L’aumentare della potenza computazionale dedicata al mining evidenzia una grande competizione nel settore, la quale però non può modificare l’offerta di bitcoin, che è fissa e decretata dal codice.
L’unica ovvia conseguenza dell’aumento di potenza computazionale dedicata al mining è da analizzare con attenzione alla finestra temporale considerata:
a. A breve termine -cioè nell’arco temporale compreso tra il blocco successivo e l’aggiustamento della difficoltà nel protocollo, che avviene ogni 2016 blocchi
- diverrà sensibilmente più facile trovare un blocco per il miner che ha incrementato le risorse dedicate al mining;
b. Ogni 2016 blocchi la blockchain Bitcoin assiste ad una modifica della difficoltà, sentenziata dal protocollo stesso. La modifica in questione influisce sulla difficoltà del problema affrontato dai miner e di conseguenza sul tempo dedicato a risolverlo e sulla potenza dedicata. Se nel corso dei 2016 blocchi precedenti l’intervallo medio di distanza tra blocchi è stato superiore a 10 minuti, allora la difficoltà verrà diminuita in modo da livellare questa difformità. Al contrario, se l’intervallo medio è stato inferiore ai 10 minuti allora il protocollo procederà con l’aumentare proporzionalmente la difficoltà.
Questo meccanismo di equilibrio, sommato alla inelasticità dell’offerta di bitcoin che non può essere manipolata, determina una tendenza all’aumento della potenza computazionale dedicata al mining a parità di prezzo per bitcoin. Ciò significa che sempre più miner cercano di accaparrarsi il blocco successivo, ovviamente intenti a minare il blocco secondo le regole del protocollo per vedersi eventualmente il blocco accettato e la ricompensa recapitata, ricompensa che nel caso di difformità alle regole del protocollo non verrebbe loro concessa.
Uno dei principi cardine di Bitcoin è il concetto di immutabilità, caratteristica che il protocollo si assicura grazie all’utilizzo della Proof of Work come algoritmo di consenso. Il protocollo Bitcoin raggiunge l’immutabilità grazie al lento processo di sedimentazione dei blocchi sopra citato, grazie al quale un blocco che si trova ad una sufficiente profondità dall’ultimo blocco può essere considerato immutabile.
Ciò avviene poiché per modificare un blocco esistente è necessario ricostruire la catena a partire dal blocco in questione fino al blocco più recente, rendendo quindi molto dispendioso un attacco di questo tipo. Bitcoin risolve quindi il dilemma dei generali bizantini proprio grazie all’impiego della Proof of Work, che assicura immutabilità in termini probabilistici.
Fonti
- Sito ufficiale del progetto Bitcoin;
- Bitcoin: A Peer-to-Peer Electronic Cash System (2008);
- Mastering Bitcoin - programming the open blockchain (2017),Andreas M. Antonopoulos, O’Reilly Media 2° edizione
- Crypto Research, Data and Tools (Messari).