Bitcoin: Come funzionano le transazioni

Fonte immagine: Cryptorivista, Davide Lo Pilato

Dopo aver introdotto bitcoin nello scorso articolo, approfondiremo ora il concetto di transazione e come questa viene creata, gestita e finalizzata dall’ecosistema bitcoin.

Come vedremo è un processo lungo e complesso ma che richiede all’utente solo poche operazioni, poiché tutto il resto è gestito in maniera automatica dai software.

N.B: Se non hai ancora letto i precedenti insight sulla tecnologia sottostante ti consigliamo di partire da qui.

Cos’è una transazione?

Possiamo definire una transazione come un’operazione di trasferimento di un qualsiasi asset tra due o più attori. Nel caso particolare delle criptovalute si tratta di asset a cui è associato un valore, che non necessita dell’intermediazione di soggetti terzi che ne garantiscano o gestiscono il corretto funzionamento; come anticipato queste operazioni vengono effettuate da software.

Spesso gli attori di una transazione possono coincidere con la stessa persona, come ad esempio quando invio un asset a me stesso (perché farlo? beh, ci sono vari motivi ma esula dallo scopo di questo articolo).

Nel caso di bitcoin una transazione è un trasferimento di moneta tra due indirizzi, appartenenti a due persone diverse oppure alla stessa persona, poco importa. Andiamo a vedere ora l’intero processo.

Nota: I termini wallet e indirizzo (address) in alcuni casi possono sembrare utilizzati in modo ambiguo e con lo stesso significato. In realtà sono cose leggermente diverse. Dedicheremo un futuro articolo a chiarire questo concetto. Per il momento considerate che il wallet può essere inteso sia con il significato di indirizzo che di software che gestisce i bitcoin o altra cryptovaluta.

Nota(2): Indirizzo e chiave pubblica spesso sono considerate essere la stessa cosa. In realtà questo non è sempre vero, come vedremo nei prossimi articoli.

Sviluppo di una transazione

Ogni singola transazione viene memorizzata all’interno di un registro pubblico distribuito, la Blockchain, la cui copia è conservata nei nodi della rete, i server, computer, ecc.(di cui abbiamo parlato nei precedenti articoli) sui quali viene eseguito anche il software Bitcoin core[1]. 

Questo software ha il compito fondamentale di tenere aggiornata costantemente la Blockchain, di diffondere la copia presente sul nodo in cui è in esecuzione agli altri nodi della rete e, cosa non meno importante, verificare e validare le transazioni inviate alla rete. 

Per saperne di più: Banca Generali investe nel servizio di custodia di Bitcoin con Conio

Tale software implementa un protocollo concepito ed implementato in modo tale da poter verificare la reale disponibilità delle cifre bitcoin che si intendono trasferite dal wallet mittente con la transazione: il processo di verifica viene eseguito a ritroso su tutti i blocchi, fino alla transazione che ha dato origine a quei bitcoin che si intendono trasferire.

Di seguito è riportato uno schema che descrive tutti i vari stati e passaggi di ogni singola transazione.

 Come si evince dallo schema precedente, una transazione si sviluppa su 2 livelli: il primo richiede l’intervento dell’utente che avvia la transazione; la seconda parte, al contrario, è completamente automatica e gestita dai nodi e dai miners della rete.

Step 1 – Interazione utente

In questa fase l’utente utilizza un wallet (desktop, mobile, hardware) per generare e firmare una transazione, inviando quindi una certa somma dal proprio address ad un address destinatario. Per semplificare la gestione di questo tipo di operazioni, di norma i wallet mettono a disposizione dei tool che permettono di creare dei QR code con tutte le informazioni necessarie a compilare tutti i campi della transazione. 

In questo modo, il mittente deve unicamente scannerizzare il QR con il suo device per avere la transazione pronta da inviare. Premendo il tasto Send, (Invia) l’interazione dell’utente ha termine; tutto ciò che segue sarà gestito e tracciato in modo automatico dal software dei nodi e dei miners. 

Step 2 – Completamento e invio della transazione

Il wallet recupera tutti i dati inseriti dall’utente e cerca nella Blockchain un numero n di transazioni, tra tutte quelle ricevute sui propri address, (UTXO – Unspent Transaction Output), recuperando quelle la cui la somma degli importi ricevuti e non spesi possa soddisfare il totale richiesto in uscita e da inviare al destinatario. Molto spesso tale somma non è mai esattamente uguale al totale da inviare: nel caso si trovi una UTXO con un ammontare pari al totale da inviare (compreso le commissioni di rete) il numero n di transazioni UTXO sarà n=1.

Al termine della ricerca delle UTX (per n diverso da 1), calcola il totale e genera 2 transazioni:

  • una verso il destinatario, con il valore deciso dall’utente;
  • una verso il proprio address con la differenza tra la quantità inviata all’utente e il totale delle tx in ingresso. A questa transazione viene sottratta una minima quantità che viene identificata come fee di transazione (commissione di rete) e rappresenta la ricompensa per il miner che inserirà la transazione nel blocco.

Più è alta questa fee, più la transazione sarà considerata prioritaria ed avrà la precedenza di inserimento nel blocco, rispetto alle altre con fees più basse.

Nota: quest’ultima caratteristica è quella che spiega il  perchè nei periodi di congestione le fee di trasferimento salgano in modo vertiginoso. Gli utenti infatti impostano fee sempre più alte per vedere la propria transazione processata in tempi rapidi. Tuttavia il comportamento è poi imitato da tutto il resto della comunità il che crea un circolo vizioso a tutto vantaggio dei miners che beneficiano delle abbondanti fees. Sono infatti gli stessi miners a scegliere dal paniere delle transazioni da processare (mempool) quali inserire nel candidate block in base proprio alle fee pagate dagli utenti.

A questo punto il wallet firma queste transazioni con le rispettive chiavi pubbliche e le invia ai nodi.

Per saperne di più: JPMorgan: completata un’operazione repo intraday in Blockchain

Step 3 – Validazione

I nodi che ricevono la transazione effettuano una ricerca a ritroso all’interno della Blockchain, al fine di verificare se il mittente è realmente in possesso dei btc che ha inviato. Fatta questa verifica, la transazione è già visibile al destinatario, che però non potrà ancora spendere la cifra, perché necessita di altre conferme. 

Si ha la prima conferma quando la transazione viene inclusa per la prima volta in un blocco. I blocchi minati dopo quello che contiene la tx sono considerati altre conferme. Di norma una transazione è considerata valida e spendibile dopo aver ricevuto 6 conferme; tuttavia, nella maggior parte dei casi oggi ne bastano 3.

Quando la tx è verificata, viene inclusa nel Candidate Block per il mining.

Step 4 – Mining

Il blocco viene processato e viene calcolato l’hash della radice del Merkle Tree. A questo punto il block header[2] è completo e il mining può iniziare. 

Il mining di un blocco bitcoin è un’operazione teoricamente semplice, perché richiede di calcolare un particolare hash (SHA256) (doppio) del block header e di incrementare un parametro detto nonce ad ogni iterazione. 

L’hash risultante deve però avere un valore inferiore a un determinato parametro definito dalla rete, definito in base alla difficoltà di mining: esso è ricalcolato ogni 2016 blocchi minati, facendo una media del tempo totale impiegato e paragonandolo al block time definito dalla struttura della rete. Se il tempo impiegato è superiore a quello atteso, la difficoltà viene ridotta, in caso contrario viene incrementata.

L’evoluzione del mining

Poiché nel corso degli anni il mining è stato portato avanti con macchine sempre più performanti, oggi siamo giunti a livelli di difficoltà elevatissimi, che richiedono macchine specifiche, dette ASIC (Application Specific Integrated Circuit), che possano garantire un profitto a chi ne fa uso: ad esempio, l’Antminer S19 PRO prodotto da Bitmain.

La potenza di hashing si misura in hash/sec; per capire la necessità di ricorrere a macchine apposite, basta pensare che un processore consumer come l’Intel l’i7 7700K è in grado di elaborare circa 68Mh/s (milioni di hash per secondo); l’Antiminer S19 PRO ne elabora circa 110Th/s (migliaia di miliardi al secondo), quanto circa 1.617.647 CPU.

Per saperne di più

La struttura di Bitcoin è progettata in modo tale da incentivare il lavoro dei miner; è prevista infatti una ricompensa per il miner che chiude il blocco che gli consente di inserire nello stesso una transazione denominata coinbase transaction: questa è la prima transazione del blocco e trasferisce dal nulla un certo numero di bitcoin all’address del miner che lo ha chiuso[3].

Questo è esattamente il modo in cui i bitcoin vengono generati. Non esiste una autorità centrale che li emetta, è semplicemente il network che ricompensa chi esegue lavoro per sostenerlo. 

Il valore della ricompensa diminuisce in modo programmatico all’aumentare del numero di blocchi emessi al fine di rispettare la curva di emissione definita dagli sviluppatori. Alla data di scrittura di questo articolo, il reward per blocco si attesta sui 6.25BTC; si ridurrà a 3.125, con un processo chiamato halving, nel maggio 2024.

BitcoinBlockHalf

Quando un miner trova la soluzione del blocco, la invia a tutti gli altri nodi della rete, che provvedono a validarla. A quel punto il blocco è incluso nella Blockchain e la transazione ottiene la prima conferma.


[1] https://bitcoin.org/en/bitcoin-core

[2] Intestazione del blocco che contiene diversi parametri quali ad esempio il timestamp, l’hash del blocco precedente, l’hash del merkle tree del blocco corrente, il nonce ecc.

A. M. Antonopoulos, Mastering Bitcoin, programming the open blockchain, Sebastopol, O’Reilly, 2017, p 227[3] A. M. Antonopoulos, Mastering Bitcoin, programming the open blockchain, Sebastopol, O’Reilly, 2017, p 120

Scopri anche: Planet Watch, il monitoraggio della qualità dell’aria passa per la blockchain