SlideShare a Scribd company logo
COME REGISTRARE
DATI SULLA
BLOCKCHAIN DI
BITCOIN
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
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
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
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
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
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
◦ 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
"
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
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
"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
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
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
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
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!
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
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.
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
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.
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
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.

More Related Content

What's hot

Blockchain
BlockchainBlockchain
Blockchain
Federico Corradino
 
Blockchain il travolgente futuro della sicurezza distribuita
Blockchain il travolgente futuro della sicurezza distribuitaBlockchain il travolgente futuro della sicurezza distribuita
Blockchain il travolgente futuro della sicurezza distribuita
Mario Gentili
 
Introduzione alla Blockchain
Introduzione alla BlockchainIntroduzione alla Blockchain
Introduzione alla Blockchain
Giovanni Ciatto
 
Bitcoin
BitcoinBitcoin
Bitcoin
Davide Polano
 
Blockchain for Business Innova4_
Blockchain for Business Innova4_Blockchain for Business Innova4_
Blockchain for Business Innova4_
Massimo Formica
 
Blockchain, oro e tulipani. Rischi e opportunità per il Non Profit
Blockchain, oro e tulipani. Rischi e opportunità per il Non ProfitBlockchain, oro e tulipani. Rischi e opportunità per il Non Profit
Blockchain, oro e tulipani. Rischi e opportunità per il Non Profit
Emanuele Cisbani
 
Bitcoin Business Opportunities
Bitcoin Business OpportunitiesBitcoin Business Opportunities
Bitcoin Business Opportunities
Marco Amadori
 
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Stefano Saladino
 
Presentazione del mining Bitcoin
Presentazione del mining BitcoinPresentazione del mining Bitcoin
Presentazione del mining Bitcoin
I3P
 
Davide Gessa - La trasparenza ai tempi della blockchain
Davide Gessa - La trasparenza ai tempi della blockchainDavide Gessa - La trasparenza ai tempi della blockchain
Davide Gessa - La trasparenza ai tempi della blockchain
Sardegna Ricerche
 
Blockchain essenziale
Blockchain essenzialeBlockchain essenziale
Blockchain essenziale
Federico Bo
 
Cosa è bitcoin
Cosa è bitcoinCosa è bitcoin
Cosa è bitcoin
Emanuele Cisbani
 
Bitcoin tra regolamentazione e diritto
Bitcoin tra regolamentazione e dirittoBitcoin tra regolamentazione e diritto
Bitcoin tra regolamentazione e diritto
Giulia Aranguena
 
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Purple Network
 
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
Sardegna Ricerche
 
Bitcoin e le Criptovalute come nuova frontiera della libertà digitale
Bitcoin e le Criptovalute come nuova frontiera della libertà digitaleBitcoin e le Criptovalute come nuova frontiera della libertà digitale
Bitcoin e le Criptovalute come nuova frontiera della libertà digitale
midimarcus
 
Incontro con Ernesto Hofmann sulla BlockChain
Incontro con Ernesto Hofmann sulla BlockChainIncontro con Ernesto Hofmann sulla BlockChain
Incontro con Ernesto Hofmann sulla BlockChain
mobi-TECH
 
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
Danilo Longoni
 
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
Giulia Aranguena
 
Come la Blockchain rivoluzionerà il turismo
Come la Blockchain rivoluzionerà il turismoCome la Blockchain rivoluzionerà il turismo
Come la Blockchain rivoluzionerà il turismo
Domenico Palladino
 

What's hot (20)

Blockchain
BlockchainBlockchain
Blockchain
 
Blockchain il travolgente futuro della sicurezza distribuita
Blockchain il travolgente futuro della sicurezza distribuitaBlockchain il travolgente futuro della sicurezza distribuita
Blockchain il travolgente futuro della sicurezza distribuita
 
Introduzione alla Blockchain
Introduzione alla BlockchainIntroduzione alla Blockchain
Introduzione alla Blockchain
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Blockchain for Business Innova4_
Blockchain for Business Innova4_Blockchain for Business Innova4_
Blockchain for Business Innova4_
 
Blockchain, oro e tulipani. Rischi e opportunità per il Non Profit
Blockchain, oro e tulipani. Rischi e opportunità per il Non ProfitBlockchain, oro e tulipani. Rischi e opportunità per il Non Profit
Blockchain, oro e tulipani. Rischi e opportunità per il Non Profit
 
Bitcoin Business Opportunities
Bitcoin Business OpportunitiesBitcoin Business Opportunities
Bitcoin Business Opportunities
 
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
 
Presentazione del mining Bitcoin
Presentazione del mining BitcoinPresentazione del mining Bitcoin
Presentazione del mining Bitcoin
 
Davide Gessa - La trasparenza ai tempi della blockchain
Davide Gessa - La trasparenza ai tempi della blockchainDavide Gessa - La trasparenza ai tempi della blockchain
Davide Gessa - La trasparenza ai tempi della blockchain
 
Blockchain essenziale
Blockchain essenzialeBlockchain essenziale
Blockchain essenziale
 
Cosa è bitcoin
Cosa è bitcoinCosa è bitcoin
Cosa è bitcoin
 
Bitcoin tra regolamentazione e diritto
Bitcoin tra regolamentazione e dirittoBitcoin tra regolamentazione e diritto
Bitcoin tra regolamentazione e diritto
 
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
 
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
Stefano Capaccioli - Strumenti per decentralizzare il mondo: Bitcoin, Blockch...
 
Bitcoin e le Criptovalute come nuova frontiera della libertà digitale
Bitcoin e le Criptovalute come nuova frontiera della libertà digitaleBitcoin e le Criptovalute come nuova frontiera della libertà digitale
Bitcoin e le Criptovalute come nuova frontiera della libertà digitale
 
Incontro con Ernesto Hofmann sulla BlockChain
Incontro con Ernesto Hofmann sulla BlockChainIncontro con Ernesto Hofmann sulla BlockChain
Incontro con Ernesto Hofmann sulla BlockChain
 
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
SMAU Milano 2018 - Blockchain, Sicurezza delle transazioni e dei dati: non so...
 
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
#Blockchain e #SmartContract- Le applicazioni nei sistemi logistici e nel com...
 
Come la Blockchain rivoluzionerà il turismo
Come la Blockchain rivoluzionerà il turismoCome la Blockchain rivoluzionerà il turismo
Come la Blockchain rivoluzionerà il turismo
 

Similar to Come interagire con la blockchain di Bitcoin

Blockchain per la PA
Blockchain per la PABlockchain per la PA
Blockchain per la PA
Manuel Rafeli
 
Tokenizzazione e regolamentazione dei virtual asset
Tokenizzazione e regolamentazione dei virtual asset  Tokenizzazione e regolamentazione dei virtual asset
Tokenizzazione e regolamentazione dei virtual asset
Giulia Aranguena
 
Workshop 20092019 Nonnis
Workshop 20092019 NonnisWorkshop 20092019 Nonnis
Workshop 20092019 Nonnis
Rocco Baccelliere
 
La blockchain - Cos'è un Algoritmo di Consenso
La blockchain - Cos'è un Algoritmo di ConsensoLa blockchain - Cos'è un Algoritmo di Consenso
La blockchain - Cos'è un Algoritmo di Consenso
Brave Consulting Advisory Group
 
Smau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICToSmau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICTo
SMAU
 
Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?
Gabriele Guizzardi
 
Smau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICToSmau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICTo
SMAU
 
Blockchain dove il free software incontra la finanza - novembre 2021
Blockchain   dove il free software incontra la finanza - novembre 2021Blockchain   dove il free software incontra la finanza - novembre 2021
Blockchain dove il free software incontra la finanza - novembre 2021
Alfredo Di Maria
 
Professor Ernesto Hofmann - Blockchain
Professor Ernesto Hofmann - BlockchainProfessor Ernesto Hofmann - Blockchain
Professor Ernesto Hofmann - Blockchain
Marco Turolla
 
BlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuitoBlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuito
Ninja Academy
 
Custodia unint
Custodia unintCustodia unint
Custodia unint
Giulia Aranguena
 
Rivoluzione blockchain: il futuro della collaborazione?
Rivoluzione blockchain: il futuro della collaborazione?Rivoluzione blockchain: il futuro della collaborazione?
Rivoluzione blockchain: il futuro della collaborazione?
📈 Enrico L. Barazzoni
 
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Pierluigi Paganini
 
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
eraser Juan José Calderón
 
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e ZcashProtocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
RiccardoCorocher
 
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
Roberta De Matteo
 
Bitcoin &amp; blockchain
Bitcoin &amp; blockchainBitcoin &amp; blockchain
Bitcoin &amp; blockchain
GianlucaScatigna
 
Blockchainvis Backend
Blockchainvis BackendBlockchainvis Backend
Blockchainvis Backend
Francesco Franz Moca
 
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
SMAU
 
Bitcoin and blockchain
Bitcoin and blockchainBitcoin and blockchain
Bitcoin and blockchain
Sergio Shevchenko
 

Similar to Come interagire con la blockchain di Bitcoin (20)

Blockchain per la PA
Blockchain per la PABlockchain per la PA
Blockchain per la PA
 
Tokenizzazione e regolamentazione dei virtual asset
Tokenizzazione e regolamentazione dei virtual asset  Tokenizzazione e regolamentazione dei virtual asset
Tokenizzazione e regolamentazione dei virtual asset
 
Workshop 20092019 Nonnis
Workshop 20092019 NonnisWorkshop 20092019 Nonnis
Workshop 20092019 Nonnis
 
La blockchain - Cos'è un Algoritmo di Consenso
La blockchain - Cos'è un Algoritmo di ConsensoLa blockchain - Cos'è un Algoritmo di Consenso
La blockchain - Cos'è un Algoritmo di Consenso
 
Smau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICToSmau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICTo
 
Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?
 
Smau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICToSmau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICTo
 
Blockchain dove il free software incontra la finanza - novembre 2021
Blockchain   dove il free software incontra la finanza - novembre 2021Blockchain   dove il free software incontra la finanza - novembre 2021
Blockchain dove il free software incontra la finanza - novembre 2021
 
Professor Ernesto Hofmann - Blockchain
Professor Ernesto Hofmann - BlockchainProfessor Ernesto Hofmann - Blockchain
Professor Ernesto Hofmann - Blockchain
 
BlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuitoBlockChain e Token Digitali - Webinar gratuito
BlockChain e Token Digitali - Webinar gratuito
 
Custodia unint
Custodia unintCustodia unint
Custodia unint
 
Rivoluzione blockchain: il futuro della collaborazione?
Rivoluzione blockchain: il futuro della collaborazione?Rivoluzione blockchain: il futuro della collaborazione?
Rivoluzione blockchain: il futuro della collaborazione?
 
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
 
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
Tecnologia Blockchain E Governance Decentralizzata: Lo Stato È Ancora Necessa...
 
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e ZcashProtocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
 
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
Blockchain e Smart contracts. Siamo alla vigilia di una rivoluzione?
 
Bitcoin &amp; blockchain
Bitcoin &amp; blockchainBitcoin &amp; blockchain
Bitcoin &amp; blockchain
 
Blockchainvis Backend
Blockchainvis BackendBlockchainvis Backend
Blockchainvis Backend
 
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
Marco Spada, Maria Perugini DirICTo - SMAU Milano 2017
 
Bitcoin and blockchain
Bitcoin and blockchainBitcoin and blockchain
Bitcoin and blockchain
 

Come interagire con la blockchain di Bitcoin

  • 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.