Privacy Academy

Blockchain Week Rome 2022


Si è di recente conclusa la terza edizione della Blockchain Week, il più grande evento italiano dedicato a blockchain e criptovalute. Un'esperienza ricca di stimoli e riflessioni sul futuro. L'evento permette infatti di vedere, di anno in anno, come evolve il settore e quanto siamo realmente pronti per questa Rivoluzione. Numerose aziende hanno portato all'interno degli stand i loro progetti, incontrando persone provenienti da tutto il mondo e soddisfacendo le loro curiosità. La grande partecipazione del pubblico, anche durante i vari talk del Summit, è stata senz'altro rappresentativa della voglia di crescere e innovare.

















Il Summit dell’evento si è tenuto a Roma tra il 27 e 28 maggio 2022, ospiti a teatro Sistina: un'importante occasione di incontro per ascoltare quali novità, sfide e opportunità si prospettano, allo stato dell’arte, per quanto riguarda appunto la tecnologia blockchain e la DeFI in generale, ovvero criptovalute (anche in termini correlati, in materia di oneri fiscali e tributari), NFT, piattaforme di realtà virtuale e aumentata, "Metaverso".

























Il programma completo dell'evento al LINK UFFICIALE:
https://www.blockchainweekrome.com/









Ma facciamo un passo indietro...










Dott. Giacomo De Simio
Dott. Emanuele Cardinali













Cos’è la Blockchain?





È un sistema che consente il trasferimento peer-to-peer di risorse digitali, senza la presenza di intermediari. Ricordiamo che “p2p” è un modello di architettura logica della rete informatica i cui nodi sono “client” o “server” fissi; questi, in quanto “peer” - paritari, possono fungere da client/server per altri nodi host della rete. Detta in altre parole, i trasferimenti tra gli utenti che partecipano alla blockchain sarà privo di una terza parte che svolge le operazioni di controllo, sicurezza ed accettazione, bensì questi compiti saranno svolti dai nodi partecipanti. Le transazioni vengono organizzate in un registro immutabile (il digital ledger) che si sviluppa in una serie di blocchi collegati tra loro (da qui il nome).





Il campo di utilizzo più sfruttato della blockchain è quello del trasferimento di Criptovalute: non per caso, alla stragrande maggioranza di blockchain è associata/prende il nome dalla criptomoneta (BitCoin, Ethereum, Algorand, …) – fanno eccezioni le blockchain che supportano la sola logica di business (es. HyperLedger).





Nonostante l’idea risalga al 1982, ad opera del crittografo David Chaum, la blockchain deve la propria fama al Bitcoin. Nel 2008 a Satoshi Nakamoto (pseudonimo di un singolo individuo o di una collettività, non si sa) venne in mente di implementare detta tecnologia per il trasferimento di denaro, cui diede il nome di BitCoin. Il blocco zero (c.d. “genesis block”) del registro venne inizializzato nel 2009. Ad oggi un BitCoin vale più di 53 mila euro.





L’idea alla base è molto semplice: le transazioni, una volta validate, vengono raccolte in un blocco. Il blocco successivamente viene agganciato al successivo; una volta fatto, si ricomincia dal primo punto. A quest’idea, mancano i reali attori che si occupano della composizione del registro: questi vengono chiamati “miner” – in italiano, minatori. Un miner è un computer dall’elevatissima potenza di calcolo a cui il compito di raggruppare le transazioni nel blocco, validarlo ed inserirlo nella catena. Ovviamente ciascun miner eseguirà la propria raccolta di transazioni e costruzione del blocco: tenuto conto, quindi, che la catena è UNICA, chi determina l’ordine di aggiunta?





L’ordine è determinato dalla “proof-of-work”.





A ciascun miner viene assegnato un problema che richiede un’enorme potenza di calcolo (ecco perché NON tutti i nodi possono essere miner) e il miner che riesce ad arrivare alla soluzione (validata poi dal gruppo di competitori) nel minor tempo possibile, ha il diritto di aggiungere il proprio blocco alla catena. Tale aggiunta comporta un “premio” per il miner vincitore: questo metodo serve sia per finanziare il lavoro e l’attendibilità del miner (come lo stipendio dei parlamentari – molto alto in modo tale che siano, almeno in teoria, incorruttibili)  e sia per la generazione di nuove monete (stessa mansione assolta dalla zecca di Stato).









E se due miner giungessero alla soluzione praticamente nello stesso tempo?





In tal caso entrambi i blocchi sono accettati, la catena si biforca e si delega tutto al blocco successivo – il primo che lo risolve, fa sì che la ramificazione dell’ “avversario” cada e la blockchain torni ad essere unica. Se tale ambiguità dovesse protrarsi al secondo blocco, si passa al terzo e così via.





Quando si ha a che fare con il mondo del “banking”, il problema che spicca è quello del “double-spending” meccanismo per cui la stessa unità monetaria viene utilizzata più di una volta.









Come si può evitare?





Per poter rispondere a questa domanda bisogna andare a vedere più approfonditamente com’è fatto un blocco.





Il blocco è, come abbiamo detto, il contenitore di diverse transazioni. Ciascuna transazione è costituita da input e da output (associati alla cifra entrante ed uscente) e, a ciascuna di queste, è associata una stringa di caratteri alfa-numerici.





Vediamo nel caso del BitCoin come funziona e chiariamo il tutto con un esempio:





Nel blocco N, è presente la transazione tra due nodi della rete: il primo Carlo ha 1 BTC e deve a Franco 0.4 BTC. Il suo input verrà quindi splittato in due output: uno da 0.4 che verranno assegnati all’indirizzo di Franco e uno da 0.6 BTC che resteranno a Carlo. La transazione avrà quindi un input e due output.





Se Franco, a sua volta dovesse 1 BTC a Martina, potrà usare l’importa appena ricevuta a cui, però, dovrà aggiungere un altro input, al fine di raggiungere l’importo pattuito. In tal caso i valori in input saranno due. Questi codici alfanumerici vanno sotto il nome di UTXO (ovvero “output delle transazioni non spese”) e sono gli elementi di base della transazione.





In immagine, si riporta un esempio di transazione:









Oltre al valore di Hash (su cui torneremo) e alla Fee, si possono vedere gli dell’avvenuta transazione: uno in input del valore di 9.2677 … BTC e due in output.









Cos’è che, però, rende valida la transazione? Come fa quel codice a rappresentare una somma di denaro?





Per poter rispondere bisogna parlare del metodo con cui sono crittografate le transazioni (metodo con cui vengono generati anche gli UTXO) vale a dire “la crittografia a chiave asimmetrica”.





... [ Torniamo indietro nel tempo: Marco e Davide vogliono mantenere una corrispondenza segreta. Per poterlo fare, stabiliscono che l’alfabeto con cui scriveranno le proprie lettere sarà sfasato di tre unità: alla A corrisponderà la D e così via … (Crittografia di Cesare). Ad una prima occhiata, i messaggi saranno incomprensibili. D’altra parte, con un po’ più d’attenzione basta poco per risalire alla chiave di cifratura. ]





La blockchain usa un metodo a chiave asimmetrica.





Al posto di un’unica chiave (il 3 nell’esempio) ne vengono generate due per utente: una pubblica, ovvero reperibile dall’intera comunità, l’altra privata, che conosce il solo utente. Ciò che è criptato con una delle due è decriptato dall’altra.





Tornando al caso dell’amico di penna, vado a criptare la lettera con una combinazione della mia chiave privata e della sua pubblica (che conosco). Per poterlo decriptare l’amico dovrà usare la combinazione della mia chiave pubblica e della sua privata. In questo modo il messaggio è difficile da decifrare ed in più entrambi abbiamo la sicurezza del mittente e del destinatario.





L’UTXO creato soddisfa queste richieste: le informazioni che sono criptate, sono una combinazione della posizione dell’UTXO tra gli altri output, dell’importo presente e di un messaggio opzionale sulla spendibilità dell’output.





Nel caso del Bitcoin, la transazione assicura che il denaro sia stato inviato da Carlo e da Carlo soltanto, e che venga utilizzato da Franco e da Franco soltanto.









Cos’è l’Hash invece?





A ciascuna transazione è associato un Hash.





L’Hash è una funzione che, ancora una volta, serve a criptare un qualsiasi dato in una stringa alfanumerica a caratteri fissi.





Una buona funzione di Hash dovrà:





  • Identificare univocamente il dato: allo stesso Hash corrisponderà lo stesso dato;
  • Essere deterministico: una piccola modifica del dato, sarà associata ad un Hash completamente diverso;
  • Essere veloce da calcolare;
  • Far sì che una volta codificato, sia impossibile risalire al dato di partenza.




Le informazioni della transazione vengono, quindi, codificate al fine di ottenere un Hash rappresentativo.





E questa cosa è valida anche per il blocco. La funzione di Hash comunemente utilizzata è la SHA-256 (Secure Hash Algorith). La dimensione dell’Hash è fissato a 256 bit. Un hash con questa dimensione è molto grande perché in questo modo si hanno 2256 possibili combinazioni di valori (circa 1077 Hash differenti). 





Per completare la discussione sull’Hash, bisogna aggiungere che esistono due diversi approcci per andare ad organizzare le informazioni che verranno poi “hashate”: 





  • Hash semplice: tutti gli elementi di dati sono disposti linearmente e sottoposti a hashing. Questo approccio viene utilizzato quando si ha un numero fisso di elementi e inoltre, permette di verificare l’integrità del blocco composto e non quella del singolo elemento. 
  • Merke Tree Hash: è una struttura che mette in relazione gli elementi e li raggruppa a coppie. Questo approccio viene utilizzato nel momento in cui si ha un numero differente di elementi.  




Nel caso dell’Hash del blocco, data la variabilità di elementi quali il numero delle transazioni, si usa un approccio di tipo Merkle Tree.









Come si calcola l’Hash di un blocco della catena?





Tralasciando l’approccio con cui vengono combinati gli elementi che definiscono un blocco, il processo di Hash è alla base della sopra-citata “proof-of-work”!





Proviamo ad usare la funzione SHA-256 per criptare la stringa “Ciao!”.





Il risultato è:





6119ce5b522dbbbcf1f5927eeab860165ad131e1c6b76aead9c0088a9ef85dd3





Proviamo a fare lo stesso esercizio ma con la stringa “ciao!”.





Il risultato è:





eefe92e093e75943262d57ef18211898f0b29f2f80c4d0e5bee36a63bdb13c30





La modifica è marginale ma le stringhe sono completamente diverse!





Ora supponiamo che io chieda all’utente (ignorante su quale sia la mappatura dell’hash) di andare a scegliere e poi ad aggiungere alla stringa “ciao!” un numero a caso, in modo da ottenere un hash che inizi per “6119”.





Quanto ci metterebbe? Una giornata? Una settimana? Un mese?





Ecco in cosa consiste la “proof-of-work”.





Andiamo a vedere l’Hash associato al blocco BitCoin 490624:





000000000000000000d4c8b9d5388e42bf084e29546357c63cba8324ed4ec8bf





Ci sono ben 18 zeri prima dei caratteri restanti. E questa cosa è comune ai blocchi successivi:





490625: 000000000000000000bef4fff854aff7676ee65aefb22b7e121c3be59945243e





490626: 00000000000000000054c81d646861f6e2a02030713a30baf19ba26ed13cb427





490627: 0000000000000000007fa4fb17d6c95382fdd9880145337c6b0772639c0b9918









Come nell’esempio fatto, al miner viene richiesto di usare la SHA256 al fine di trovare un Hash che crittografi le informazioni contenute nel blocco e che abbia dei particolari requisiti (in questo caso il numero di zeri iniziali). Quello che fa il miner è andare ad aggiungere alle informazioni del blocco un valore randomico (il Nounce) al fine di trovare un Hash che rispetti entrambi i requisiti.





Il Nounce lo si può vedere un po’ come una chiave: una volta trovata, è una delle informazioni presenti nel blocco creato e gli altri miner avranno il compito di verificare che funzioni correttamente.





Mettiamoci adesso dalla parte del truffatore: supponiamo che io voglia modificare una transazione contenuta nel blocco 2. Eseguo tale operazione sulla blockchain presente nel mio nodo. Automaticamente TUTTI i valori degli Hash successivi al blocco in questione vengono modificati, dato che una delle informazioni del blocco che dev’essere codificata è il valore dell’Hash del blocco precedente (ecco perché CATENA di blocchi); abbiamo visto che una piccola modifica ha delle enormi ripercussioni sull’Hash risultante.





Buona parte della catena, quindi, si invalida: prima che la rete si renda conto dell’incongruenza, il truffatore dovrà risolversi a cascata tutte le “proof-of-work” dei blocchi successivi al fine di ritrovare Hash di blocco validi. Se si pensa al sistema “proof-of-work”, il gioco non varrebbe assolutamente la candela …  









Quali sono gli altri valori che compongono il blocco?





L’impronta digitale del blocco non è altro che l’hash: questo abbiamo visto che è dato dalla combinazione delle informazioni di blocco – a partire dalle transazioni che vi sono contenute, fino ad arrivare all’ora e data in cui il dato blocco è stato minato.





Quello che ci chiediamo è, quindi, cos’altro possiamo trovare?





Anzitutto è presente l’hash del blocco successivo, presenza dovuta a garantire l’ordine e, quindi, la sicurezza della catena.





Oltre alla presenza del “Nounce” e del “TimeStamp” (la data e l’ora in cui il blocco è stato creato), in ciascun blocco è specificata la “Versione” del software utilizzato e la “Weight” – o peso. Queste sono le componenti di cui ci interesseremo.





Per quanto riguarda la “Versione” al momento anticipiamo solo che ciascuna blockchain è in continuo aggiornamento e che, analogamente a ciascun software in commercio, anche in questo caso il protocollo subirà delle più o meno lievi modifiche. Riprenderemo il discorso quando parleremo della Robustezza e delle Forks.





La “Weight”, invece, è associata alla quantità di transazioni che il singolo blocco può contenere e a quelle che effettivamente contiene. Questa è misurata in Unità Weight, la cui unità vale 1 kB.





Il protocollo Bitcoin limita i blocchi a quattro milioni di unità Weight, ovvero limita il numero di transazioni che un miner può includere all’interno di un blocco. Quattro milioni di unità di peso equivalgono a 4 MB di dati il che significa che la dimensione massima per un blocco è ora di 4 MB.





Questo limite è atto per impedire alla blockchain di crescere troppo velocemente. 





Terminiamo questa parte più “tecnica” chiedendoci:









Quali sono i problemi di cui soffrono le Blockchain basate sulla “proof-of-work”?





Indirettamente abbiamo già evidenziato due grandi problemi di cui soffre una blockchain basata sulla “proof-of-work”: il primo è che NON tutti i nodi, come dicevamo, possono diventare miner ma solo quelli dall’elevata potenza computazionale. A tal proposito si sono sviluppati dei veri e propri gruppi di nodi (miner pooling) che mettono a disposizione la propria CPU e la condividono al fine di arrivare alla soluzione nel minor tempo possibile.





Se ci si pensa, tale esclusività fa cadere il concetto di “decentralizzazione”. Nel corso del tempo, a causa dell’intensificazione dei nodi della rete, i problemi proposti sono diventati sempre più complicati; ciò significa che solo pochi miner riescono a risolverli in breve tempo e, quindi, solo pochi gestiranno il registro delle transazioni.













In figura sono riportati i mining-pool di maggioranza (l’immagine risale a novembre 2021). AntPool controlla più di un quarto della creazione dei nuovi blocchi: se i 4 maggioritari prendessero accordi tra di loro, raggiungerebbero il 51% ed avrebbero il controllo assoluto sulla caten …





Il secondo problema sorge proprio dalla difficoltà del “work”: se lo scopo è solo quello di determinare chi potrà aggiungere il prossimo blocco, l’enorme impiego di CPU che tutti i miners si vanno ad accollare non è uno spreco? La risposta a tale domanda è sì. Le risorse che vengono utilizzate hanno un impatto notevole, che bisognerebbe considerare. Attualmente la creazione del blocco richiede 10 minuti ca. Questa soluzione è pensabile per un sistema che gestisce un numero limitato di transazioni; ma dati gli enormi consensi ricevuti nel corso del tempo, se il sistema venisse mantenuto lo stesso cadrebbe anche la scalabilità della catena.





Entrambi i problemi vennero discussi sul forum BitCoin, quando nel 2011 un utente propose come protocollo la “proof-of-stake”.





Prima di parlare, però di “proof-of-stake” investighiamo più approfonditamente le potenzialità della blockchain, andando a discutere un altro tipo di catena; quella basata sulla criptomoneta Ether.









Cos’è la Ethereum Blockchain? In cosa si differenzia dalla BitCoin Blockchain?





A differenza del BBC (Bitcoin blockchain) la BC Ethereum, mette a disposizione dei servizi aggiuntivi, come ad es. i c.d. “Smart Contract”. Il sistema blockchain garantisce sicurezza nelle transazioni digitali, come abbiamo visto, e tale sicurezza può essere applicata non solo da un punto di vista meramente finanziario ma potrebbe coinvolgere un larghissimo bacino d’utenza.





Facciamo degli esempi: Marco è un paziente la cui cartella clinica è contenuta all’interno del DataBase di un ospedale. Marco ha delle allergie che sono opportunamente specificate all’interno di tale cartella. Marco parte e va in vacanza ed avviene un incidente che lo costringe ad essere ricoverato presso un ospedale del luogo. Marco ha perso conoscenza e il medico curante deve scegliere se somministrare o meno un farmaco. Bisogna recuperare l’anagrafica di Marco, andare a vedere l’ospedale il cui DataBase contiene la cartella clinica e sperare che tale ospedale la divulghi (questa scelta dipende dalla politica dell’ospedale in questione). Oppure … blockchain in cui sono presenti le cartelle cliniche dei pazienti e la diffusione avviene su reti il cui accesso è consentito (ad esempio) ai soli medici.





Altro esempio: Gestione dei prodotti presenti presso i magazzini e mandati a ciascun rivenditore. Grazie alla sicurezza e al sistema di validazione della transazione, si riducono al minimo problemi di sovra-conteggio, gli errori nella valutazione della merce, le manomissioni, …





La stessa cosa vale per il bene di consumo prodotto nella data filiera (ad es.) Norvegese – ciascuno step per cui passa il prodotto, viene inserito e validato dalla blockchain ed in questo modo si segue e si ha una certezza della storia del bene in questione.





Altro esempio: il mondo del gaming/arte/musica … : NFT – not fungible Token. Sono dei codici unici al mondo che possono essere scambiati tra utenti on line. Nel gaming, posso creare un mondo immaginario ed inserirlo in una blockchain (ex. Decentraland). L’utente che gioca e che trova un collezionabile potrà possederlo ed affermare a pieno titolo di averlo soltanto lui!





Nel caso dell’arte e della musica, vale lo stesso: se si pensa al token come ad una funzione che, attraverso un sistema di criptaggio e decriptazione, è associata univocamente ad una musica/ un quadro/ un’opera d’arte, la compravendita di tali beni potrà godere della sicurezza di un sistema blockchain.





In tutti questi esempi il filo conduttore è lo stesso: si sceglie la blockchain in quanto registro immutabile e sicuro. Tutte queste “certificazioni” possono essere ottenute tramite i cosiddetti “Smart Contract”. Parte spontanea la domanda:









Cos’è uno Smart Contract?





Sono servizi: programmi (software) archiviati sulla blockchain che vengono eseguiti in base a delle specifiche richieste.





Lo Smart Contract è, più in particolare un algoritmo che si caratterizza per la presenza di determinate caratteristiche: 1) una serie di promesse che si declinano in un insieme di clausole; 2) scritto in forma digitale, attraverso un codice che incorpora dette clausole; 3) formalizzato da un protocollo che stabilisce come le parti debbano processare le informazioni qualitative e quantitative del contratto, permettendo alle stesse di soddisfare i termini concordati. L'algoritmo prevede un insieme di regole o "triggers" (condizioni logiche e sequenze temporali) che modulano, in modo dinamico, l'esecuzione dell'accordo.





L'idea di fondo è che ogni relazione fra le parti possa esser definita attraverso un algoritmo in grado di creare contratti potenzialmente senza errori, ma anche "nuove istruzioni" (vengono riportati come esempi, l'applicazione pratica rispetto le stable-coin per la cui emissione lo smart contract può automatizzare il processo di creazione, distruzione, movimentazione tramite apposite chiavi private, e l'esempio del token digitale emesso a fronte di una unità di moneta fiat tenuta presso il soggetto vigilato).





Supponiamo che si voglia svolgere un’asta su una blockchain. Ci servirà un banditore che accetti o rifiuti in base alle credenziali l’offerta fatta dall’interessato: tale offerta, ad esempio, dovrà provenire da un utente maggiorenne e dovrà essere superiore a quella precedente o al minimo stabilito. Se chiamo (o scrivo) un apposito programma, tutto questo potrà essere digitalizzato in pochissime righe di codice.





Ethereum (il primo ad introdurre gli Smart Contract) prevede la scrittura in Solidity (linguaggio di programmazione ad alto livello simile a Java) e i programmi vengono girati su un software apposito o macchina virtuale Ethereum (EVM).










E tutto questo è completamente gratuito?





No. Si paga ciò che si deve pagare. Sia nel caso delle transazioni (come abbiamo visto) che in quello degli Smart Contract, a ciascuna richiesta viene allegata una “fee” – dall’inglese “tassa”, che serve a coprire i costi macchina dell’operazione.





Nel caso degli Smart Contract, la “fee” viene stimata in punti “gas”, che sono rapportati ai giri macchina necessari per l’esecuzione della richiesta, i quali vengono a loro volta pagati in “wei” – sottomultiplo dell’Ether. Mentre i punti gas sono tabulati e non soggetti alle leggi di mercato, il “wei” (come lo stesso Ether) ha la propria volatilità ed è per questo che le due unità di misura sono differenziate.





Se io da utente volessi effettuare una transazione o richiedere l’attivazione di uno Smart Contract, dovrò allegare alla richiesta una sorta di pedaggio: questo sarà speso per coprire i costi della “fee”.





Attenzione p

 Possiamo aiutarti?
Chat on WhatsApp