Storia
Iniziamo dalla storia del Bitcoin, delineando alcuni dei passaggi storici rilevanti che hanno portato alla sua diffusione, dalla sua nascita ed uso legato a soli pochi nerd e fanatici della crittografia, all’utilizzo globale del bitcoin come prima cryptovaluta al mondo per capitalizzazione:
- 2008: Bitcoin ha avuto la sua prima menzione pubblica il 31 ottobre 2008 sulla Crypto Mailing List. In una e-mail, Satoshi Nakamoto, uno pseudonimo la cui identità reale è sconosciuta (nessuno sa se si tratti di una singola persona o di un gruppo di persone), ha pubblicato il white paper di Bitcoin e ha definito l’idea di una moneta virtuale peer-to-peer indipendente da intermediari come entità bancarie centrali o parti fidate.
- 2009: Viene rilasciata la prima versione del software Bitcoin (versione 0.1.0). Questa versione, nonostante in formato alfa e interamente sperimentale, incorpora tutto ciò che Nakamoto aveva descritto e promesso nella pubblicazione del white paper. Sempre nel 2009, viene creato il primo blocco, il cosiddetto “genesis block”, e la criptovaluta bitcoin inizia ad essere scambiata.
- 2010: La prima vera transazione utilizzando bitcoin viene effettuata quando un programmatore (Laszlo Hanyecz) pagò 10.000 bitcoin per due pizze, del valore di circa 41 dollari. Questo risulta essere un evento significativo in quanto rappresenta il primo pagamento in bitcoin per un bene o servizio. Da quel momento, la data del 22 maggio 2010 viene commemorata ogni anno come il Bitcoin Pizza Day.
- 2012: Vengono fondati i primi exchange di bitcoin. Nasce “Bitcoin Central”, il primo exchange di bitcoin ad operare nel quadro della regolamentazione europea.
- 2014: Vengono introdotte nel mercato diverse piattaforme alternative basate sui principi fondamentali del Bitcoin.
- 2016: La blockchain diventa un trend. Le testate giornalistiche descrivono Bitcoin come una delle tecnologie più dirompenti nel mondo digitale per gli anni a venire.
- 2018: L’hype generato dai media porta allo scoppio della bolla del bitcoin e di conseguenza al costante calo del prezzo del bitcoin per tutto l’anno.
- 2021: El Salvador diventa il primo paese ad accettare bitcoin come valuta legale. Bitcoin è ora conosciuto a livello mondiale.
Come funziona
Bitcoin, a più di 10 anni di distanza dalla sua creazione, resta la prima criptovaluta e la prima blockchain per importanza.
Vanta infatti un network che non ha eguali in quanto a distribuzione e decentralizzazione, nel campo delle criptovalute, garantendo quindi un livello di sicurezza molto elevato.
Nonostante non si sappia ancora la reale identità di Satoshi Nakamoto, si possono facilmente rintracciare le radici ideologiche di Bitcoin nel movimento cypherpunk, un gruppo di attivisti libertari che promuovevano l’uso della crittografia informatica come strumento per condurre a un cambiamento sociale e politico, oltre che economico. (https://nakamotoinstitute.org/static/docs/cypherpunk-manifesto.txt)
Infatti, quando ci si approccia a Bitcoin, e quindi alla prima blockchain realizzata, bisogna tenere conto che la posta in gioco è molto più grande di quanto si potrebbe pensare.
Non si tratta di pura speculazione, come può essere il caso di molte criptovalute nate in seguito, ma di un nuovo paradigma culturale che sfida quello esistente, basato sulla centralizzazione e su dinamiche top-down, proponendo in alternativa la decentralizzazione e le sue dinamiche bottom-up.
Nonostante questo aspetto venga spesso lasciato in secondo piano, anche perché Nakamoto non si è mai sprecato troppo in discorsi politici, vi sono in realtà delle sue affermazioni che esplicitano l’importanza di questo aspetto:
“Yes, [we will not find a solution to political problems in cryptography], but we can win a major battle in the arms race and gain a new territory of freedom for several years.
Governaments are good at cutting off the heads of centrally controlled networks like Napster, but pure P2P networks like Gnutella and Tor seem to be holding their own.”
Inoltre, non bisogna dimenticare che nel primo blocco della blockchain di Bitcoin, è presente una nota di Nakamoto, contenente il titolo di un articolo del quotidiano The Times:
“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”
Un chiaro riferimento all’instabilità del sistema bancario.
Partendo da questi presupposti, Satoshi Nakamoto ha cercato di dar vita a un sistema in grado di combattere la centralizzazione della finanza nonché l’inflazione delle valute FIAT (le monete a corso legale), non a caso Bitcoin è nato in seguito alla crisi del 2008.
Per combattere l’inflazione Nakamoto ha cercato di replicare un meccanismo naturale, quello della scarsità, come vedremo nel prossimo capitolo, applicandolo a una criptovaluta, il cui possesso viene trasferito tra i vari utenti attraverso transazioni che vengono registrate in un registro pubblico e visibile da tutti (la blockchain appunto).
Prima di cominciare ad esplorare il mondo di Bitcoin però, bisogna fare due precisazioni.
Innanzitutto, i concetti esposti in questa overview sono sempre trattati a livello alto, per permettere una maggior comprensione da parte di tutti. Per approfondire i singoli temi vi saranno delle lezioni dedicate.
In secondo luogo, quando si parla di Bitcoin, bisogna distinguere tra il protocollo e la criptovaluta.
Per comodità useremo sempre la “b” maiuscola (Bitcoin) quando faremo riferimento al protocollo, mentre la “b” minuscola (bitcoin) verrà utilizzata per riferirsi alla criptovaluta, insieme alla sigla “BTC”.
Supply e scarsità
Come detto, Bitcoin è stato studiato per creare una scarsità digitale che replichi quella delle materie prime fisiche.
Per questo motivo, è stato imposto, a livello di codice, un limite massimo di bitcoin esistenti (max supply) pari a 21 milioni (per la precisione 20,999,999,999.9769).
Questi 21 milioni di bitcoin non sono stati messi subito in circolazione ma vengono distribuiti tramite un processo detto mining, che tratteremo nel capitolo dedicato a questo argomento.
In sintesi, ogni volta che viene aggiunto un nuovo blocco alla catena, viene minata una quantità di bitcoin, ovvero vengono prodotti dal nulla dei nuovi bitcoin.
Inizialmente, si trattava di 50 bitcoin a ogni blocco. Questa cifra però va via via riducendosi, tramite un processo chiamato halving, che ogni 21000 blocchi (4 anni circa) dimezza la quantità di bitcoin minati a ogni blocco.
Attualmente sono in circolazione circa 19 milioni dei 21 totali. Ciò significa che restano circa 2 milioni da minare. Ne consegue che, a causa dell’halving e del fatto che viene prodotto un nuovo blocco ogni 10 minuti circa, è previsto che tutti i bitcoin saranno in circolazione solo nel 2140.
L’halving è la base del modello economico di Bitcoin perché garantisce una continua decrescita nella distribuzione dei bitcoin, con lo scopo di combattere l’inflazione con una tendenza deflattiva.
Infatti, alla diminuzione del tasso di distribuzione dei bitcoin attraverso il mining, tende a corrispondere una progressiva crescita del valore di bitcoin, data appunto dalla scarsità.
Nel 2140, quando tutti i bitcoin saranno in circolazione, non sarà più possibile crearne altri a meno di cambiamenti futuri del protocollo di Bitcoin che però, oltre a essere estremamente complessi, impatterebbero in modo particolarmente negativo sull’economia di Bitcoin, in quanto verrebbe meno l’effetto della scarsità.
Network
Una prima questione di fondamentale importanza è quella della rete di Bitcoin.
Quello di Bitcoin è un network peer-to-peer (P2P) costruito su internet.
Trattandosi di una rete P2P, tutti i computer che partecipano alla rete (i nodi), sono uguali gli uni agli altri, svolgendo sia il ruolo di fornitori di servizi che quello di consumatori.
Si tratta di un’architettura decentralizzata e aperta (permissionless), in quanto non bisogna chiedere a nessuno il permesso di entrare a farvi parte.
In quanto rete decentralizzata, non vi sono attori centrali ma solo nodi alla pari, come previsto dal paradigma P2P.
Si può affermare che la rete di Bitcoin sia l’applicazione reale più riuscita del paradigma P2P, insieme al file sharing, e va sottolineato che, quella del P2P, non è semplicemente una scelta architetturale, bensì è il riflesso di un preciso intento sociale, politico e culturale, che è quello che sottostà a Bitcoin e che deriva dalle battaglie combattute dal movimento cypherpunk, come visto nell’introduzione.
Tornando alla rete di Bitcoin, bisogna innanzitutto distinguere tra:
- Bitcoin network: la rete dei nodi che utilizzano il protocollo P2P di Bitcoin;
- Extended Bitcoin network: la rete estesa che comprende sia gli utilizzatori del protocollo P2P di Bitcoin che altri protocolli addizionali, come i protocolli di pool-mining, Stratum e via dicendo.
Nonostante sia una rete P2P, i nodi possono avere dei ruoli diversi e si differenziano tra loro a seconda dei tipi di servizi che svolgono.
Vi sono essenzialmente 4 funzioni:
- Routing;
- Blockchain database;
- Mining;
- Wallet.
La funzione di routing è comune a tutti i nodi ed è necessaria per partecipare alla rete. Con routing si intende la capacità di validare e propagare per la rete le transazioni e i blocchi, oltre che poter comunicare con gli altri nodi.
Le altre funzioni sono opzionali.
La funzione di blockchain database consiste nel possedere in locale una copia integrale del registro di Bitcoin, che viene costantemente sincronizzato e aggiornato con gli altri nodi della rete.
Come si può immaginare, il registro occupa molto spazio (attualmente circa 360 GB). Nonostante sia molto più leggero rispetto a quello di altre blockchain, comporta comunque una disponibilità di spazio dedicato.
Con mining si intende la competizione per la creazione di nuovi blocchi da aggiungere alla blockchain. Si tratta di un processo computazionalmente molto oneroso, che richiede hardware specifico. Spiegheremo più approfonditamente il mining nel capitolo dedicato a Proof of Work, l’algoritmo di consenso di Bitcoin.
Infine, la funzione di wallet consiste nel gestire i wallet degli utenti, i portafogli attraverso i quali gestiscono i loro bitcoin.
Esistono dunque diverse tipologie di nodi, elenchiamo qui quelle principali:
Node type | Routing | Blockchain db | Miner | Wallet |
---|---|---|---|---|
Reference Client | ||||
Full Blockchain Node | ||||
Mining Node | ||||
Lightweight Client (SVP) |
- Reference Client: si tratta del client più diffuso, Bitcoin Core, detto anche Satoshi client. Questa tipologia di nodo può svolgere tutte le 4 funzioni;
- Full Blockchain Node: è un nodo che possiede in locale una copia del registro di Bitcoin, costantemente aggiornata e sincronizzata con il resto della rete. Un nodo di questo tipo può verificare qualsiasi transazione indipendentemente, senza bisogno di far riferimento ad altri nodi.
La sicurezza di Bitcoin è basata in gran parte sui Full Blockchain Nodes, perché garantiscono una ridondanza del registro, come se vi fossero migliaia di copie di backup, distribuite in giro per il mondo. - Mining Node: è un nodo che svolge la funzione di mining, non necessariamente deve essere anche un Full Blockchain Node, dunque non per forza deve possedere una copia locale del registro.
In particolare, vi è una distinzione tra i solo miners, ovvero coloro che minano da soli e che necessitano quindi di un nodo contenente una copia della blockchain, e i pool miners, nodi che non dispongono di una copia locale della blockchain ma uniscono le loro potenze computazionali creando appunto una mining pool, in cui solo l’amministratore dovrà possedere una copia locale della blockchain.
Come specificato precedentemente, un mining node necessita di hardware dedicato per la risoluzione dei complicati puzzle crittografici necessari per la creazione dei nuovi blocchi. - Lightweight client o SVP (Simplified Payment Verification): è un nodo che svolge esclusivamente la funzione di wallet (oltre a quella di routing che, come già detto, è comune a tutte le tipologie di nodi). Questo tipo di nodo, non possedendo una copia locale della blockchain, non ha particolari necessità di spazio, né di hardware dedicato, e si limita a svolgere la funzione di wallet e a comunicare con gli altri nodi, dai quali ottiene le informazioni di cui necessità.
Queste caratteristiche lo rendono adatto a essere installato in device poco potenti, come i dispositivi mobili.
L’esempio più importante di SVP sono i vari mobile wallet.
Fatte le distinzioni tra nodi, vale la pena di ribadire il fatto che la rete di Bitcoin è permissionless, ovvero non bisogna chiedere a nessuno il permesso di farne parte.
Chiunque può scaricare un client di Bitcoin e diventare un nodo della rete.
Tra i vari client, quello più diffuso è il già citato Bitcoin Core, ma ce ne sono anche altri, in vari linguaggi.
Una volta che si entra a far parte della rete, il nostro nodo si metterà in contatto con altri nodi attraverso un protocollo di Bitcoin chiamato gossip protocol, ovvero il metodo utilizzato dai nodi della rete per scambiarsi i messaggi.
Attraverso scambi di messaggi, i nodi comunicanti si informeranno a vicenda sul loro stato, tenendosi sempre aggiornati.
Per approfondire la rete di bitcoin, vi rimandiamo alle lezioni dedicate.
Account
Molto spesso, specie se non si hanno nozioni informatiche, si fa confusione tra i nodi della rete di Bitcoin e gli account.
Dei nodi abbiamo già parlato, veniamo ora agli account e cominciamo dicendo che il termine “account” non è corretto. È più giusto parlare di proprietà di bitcoin e quindi di coloro che detengono la proprietà di bitcoin.
In termini più semplici, la domanda è: come si diventa proprietari di bitcoin?
Per rispondere, ci viene in aiuto la crittografia, imprescindibile quando si ha a che fare con blockchain e criptovalute.
Cominciamo col sfatare un mito, quello dell’anonimato in Bitcoin. Quando si posseggono dei bitcoin, ciò non avviene in modo anonimo, bensì attraverso uno pseudonimo.
È necessario insomma un modo per identificare un possessore di bitcoin, riuscendo così ad avere la certezza che sia lui ad effettuare delle transazioni che riguardano i suoi possedimenti, senza però andare in alcun modo a ledere la sua privacy.
Come dicevamo, ci viene in aiuto la crittografia e il possesso di bitcoin viene stabilito attraverso delle coppie di chiavi digitali.
Ogni coppia di chiavi è composta da:
- Chiave privata;
- Chiave pubblica.
La seconda può essere pensata come il numero di un conto bancario, mentre la prima come il PIN che garantisce il controllo del conto.
Va specificato che queste chiavi non sono salvate in alcun modo nella rete di Bitcoin, bensì sono salvate dai singoli user in un file chiamato wallet, che non deve in nessun modo essere condiviso in rete.
La coppia di chiavi infatti viene generata offline e sarebbe opportuno mantenerla sempre lontana da dispositivi che hanno accesso alla rete.
L’unica cosa che determina il possesso di bitcoin è questa coppia di chiavi e l’unico modo per poterli spendere è la conoscenza della chiave privata. Chiunque abbia il possesso della nostra chiave privata dunque, è in grado di spendere i nostri bitcoin.
Oltre alla chiave pubblica e alla chiave privata, vi è un terzo elemento, il bitcoin address, che può essere visto come il beneficiario in un assegno.
La chiave privata, la chiave pubblica e il bitcoin address, sono legati tra di loro crittograficamente e sono inseparabili gli uni dagli altri.
In particolare, sono ricavate attraverso l’utilizzo di funzioni matematiche che sono praticamente irreversibili, motivo per cui si parla di crittografia asimmetrica, perché sono funzioni calcolabili solo in una direzione e non nell’altra.
Nello specifico, alla base della crittografia di Bitcoin, vi è l’elliptic curve multiplication, che non verrà approfondita qui ma in lezioni dedicate.
La cosa importante da comprendere è il legame tra chiave privata, chiave pubblica e bitcoin address, che non a caso elenchiamo in questo ordine.
Per prima cosa infatti viene generata una chiave privata, che altro non è che un numero compreso tra 1 e 2256.
Partendo da questo numero, tramite elliptic curve multiplication, si ottiene la chiave pubblica.
Infine, dalla chiave pubblica si ottiene il bitcoin address, attraverso un’hash function, ovvero una funzione che, dato un input di lunghezza arbitraria, restituisce un output di lunghezza fissa.
Senza andare nel dettaglio di come funzionano le hash functions e l’elliptic curve multiplication, basti capire che si tratta di funzioni nelle quali è semplice effettuare i calcoli in una direzione ma praticamente impossibile farlo nella direzione opposta.
Passare da un input a un output (Hash sum) richiede poco tempo e poco sforzo, risalire all’input dall’output è praticamente impossibile.
Dunque è sostanzialmente impossibile, partendo da un Bitcoin address, risalire alla chiave pubblica corrispondente ma, possedendo la chiave pubblica, è facile determinare a quale Bitcoin address sia legata.
Un altro concetto fondamentale è quello di digital signature, ovvero di una firma, prodotta attraverso la chiave privata, che permette di stabilire l’appartenenza di un’operazione, chi l’ha compiuta. Vedremo meglio le digital signature all’opera nel successivo capitolo dedicato alle transazioni.
Facciamo ora un riassunto dei concetti esposti finora, definendo schematicamente l’utilità delle varie componenti:
- Chiave privata: è ciò che permette di spendere i bitcoin, attraverso la creazione di digital signature. Deve sempre rimanere segreta, perché chi la conosce è in grado di spendere i bitcoin posseduti;
- Chiave pubblica: viene generata dalla chiave privata ed è ciò che permette di verificare la validità delle digital signature, dunque deve essere conosciuta dagli altri attori per verificare che le digital signature da noi generate siano corrette e valide;
- Bitcoin address: è l’unico dato che vedremo frequentemente da utenti normali che effettuano transazioni con un wallet, è pubblico e conosciuto da tutti, e viene generato a partire dalla chiave pubblica.
Ancora una volta va sottolineato che, trattandosi di un’overview, abbiamo semplificato molti concetti, che verranno poi approfonditi nelle lezioni dedicate ai singoli temi.
Transazioni
Semplificando le cose, potremmo dire che la blockchain di Bitcoin altro non è che un registro di transazioni.
Abbiamo visto come è costituita la rete di Bitcoin, come si determina il possesso di bitcoin, vediamo ora come si può trasferire il possesso.
Le transazioni sono dati strutturati che codificano il trasferimento di valore tra chi possiede bitcoin.
Prendiamo il caso più semplice, quello in cui sono presenti due attori, uno dei quali vuole trasferire dei bitcoin a un altro.
Mettiamo il caso in cui Alice vuole inviare 1 bitcoin a Bob.
Per prima cosa, quando ci si approccia a Bitcoin, va evitato un errore concettuale, fondato su una metafora sbagliata.
Può capitare di immaginare i bitcoin come i soldi che abbiamo in un conto bancario e dei quali possiamo usufruire tramite una carta di credito o un bancomat.
Si tratta di una metafora profondamente sbagliata, che può portare a costruirsi un’immagine mentale di Bitcoin completamente errata.
È molto più corretto pensare ai bitcoin come del cash digitale, infatti in Bitcoin vengono riprodotti dei meccanismi tipici del contante.
Facciamo un esempio: siamo al supermercato, arrivati alla cassa dobbiamo pagare un totale di 15 euro.
Nel caso del bancomat, immaginiamo di avere 1000 euro sul conto, ciò che succede è che vengono scalati i 15 euro dai 1000.
Nel caso del contante, non esistendo una banconota da 15 euro, dobbiamo raggiungere l’importo da pagare con diversi tagli. Possiamo usare una banconota da 10 e una da 5, oppure possiamo utilizzare una banconota da 20.
Nel primo caso, la somma delle due banconote dà il totale richiesto, nel secondo caso però la banconota vale più del totale richiesto.
Chiaramente, non possiamo tagliare una banconota da 20 in 4 parti, perché non avrebbe più valore. Dobbiamo quindi dare la banconota da 20 e riceveremo una banconota da 5 come resto.
Bitcoin cerca di replicare questo meccanismo, senza avere ovviamente delle monete fisiche, ma degli input e degli output.
{ "ver": 1, "locktime": 0, "inputs": [ { "sequence": 4294967295, "witness": "", "script": "4730440220786148b485f0d2f77cecdedb322301736c00d9d81e8c1d751fc3547aa7236ef0022038b8cd70833bd8982e9ecc8a11cbc04b6623bb0dffbe3563086d919f4d466f1701210352ae79b8d97a20356d3affbd440865f3dfddac92b13b106c67581f0a0e9235a4", "index": 0, "prev_out": { "spent": true, "script": "76a914224643d8742fa4c2545e69fa54a945dff1ff084688ac", "spending_outpoints": [ { "tx_index": 6788412058082531, "n": 0 } ], "tx_index": 4480999194101804, "value": 1746651, "addr": "148E9d3oRzZERz8D7gryh1MV2XQVvr2Tpv", "n": 0, "type": 0 } } ], "out": [ { "type": 0, "spent": false, "value": 43601, "spending_outpoints": [], "n": 0, "tx_index": 6788412058082531, "script": "a914e1784750b953ffd9d72ba65035e33eac53758ea387", "addr": "3NFC3onoBpTSvBs5XU3zb9Z5kwSnfA8gEc" }, { "type": 0, "spent": false, "value": 1673050, "spending_outpoints": [], "n": 1, "tx_index": 6788412058082531, "script": "76a914224643d8742fa4c2545e69fa54a945dff1ff084688ac", "addr": "148E9d3oRzZERz8D7gryh1MV2XQVvr2Tpv" } ] }
Senza avere la pretesa di trattare nel dettaglio il funzionamento delle transazioni, cosa che verrà fatta in una lezione apposita, possiamo dire che le transazioni in Bitcoin contengono uno o più input (che possono essere visti come dei debiti verso un account) e uno o più output (che possono essere visti come crediti verso un account).
Perché un utente riesca a inviare dei bitcoin a un altro, basta che conosca il suo bitcoin address.
Ovviamente la somma degli input deve essere maggiore o uguale alla somma degli output, se no sarebbe come pagare i 15 euro del supermercato con una banconota da 10.
Ogni transazione richiede il pagamento di una commissione, detta transaction fee, quantificabile come la differenza tra gli input e gli output. Il motivo per cui bisogna pagare questa commissione, verrà spiegato nel prossimo capitolo dedicato al mining.
Un altro concetto fondamentale da comprendere è che gli input di una transazione non sono altro che gli output di transazioni precedenti.
In questo modo le transazioni sono connesse tra loro, permettendo di risalire facilmente all’origine dei bitcoin, e quindi consentendo di verificare incontestabilmente la validità di una transazione (es. posso inviare 10 bitcoin perché li ho ricevuti in precendenza), evitando dunque problemi come quello del double-spending.
Gli output delle transazioni possono essere visti come i building blocks di Bitcoin, in particolare gli output non spesi, detti UTXO (Unspent Transaction Outputs).
Nell’immagine si può vedere la catena di transazioni, arrivando fino all’ultima i cui output sono UTXO, perché non sono ancora stati spesi.
Possiamo spingerci più in là e dire quindi che il saldo di un determinato account è la somma di tutti gli UTXO delle transazioni a lui destinate.
Torniamo ad Alice e Bob.
Ipotizziamo che Alice deve inviare 1 BTC a Bob e che possiede 3.1 BTC, che sono la somma di tutti gli UTXO a lei destinati.
Nello specifico, supponiamo vi siano commissioni per transazione pari a 0.1 BTC e che Alice abbia ricevuto i 3.1 BTC da 3 transazioni: una da 2 BTC, una da 0.6 BTC e una da 0.5BTC.
È fondamentale comprendere che Alice non potrà spezzare l’UTXO da 2 BTC, utilizzando solo 1 BTC.
Torna utile la metafora del contante, Alice potrà pagare l’1 BTC a Bob in due modi:
- Sommando i due UTXO da 0.6 BTC e 0.5BTC;
- Utilizzando l’UTXO da 2 BTC, dal quale dovrà in qualche modo ricevere un resto.
Nel primo caso, la somma degli input sarà 1.1 BTC. L’output sarà solo uno, 1 BTC destinato a Bob. Le commissioni saranno 1.1 – 1 = 0.1 BTC.
Il secondo caso è più complesso perché, esattamente come per l’esempio del supermercato, Alice dovrà ricevere un resto. Infatti, se la transazione avesse un solo input da 2 BTC e un solo output da 1 BTC, destinato a Bob, Alice pagherebbe 2 – 1 = 1 BTC di commissioni senza ricevere alcun resto.
Per evitare ciò, Alice dovrà inserire un secondo output, contenente un cosiddetto change address, ovvero un nuovo indirizzo appartenente ad Alice da utilizzare per ricevere il resto.
Infatti, Alice non può inserire tra gli output l’indirizzo da cui sta inviando i BTC, ma deve crearne uno nuovo, il change address appunto, al quale inviare il resto.
La transazione avrà così due output: 1 BTC destinato a Bob e 0.9 BTC destinati al nuovo change address.
Ancora una volta, è semplice calcolare le commissioni, che saranno di 2 – 1 – 0.9 = 0.1 BTC.
A questo punto Alice dovrà fornire una prova del fatto che lei abbia effettivamente creato la transazione e lo farà creando una digital signature attraverso la sua chiave privata.
Va specificato che tutti i passaggi visti finora avvengono offline.
Una volta che la transazione è compilata, deve essere trasmessa alla rete di Bitcoin. Per fare ciò, deve passare per un nodo (non importa la tipologia del nodo, basta che sia connesso alla rete di Bitcoin).
Il nodo controllerà se si tratta di una transazione nuova e valida e in caso affermativo la propagherà agli altri nodi con cui è connesso, che faranno la stessa cosa a loro volta.
Per avere una rappresentazione visiva di questo meccanismo di diffusione, rimandiamo a questa pagina (https://ctufaro.github.io/GossipPlot/index.html), in cui si può osservare la progressiva diffusione di un messaggio all’interno del network di Bitcoin.
In questo modo la transazione entrerà a far parte del mempool, ovvero dello spazio in cui stanno tutte le transazioni valide che non sono ancora state inserite all’interno di un blocco della blockchain.
A questo punto si passa alla fase di creazione dei blocchi, che vedremo nel prossimo capitolo.
Quello presentato è l’esempio più semplice di transazione ma in realtà ne esistono di ben più complessi, con molti input, molti output (destinati magari a indirizzi diversi) o addirittura transazioni con input provenienti da indirizzi diversi.
Inoltre, bisogna sottolineare che i concetti qui esposti sono appena sufficienti per spiegare come avvengono le transazioni ad alto livello, ad esempio facendo una transazione da un mobile wallet.
In realtà, sotto alla superficie, il meccanismo è molto più complesso e verrà approfondito nelle lezioni dedicate.
Mining e consenso
Siamo arrivati al punto in cui la transazione di Alice verso Bob è stata propagata attraverso il network ed è entrata nel mempool, quindi è in attesa di essere inserita all’interno di un nuovo blocco.
Entrano in gioco a questo punto il processo definito mining e il protocollo di consenso di Bitcoin, Proof of Work (PoW).
Spesso il mining viene visto esclusivamente come un modo per ottenere delle ricompense, in realtà è su questo processo che si basa tutto il funzionamento della blockchain di Bitcoin.
È infatti attraverso il mining che le transazioni vengono inserite all’interno dei nuovi blocchi, che vengono poi aggiunti alla blockchain, rendendole quindi confermate.
Il problema che si pone in questa fase è quello del consenso distribuito. Ovvero, in un network decentralizzato, come quello finora descritto, come fa ogni nodo del sistema ad arrivare a una stessa versione del registro, di cui ci si possa fidare?
In una rete centralizzata, l’entità centrale si occupa di stabilire cosa è vero e cosa è falso e tutti gli altri attori ripongono fiducia nei confronti di questa entità.
In un sistema come quello di Bitcoin, che è detto trustless, i nodi raggiungono il consenso senza il bisogno di questa entità centrale.
Tanto più se si considera che il network è asincrono, quindi non a tutti i nodi le informazioni arrivano nello stesso momento.
Questo problema viene risolto attraverso il meccanismo di emergent consensus proposto da Satoshi Nakamoto.
Attraverso questo processo, il consenso emerge implicitamente, senza bisogno di elezioni, attraverso quattro processi indipendenti:
- Verifica di ogni transazione, da parte di ogni full node;
- Aggregazione delle transazioni valide in nuovi blocchi da parte dei mining nodes, che devono anche fornire una prova che dimostri il loro lavoro;
- Verifica dei nuovi blocchi da parte di ogni nodo della rete;
- Scelta della catena con la maggior potenza computazionale
Torniamo alla transazione di Alice, dopo averla inviata a un primo nodo, questo verificherà la validità della transazione, controllando una serie di condizioni presenti all’interno del codice di Bitcoin (ad esempio sintassi corretta, input e output non vuoti, ecc).
Solo se la transazione risulterà valida, il primo nodo la propagherà ai nodi con cui è in comunicazione, che effettueranno i medesimi controlli e, se valida, la propagheranno a loro volta.
Abbiamo qui dunque un primo livello di sicurezza, una selezione delle transazioni valide da propagare da parte di tutti i full nodes, quelli che posseggono una copia del registro.
Come avevamo già accennato, le transazioni valide andranno a finire nella mempool di ogni nodo che ha ricevuto le transazioni, in attesa di essere inserite in un nuovo blocco.
Arriviamo così al secondo processo, che riguarda questa volta un tipo diverso di nodi: i miners.
I miners sono in competizione tra loro per la creazione dei nuovi blocchi. Ciò che fanno è prendere delle transazioni dal mempool, raggrupparle e creare un header per il nuovo blocco, che conterrà dei dati riguardanti il blocco. A questo punto avranno un candidate block che però, per essere proposto alla rete, deve possedere anche la prova del lavoro svolto dal miner (da qui Proof of Work).
La prova del lavoro richiesta ai miners consiste nella risoluzione di un puzzle crittografico molto complesso, che richiede una grande potenza computazionale per essere risolto e dunque un consumo elettrico ingente.
Ogni blocco è identificato da una stringa da 256 bit che si ottiene attraverso una hash function nota come SHA256.
Alle hash functions abbiamo già accennato nel corso di questa overview, si tratta di funzioni che prendono come input una stringa di lunghezza variabile e restituiscono come output una stringa di lunghezza fissa (256 bit nel caso di SHA256), con la particolarità che, mentre calcolare l’output partendo dall’input è un’operazione computazionalmente non complessa, l’operazione inversa è praticamente impossibile.
Inoltre, un minimo cambiamento nell’input, porta a un output completamente differente.
Si tratta di funzioni che stanno alla base delle crittografia di Bitcoin, a partire dalla generazione delle chiavi che abbiamo già affrontato.
I miner devono trovare l’hash del nuovo blocco che proporranno alla rete e per farlo devono passare come input a SHA256 il candidate block.
L’hash quindi dipenderà dal contenuto del blocco, sia dalle informazioni contenute nell’header che dalle transazioni.
Dimensione campo | Descrizione | Data Type | Commenti |
---|---|---|---|
4 | version | int32_t | Versione del blocco |
32 | prev_block | char[32] | Hash del blocco precedente |
32 | merkle_root | char[32] | Riferimento a un Merkle tree che è un hash di tutte le transazioni legate a questo blocco |
4 | timestamp | uint32_t | Timestamp di quando il blocco è stato creato |
4 | bits | uint32_t | La difficoltà del target usato per il blocco |
4 | nonce | uint32_t | Il nonce usato per generare il blocco |
1+ | txp_count | var_int | Numero delle transazioni |
In particolare ci interessa l’header, perché, tra le varie informazioni, ne contiene tre che ci interessano in questa fase:
- L’hash del blocco precedente;
- Il target dell’algoritmo di Proof of Work per il candidate block;
- Il Nonce.
L’hash del blocco precedente rende l’hash del candidate block, a cui sta lavorando il miner, dipendente dal blocco precedente, a sua volta dipendente da quello prima e così via.
Si crea così una catena di blocchi inscindibile, dalla quale deriva il nome blockchain, in cui ogni blocco è legato al blocco precedente.
Il target e il nonce invece riguardano il lavoro che deve fare il miner.
Il target definisce appunto un certo obiettivo che il miner deve raggiungere: l’hash del nuovo blocco dovrà essere minore del target.
Il nonce invece è un numero variabile che viene usato per far cambiare l’output di una hash function.
Abbiamo detto che cambiare anche un solo carattere dell’input porta a un output diverso. Cambiando il nonce, i miners cercano di trovare un hash che sia minore del target stabilito.
L’unico modo in cui possono farlo, visto che è impossibile risalire all’input dall’output, è attraverso bruteforce, ovvero tentando con n nounce, finché non troveranno casualmente quello che dà il risultato sotto al target desiderato.
Se si osserva l’hash di un blocco molto vecchio e quello di un blocco recente, si può notare che è aumentato notevolmente il numero di zeri all’inizio dell’hash. Questo vuol dire che il target richiesto dal blocco recente era più piccolo.
È necessario introdurre un concetto che può essere controintuitivo: più piccolo è il target, maggiore è la difficoltà computazionale. Da ciò si può dedurre che la difficoltà dei blocchi è aumentata nel corso del tempo, come spiegheremo a breve.
Di sicuro vi chiederete: come mai i miner dovrebbero voler utilizzare tanta potenza computazionale, spendendo soldi in elettricità, per creare nuovi blocchi?
Satoshi Nakamoto ha previsto due ricompense per incentivare i miner a svolgere questo ruolo:
- Le transaction fees;
- Nuovi bitcoin che vengono creati da zero (minati appunto) a ogni nuovo blocco.
Le prime, già viste precedentemente, si ottengono sottraendo alla somma di tutti gli input delle transazioni del blocco la somma di tutti gli output delle transazioni del blocco.
Riguardo al secondo punto, il miner inserisce nel candidate block, oltre alle transazioni selezionate dal mempool, una speciale transazione, che sarà sempre la prima del blocco, detta coinbase.
In questa transazione, vengono minati dei nuovi bitcoin, creati dal nulla, che vengono inviati all’indirizzo inserito dal miner.
I bitcoin minati a ogni bocco si dimezzano ogni 4 anni circa, per la precisione ogni 210000 blocchi, secondo il processo chiamato halving visto in precedenza, che serve a distribuire i bitcoin sempre più lentamente, fino ad arrivare al raggiungimento della max sypply, come spiegato nel capitolo dedicato.
Quando diciamo circa 4 anni, è perché un nuovo blocco viene creato in media ogni 10 minuti.
Come si può facilmente intuire, trovare il nonce corretto diventa più facile man mano che aumenta la potenza computazionale del network di Bitcoin, per questo motivo, ogni 2016 blocchi, il target viene aggiornato tenendo conto della potenza computazionale totale della rete. Se sarà aumentata la potenza computazionale, il target si ridurrà, rendendo più difficile la risoluzione del puzzle crittografico. Al contrario, al diminuire della potenza computazionale della rete, il target aumenterà, rendendo più facile trovare un nonce corretto.
Torniamo nuovamente alla transazione di Alice: dopo essere stata propagata nel network, ipotizziamo che dei miner avranno inserito tale transazione nel loro candidate block.
Nel migliore dei casi, solo un miner arriverà alla soluzione del puzzle crittografico e, non appena raggiunta, propagherà per il network il suo blocco contenente la prova del suo lavoro.
A questo punto inizia il terzo processo, la verifica dei blocchi da parte della rete.
I nodi, una volta ricevuto il blocco, lo validano, effettuando vari controlli previsti dal codice di Bitcoin (corretta struttura dei dati e sintassi, hash minore del target, ecc).
Se il blocco risulterà valido, lo aggiungeranno al loro registro locale e lo propagheranno ai nodi con cui sono in comunicazione.
A questo punto, inizierà a propagarsi questa nuova versione del registro e quando arriverà ai miner che stavano lavorando al nuovo blocco, questi capiranno di aver perso la competizione per quel round e si metteranno immediatamente al lavoro sul blocco successivo.
Vale la pena di sottolineare un punto di quanto detto finora, riguardante come il consenso viene espresso nella rete di bitcoin.
Come già detto, il consenso emerge implicitamente, senza bisogno di elezioni o altro.
Dobbiamo distinguere tra i miner e gli altri nodi.
In entrambi i casi il voto viene espresso aggiungendo un nuovo blocco al proprio registro o meno. Nel caso dei miner però vi è una sottigliezza da considerare: i miner esprimono implicitamente il proprio voto, quando partono a creare un nuovo blocco inserendo l’hash del blocco precedente.
Questo è particolarmente rilevante nei casi in cui, a differenza dell’esempio di Alice, due miner (C e D) raggiungono la soluzione di un blocco a breve distanza di tempo.
I due miner propagheranno i loro blocchi, entrambi validi, e il network si dividerà in due parti. Alcuni nodi avranno ricevuto prima un blocco mentre altri avranno ricevuto prima l’altro.
In questi casi avviene un fenomeno definito blockchain fork. Il registro distribuito sarà diviso in queste due versioni, entrambe valide, e questa biforcazione della catena continuerà fino a quando uno dei due rami non avrà una potenza computazionale cumulativa maggiore, cosa che, nella maggior parte dei casi, avviene direttamente al blocco successivo.
Infatti, i miner partiranno subito a costruire il nuovo blocco. Alcuni dei miner lo costruiranno a partire dal blocco di C e altri a partire dal blocco di D.
Il primo miner che avrà un blocco valido lo propagherà alla rete, esprimendo implicitamente il suo voto per il blocco precedente (in questo caso D) e portando il network a tornare al consenso distribuito.
Il blocco che non prevarrà verrà cancellato e le transazioni al suo interno torneranno nella mempool.
In questo modo, ogni blocco riceverà un numero di conferme pari al numero dei blocchi che lo seguono. Più conferme vi sono, più le transazioni al suo interno sono da considerare immutabili e solitamente si considerano 6 conferme per avere la certezza assoluta che una transazione sia entrata a far parte del registro.
Overview del processo
L’intero processo descritto è più semplice di quanto si possa pensare e, a titolo riassuntivo, riportiamo ora uno schema con i 9 step principali:
- Creazione di una transazione: una persona che vuole inviare dei bitcoin a un’altra persona crea una transazione offline con la struttura vista in precedenza. Questo non significa che i bitcoin vengono già trasferiti, significa solo che è stato scritto il testo della transazione.
- Accesso alla rete: Una volta compilata la transazione, deve essere trasmessa alla rete Bitcoin. Perchè ciò avvenga, deve passare attraverso un nodo (non importa il tipo di nodo, basta che sia collegato alla rete Bitcoin).
- Invio della transazione: la transazione viene inviata a tutti i nodi della rete, così che tutti possano vedere che questa persona vuole inviare quei bitcoin ad un’altra persona. Tutti hanno la visibilità degli indirizzi del mittente e del destinatario, ma nessuno sa chi (nome e cognome) di fatto è la persona dietro a quegli indirizzi.
- Verifica della transazione: dopo che tutti i nodi della rete ricevono la transazione, eseguono alcuni controlli, tra cui:
- verificano se la struttura della transazione è corretta;
- controllano se l’input della transazione è collegato agli output delle transazioni precedenti, cioè controllano se il mittente della transazione ha davvero i bitcoin che sta inviando, guardando la storia delle transazioni collegate all’address del mittente nel registro.
- Creare un blocco: tutte le transazioni verificate vanno nella mempool, la sala d’attesa per le transazioni non confermate che non sono ancora state incluse in un blocco. Lì, tutti i nodi validatori, i minatori, selezionano un gruppo di transazioni guardando lo spazio massimo di blocco disponibile ed il compenso per ogni transazione, e ognuno inizia a creare un nuovo blocco contenente le transazioni selezionate. Così, minatori diversi possono creare blocchi diversi inserendo transazioni diverse.
- Convalida del blocco: tutti i minatori iniziano a partecipare a un gioco matematico, chiamato Proof of Work (PoW), che, come suggerisce il nome, ha lo scopo di dimostrare che si sta compiendo del lavoro per risolvere il gioco. In poche parole, questo gioco matematico viene effettuato automaticamente dal computer e dipende sia dalla capacità computazionale disponibile di quest’ultimo, sia in parte dalla fortuna del minatore che sta cercando di convalidare il suo blocco creato. La prova di lavoro consiste nel trovare un nonce, un numero variabile che è difficile (costoso e lungo) da produrre, ma che risulta facile da verificare da altri. Se un minatore trova il nonce del blocco, vince il PoW e il suo blocco viene convalidato.
- Invio del blocco: il minatore che vince il PoW trasferisce il blocco convalidato a tutti gli altri nodi della rete. In cambio del suo lavoro, il minatore riceve una quantità di bitcoin che viene coniata per ogni nuovo blocco creato (la quantità cambia ogni 4 anni a causa del processo di halving) e le commissioni associate ad ogni singola transazione inserita nel blocco validato.
- Verifica del blocco: ogni nodo della rete riceve il blocco validato e verifica che contenga solo transazioni valide e corrette. Può accadere che due minatori trovino contemporaneamente la soluzione per il loro blocco (fenomeno del blockchain fork): in questi casi, i nodi che ricevono i nuovi blocchi iniziano a lavorare sul primo che ricevono e alla fine la catena più lunga viene mantenuta.
- Aggiunta del blocco: se nella fase di verifica il consenso espresso dai nodi è positivo, ogni nodo aggiunge il nuovo blocco verificato al proprio registro della blockchain.
Il registro risulta quindi formato da una successione di blocchi concatenati tra loro e contiene l’intera sequenza ordinata di blocchi con le rispettive transazioni all’interno.
Governance e cambi di protocollo
Un altro aspetto molto importante da considerare è quello della governance di Bitcoin.
Abbiamo visto che Bitcoin è decentralizzato e che il protocollo di consenso prevede una serie di regole. Queste però, anche se sono immutabili nel breve termine, possono cambiare nel lungo termine.
Vi sono stati infatti degli aggiornamenti del protocollo e continueranno ad esserci, nonostante siano difficili perché richiedono coordinazione tra i vari attori che fanno parte dell’ecosistema di Bitcoin.
Possiamo infatti individuare diversi gruppi di attori all’interno dell’ecosistema:
- I miners;
- I core developers;
- I full nodes;
- Gli end users;
- Gli attori finanziari (come gli exchanges).
Questi gruppi spesso hanno interessi contrastanti e ogni cambiamento al protocollo di consenso deve mediare tra le esigenze di tutti per essere approvato.
Un esempio interessante è quello della block size war, ovvero del dibattito che si è sviluppato, nel corso di anni, riguardo all’aumento delle dimensioni dei blocchi.
Tratteremo la block size war in una lezione dedicata, perché è stato un avvenimento molto importante per Bitcoin, che fa ben capire come il potere sia distribuito tra le varie parti.
Senza andare troppo nello specifico, qui ci limiteremo a fare la distinzione tra i due modi con cui si possono effettuare dei cambiamenti al protocollo di Bitcoin:
- Gli Hard Forks;
- I Soft Forks.
Abbiamo già incontrato la parola fork, quando abbiamo parlato di Blockchain Forks. In quel caso, in seguito a una momentanea divisione della catena in due rami, si ritornava al consenso univoco, scegliendo una delle due diramazioni.
Diverso è il caso degli hard forks, ovvero dei cambiamenti alle regole di consenso che portano il network di Bitcoin a dividersi in due parti: i nodi che accettano le nuove regole e i nodi che non le accettano.
La catena così si dirama e le due diramazioni continuano per le loro strade, indipendenti le une dalle altre.
Ovviamente, affinché si verifichi un hard fork, deve esserci innanzitutto un cambiamento al client di Bitcoin, portato avanti da degli sviluppatori.
Poi questo client deve essere scelto da alcuni dei nodi della rete e in questo modo il network si dividerà nelle due fazioni.
Si capisce che è una soluzione drastica, molto complicata perché porta la rete a dividersi e a non poter più cooperare.
Diversamente, i soft forks sono dei cambiamenti alle regole di consenso, senza che ci sia la necessità di una divisione della rete che porti la blockchain a biforcarsi.
I soft forks sono possibili esclusivamente quando i cambiamenti alle regole sono forward-compatible, ovvero nei casi in cui un client che non ha abbia le nuove modifiche alle regole del consenso, possa comunque continuare partecipare al protocollo con le regole valide precedentemente.
Come si può dedurre, l’espressione soft fork è ingannevole perché, di fatto, non vi è nessun fork.
È da notare che, per avere un soft fork, i cambiamenti alle regole possono solo limitare le regole esistenti, non espanderle, al fine di essere retro-compatibili.
Nell’immagine seguente si può vedere una mappa dei fork di Bitcoin.
L’equilibrio tra le esigenze delle varie parti è uno dei motivi per cui Bitcoin è realmente decentralizzato.
Pensiamo ad esempio a un aggiornamento delle regole di consenso proposto da degli sviluppatori. Hanno il potere di modificare il codice, ma non è detto che poi i nodi della rete decidano di adottare il client aggiornato.
Uno dei problemi che vengono spesso sollevati è quello dei mining pools, ovvero gruppi di miner che aggregano la propria potenza computazionale per avere più possibilità di risolvere i puzzle crittografici e quindi di essere ricompensati per il loro lavoro.
Uno degli scenari teorici che potrebbero mettere a rischio la salute della rete di Bitcoin, è un 51% attack, ovvero il caso in cui un singolo pool dovesse avere più del 50% della potenza computazionale complessiva della rete di Bitcoin, e dovesse utilizzarla a scopi malevoli.
Al di là del fatto che, raggiungere una tale potenza computazionale, nella pratica, è estremamente complesso, se non impossibile, in ogni caso i miner restano solo uno dei gruppi che costituiscono l’ecosistema di Bitcoin.
Gli altri gruppi possono decidere di non seguire più il pool malevolo e di mantenere l’economia in una parte onesta della catena. I miner malevoli si ritroverebbero così a minare blocchi vuoti.
Layer 2 – Lightning network
Nonostante tutti gli aspetti positivi che dovrebbero emergere da questa overview, restano comunque degli aspetti critici di Bitcoin che spesso gli vengono contestati.
Si sente spesso dire che Bitcoin ha delle transaction fees elevate. Oppure che non può scalare, perché i blocchi vengono creati ogni 10 minuti e le transazioni medie al secondo sono circa 7, numero infinitamente più basso rispetto a circuiti come Visa, ma anche rispetto ad altre criptovalute.
Questi tempi di attesa rendono Bitcoin poco pratico per le microtransazioni.
O ancora, si contesta la limitatezza di Bitcoin al quale mancano, ad esempio, gli smart contract di Ethereum e molti altri progetti, anche se, in realtà, Bitcoin possiede un linguaggio di scripting che sta alla base di ogni transazione e che serve a creare delle specie di smart contract, ma si tratta di un argomento troppo approfondito per questa overview.
Gli sviluppatori cercano di risolvere alcune di queste limitazioni aggiornando e modificando le regole di Bitcoin, come visto nel capitolo precedente, ma ci sono altre soluzioni possibili.
Una di queste sono le applicazioni layer two.
In ambito blockchain, uno dei problemi principali è il celebre trilemma della blockchain, secondo il quale è impossibile che una blockchain possa essere allo stesso tempo decentralizzata, scalabile e sicura.
Molti hanno provato a risolvere il trilemma direttamente layer one, ovvero a livello del protocollo di consenso, come per esempio Silvio Micali con Algorand.
Molti altri però sostengono che sia impossibile risolvere il trilemma restando layer one e che l’unico modo per farlo, sia utilizzando le applicazioni layer two, ovvero soluzioni che operano al di fuori della blockchain e la rete principale.
Vi sono molte soluzioni di questo tipo, che permettono di estendere il potenziale di Bitcoin, una di queste è il Lightning Netowrk.
Si tratta di una soluzione off-chain che permette di effettuare micro-transazioni con commissioni bassissime e grande velocità, senza intasare la catena principale, con la quale il Lightning Network comunica il meno possibile, solo quando strettamente necessario.
Si tratta insomma di una rete costruita sulla rete di Bitcoin, che approfondiremo in una lezione dedicata.