◦ Interagire con la Blockchain
◦ Blockchain – criptovalute – Bitcoin
◦ La Blockchain di Bitcoin
◦ La Blockchain
◦ Componenti della Blockchain
◦ Blockchain e Distributed Ledger Technology
◦ Il protocollo Bitcoin
◦ Bitcoin (il protocollo) e bitcoin (la valuta)
◦ Il Client Bitcoin Core
◦ Client e portafoglio
◦ Perché bisogna capire le transazioni?
◦ Start! Download del Client Bitcoin
◦ Download del Client Electrum
◦ Sincronizzare la Blockchain
◦ Pruned Mode e nodi SPV
◦ Configurazione Client Bitcoin
◦ Il Client Bitcoin
◦ Chiavi e indirizzi
◦ Indirizzi da utilizzare
◦ Il Mempool
◦ Gli UTXO
◦ Creiamo la nuova transazione
◦ Transazione in formato HEX
◦ Blocco 1: Dati della Transazione
◦ Blocco 2: input della transazione "vin": [
◦ Blocco 3: output della transazione "vout": [
◦ Transaction Scripts e Script Language
◦ Firma e invio della transazione
◦ La nostra prima transazione
◦ Analisi ScriptSign
◦ Transazione completata
◦ Commissioni
◦ Esploriamo il blocco
Blockchain: Analisi Introduttiva ai meccanismi di sicurezza nelle nuove reti ...Francesco Lacerenza
Con le seguenti diapositive si vogliono evidenziare i metodi formali di sicurezza rispettati dalla tecnologia blockchain partendo dallo studio dei meccanismi iimplementati che li rendono tali.
Vengono poi elencate le macro scelte di progettazione d'una blockchain assieme ai difetti riscontrati nelle blockchain pubbliche.
Nell'ultima parte sono poi introdotti in linea teorica alcuni vettori d'attacco utilizzati in passato.
Blockchain - crittomonete, Bitcoin e altre applicazioniDavide Carboni
Un misterioso scienziato inventa nel 2008 un protocollo informatico che consente per la prima volta di realizzare un sistema di pagamento decentralizzato, sicuro e autonomo in quanto svincolato da ogni autorità di controllo. Nel 2009 nasce il Bitcoin definito da alcuni non come il denaro di Internet ma piuttosto come la Internet del denaro. In queste slide ripercorriamo rapidamente la storia e le caratteristiche di questa tecnologia emergente.
Capire le potenzialità della Blockchain per comprendere come sfruttare l'opportunità di un mondo sempre più decentralizzato. Un'introduzione sui concetti più importanti alla base di questa tecnologia.
La presentazione di Stefano Pepe, founder e CEO di Bitquota, sulla storia della moneta elettronica Bitcoin - WEF è Distruzione creativa (21 marzo 2014)
Blockchain: Analisi Introduttiva ai meccanismi di sicurezza nelle nuove reti ...Francesco Lacerenza
Con le seguenti diapositive si vogliono evidenziare i metodi formali di sicurezza rispettati dalla tecnologia blockchain partendo dallo studio dei meccanismi iimplementati che li rendono tali.
Vengono poi elencate le macro scelte di progettazione d'una blockchain assieme ai difetti riscontrati nelle blockchain pubbliche.
Nell'ultima parte sono poi introdotti in linea teorica alcuni vettori d'attacco utilizzati in passato.
Blockchain - crittomonete, Bitcoin e altre applicazioniDavide Carboni
Un misterioso scienziato inventa nel 2008 un protocollo informatico che consente per la prima volta di realizzare un sistema di pagamento decentralizzato, sicuro e autonomo in quanto svincolato da ogni autorità di controllo. Nel 2009 nasce il Bitcoin definito da alcuni non come il denaro di Internet ma piuttosto come la Internet del denaro. In queste slide ripercorriamo rapidamente la storia e le caratteristiche di questa tecnologia emergente.
Capire le potenzialità della Blockchain per comprendere come sfruttare l'opportunità di un mondo sempre più decentralizzato. Un'introduzione sui concetti più importanti alla base di questa tecnologia.
La presentazione di Stefano Pepe, founder e CEO di Bitquota, sulla storia della moneta elettronica Bitcoin - WEF è Distruzione creativa (21 marzo 2014)
Bitcoin, cripto-valute e altre applicazioni.
Descrizione bottom-up della tecnologia blockchain, partendo dal caso emblematico di Bitcoin e generalizzando fino agli Smart Contracts
Blockchain, oro e tulipani. Rischi e opportunità per il Non ProfitEmanuele Cisbani
Che cosa è indispensabile sapere della Blockchain se sei una non profit? Quali possono essere i rischi e quali le opportunità?
Le criptovalute fanno parlare di loro per le prospettive rivoluzionarie che suggeriscono: davvero hanno la potenzialità di trasformare radicalmente il sistema economico o sono una bolla speculativa, un bene rifugio?
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4Stefano Saladino
Lo scopo dell’intervento è di far conoscere la nuova tecnologia blockchain, le sue caratteristiche, i suoi campi di applicazione e il suo legame con il Bitcoin.
Presentazione del mining Bitcoin - Vincenzo Aguì, Network Security Consultant - Bitcoin Foundation Italia.
Talk presentato all'evento organizzato da TreataBit e Kabminer "Bitcoin per privati e aziende". Per approfondimenti sull'evento http://www.treatabit.com/article/bitcoin
Davide Gessa - La trasparenza ai tempi della blockchainSardegna Ricerche
La presentazione di Davide Gessa durante l'evento "La nuova rivoluzione tecnologica decentralizzata", organizzato da Sardegna Ricerche attraverso il suo Sportello Startup. L'evento si è svolto a Cagliari, nella Manifattura Tabacchi, il 27 giugno 2017.
Bolle, bias cognitivi, denaro, valore, consenso distribuito. Gli aspetti economici e psicologici, la tecnologia e la governance della prima criptovaluta della Storia, in un'esposizione pensata per tutti.
(in viaggio dalla lex mercatoria alla lex cryptographia)
Presentazione 26.6.2014 - Montecitorio: 1° public hearing sulle criptomonete - #nocashday4
Avv. Giulia Aranguena (ADLP Studio Legale)
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista Purple Network
La tecnologia Blockchain sta rivoluzionando l'approccio tecnologico di tantissime industry. Progettata nel 2008 e sviluppata nel 2009 dall'utopico Satoshi Namamoto, si distingue perché è completamente tracciabile, a prova di manomissione e immutabile. Scopriamo insieme qualcosa in più sulla Blockchain e sui percorsi di transazione e storaggio dei BitCoin.
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...Sardegna Ricerche
La presentazione di Stefano Capaccioli durante l'evento "La nuova rivoluzione tecnologica decentralizzata", organizzato da Sardegna Ricerche attraverso il suo Sportello Startup. L'evento si è svolto a Cagliari, nella Manifattura Tabacchi, il 27 giugno 2017.
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...Danilo Longoni
La tecnologia Blockchain garantisce una maggiore sicurezza nello scambio di informazioni e dati sensibili attraverso i registri distribuiti, abilitando nuovi servizi interoperabili: un abilitatore di trasparenza, che ribalta il paradigma secondo il quale al controllo fisico delle informazioni corrisponde una maggiore sicurezza dei dati.
Infatti stiamo assistendo alla sua crescente diffusione in ambito finanziario ma non solo: basti pensare alla filera agroalimentare, al settore dei trasporti e della ristorazione, alle compravendite immobiliari.
Il workshop si pone l'obiettivo di approfondire gli aspetti legati alla security, con particolare attenzione al ruolo degli audit nel quadro dei processi di gestione e controllo".
A Bit 2018 abbiamo parlato dell'evoluzione di una tecnologia che promette di cambiare il modo in cui viaggiamo, permettendo una migliore gestione dell'identità e delle transazioni
Bitcoin, cripto-valute e altre applicazioni.
Descrizione bottom-up della tecnologia blockchain, partendo dal caso emblematico di Bitcoin e generalizzando fino agli Smart Contracts
Blockchain, oro e tulipani. Rischi e opportunità per il Non ProfitEmanuele Cisbani
Che cosa è indispensabile sapere della Blockchain se sei una non profit? Quali possono essere i rischi e quali le opportunità?
Le criptovalute fanno parlare di loro per le prospettive rivoluzionarie che suggeriscono: davvero hanno la potenzialità di trasformare radicalmente il sistema economico o sono una bolla speculativa, un bene rifugio?
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4Stefano Saladino
Lo scopo dell’intervento è di far conoscere la nuova tecnologia blockchain, le sue caratteristiche, i suoi campi di applicazione e il suo legame con il Bitcoin.
Presentazione del mining Bitcoin - Vincenzo Aguì, Network Security Consultant - Bitcoin Foundation Italia.
Talk presentato all'evento organizzato da TreataBit e Kabminer "Bitcoin per privati e aziende". Per approfondimenti sull'evento http://www.treatabit.com/article/bitcoin
Davide Gessa - La trasparenza ai tempi della blockchainSardegna Ricerche
La presentazione di Davide Gessa durante l'evento "La nuova rivoluzione tecnologica decentralizzata", organizzato da Sardegna Ricerche attraverso il suo Sportello Startup. L'evento si è svolto a Cagliari, nella Manifattura Tabacchi, il 27 giugno 2017.
Bolle, bias cognitivi, denaro, valore, consenso distribuito. Gli aspetti economici e psicologici, la tecnologia e la governance della prima criptovaluta della Storia, in un'esposizione pensata per tutti.
(in viaggio dalla lex mercatoria alla lex cryptographia)
Presentazione 26.6.2014 - Montecitorio: 1° public hearing sulle criptomonete - #nocashday4
Avv. Giulia Aranguena (ADLP Studio Legale)
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista Purple Network
La tecnologia Blockchain sta rivoluzionando l'approccio tecnologico di tantissime industry. Progettata nel 2008 e sviluppata nel 2009 dall'utopico Satoshi Namamoto, si distingue perché è completamente tracciabile, a prova di manomissione e immutabile. Scopriamo insieme qualcosa in più sulla Blockchain e sui percorsi di transazione e storaggio dei BitCoin.
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...Sardegna Ricerche
La presentazione di Stefano Capaccioli durante l'evento "La nuova rivoluzione tecnologica decentralizzata", organizzato da Sardegna Ricerche attraverso il suo Sportello Startup. L'evento si è svolto a Cagliari, nella Manifattura Tabacchi, il 27 giugno 2017.
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...Danilo Longoni
La tecnologia Blockchain garantisce una maggiore sicurezza nello scambio di informazioni e dati sensibili attraverso i registri distribuiti, abilitando nuovi servizi interoperabili: un abilitatore di trasparenza, che ribalta il paradigma secondo il quale al controllo fisico delle informazioni corrisponde una maggiore sicurezza dei dati.
Infatti stiamo assistendo alla sua crescente diffusione in ambito finanziario ma non solo: basti pensare alla filera agroalimentare, al settore dei trasporti e della ristorazione, alle compravendite immobiliari.
Il workshop si pone l'obiettivo di approfondire gli aspetti legati alla security, con particolare attenzione al ruolo degli audit nel quadro dei processi di gestione e controllo".
A Bit 2018 abbiamo parlato dell'evoluzione di una tecnologia che promette di cambiare il modo in cui viaggiamo, permettendo una migliore gestione dell'identità e delle transazioni
Un algoritmo di consenso è un meccanismo che permette a utenti o dispositivi di coordinarsi in un contesto distribuito. Deve garantire che tutti gli agenti nel sistema possano concordare su una singola fonte di verità, anche se alcuni agenti falliscono. In altre parole, il sistema deve essere fault-tolerant (vedi anche: La Byzantine Fault Tolerance Spiegata).
In una configurazione centralizzata, una singola entità ha potere sul sistema. In gran parte dei casi, possono apportare modifiche come vogliono – non esiste un complesso sistema di governance per raggiungere il consenso tra diversi amministratori.
In una configurazione decentralizzata, invece, è tutta un'altra storia. Supponiamo di avere un database distribuito – come facciamo a raggiungere un accordo su quali voci debbano essere aggiunte?
Superare questa sfida in un ambiente in cui sconosciuti non si fidano gli uni degli altri è stato forse lo sviluppo più cruciale per aprire la strada alle blockchain. In questo articolo, andremo a illustrare come gli algoritmi di consenso sono vitali per il funzionamento delle criptovalute e dei registri distribuiti.
Fonte: https://academy.binance.com/it/articles/what-is-a-blockchain-consensus-algorithm
Talk organizzato da The Hive e DevMarche sulle blockchain. Relatore Gabriele Guizzardi di Brain & Bytes. Panoramica sulla struttura delle blockchain e su come possono essere utilizzate.
Blockchain dove il free software incontra la finanza - novembre 2021Alfredo Di Maria
La sicurezza attraverso il segreto è il livello più semplice da applicare alle informazioni, ma anche il più debole. Avere l'esclusività di una cosa spesso la rende più preziosa.
In particolare la blockchain rende il database uno strumento aperto al pubblico e condiviso, obbliga il software ad essere almeno open source invece che chiuso. La blockchain riesce a dare valore, anche economico, a pratiche considerate spesso controproducenti per il business fuori da questo contesto.
Come funzionano le blockchain, i ledger, i meccanismi di consenso? Cosa è cambiato nella finanza? Cosa si può costruire con questi strumenti?
https://www.youtube.com/watch?v=MGVknyHXzUg&t=14s&ab_channel=TheCommunitiesBay
BlockChain e Token Digitali - Webinar gratuitoNinja Academy
Come le cryptovalute stanno rivoluzionando la raccolta fondi: https://ininja.it/2FhEyiN
Segui un'anteprima del webinar e iscriviti gratis per sbloccare il video completo!
Raggiungi i docenti Alessandro Palombo e Marcello Mari. Con loro imparerai a:
- Comprendere la logica di funzionamento della blockchain
- Valutare la ICO, ovvero la vendita di token digitali, per finanziare un progetto
- Conoscere le basi per valutare se sia opportuno o meno lanciare un progetto sulla Blockchain
- Conoscere le basi per lanciare una ICO
Workshop for the University of International Studies of Rome: banks and financial intermediaries in the crypto-asset industry: impacts on the real economy
Capire come funziona la tecnologia non è strettamente necessario; è indubbio, però, che la blockchain va sempre più affermandosi. E che cambierà il modo di operare di fornitori, clienti e concorrenti. Insomma, che vi piaccia o no, cambierà anche il vostro modo di fare business.
Meglio dunque giudicare con cognizione di causa.
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...eraser Juan José Calderón
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessario?
Blockchain Technology and Decentralized Governance: Is the State Still Necessary?. Marcela Atzori
2. Interagire con la Blockchain
◦ La tecnologia blockchain segna un cambio netto nel modo in cui le applicazioni digitali vengono pensate e costruite,
permettendo di modificare radicalmente la società e i business di oggi e di creare soluzioni fino a pochi anni fa ritenute
impensabili.
Tuttavia, la blockchain è ancora considerata da molti come una tecnologia «mistica» e non immediatamente utilizzabile. Spesso,
i concetti di blockchain, criptovalute e Bitcoin vengono confusi e utilizzati in modo intercambiabile.
◦ Partendo con l’introduzione dei concetti necessari, per una reale comprensione della tecnologia seguiremo passo passo un
caso pratico con il quale andremo a registrare un nostro messaggio sulla blockchain più famosa, quella di Bitcoin.
◦ Transazioni, nodi e blocchi sono elementi fondamentali di una blockchain. Li esamineremo dall’interno, creando un nostro nodo,
inviando una transazione e esaminando tutti gli elementi che costituiscono i blocchi.
15/04/2020
3. Blockchain – criptovalute - Bitcoin
Alcune persone fanno riferimento a Bitcoin parlando della tecnologia blockchain, mentre altri menzionano la blockchain parlando delle
criptovalute in generale. Tuttavia, questi termini non sono intercambiabili: riguardano due concetti connessi ma distinti. Quindi, è
importante comprendere le differenze, e per farlo è necessario esaminare le basi della tecnologia blockchain, delle criptovalute e di
Bitcoin.
◦ La tecnologia blockchain può essere applicata ad altre attività e non richiede necessariamente operazioni finanziarie, ma, nel contesto
delle criptovalute, è responsabile per il mantenimento di un registro permanente di tutte le transazioni confermate.
◦ una criptovaluta è una forma di moneta digitale usata come mezzo di scambio all’interno di un network distribuito di utenti. A differenza
dei sistemi bancari tradizionali, queste transazioni vengono monitorate attraverso un registro pubblico digitale (la blockchain) e possono
avvenire direttamente tra i partecipanti (peer-to-peer) senza necessità di intermediari.
◦ Bitcoin è la prima criptovaluta creata. Pur essendo il più conosciuto, Bitcoin non è da solo. Esistono molte altre criptovalute, ciascuna con
particolari caratteristiche e meccanismi. Inoltre, non tutte le criptovalute hanno la propria blockchain. Alcune sono state create sopra
una blockchain già esistente, mentre altre sono state create da zero.
15/04/2020
4. La Blockchain di Bitcoin
◦ Potresti essere sorpreso di apprendere che esiste più di una blockchain Bitcoin. La blockchain di Bitcoin "principale", quella
creata da Satoshi Nakamoto il 3 gennaio 2009 è chiamata mainnet. Esistono altre blockchain di bitcoin che vengono utilizzate a
scopo di test: la testnet e la regtest.
◦ Per il nostro lavoro utilizzeremo la Testnet. Testnet è il nome della blockchain, della rete e della valuta utilizzati a scopo di test.
Testnet è una rete P2P live con funzionalità complete, con portafogli, bitcoin di test (monete testnet), mining e tutte le altre
funzionalità di mainnet. Ci sono davvero solo due differenze: le monete testnet sono inutili e la difficoltà di estrazione deve essere
abbastanza bassa da permettere a chiunque di estrarre le monete in modo relativamente semplice (mantenendole inutili).
L'attuale testnet è chiamato testnet3, la terza iterazione di testnet, riavviata a febbraio 2011 per ripristinare la difficoltà dal
precedente testnet. Tieni presente che testnet3 è una blockchain di grandi dimensioni, pesa oltre 20 GB. Ci vuole circa un
giorno per sincronizzare completamente la blockchain. Non è proprio come mainnet, ma nemmeno così "leggera". Un buon
modo per eseguire un nodo testnet è attraverso un'immagine caricata su macchina virtuale (ad es. VirtualBox, Docker, Cloud
Server, ecc.) dedicata a tale scopo.
15/04/2020
5. Cosa andremo a fare
◦ Obiettivo finale sarà registrare un nostro messaggio sulla Blockchain utilizzata. Per poter far questo occorrerà effettuare una
transazione Bitcoin, in cui aggiungere dei dati da salvare, come se fosse una sorta di causale del pagamento. Come in una
transazione reale ci saranno un mittente ed un destinatario e andremo, quindi, per prima cosa ad installare 2 Portafogli (o
Wallet).
◦ Impareremo ad utilizzare Bitcoin Core, l'implementazione di riferimento di bitcoin.
◦ Reperiremo dei fondi per il portafoglio mittente e genereremo la nostra prima transazione.
◦ Analizzeremo le componenti e gli effetti sulla Blockchain di una transazione Bitcoin.
◦ Registreremo il nostro messaggio sulla Blockchain.
Cominciamo però con alcuni principi di teoria.
15/04/2020
6. La Blockchain
◦ La blockchain è un protocollo di comunicazione, che identifica una tecnologia basata sulla logica del database distribuito (un
database in cui i dati non sono memorizzati su un solo computer ma su più macchine collegate tra loro, chiamate nodi).
◦ La blockchain è, letteralmente, una catena di blocchi che archiviano un insieme di transazioni validate e correlate da
un Marcatore Temporale (Timestamp). Ogni blocco include l’hash (una funzione algoritmica informatica non invertibile che
mappa una stringa di lunghezza arbitraria in una stringa di lunghezza predefinita) che identifica il blocco in modo univoco e che
permette il collegamento con il blocco precedente.
◦ La validazione dei blocchi è affidata a un meccanismo di consenso, distribuito su tutti i nodi della rete nel caso delle blockchain
permissionless o pubbliche o su tutti i nodi i nodi che sono autorizzati a partecipare al processo di validazione delle transazioni
da includere nel registro nel caso delle blockchain permissioned o private. Le principali caratteristiche delle tecnologie
blockchain sono l’immutabilità del registro, la trasparenza, la tracciabilità delle transazioni e la sicurezza basata su tecniche
crittografiche.
15/04/2020
7. Componenti della Blockchain
◦ I componenti basilari della blockchain:
◦ Nodi: sono i partecipanti alla blockchain e sono costituiti fisicamente dai server di ciascun partecipante.
◦ Transazione: è costituita dai dati che rappresentano i valori oggetto di “scambio” e che necessitano di essere verificati, approvati
e poi archiviati.
◦ Blocco: è rappresentato dal raggruppamento di un insieme di transazioni che sono unite per essere verificate, approvate e poi
archiviate dai partecipanti alla blockchain.
◦ Ledger: è il registro pubblico nel quale vengono “annotate” con la massima trasparenza e in modo immutabile tutte le
transazioni effettuate in modo ordinato e sequenziale. Il Ledger è costituito dall’insieme dei blocchi che sono tra loro incatenati
tramite una funzione di crittografia e grazie all’uso di hash.
◦ Hash: è una operazione (Non Invertibile) che permette di mappare una stringa di testo e/o numerica di lunghezza variabile in
una stringa unica ed univoca di lunghezza determinata. L’Hash identifica in modo univoco e sicuro ciascun blocco. Un hash non
deve permettere di risalire al testo che lo ha generato.
15/04/2020
8. ◦ La struttura di dati della blockchain è un elenco ordinato,
con backlink di blocchi di transazioni. I blocchi sono
collegati "indietro", ciascuno riferito al blocco
precedente nella catena. La blockchain è spesso
visualizzata come una pila verticale, con blocchi
sovrapposti uno sopra l'altro e il primo blocco che funge
da base della pila. La visualizzazione di blocchi
sovrapposti l'uno sull'altro determina l'uso di termini
come "altezza" per indicare la distanza dal primo blocco
e "cima" o "punta" per fare riferimento al blocco
aggiunto più di recente. Ogni blocco all'interno della
blockchain è identificato da un hash, generato
utilizzando l'algoritmo di hash crittografico SHA256
sull'intestazione del blocco. Ogni blocco fa anche
riferimento a un blocco precedente, noto come blocco
padre, attraverso il campo " previous block hash "
nell'intestazione del blocco. In altre parole, ogni blocco
contiene l'hash del suo genitore all'interno della propria
intestazione
15/04/2020
9. Blockchain e Distributed Ledger Technology
◦ La blockchain può essere considerata una tecnologia che appartiene alla categoria delle tecnologie Distributed Ledger, archivi
distribuiti. Le Distributed Ledger Technology o DLT possono essere definite come un insieme di sistemi caratterizzati dal fatto di
fare riferimento a un registro distribuito, governato in modo da consentire l’accesso e la possibilità di effettuare modifiche da
parte di più nodi di una rete.
◦ Si può dire che le blockchain sono delle Distributed Ledger technology caratterizzate da un registrato impostato e strutturato in
modo da gestire le transazioni all’interno di una Catena di Blocchi. Dal punto di vista delle “regole di gestione”, ciascun blocco si
“aggiunge” alla catena sulla base di un processo basato sul Consenso distribuito su tutti i nodi della rete, ovvero con la
partecipazione di tutti i nodi che vengono chiamati a contribuire alla validazione delle transazioni presenti in ciascun
blocco (come vedremo successivamente) e alla loro “inclusione” nel registro.
15/04/2020
10. Il protocollo Bitcoin
◦ A causa dei media, che hanno utilizzato i termini "blockchain" e "criptovalute" in maniera inappropriata, intercambiandoli tra loro, si è creata
parecchia confusione nella testa delle persone che si affacciano per la prima volta a questo mondo. La blockchain è la tecnologia che sta alla base
delle criptovalute, mentre le criptovalute sono applicazioni "costruite su piattaforme blockchain".
◦ Le criptovalute possono utilizzare le blockchain in modi differenti. Bitcoin per esempio utilizza la blockchain per consentire transazioni peer-to-peer
(da persona a persona) in completa autonomia, senza bisogno di intermediari. Quello che oggi è possibile fare grazie a Bitcoin è eccezionale, ma è
bene sapere che le blockchain hanno potenzialità e implicazioni che vanno ben oltre la gestione di transazioni finanziarie.
◦ Bitcoin è l’insieme di concetti e tecnologie alla base di un ecosistema di denaro digitale. Le unità di valuta chiamate bitcoin vengono utilizzate per
archiviare e trasmettere valore tra i partecipanti alla rete Bitcoin. Gli utenti comunicano tra loro utilizzando il protocollo Bitcoin principalmente via
Internet, sebbene possano essere utilizzate anche altre reti di trasporto. Lo stack del protocollo bitcoin, disponibile come software open source,
può essere eseguito su una vasta gamma di dispositivi informatici, inclusi laptop e smartphone, rendendo la tecnologia facilmente accessibile.
◦ Bitcoin è un sistema distribuito peer-to-peer. Pertanto, non esiste un server "centrale" o un punto di controllo. I bitcoin vengono creati attraverso un
processo chiamato "mining", che prevede la competizione per trovare soluzioni a un problema matematico durante l'elaborazione delle transazioni.
Qualsiasi partecipante alla rete bitcoin (ovvero chiunque utilizzi un dispositivo che esegue lo stack del protocollo bitcoin completo) può operare
come minatore, utilizzando la potenza di elaborazione del proprio computer per verificare e registrare le transazioni
15/04/2020
11. Bitcoin (il protocollo) e bitcoin (la valuta)
◦ A differenza delle valute tradizionali, i bitcoin sono completamente virtuali. Non ci sono monete fisiche e neanche monete digitali. Le
monete sono implicite nelle transazioni che trasferiscono valore dal mittente al destinatario. Gli utenti di Bitcoin possiedono chiavi che
consentono loro di dimostrare la proprietà di bitcoin nella rete. Con queste chiavi possono firmare transazioni per sbloccare il valore e
spenderlo trasferendolo a un nuovo proprietario. Le chiavi vengono spesso archiviate in un portafoglio digitale sul computer o sullo
smartphone di ciascun utente. Il possesso della chiave che può firmare una transazione è l'unico prerequisito per spendere bitcoin,
mettendo il controllo interamente nelle mani di ogni utente.
◦ La valuta bitcoin è davvero solo la prima applicazione di questo sistema innovativo. Bitcoin rappresenta il culmine di decenni di ricerca
nella crittografia e nei sistemi distribuiti e include quattro innovazioni principali riunite in una combinazione unica e potente:
◦ Una rete peer-to-peer decentralizzata (il protocollo Bitcoin);
◦ Un libro mastro delle transazioni pubbliche (la blockchain);
◦ Un insieme di regole per la convalida delle transazioni indipendenti e l'emissione di valuta (regole di consenso);
◦ Un meccanismo per raggiungere il consenso decentralizzato globale sulla blockchain (algoritmo Proof-of-Work).
15/04/2020
12. Il Client Bitcoin Core
◦ Bitcoin è un protocollo a cui è possibile accedere utilizzando un'applicazione client che “parla” il protocollo. Un "portafoglio bitcoin"
(Wallet) è l'interfaccia utente più comune al sistema Bitcoin, proprio come un browser Web è l'interfaccia utente più comune per il
protocollo HTTP. Esistono molte implementazioni e marche di portafogli, proprio come ci sono molte marche di browser Web (ad
esempio Chrome, Safari, Firefox e Internet Explorer. I Wallet variano in qualità, prestazioni, sicurezza, privacy e affidabilità. Esiste anche
un'implementazione di riferimento del protocollo Bitcoin che include un portafoglio, noto come "Satoshi Client" o "Bitcoin Core", che
deriva dalla realizzazione originale scritta da Satoshi Nakamoto.
◦ Come abbiamo visto per effettuare transazioni nella rete Bitcoin, ogni partecipante è tenuto a scaricare un software specifico per
interagire con altri partecipanti alla rete. Questo è ciò che definiamo client. I client Bitcoin funzionano in modo simile ai client Browser, ma
c'è una differenza fondamentale: invece di accedere ai dati da un server centralizzato, il client Bitcoin interagisce con altri membri della
rete per procurarsi e convalidare l'integrità dei dati, che può essere facilmente determinata poiché ogni partecipante di questa rete sta
essenzialmente archiviando lo stesso database. Questo è un aspetto chiave della rete Bitcoin, in quanto il suo decentramento garantisce
proprietà di sicurezza uniche all'integrità dei dati scambiati tra i partecipanti alla rete o nodi. I nodi, per definizione, sono i singoli
partecipanti di una rete
15/04/2020
13. Client e portafoglio
◦ Quando ci riferiamo ai nodi della rete Bitcoin, stiamo parlando delle persone che hanno scaricato e che eseguono un client
Bitcoin come quelli descritti in precedenza. Sebbene sia i client a nodo completo sia i client leggeri possano fungere da
portafoglio di un utente, la definizione di un portafoglio Bitcoin non è la stessa di un client. Tecnicamente, un portafoglio è la
raccolta di dati necessari per inviare e ricevere bitcoin. Questi dati includono un indirizzo pubblico e una password privata. Infatti,
poiché Bitcoin è stato creato per pagamenti peer-to-peer, tutti gli utenti della rete necessitano di un'identità pubblica che
consenta loro di identificare le parti di ogni transazione. Come un conto bancario, questo indirizzo deve essere unico e gli utenti
devono poterlo condividere pubblicamente. Allo stesso tempo, gli utenti devono anche essere in grado di autorizzare le
transazioni con un identificativo privato univoco che dimostri la proprietà dei fondi (come il PIN della propria carta).
◦ Un malinteso comune sul Bitcoin è che i portafogli bitcoin contengono bitcoin. In effetti, il portafoglio contiene solo chiavi. Le
"monete" sono registrate nella blockchain sulla rete Bitcoin. Gli utenti controllano le monete sulla rete firmando le transazioni
con le chiavi nei loro portafogli. In un certo senso, un portafoglio bitcoin è un portachiavi.
15/04/2020
14. Perché bisogna capire le transazioni?
◦ Il modello di transazione utilizzato da una blockchain ha la funzione di dimostrare la proprietà sui token. Si tratta di modelli per
tracciare lo stato del database. Bitcoin si basa sullo schema UTXO (Unspent Transaction Output). Nel protocollo Bitcoin il
proprietario dei token, in realtà, non possiede direttamente i token. Possiede l’output per un numero specifico di token, che
può essere poi firmato come input per un altro proprietario che controllerà un nuovo output (approfondiremo in seguito
questo tema).
◦ Secondo questo modello ogni wallet può avere una quantità illimitata di indirizzi e ogni transazione ne crea uno nuovo. Ecco il
vantaggio principale, che consideriamo una delle proprietà chiave che qualsiasi azienda che utilizza la blockchain terrà ben
presente: la scalabilità. Non stiamo parlando della scalabilità della blockchain stessa, che è spesso un tema molto dibattuto tra
gli entusiasti della crittografia e fondamentalmente si riduce alla metrica TPS (transazioni al secondo) di una blockchain.
◦ La scalabilità a cui ci riferiamo si applica a livello di wallet. Con il modello UTXO, più transazioni possono essere firmate ed
elaborate in parallelo. Questo è possibile semplicemente visto che un singolo wallet può creare tutti gli indirizzi necessari. Tutti
gli indirizzi possono lavorare in parallelo senza causare congestione o confusione. Di conseguenza, si ottiene una scalabilità
molto più elevata per le applicazioni .
15/04/2020
15. Start! Download del Client Bitcoin
◦ Installazione del Client Bitcoin, comandi da eseguire (guida Linux):
curl -O https://bitcoin.org/bin/bitcoin-core-0.19.0.1/bitcoin-0.19.0.1-x86_64-linux-gnu.tar.gz
wget https://bitcoincore.org/bin/bitcoin-core-0.19.0.1/SHA256SUMS.asc
wget https://bitcoin.org/laanwj-releases.asc
gpg --import laanwj-releases.asc
sha256sum --check SHA256SUMS.asc --ignore-missing
tar -xvf bitcoin-0.19.0.1-x86_64-linux-gnu.tar.gz
sudo mkdir -p /usr/local/bin
sudo cp bitcoin-0.19.0.1/bin/bitcoin* /usr/local/bin/.
bitcoind –version
Per installazione su sistema Windows è possibile seguire la procedura al seguente link
https://bitcoin.org/en/full-node#windows-instructions
15/04/2020
16. Download del Client Electrum
◦ Installazione del Client Electrum, comandi da eseguire (guida Linux):
wget https://download.electrum.org/3.2.2/Electrum-3.2.2.tar.gz
sudo apt-get install python3-setuptools python3-pyqt5 python3-pip
sudo pip3 install Electrum-3.2.2.tar.gz
Per installazione su Windows https://electrum.org/#home
15/04/2020
17. Sincronizzare la Blockchain
◦ Terminato il download dei 2 Client, questi dovranno sincronizzarsi con il network. La blockchain è un database di transazioni
duplicato da tutti i computer della rete. In pratica, per utilizzare correttamente i bitcoin dobbiamo sincronizzare una quantità
voluminosa (> 200 GB) di dati per consentire l'invio o la ricezione di bitcoin. Tuttavia, esistono due soluzioni alternative per
superare questa situazione:
Abilitazione della modalità “Pruned” per un nodo completo come Bitcoin Core.
Utilizzare un client leggero (SPV) come Electrum che recupera le informazioni sulla blockchain dai server Electrum (invece di
tenere una copia in locale).
15/04/2020
18. Pruned Mode e nodi SPV
◦ L'enorme svantaggio di eseguire un portafoglio core è il suo spazio occupato su disco, basti pensare che l'attuale dimensione
della blockchain di Bitcoin è superiore a 200 GB. Al fine di ridurre questi requisiti di archiviazione, esiste una funzione chiamata
modalità PRUNED. Con l'aiuto di questa opzione gli utenti possono eseguire un portafoglio principale senza doversi preoccupare
dello spazio su disco. Consente di eseguire una versione più piccola della blockchain completa eliminando i dati più vecchi che
non sono più richiesti durante il download dell'ultima blockchain.
◦ Un client leggero, noto anche come simple-payment-verification (SPV), si collega ai Full Node per accedere alle informazioni
sulle transazioni bitcoin, ma memorizza il portafoglio utenti localmente creando, convalidando e trasmettendo in modo
indipendente le transazioni. I client SPV interagiscono direttamente con la rete bitcoin, senza un intermediario ma invece di
archiviare una copia completa della blockchain memorizzano solo l'intestazione di ciascun blocco, che è fondamentalmente un
riepilogo di tutte le transazioni in essa contenute. La sola memorizzazione dell’HEADER del blocco richiede meno spazio su
disco, ma limita ciò che i client leggeri possono fare. Un client leggero non è in grado di verificare interamente la validità di una
transazione, ma può confermare osservando l'intestazione se una transazione è stata inclusa in un blocco
15/04/2020
19. Configurazione Client Bitcoin
◦ A seconda del sistema operativo in uso, è necessario creare il file di configurazione bitcoin.conf nella directory dei
dati predefinita situata nei seguenti percorsi:
Windows: %APPDATA%Bitcoin
Mac: $HOME/Library/Application Support/Bitcoin/
Linux: $HOME/.bitcoin/
◦ Per Linux creiamo una directory .bitcoin usando mkdir ~/.bitcoin
◦ In seguito, creiamo il file bitcoin.conf con il comando nano ~/.bitcoin/bitcoin.conf
◦ Bisognerà definire le informazioni nel file come segue per impostare l’uso della Testnet in modalità Pruned (dopo # sono commenti):
rpcuser=user_name #Username for JSON-RPC connections
rpcpassword=your_password #Password Username for JSON-RPC connections
server=1 #Tells Bitcoin-Qt and bitcoind to accept JSON-RPC commands
testnet=1 #Run on the test network instead of the real bitcoin network.
prune=550 #Enables pruning mode
15/04/2020
20. 15/04/2020
Bitcoin.conf
Impostiamo la modalità Testnet e abilitiamo
il Pruning Mode.
Ora il nostro primo client è pronto per
essere eseguito su Testnet, una rete bitcoin
creata a scopo di test che segue le stesse
regole della rete principale. È una rete
pubblica che utilizza bitcoin senza valore,
quindi può essere utilizzata per inviare
gratuitamente le tue transazioni e testare le
tue applicazioni. Attiviamo la modalità
Pruning impostando il parametro prune =
<n> in bitcoin.conf in modo tale che "n"
indichi lo spazio che siamo disposti ad
allocare alla blockchain in MiB con un
minimo di 550 Mib
21. Siamo pronti a
partire!
Siamo ora pronti per avviare il Client di
Bitcoin. Otterremo in esecuzione Bitcoin
con la sua interfaccia GUI standard e
connesso alla rete testnet. Per la prima
esecuzione, ti verrà chiesto di impostare
la directory dei dati, che dovremmo
impostare sui valori predefiniti.
Successivamente, creerà
automaticamente un portafoglio e
inizierà la sincronizzazione con la rete
testnet e scaricherà la blockchain.
Apriamo una nuova finestra e lanciamo:
bitcoin-qt
15/04/2020
22. Avvio
sincronizzazione
All’avvio del Client vengono generati
diversi file. Tra i più importanti bisogna
segnalare:
Blocks: che memorizza i blocchi effettivi;
Chainstate: contiene il database LevelDB
per gli UTXO disponibili (un'abbreviazione
di Unspent Transaction Output);
Wallet: contiene il file cifrato wallet.dat
che memorizza le chiavi private del
nostro portafoglio.
.
15/04/2020
23. 15/04/2020
Il Client Bitcoin
Bitcoin Core è un software gratuito e
open source che funge da nodo bitcoin e
fornisce un portafoglio bitcoin che
verifica completamente i pagamenti. È
considerata l'implementazione di
riferimento di bitcoin.
La maggior parte dei nostri lavori verrà
eseguita con il comando bitcoin-
cli, che offre un'interfaccia semplice
per bitcoind. Se vuoi maggiori
informazioni sul suo utilizzo, eseguilo
semplicemente con l'argomento help.
Informazioni circa la configurazione del
nostro wallet sono reperibili con i
comandi:
Bitcoin-cli getblockchaininfo
Bitcoin-cli getmininginfo
Bitcoin-cli getnetworkinfo
Bitcoin-cli getwalletinfo
24. Prossimi passi
◦ Creeremo 2 indirizzi per i nostri wallet (uno sarà il mittente l’altro il destinatario)
◦ Otterremo dei fondi per il nostro portafoglio mittente (attraverso un servizio di Faucet)
◦ Prepareremo e vedremo quali sono le componenti fondamentali di una transazione
◦ Script di Blocco e Script di Sblocco
◦ Registreremo il nostro messaggio nella Blockchain di Bitcoin.
15/04/2020
25. getnewaddress
Generiamo un nuovo indirizzo per il
nostro portafoglio mittente.
Gli indirizzi sono derivati dalla chiave
pubblica usando una funzione hash, è
importante notare che le chiavi e gli
indirizzi pubblici non sono gli stessi. Le
funzioni hash crittografiche sono
ampiamente utilizzate nei bitcoin: negli
indirizzi bitcoin, negli indirizzi di script e
nell'algoritmo Proof-of-Work di mining.
Gli algoritmi utilizzati per creare un
indirizzo bitcoin da una chiave pubblica
sono Secure Hash Algorithm (SHA) e
RACE Integrity Primitives Evaluation
Message Digest (RIPEMD), in particolare
SHA256 e RIPEMD160.
15/04/2020
NB: un indirizzo Bitcoin dovrebbe essere considerato monouso. È buona
norma generare un indirizzo nuovo per ogni transazione che vogliamo
ricevere.
26. Chiavi e indirizzi
◦ Creando il tuo primo indirizzo Bitcoin, hai anche iniziato a compilare il tuo portafoglio Bitcoin. Più precisamente, hai iniziato a riempire il
file wallet.dat nella tua directory ~ / .bitcoin / testnet3. Il file wallet.dat contiene dati su preferenze e transazioni, ma soprattutto contiene
tutte le coppie di chiavi create: sia la chiave pubblica (che è la fonte dell'indirizzo in cui ricevi i fondi) sia la chiave privata (che è come
spendi quei fondi). Per la maggior parte, non dovrai preoccuparti di quella chiave privata: bitcoind la userà quando è necessario.
Tuttavia, questo rende il file wallet.dat estremamente importante: se lo perdi, perdi le tue chiavi private e se perdi le tue chiavi private,
perdi i tuoi fondi!
◦ Gli indirizzi sono derivati dalla chiave pubblica usando una funzione hash, è importante notare che le chiavi e gli indirizzi pubblici non sono
gli stessi. Le funzioni hash crittografiche sono ampiamente utilizzate nei bitcoin: negli indirizzi bitcoin, negli indirizzi di script e
nell'algoritmo Proof-of-Work di mining. Gli algoritmi utilizzati per creare un indirizzo bitcoin da una chiave pubblica sono Secure Hash
Algorithm (SHA) e RACE Integrity Primitives Evaluation Message Digest (RIPEMD), in particolare SHA256 e RIPEMD160. A partire dalla
chiave pubblica K, calcoliamo l'hash SHA256 e quindi calcoliamo l'hash RIPEMD160 del risultato, producendo un numero di 160 bit (20
byte). Un indirizzo bitcoin è, quindi, una stringa di cifre e caratteri che iniziano con la cifra "1" (2 se usiamo la Testnet) e che possono
essere condivisi con chiunque desideri inviarti denaro.
15/04/2020
27. Electrum
Dopo aver scaricato e installato Electrum,
apriamo la modalità testnet eseguendo:
electrum --testnet.
Quando viene avviato Electrum per la prima
volta, verrà visualizzata la procedura guidata per
la creazione del nuovo portafoglio, quindi
seguiamo questi passaggi:
Selezionare nella prima finestra di dialogo
"Auto connect" e fare clic su "Next".
Seleziona " Standard wallet " e fai clic su
"Next".
Continuare a premere "Next" per il resto
delle finestre di dialogo che vengono
visualizzate fino a quando non viene
richiesto di salvare le parole “seme” (SEED
Words).
Copiamoli da qualche parte, quindi nella
finestra di dialogo successiva vanno scritti
correttamente nell'ordine indicato.
15/04/2020
28. Nuovo indirizzo
Electrum
Una volta terminato, Electrum genererà
un nuovo portafoglio con molti nuovi
indirizzi. Chiudere la GUI di Electrum e
continuare in modalità CLI.
Eseguiamo Electrum come un processo
daemon per cui digitiamo i seguenti
comandi JSON / RPC:
electrum --testnet daemon
electrum --testnet daemon load_wallet
In una nuova finestra lanciamo:
electrum --testnet listaddresses
15/04/2020
29. Indirizzi da utilizzare
◦ Abbiamo ora i nostri due indirizzi che useremo per la transazione. L’indirizzo del Client Bitcoin sarà quello del mittente mentre
useremo il primo della lista tra quelli Electrum come destinatario.
Mittente: 2NGS7agzTfk9LEKXkm89QvgbCC7rHWHBD4K
Destinatario: mwX7V1Gy2wMeA29PBrj9V1frM4M4rKKZxz
◦ A questo punto abbiamo bisogno di finanziare il nostro indirizzo mittente con alcuni bitcoin per effettuare la prima transazione.
Per fortuna, nella testnet possiamo usare una fonte di finanziamento gratuita chiamata "bitcoin faucet" che fornisce bitcoin
senza valore usati per testare le applicazioni. Accediamo al sito web:
https://coinfaucet.eu/en/ e inseriamo il nostro indirizzo Bitcoin
15/04/2020
30. I Faucet
Quando si parla di faucet di
Bitcoin e di criptomonete in
generale, si vuole intendere quei
siti, che come la traduzione
dall'inglese suggerisce, fungono
da "rubinetti" sgocciolanti di
moneta virtuale. Annotiamoci
anche il «tx» relativo alla
transazione.
Il tx indentifica la singola
transazione. Questa prima
transazione è dal faucet al nostro
indirizzo associato al Wallet
Bitcoin Core.
15/04/2020
"tx": 906a6ec21ecf9451fb32bba2d0d626885662c38f33f052542128888dc195f092
31. Il Mempool
Come possiamo verificare che la
transazione sia effettivamente
avvenuta?
In attesa di essere “minata”, essa
sosterà nel mempool. Il Mempool
è una "zona d'attesa" per le
transazioni Bitcoin che ogni Full
Node mantiene per sé. Dopo che
una transazione viene verificata
da un nodo, attende all'interno
del Mempool fino a quando non
viene presa da un minatore e
inserita in un blocco. (un tempo
variabile che in media si aggira sui
10 minuti).
15/04/2020
32. Gli UTXO
Quando una transazione Bitcoin viene
trasmessa alla rete, infatti, viene prima
verificata da tutti i nodi Bitcoin disponibili;
dopo aver superato correttamente la verifica
da parte di un nodo, si trova all'interno
dell'area "Transazioni non confermate". In
media, ogni 10 minuti viene estratto un
nuovo blocco di transazioni Bitcoin. Questa è
una media, il che significa che potrebbe
richiedere anche 1 minuto o 1 ora. Ogni
blocco contiene alcune migliaia di
transazioni.
Una volta confermata, controlliamo se il
client bitcoin può vedere la transazione
lanciando il comando:
Listunspent
È possibile riconoscere la transazione in
oggetto dal suo «txid».
15/04/2020
33. Gli UTXO: unspent transaction outputs
◦ In bitcoin, non ci sono monete, né mittenti, né destinatari, né saldi, né conti né indirizzi. Tutte queste cose sono costruite ad un
livello superiore a beneficio dell'utente, per rendere le cose più facili da capire. Il blocco base fondamentale di una transazione
Bitcoin è l’output della transazione. Gli output delle transazioni sono pezzi indivisibili di valuta bitcoin, registrati sulla blockchain
e riconosciuti validi da tutta la rete. I nodi completi Bitcoin tengono traccia di tutti gli output disponibili e spendibili, noti come
output di transazione non spesi o UTXO. La raccolta di tutti gli UTXO è conosciuta come il set UTXO e attualmente conta milioni
di UTXO. Il set UTXO cresce man mano che viene creato il nuovo UTXO e si restringe quando viene utilizzato UTXO. Ogni
transazione rappresenta una modifica (transizione di stato) nel set UTXO.
◦ Quando diciamo che il nostro portafoglio ha "ricevuto" bitcoin, intendiamo che il portafoglio ha rilevato un UTXO che può essere
speso con una delle chiavi controllate da quel portafoglio. Pertanto, il "saldo" di bitcoin di un utente è la somma di tutti gli UTXO
che il portafoglio dell'utente può spendere e che può essere distribuito tra centinaia di transazioni e centinaia di blocchi. Il
concetto di equilibrio è creato dall'applicazione del portafoglio. Il portafoglio calcola il saldo dell'utente scansionando la
blockchain e aggregando il valore di qualsiasi UTXO che il portafoglio può spendere.
15/04/2020
34. Ogni transazione Bitcoin ha almeno un input
e un output. Ogni input spende il satoshi
pagato a un output precedente. Ogni output
attende quindi come output di transazione
non speso (UTXO) fino a quando un input
successivo lo spende. Quando il tuo
portafoglio Bitcoin ti dice che hai un saldo di
satoshi di 10.000, significa realmente che hai
10.000 satoshi in attesa in uno o più UTXO.
Ogni Output è quindi in una specie di sala
d’attesa (e prende il nome di Output Non
Speso- Unspent Output), finchè un successivo
Input non lo “spende”.
Il comando listunspent elenca, quindi,
gli output che possiamo utilizzare come
input per le nostre transazioni.
15/04/2020
35. Recuperiamo l’input
Le transazioni Bitcoin, inoltre, possono essere
utilizzate per archiviare piccole quantità di dati
nella blockchain, consentendo agli sviluppatori
di costruire sistemi distribuiti. Come farlo?
Per prima cosa convertiamo il nostro
messaggio in esadecimali (possiamo
utilizzare un convertitore online):
Hello world : 68656c6c6f20776f726c64
Col comando:
Gettransaction + txid
Recuperiamo la transazione che abbiamo
ricevuto in ingresso dal faucet.
Abbiamo il messaggio da inviare e l’output
non speso da utilizzare. Siamo pronti a
creare la nostra transazione verso il wallet
Electrum.
15/04/2020
Amount: Somma trasferita con transazione
Confirmation: Numero di conferme
Blockhash: Hash del Blocco che la contiene
Blockindex: L'indice della transazione all’interno del blocco
Txid: ID della transazione
HEX: transazione in formato HEX.
36. Creiamo la nuova
transazione
◦ bitcoin-cli createrawtransaction
"[{"txid":"906a6ec21ecf9451fb32bba2d0d626885662c38f33f05
2542128888dc195f092", "vout": 1}]"
"{"data":"68656c6c6f20776f726c64","mwX7V1Gy2wMeA29P
Brj9V1frM4M4rKKZxz":0.01100000}’’
createrawtransaction crea una
transazione spendendo gli input dati e
creando nuovi output.
Dobbiamo passare come argomento un
oggetto con i seguenti parametri:
Il “txid” di uno degli UTXO disponibili
L “index vout” del UTXO selezionato
Il messaggio in formato esadecimale
(«Hello World»)
L’indirizzo di destinazione (quello del
wallet Electrum)
L’ammontare totale di Satoshis da
inviare
15/04/2020
37. Transazione in
formato HEX
◦ La nostra transazione apparirà nel seguente formato:
◦ 020000000192f095c18d8828215452f0338fc362568826d6d0a2bb32fb5194cf1ec26
e6a900100000000ffffffff0200000000000000000d6a0b68656c6c6f20776f726c64e0c
81000000000001976a914af89aed7d4fefd51a81dfba92825cceba6127a9788ac0000
0000
◦ 02000000= versione;
◦ 01= numero di input;
◦ 92f095… = Txid dell’input (rappresentazione in little endian);
◦ 01000000= indice dell’output precedente (index vout);
◦ 02= numero degli output generati dalla transazione;
◦ 0000000000000000= ammontare in satoshi primo output (il primo output è il
nostro messaggio infatti);
◦ 0d= Script Lenght 0b=OP_return
◦ 68656c6c6f20776f726c64= il nostro messaggio;
◦ E0c810000000000019= valore in satoshi del secondo output;
◦ 76a914af…= ScriptPubKey;
◦ 00000000= Locktime .
L’output ottenuto è la versione
serializzata della nostra
transazione.
Quando le transazioni sono
trasmesse al network o
scambiate tra applicazioni,
vengono “serializzate”
(serialized).
Questo processo converte la
rappresentazione interna della
struttura dati in un formato che
può essere trasmesso un byte
alla volta (byte stream).
15/04/2020
38. Facciamo chiarezza
◦ Rappresentazione in little endian convertita:
Little:92f095c18d8828215452f0338fc362568826d6d0a2bb32fb5194cf1ec26e6a90
Big:906a6ec21ecf9451fb32bba2d0d626885662c38f33f052542128888dc195f092
È la nostra transazione in ingresso dal faucet.
◦ Effettivamente la versione serializzata di una transazione risulta di
difficile lettura per qualsiasi essere umano. Per questo motivo il
client Bitcoin mette a disposizione un comando per la conversione
di questa stringa.
In informatica l'ordine dei byte (conosciuto anche
come big-endian, little-endian o middle-endian a
seconda dei metodi differenti) sono modalità
differenti usate dai calcolatori per immagazzinare in
memoria dati di dimensione superiore al byte (es.
word, dword, qword).
Rappresentazioni BIG ENDIAN:
memorizzazione/trasmissione che inizia dal byte più
significativo (estremità più grande) per finire col
meno significativo.
Rappresentazione LITTLE ENDIAN:
memorizzazione/trasmissione che inizia dal byte
meno significativo (estremità più piccola) per finire
col più significativo.
Ricordiamoci questo concetto perché analizzando le
stringhe in Bitcoin lo ritroveremo spesso.
Comando utile per effettuare questa conversione su
Linux:
Printf $variabile | tac –rs ..
15/04/2020
39. decoderawtransaction
Il comando decoderawtransaction
ci permette di deserializzare la
stringa di Bytes e ottenete un
output leggibile per l’uomo.
Nelle prossime slide analizzeremo
i 3 blocchi che costituiscono la
nostra transazione e vedremo
come all’interno si trovino le
stesse informazioni
precedentemente estratte dalla
stringa esadecimale.
15/04/2020
40. Blocco 1: Dati della Transazione
◦ "txid":
bb79b66a5665d8cd344069175497035b8153abace5bc8e
13c22efd8ad3b03e89 ID della transazione
◦ "hash":
bb79b66a5665d8cd344069175497035b8153abace5bc8e
13c22efd8ad3b03e89 Hash della transazione (sono uguali per
transazioni non Segwit*)
◦ "version": 2
Il numero di versione viene utilizzato per segnalare il supporto
specifico per alcune tecnologie. In particolare, una transazione deve
essere la versione 2 per utilizzare OP_CHECKSEQUENCEVERIFY.
◦ "size": 107 Dimensione della transazione
◦ "vsize": 107 Dimensione virtuale della transazione (sono uguali
per transazioni non Segwit*)
◦ "weight": 428
◦ "locktime": 0
◦ *Segwit è l’abbreviazione di Segregated Witness e sta a
indicare un cambio di fork flessibile realizzato nel
formato della transizione di Bitcoin; è un protocollo di
lavoro flessibile che modifica il metodo di archiviazione
dei dati: con SegWit, la transazione viene divisa in due
parti. La prima, le cui informazioni sono salvate sulla
blockchain, include i dati sia del mittente che del
destinatario. La seconda parte, la quale subisce
l’isolamento effettivo dal segmento originario, contiene
le firme e gli script. La firma (o testimone) ha un peso
non indifferente rispetto alla dimensione della
transazione, circa il 65%.
15/04/2020
41. Blocco 2: input della transazione "vin": [
"txid":
"906a6ec21ecf9451fb32bba2d0d626885662c38f33f0
52542128888dc195f092",
"vout": 1,
"scriptSig": {
"asm": "",
"hex": "" },
"sequence": 4294967295 }
◦ La prima parte di un input è un puntatore a un UTXO in
riferimento all'hash della transazione (quella in ingresso dal
Faucet) e un indice di output, che identifica l'UTXO specifico
in quella transazione. Ci indica quale UTXO abbiamo deciso di
utilizzare.
◦ La seconda parte è uno script di sblocco, che il portafoglio
costruisce per soddisfare le condizioni di spesa stabilite
nell'UTXO. Molto spesso, lo script di sblocco è una firma
digitale e una chiave pubblica che dimostra la proprietà del
bitcoin. Tuttavia, non tutti gli script di sblocco contengono
firme.(si noti che la nostra transazione non è ancora firmata per
questo motivo abbiamo i campi vuoti).
◦ La terza parte è un numero progressivo che viene utilizzato per
le transazioni replace-by-fee (RBF); ovvero transazioni in attesa
di essere inserite nella blockchain, che vengono sostituite con
altre che pagano una fee (commissione) diversa. In questi casi
la seconda transazione è eseguita con una fee più alta, così da
essere più attraente e remunerativa per il miner.
15/04/2020
42. Blocco 3: output della transazione "vout": [
◦ "value": 0.00000000,
"n": 0,
"scriptPubKey": {
"asm": "OP_RETURN
68656c6c6f20776f726c64",
"hex":
"6a0b68656c6c6f20776f726c64",
"type": "nulldata"
◦ La nostra transazione ha 2 componenti in
output: il messaggio «Hello World» e la
somma di 0.011 bitcoin. A loro volta, ogni
output è composto da due parti:
◦ Una quantità di bitcoin, definita in satoshi, la
più piccola unità bitcoin.
◦ Un puzzle crittografico che determina le
condizioni necessarie per spendere l'output.
◦ Nella prossime slide approfondiremo il tema
degli Script.
◦ L’ultima riga identifica il destinatario dei
fondi (il nostro indirizzo Electrum)
15/04/2020
◦ "value": 0.01100000,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160
af89aed7d4fefd51a81dfba92825cceba6127a
97 OP_EQUALVERIFY OP_CHECKSIG",
"hex":
"76a914af89aed7d4fefd51a81dfba92825cceb
a6127a9788ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"mwX7V1Gy2wMeA29PBrj9V1frM4M4rKKZxz
"
43. Transaction Scripts e Script Language
◦ Per meglio comprendere le componenti di una transazione dobbiamo approfondire alcuni concetti. Il linguaggio di script delle
transazioni Bitcoin è chiamato Script. Sia lo script di blocco collocato su un UTXO sia lo script di sblocco sono scritti in questo
linguaggio di scripting. Quando una transazione viene convalidata, lo script di sblocco in ogni input viene eseguito insieme allo
script di blocco corrispondente per verificare se soddisfa la condizione di spesa. Oggi, la maggior parte delle transazioni elaborate
attraverso la rete bitcoin ha la forma "Pagamento all'indirizzo bitcoin di Tizio" e si basa su uno script chiamato script Pay-to-
Public-Key-Hash. Tuttavia, le transazioni bitcoin non si limitano a questo. In effetti, gli script di blocco possono essere scritti per
esprimere una vasta gamma di condizioni complesse. La convalida della transazione bitcoin, quindi, non si basa su un modello
statico, ma viene invece ottenuta attraverso l'esecuzione di un linguaggio di scripting. Questo linguaggio consente di esprimere
una varietà quasi infinita di condizioni. Ecco come bitcoin ottiene il potere di "denaro programmabile".
15/04/2020
44. Script di blocco e Script di sblocco
◦ Il motore di convalida delle transazioni di Bitcoin si basa su due tipi di script per convalidare le transazioni: uno script di blocco e
uno script di sblocco.
◦ Uno script di blocco è una condizione di spesa posizionata su un output: specifica le condizioni che devono essere soddisfatte per
spendere l'output in futuro. Storicamente, lo script di blocco veniva chiamato scriptPubKey, poiché di solito conteneva una chiave
pubblica o un indirizzo bitcoin (hash chiave pubblica).
◦ Uno script di sblocco è uno script che "risolve" o soddisfa le condizioni poste su un output da uno script di blocco e consente di
spendere l'output. Gli script di sblocco fanno parte di ogni input di transazione. Il più delle volte contengono una firma digitale
prodotta dal portafoglio dell'utente dalla sua chiave privata. Storicamente, lo script di sblocco si chiamava scriptSig, perché di
solito conteneva una firma digitale. Nella maggior parte delle applicazioni bitcoin, il codice sorgente si riferisce allo script di
sblocco come scriptSig.
15/04/2020
45. "value": 0.01100000,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 af89aed7d4fefd51a81dfba92825cceba6127a97 OP_EQUALVERIFY OP_CHECKSIG
◦ Esaminiamo lo script di blocco del nostro output. La stragrande maggioranza delle transazioni elaborate sulla rete bitcoin spende output bloccati
con uno script Pay-to-Public-Key-Hash o "P2PKH". Questi output contengono uno script che blocca l'output su un hash di chiave pubblica, più
comunemente noto come indirizzo Bitcoin. Un output bloccato da uno script P2PKH può essere sbloccato (speso) presentando una chiave pubblica e
una firma digitale creata dalla chiave privata corrispondente. L'output della transazione avrebbe uno script di blocco del modulo:
OP_DUP OP_HASH160 <Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
Come possiamo verificare che il nostro output presenti una blocco risolvibile solo dal destinatario?
◦ Il “Public Key Hash” è equivalente all'indirizzo Bitcoin del wallet Electrum, senza la codifica Base58Check. Possiamo verificarlo con un utile tool
(scaricabile anche per Windows) chiamato Bitcoin Explorer:
bx-windows-x64-icu.exe base58-decode mwX7V1Gy2wMeA29PBrj9V1frM4M4rKKZxz
6f af89aed7d4fefd51a81dfba92825cceba6127a97 0705ba7f
Sostanzialmente l’output generato dalla nostra transazione potrà essere «sbloccato» e speso solo presentando la chiave pubblica dell’indirizzo di
destinazione e la firma generata dalla corrispondente chiave privata.
15/04/2020
46. Firma e invio della
transazione
Procediamo ora firmando la
nostra transazione in modo da
analizzare lo Script di sblocco
che verrà a generarsi sull’input.
Per la firma utilizziamo il
comando:
signrawtransactionwithwallet +
Transazione (formato HEX)
Firmata la transazione il
comando per inviarla al network
è:
Sendrawtransaction + HEX
ottenuto con la firma
15/04/2020
L’output ottenuto è il TXID della nostra transazione:
643ccd7242c4e0704317269ee33ea0dccc54cba356d5d2c00d32bb932b
adf276
47. La nostra prima
transazione
Abbiamo finalmente completato
la nostra prima transazione. Il
comando per visualizzarla:
gettransaction + Txid
Anche se non ancora
confermata è possibile cercare il
Txid su qualsiasi Blockchain
explorer come
Blockchain.com
15/04/2020
48. 15/04/2020
Analisi ScriptSign
Decodifichiamo la nostra
transazione in formato HEX e
soffermiamoci ora sull’input.
Ricordiamo che lo scriptSig
soddisfa le condizioni poste
sull'UTXO, sbloccandolo per la
spesa. Come imposto dal nostro
wallet sull’output anche quella in
ingresso da Faucet richiedeva per
lo sblocco di presentare l’hash
160 della chiave pubblica del
nostro indirizzo. Come posso
verificare che questo sia ciò che
troviamo nel asm?
"vin": [
{
"txid":"906a6ec21ecf9451fb32bba2d0d626885662c38f33f052542128888dc19
5f092",
"vout": 1,
"scriptSig": {
"asm": "00141212e2e581101ca9d211cef24ffe04196887aa8f",
"hex": "1600141212e2e581101ca9d211cef24ffe04196887aa8f"
},
Registriamo l’ asm in una variabile:
Asm: 00141212e2e581101ca9d211cef24ffe04196887aa8f
49. 15/04/2020
Qual era la condizione di sblocco del
UTXO?
Riprendiamo l’UTXO utilizzato per la
nostra transazione (in ingresso dal
Faucet). Lo scriptPubKey richiedeva di
presentare l’ HASH160 della chiave
pubblica per lo sblocco, ovvero:
fe5a1ed871c6bd7fa9bb2dffbdcc77da
4cd2b40e
Procediamo alla verifica del nosro
asm:
per ottenere la rappresentazione
HASH160 bisogna combinare le
operazioni di SHA256+RIPEMD160.
Risultato:
fe5a1ed871c6bd7fa9bb2dffbdcc77da
4cd2b40e
Asm=00141212e2e581101ca9d211cef24ffe04196887aa8froot
printf $Asm | xxd -r -p | openssl sha256
d072a80e7941306669850d025d2bb35fd4ef56ed41a3a2a3f1ee8d4b817
b6a52
Printf d072a80e7941306669850d025d2bb35fd4ef56ed41a3a2a3f1ee8d4b817b6a52 |
xxd -r -p | openssl ripemd160
fe5a1ed871c6bd7fa9bb2dffbdcc77da4cd2b40e
Verificato!
50. Quindi…
◦ Per effettuare una transazione abbiamo bisogno di un output non speso da sbloccare e utilizzare come input.
◦ L’output da noi scelto è quello proveniente dalla transazione:
906a6ec21ecf9451fb32bba2d0d626885662c38f33f052542128888dc195f092 (precisamente
quello indicato in "vout": 1).
◦ Cosa veniva richiesto per lo sblocco? presentare l’ HASH160 della chiave pubblica. Per la verifica
bisogna applicare SHA256+RIPEMD160 al nostro «asm» Slide 49.
◦ Allo stesso modo, sull’output della nostra transazione abbiamo imposto la stessa condizione di blocco. Per verificarlo abbiamo
decodificato l’indirizzo inserito nello "scriptPubKey " del nostro output Slide 45.
15/04/2020
51. 15/04/2020
Transazione
completata
Se tutto va come previsto, dovremo aver
archiviato con successo il messaggio "ciao
mondo" nella blockchain testnet di Bitcoin.
L'immagine mostra ciò che abbiamo fatto finora.
Abbiamo consumato un input (da una
transazione precedente), quindi abbiamo creato
una transazione con due output, il primo è una
transazione OP_RETURN che trasporta il nostro
messaggio, mentre l'altro trasferisce
0.011000000 bitcoin (BTC).
Per poter salvare dei messaggi sulla blockchain
abbiamo effettuato una transazione Bitcoin, in
cui abbiamo aggiunto dei dati da salvare, come
se fosse una sorta di causale del pagamento.
Il salvataggio di dati è reso possibile grazie alle
transazioni Bitcoin di tipo null data, che sfruttano
il parametro OP_RETURN, il quale permette di
inserire fino a 80 byte di dati in una transazione.
52. Riassumendo: le transazioni
◦ Ogni transazione bitcoin crea output, che vengono registrati sul libro mastro Bitcoin. Quasi tutti questi output, con una sola eccezione (la
transazione COINBASE) creano blocchi spendibili di bitcoin chiamati UTXO, che sono poi riconosciuti da tutta la rete e disponibili per il proprietario
da spendere in una transazione futura.
◦ Gli UTXO sono tracciati da ogni client Bitcoin a nodo completo nel set UTXO. Le nuove transazioni consumano (spendono) uno o più di questi output
dal set UTXO.
◦ L'output di una transazione può avere un valore (intero) arbitrario denominato come multiplo di satoshi. Proprio come i dollari possono essere
divisi in due cifre decimali come centesimi, i bitcoin possono essere divisi in otto cifre decimali come satoshi. Sebbene un output possa avere
qualsiasi valore arbitrario, una volta creato è indivisibile. Questa è una caratteristica importante che deve essere enfatizzata: gli output sono unità di
valore discrete e indivisibili, denominate in satoshi interi. Un output non speso può essere consumato nella sua interezza solo da una transazione. Se
un UTXO è maggiore del valore desiderato di una transazione, deve comunque essere consumato nella sua interezza e il cambiamento deve essere
generato nella transazione. In altre parole, se hai un UTXO del valore di 20 bitcoin e vuoi pagare solo 1 bitcoin, la tua transazione deve consumare
l'intero UTXO a 20 bit e produrre due output: uno che paga 1 bitcoin al destinatario desiderato e un altro che paga 19 bitcoin in cambio torna al tuo
portafoglio. A causa della natura indivisibile degli output delle transazioni, la maggior parte delle transazioni bitcoin dovrà generare cambiamenti.
Una transazione, quindi, utilizza output di transazione non spesi precedentemente registrati e crea nuovi output di transazione che possono essere
utilizzati da una transazione futura. In questo modo, blocchi di valore bitcoin si spostano da un proprietario all'altro in una catena di transazioni che
consumano e creano UTXO.
15/04/2020
53. 15/04/2020
Commissioni
Abbiamo appena visto che se un UTXO è
maggiore del valore desiderato di una
transazione, deve comunque essere consumato
nella sua interezza e il cambiamento deve essere
generato nella transazione. Riprendiamo il
nostro caso:
Abbiamo in ingresso 0.0118 e 0.0110 in uscita.
Dov’è finito il resto? La struttura dei dati delle
transazioni non ha un campo per le commissioni;
questo perché le commissioni sono
implicitamente calcolate come la differenza tra la
somma degli input e la somma degli output.
Qualsiasi importo in eccesso che rimane dopo
che tutti gli output sono stati detratti da tutti gli
input è la commissione che viene riscossa dai
minatori:
Fees = Sum(Inputs) – Sum(Outputs).
NB: in una situazione con Bitcoin reali avremo
dovuto costruire la nostra transazione
considerando un’ulteriore output che torni
verso il nostro indirizzo e lasciando una
commissione più bassa, ricordando che le
transazioni a tariffa zero o con commissioni molto
basse raramente vengono estratte e talvolta non
verranno nemmeno propagate attraverso la rete.
54. 15/04/2020
Esploriamo il blocco
A questo punto andiamo a cercare il
nostro messaggio. Per aprire e
analizzare i blocchi blockchain è
necessario installare un editor
esadecimale grafico come bless.
Sudo apt-get install bless
Spostiamoci nella cartella con i nostri
blocchi e apriamo il blk00179.dat.
Inserendo nella barra di ricerca il
nostro messaggio in formato HEX
possiamo trovare il nostro saluto al
mondo codificato all’interno della
Blockchain!
Hello world 68 65 6c 6c 6f 20 77 6f
72 6c 64
55. 15/04/2020
Lo stesso controllo può essere
eseguito grazie ad API come
quelle fornite da coinsecret.
Apriamo un browser e cerchiamo:
http://api-
testnet.coinsecrets.org/block/166
9675
L’ultimo elemento è il numero del
blocco nel quale è stata salvata la
nostra transazione (nel vostro
caso sarà sicuramente diverso.
Per recuperalo cerchiamo il Txid
su blockchain.com). Possiamo
vedere il Txid della nostra
transazione e il nostro saluto sia
in formato HEX che in formato
ascii.