Bitcoin Detox 16: Vivere per sempre su Bitcoin

La blockchain di Bitcoin è un registro, non censurabile e non alterabile, ciò dà la possibilità di scrivere un dato che rimarrà per sempre all’interno di Bitcoin. In questa puntata vedremo come scrivere un dato eterno sulla blockchain.

____

MATTIA

Salve a tutti e benvenuti in questo nuovo episodio del Bitcoin Detox, un programma radiofonico online, quindi un podcast che parla principalmente di Bitcoin. Il podcast è sostenuto da Gambaru, che si occupa di sviluppo applicazioni in ambito web tre. Vi invito ad andare nel loro sito gambaru.tech/bitcoindetox così da conoscere meglio quello che fanno, quello che possono fare per voi volendo e vi invito anche a seguirci  a noi del podcast all’interno della nostra chat Telegram https://t.me/bitcoindetox in cui di solito parliamo di topic relativi al mondo delle cripto, ma non solo, anche ciò che ci appassiona in ambito tech, ma rimanendo sempre sul falsariga delle cripto. 

Allora io sono Matt e oggi vi voglio parlare di qualcosa che non ho visto spesso. Su Internet ci sono parecchie informazioni relative alla blockchain di Bitcoin, cos’è, come funziona ma fino ad ora ancora non ho visto una reale applicazione della blockchain di Bitcoin al di fuori dell’uso come sistema di pagamento elettronico. Ovviamente ce ne sono, non dico che non esistano, però dico che questa non l’ho mai vista spiegata in italiano, quindi ho pensato che forse poteva essere un topic interessante da portare. Il topic di oggi è: scrivere dei dati all’interno della blockchain, ma non una blockchain qualsiasi, ovviamente la nostra blockchain più amata e soprattutto più vecchia, ovvero quella di Bitcoin. Da qui il titolo “Vivere per sempre su Bitcoin”, perché vivere per sempre? Perché per chi non lo sapesse, Bitcoin è una tecnologia che consente di scrivere dei dati in un registro distribuito senza un intermediario che gestisca questi dati che vengono scritti e soprattutto non censurabile, non tra virgolette modificabile, quindi se io creo una transazione in Bitcoin, questa transazione non può tornare indietro, una volta che è partita è partita. 

Quindi, senza perderci in troppe chiacchiere iniziamo subito subito con la prima slide, ovvero il punto di partenza. Per noi, in questo caso il primo punto di partenza è dato dalla transazione singola, una transazione in Bitcoin. E’ una riga di un registro. Adesso può sembrare una frase senza senso, ma subito dopo capirete meglio quello che sto dicendo. All’interno di questa riga ci sono vari campi che dobbiamo riempire, ad esempio nel caso di Bitcoin, un sistema per trasferire del denaro in maniera elettronica. Quindi dobbiamo avere l’indirizzo di chi invia questo denaro elettronico, dobbiamo avere un indirizzo di chi riceve questo denaro elettronico, dobbiamo avere una piccola fee che in realtà sarebbe il reward per chi decide di confermare, questa transazione, ovvero la fee del miner, il numero di asset da inviare, quindi l’ammontare di Bitcoin che vogliamo inviare e poi c’è un parametro particolare, un campo particolare, ovvero dati arbitrari. 

Questi dati arbitrari per il momento li chiameremo dati non necessari. Ovvero l’indirizzo di chi invia è un dato essenziale, perché sennò che transazione è se non abbiamo una persona che invia e una persona che riceve? Non sarebbe una vera e propria transazione. Per poter eseguire questa transazione si deve pagare una piccola fee e anche questo è un parametro obbligatorio secondo il protocollo Bitcoin. Il numero di asset da inviare è un’altro parametro obbligatorio perché sennò non possiamo definirla una vera e propria transazione finanziaria. Mentre i dati arbitrari sono l’unica cosa opzionale di cui al momento non dobbiamo per forza inserire un valore. L’uso dei dati arbitrari ha creato parecchi dibattiti per ora, per il momento ne ha creati veramente tanti per delle problematiche che vi illustrerò più avanti, ma prima proseguiamo perché per ora abbiamo visto il punto di partenza, ovvero la singola transazione di Bitcoin. Ma vediamo qual è il punto di arrivo. Il punto di arrivo per noi è la blockchain. Però capisco che non tutti conoscono la blockchain, quindi per chi non la non dovesse conoscere ancora la blockchain, puoi immaginarla come un registro. 

Un registro è formato da pagine e da righe, ovviamente, possiamo tranquillamente dire che una riga equivale a una transazione. Ogni transazione è scritta all’interno di una pagina, quindi ogni pagina può essere considerata come un blocco. L’insieme delle pagine, quindi il registro è la blockchain. Per scrivere un dato all’interno del nostro registro è essenziale pagare perché, come vi dicevo prima, ci sono delle entità chiamate miner che si occupano di verificare che le transazioni siano valide. Però loro utilizzano della corrente perché devono mantenere dei computer perennemente accesi per poter verificare che ogni transazione sia valida e quindi gli viene offerto un incentivo economico per questo loro sforzo. L’aggiunta di dati specifici dell’applicazione che stiamo costruendo, quindi l’aggiunta di dati arbitrari alle transazioni apre le porte all’utilizzo di Bitcoin non solo per i pagamenti in contanti, ma anche per nuovi tipi di transazioni che possono essere finanziarie, immobiliari o addirittura legali. 

Le domande su come e anche se supportare queste determinate applicazioni sono ancora oggetto di dibattito, ma comunque andiamo avanti e vediamo dove scrivere i dati perché, come abbiamo detto prima, abbiamo introdotto con la transazione quindi noi sappiamo che i dati che vogliamo scrivere li dobbiamo inserire al momento della creazione della transazione. Ogni transazione a sua volta viene scritta in un blocco e il blocco a sua volta viene collegato al blocco di prima, così da creare una catena e da qui la blockchain. Solo nel momento in cui la nostra transazione, che è stata scritta in un blocco e che questo blocco, quindi – solo nel momento in cui il nostro blocco in cui ci troviamo viene collegato con quello prima – possiamo dire di aver effettuato la scrittura dei dati all’interno della blockchain. Ma prima di continuare vi volevo introdurre un attimo a quello che è il ciclo di vita di una transazione. 

Quindi partiamo dalla creazione. Dopo la creazione la nostra transazione viene validata da i nodi della rete di Bitcoin, chiamati anche peer o full node, che si occupano di leggere le transazioni, verificarle con un meccanismo che vedremo tra pochissimo e subito dopo inviarle ai miner, cosicché i miner le verificano appunto, le confermano, dicono sì, questa transazione è valida. Poi i miner creano il blocco e lo aggiungono alla blockchain. Questo più o meno è il ciclo di vita di una transazione spiegato in maniera brutta, ma spero efficace. Ovviamente noi non possiamo scrivere quanto vogliamo all’interno della blockchain. Abbiamo delle piccole limitazioni. Una di queste è il fatto che una transazione non deve superare 1 MB di peso, quindi una transazione molto complessa che deve inviare dei Bitcoin a più indirizzi ovviamente peserà di più di una transazione dove il trasferimento avviene da un indirizzo singolo a un’altro indirizzo singolo. 

Un’altra non troppo grande problematica secondo me è che i dati che noi necessitiamo di scrivere non possono superare i 40 byte, poiché il protocollo ce lo dice. Il protocollo dice che una transazione all’interno del parametro dei dati, ripeto, non necessari non debba pesare più di 40 byte. 40 byte possono sembrare pochi, ma non sono così pochi. Una caratteristica delle transazioni di Bitcoin è che Bitcoin utilizza un algoritmo di hashing per poter creare un layer di privacy, in cui nessuno riesce davvero a capire quello che c’è scritto, a meno che non sia un computer. La funzione di hash ci consente quindi di convertire qualsiasi dato in un’insieme di caratteri, spesso alfanumerici. Guardiamo un attimo questo esempio qui sulla destra in cui vediamo che in input abbiamo una parola, fox, volpe. L’ash function ci restituisce la stessa parola, ma sotto un’altro formato, una stringa, un insieme di caratteri alfanumerici, quindi lettere e numeri. Le hash function sono essenziali per noi perché secondo il protocollo, per poter inserire un dato all’interno della blockchain dobbiamo creare un hash di quest’ultimo e solo dopo aver creato l’hash possiamo scrivere questo risultato all’interno della blockchain. Proseguiamo andando avanti e vedendo come applicare una funzione di hashing. Iniziamo dicendo che il formato che andremo ad usare si chiama HEX, hexadecimal, ovvero esadecimale. Quindi convertiremo la nostra parola, la nostra frase, il nostro file, il nostro dato all’interno della hashing function con una tecnica per avere un risultato in esadecimale. 

A questo punto io voglio farvi un esempio pratico, facciamo finta che io sia Dante Alighieri e che voglio scrivere all’interno della blockchain la mia opera, la Divina Commedia. Può sembrare strano, ma lo posso fare. Perché all’interno di ogni transazione possiamo scrivere 40 caratteri. La Divina Commedia è composta da 500 mila caratteri, come risolviamo il problema? Risolviamo il problema dividendo tutta la nostra opera divisa per 40. Quindi facciamo 500.000/40. Quindi le transazioni necessarie a scrivere l’intera Divina Commedia all’interno della blockchain di Bitcoin saranno 1250. Quindi con 1250 transazioni noi possiamo scrivere 500.000 caratteri all’interno della blockchain e rendere la nostra opera non censurabile, non alterabile per sempre. Andiamo a vedere in maniera più specifica come funzionano le transazioni Under The Hood, quindi, dove non vediamo. 

Le transazioni possono sembrare delle semplici strutture dati, i dati che sono scritti all’interno di una transazione l’abbiamo visti nella prima slide. Ma in realtà se andiamo a vedere in maniera un po’ più approfondita cosa sono e come vengono gestite le transazioni all’interno del network e della blockchain possiamo vedere che le transazioni in realtà sono degli script. Gli script sono una breve sequenza di comandi. Quando creiamo una transazione, in realtà stiamo scrivendo uno script. Questo script è cosiddetto Challenge Script. Questo passerà dal nostro Wallet al nostro network di Bitcoin, dove i full node eseguono lo script, verificando che tutti i comandi all’interno restituiscano i valori giusti. 

Quindi, quando il full node completa la verifica della transazione seguendo lo script ne genera un’altro chiamato validation script. Questo a sua volta sarà mandato ad un miner che lo verificherà e se sarà valido lo inserirà all’interno di un blocco e di conseguenza all’interno della blockchain. Ma fino ad ora non abbiamo ancora dato un nome specifico al parametro che utilizziamo per scrivere dati. Questo parametro si chiama OP_RETURN. Il parametro OP_RETURN fa parte dei comandi presenti nel Validation Script, quindi OP_RETURN sta per operation return. Il parametro OP_RETURN non è stato creato dal giorno zero, cioè Satoshi non ha creato il parametro OP_RETURN subito, questo è stato inserito all’interno del protocollo di Bitcoin nel 2014 e quando è stato inserito ha creato parecchie problematiche. Perché questo parametro ci consente di scrivere, come già detto, dei dati arbitrari all’interno della blockchain. Questi dati però, comunque devono essere validati, ovvero devono essere letti da un’entità. Queste entità che leggono questi dati sono i fullnode. Di conseguenza, se tutti gli utilizzatori di Bitcoin si ritrovano a inserire dei dati arbitrari all’interno della blockchain, ci ritroveremo con le singole transazioni molto pesanti, molto lunghe e di conseguenza i fullnode ci metteranno molto più tempo rispetto a una transazione che non ha dei dati in più ma ha solo i dati necessari per leggerla, e quindi anche per inviarla al miner. Questo problema crea un collo di bottiglia in cui il miner non ha grandi problematiche, cioè se il miner deve confermare una transazione senza dati aggiuntivi ma riceve anche una transazione con dei dati aggiuntivi a lui non fa differenza. 

Però il fullnode, che deve innanzitutto archiviare tutta la blockchain e, secondo, deve verificare ogni singola transazione, si ritroverà ad avere un database pesantissimo perché una transazione standard pesa di più di una transazione con dei dati aggiuntivi scritti sopra, quindi sarà necessario avere più hard disk fisici, un SSD, con più megabyte, sempre di più nel tempo. E la cosa peggiore è che non si può prevedere quanto sarà grande il SSD che dovremmo utilizzare per archiviare la blockchain, poiché non possiamo prevedere le persone che tipologia di dati scrivono, quanti ne scrivono. Questo è un problema di scalabilità, perché meno persone possono permettersi dei dispositivi di archiviazione potenti e meno persone possono eseguire Bitcoin. Se meno persone eseguono Bitcoin tutto il sistema inizia a ingolfarsi. E da qui i problemi di scalabilità che vi accennavo all’inizio. 

A questo punto siamo arrivati alla fine di quella che è la spiegazione teorica, questo è un argomento un po’ complesso, ma spero che comunque abbiate capito. Per farvelo capire meglio, vi voglio far vedere all’atto pratico come si fa a scrivere un dato in blockchain. Ok, noi abbiamo questo nostro nuovo Wallet che andremo a chiamare Wallet 1, Standard Wallet ovviamente per semplicità, qui creeremo un seed, questo seed ci consentirà di recuperare il nostro Wallet in qualsiasi momento, ci copiamo la nostra chiave la inseriamo qui, poiché se noi la copiamo e proviamo a incollarla qui vedete che il post non utilizzabile, quindi dovremmo inserire le parole a mano. Ok, inseriamo la nostra password, ma per questo esempio non inserirò nessuna password ed ecco qua che abbiamo il nostro Wallet di Bitcoin pronto. Tengo a specificare che questo è un Wallet di Testnet, quindi i soldi che utilizzeremo sono finti, ma comunque se fate le stesse azioni su un Wallet normale avverrà alla stessa maniera. 

Detto ciò, noi abbiamo zero Bitcoin, quindi da qui possiamo andare in un qualsiasi faucet, un sito Internet che ci consente di ricevere Bitcoin che hanno valore zero in maniera gratuita, generiamo un nuovo address, eccolo qui lo copiamo e lo inseriamo qua. Control V, Send Testnet Bitcoin e verifichiamo. Ecco qua Bitcoin inviati. A questo punto torniamo sul nostro Wallet. Abbiamo ricevuto i nostri Bitcoin, adesso sono attualmente in conferma. Però io vi voglio comunque far vedere come funziona e come già accennato prima, il parametro che andremo a utilizzare per poter inserire dei dati all’interno della blockchain sarà OP_RETURN quindi noi qui scriviamo OP_RETURN e andando su qualsiasi sito internet, come vi ho accennato anche prima, quindi text to hex, vediamo un attimo e inseriamo Hello World. Vedete che si sta generando sotto la stringa codificata, quindi copiamo questa stringa e la andremo a inserire qui. L’ammontare di Bitcoin io qua inserisco zero, faccio pay, mettiamo al massimo le fee perché comunque non le paghiamo, quindi va bene così, sono soldi finti e ecco qua il nostro Transaction ID quindi lo copiamo, vediamo comunque nella storia. Ecco qua che nel mentre abbiamo ricevuto i Bitcoin dal nostro faucet. Qui abbiamo la nostra transazione e possiamo prendere il transaction ID e andare su un qualsivoglia block explorer che ci consente di visualizzare le transazioni all’interno di una blockchain, in questo caso la blockchain di Testnet, quindi di prova di Bitcoin, noi andremo a incollarlo e eccoci qua che appena ha caricato la nostra transazione vedremo che le conferme sono a zero. Ma ecco qua che appare un messaggio che ci dice che ci sono dei dati scritti all’interno della transazione ed ecco qua il nostro messaggio. Hello World, quindi scritto chiaro e il messaggio codificato in esadecimale come piace a Bitcoin. 

Spero che questa piccola video-lezione vi sia piaciuta. Vi invito di nuovo a seguirci sui nostri social che potete trovare qui in sovraimpressione, sulla nostra pagina Telegram, sul nostro gruppo Telegram per fare qualsiasi domanda, noi rispondiamo sempre e sul sito internet per vedere anche la nostra storia e le puntate precedenti. Io vi ringrazio e ci vediamo la prossima settimana, stesso orario.