Introduzione
Scopo del Corso
Obiettivi
- Capire l’architettura e il funzionamento di blockchain
- Esaminare i maggiori esempi moderni di blockchain
- Comprendere i problemi maggiori
- Valutare le possibilità evolutive
Non Obiettivi
- Usare particolari criptovalute in pratica
- Installare sofware specifico o compiere esperimenti pratici sulla rete pubblica
- In futuro a breve vi saranno certamente tools diversi da quelli odierni
- Scrivere Smart Contracts
- Richiede il setup di un blockchain con molti nodi
- Richiede l’apprendimento di un linguaggio
- Non è chiaro neanche quale sarà il linguaggio prescelto
Non è software per PC individuali!
Licenza
La presente documentazione è distribuita secondo i termini della GNU Free Documentation License Versione 1.3, 3 novembre 200t8.
Ne è garantita assoluta libertà di copia, ridistribuzione e modifica, sia a scopi commerciali che non.
L'autore detiene il credito per il lavoro originale ma nè credito nè responsabilità per le modifiche.
Qualsiasi lavoro derivato deve essere conforme a questa stessa licenza.
Il testo pieno della licenza è a:
https://www.gnu.org/licenses/fdl.txt
Blockchain
Bitcoin e altre criptovalute sono basate sul Blockchain.
La tecnologia Blockchain permette altre soluzioni:
- Smart Contracts
- Codice decentralizzato eseguito automaticamente
- Smart Properties
- Asserzioni di proprietà decentralizzate e indubitabili
- Esempio: identità, possesso di oggetti, ecc.
Blockchain è una tecnologia disruptive.
Vi sono molte aspettative, ma sono plausibili?
Problemi e limitazioni:
- Insufficiente rateo di transazioni
- Requisiti di storaggio infiniti
- Necessità di essere costantemente online e che tutta la rete sia (quasi sempre) visibile
E’ necessaria fantasia per il futuro.
Gartner Hype Cycle
Gartner Hype Cycle 2016
Gartner Hype Cycle 2018
Gartner Hype Cycle 2022
Origini
David Chaum (1984): Digicash (eCash)
- Blind Signature: firma elettronica di conferma del cash token senza conoscenza del contenuto
- Registry centralizzato per impedire la spesa doppia
- Comunicazione Anonima (mix networks)
Adam Back (1997): hashcash
- Originariamente per impedire mail spamming
- Pricing Functions : problemi con costo computazionale discreto da risolvere prima di avere accesso ad una risorsa (Cynthia Dwork e Moni Naur)
- Alla base del concetto di Proof-of-Work
Wei Dai (1998): b-money
- Introdotta la rete peer-to-peer con replica dei dati su tutti i nodi
Nick Szabo (2005): BitGold
- Introduce il concetto di Smart Contracts come valore distribuibile oltre al denaro elettronico
Hal Finney (2005)
- Forse il creatore incognito di Bitcoin
- Combinazione delle idee precedenti, ma ancora un'autorità centrale
- Morto 2014 di SLA, criogenicamente preservato
Satoshi Nakamoto (2009): Bitcoin
- Persona fittizia e pseudonima
- Tutte le idee precedenti, più il Blockchain
Blockchain si è evoluto dalla Moneta Elettronica.
Il denaro elettronico è stato, almeno originariamente, fortemente osteggiato dalle autorità nazionali, particolarmente americane, a causa delle sue proprietà intrinseche:
- viola la prerogativa del Re di battere moneta
- se anonimo, permette attività illegali
- evasione fiscale
- riciclaggio
- pagamenti per oggetti o servizi illegali
- non è gravato da debiti
- non è gestito da Banche Centrali
Concetti
Bitcoin e Blockchain
Il Bitcoin e il Blockchain sono cose diverse.
Il Bitcoin è un valore virtuale di scambio accettato consensualmente da due parti e basato sulla tecnologia del Blockchain.
Viene chiamato una criptovaluta, termine legalmente improprio.
Un blockchain è un archivio immutabile in una rete decentralizzata il cui contenuto ha il consenso da parte di tutti i nodi della rete.
Il blockchain è replicato su tutti i nodi della rete partecipante.
Viene esteso solo in modo append, da un solo nodo della rete per volta. L’estensione si propaga rapidamente a tutti i nodi della rete.
Primitive Crittografiche
Blockchain è basato su caratteristiche di crittografia, le firme digitali e le funzioni di hash, che lo rendono praticamente immutabile una volta scritto.
Hash
Lo hash ha sempre la stessa lunghezza, qualunque sia la lunghezza dell’origine:
- Dipende dall’algoritmo
Un leggero cambiamento all’origine produce uno hash molto differente
- Proprietà di Diffusione
Collisione: due origini diverse che producono lo stesso hash
- Praticamente impossibile
Chiavi Asimmetriche
Struttura di un Blockchain
Catena di Blocchi
Un blocco è essenzialmente una selezione di transazioni riunite insieme in modo logico, e corredato di campi amministrativi extra, il cui numero e struttura dipendono dall'implementazione specifica.
Ogni blocco ha un campo che contiene lo hash del blocco precedente, formando così un anello della catena.
Cambiare anche un solo byte del blocco corrente cambia completamente il suo Hash:
-
Rompe la catena: i blocchi seguenti non lo trovano più
-
Per ricomporre la catena il blocco seguente deve ricalcolare il suo hash, quindi quello seguente, ecc.
- Può richiedere tempi enormi
-
Inoltre il Blockchain ricomposto deve essere ridistribuito a tutti i nodi della rete
Non è praticamente possibile modificare il Blockchain
Blockchain e Rete
Tipi di Nodi
In un blockchain vi sono due tipi di nodi:
- Quelli che possono estendere il blockchain: detti miners o, stranamente, clients del blockchain (sono funzionalmente dei server)
- Grossa potenza di calcolo
- Vasta capacità di storaggio di dati
- Elevata banda passante di rete
- Quelli che possono usare il blockchain emettendo transazioni: i wallet
- Hanno interfaccia umana (web o app dedicata)
- Gestiscono identificativi detti indirizzi, chiavi pubbliche casuali univoche in rete - con corrispondenti chiavi private e segrete
Trasferimento di Valore
- Ogni partecipante ha un indirizzo, la sua Chiave Pubblica
- Nota a tutti
- Non rivela l’identità del possessore
- Il mittente invia valore all’indirizzo del destinatario
- Il valore inviato è una Transazione
- Il mittente firma la transazione con la sua Chiave Privata
- Il trasferimento deve essere
- Noto a tutti e Indisputabile
- Irreversibile
Sequenza di Operazioni
Gerarchia
L’unità di registrazione dati è la Transazione, un qualsiasi documento firmato digitalmente dall’autore.
- Transazioni di valore, basati su Criptovaluta
- Programmi eseguibili, detti Smart Contracts
- Qualsiasi attributo registrabile, detto Smart Property
Le transazioni sono inviate dal wallet dell’autore ad un Pool di Transazioni pendenti, distribuito e temporaneo.
Il miner preleva le transazioni dal pool e le pone in un Blocco Dati.
Il blocco dati prescelto dal meccanismo di consenso viene perennemente aggiunto alla catena di blocchi, il Blockchain.
- Cancellato dal pool di transazioni pendenti
- Tutti i nodi della rete possono vedere il Blockchain
Sistemi Distribuiti
Tipi di reti:
- Centralizzate
- Tutti i nodi hanno un link
- Client-Server
- Decentralizzate
- Alcuni nodi hanno più link
- Internet
- Distribuite
- Impossibile perchè non scalabile
- Almeno tre link per nodo
Il Teorema CAP
Brewer (1998)
Un sistema distribuito può avere al massimo due delle tre seguenti proprietà desiderabili:
- Consistenza (Consistency)
- Tutti i nodi possiedono la stessa copia dei dati.
- → Algoritmi di Consenso
- Disponibilità (Availability)
- Sistema accessibile e funzionante.
- → State Machine Replication
- Resilenza al partizionamento (Partition tolerance)
- Se un sottosistema fallisce, il rimanente continua a funzionare correttamente.
- → Tolleranza a Nodi Bizantini
Generali Bizantini
Un nodo può fallire totalmente o parzialmente per due motivi:
- accidentale - per cause 'naturali' o errori software
- intenzionale - per comportamento malefico dell'amministratore del nodo
Un nodo con comportamento irrazionale o imprevedibile si chiama Nodo Bizantino.
Svariati teoremi matematici dimostrano il numero massimo di Nodi Bizantini accettabile con vari algoritmi di Consenso.
Problema risolto nel 1999 da Castro e Liskov: Practical Byzantine Fault Tolerance (PBFT).
Consenso
Accordo su un unico valore di dati.
Relativamente facile raggiungere il consenso in un sistema centralizzato, molto più complesso in un sistema distribuito.
Richiede normalmente un interscambio di numerosi messaggi tra i nodi partecipanti.
Requisiti del consenso:
- Accordo - tutti i nodi onesti hanno lo stesso valore
- Terminazione - il procedimento di intercambio messaggi ha una durata finita (e più breve possibile)
- Validità - il valore finale è il valore iniziale proposto da almeno uno dei nodi onesti
- Resilienza - è tollerata la presenza di un certo numero di Nodi Bizantini
- Integrità - nessun nodo onesto 'cambia idea' durante il procedimento di consenso
Due tipologie di Meccanismo di Consenso:
Byzantine Fault Tolerance
- Nessun nodo è prominente
- Interscambio di un certo numero di messaggi firmati, con regole prestabilite di selezione del migliore, fino ad un quorum minimo.
- E' predefinita una qualità che determina il migliore.
Basati su Leaders
- Un nodo decide. Il nodo può essere eletto.
- Ruoli diversi dei nodi:
- Proposer, Acceptor, Learner (Paxos)
- Follower, Candidate, Leader (RAFT)
Possono esserci sistemi ibridi: rari, perchè diventano presto complessi.
Definizioni
Blockchain
Meccanismo di consenso decentralizzato.
Registro distribuito di transazioni, raggruppate in blocchi. (Distributed Ledger Technology - DLT).
Lista collegata che usa hash anzichè puntatori (Hash List).
Indirizzi
Identificativi univoci che denotano gli originanti e i riceventi in una transazione.
Sono solitamente delle chiavi pubbliche o derivati.
Non corrispondono ad un utente fisico: ogni utente può avere più indirizzi, ma un indirizzo non può corrispondere a più utenti.
E' suggerito al limite che un utente generi un nuovo indirizzo per ogni transazione, se vuole evitare correlazioni e mantenere l'anonimato.
Non è affatto detto che un utente fisico debba esistere; gli indirizzi possono riferirsi ad entità software.
Transazioni
Una transazione è l'unità fondamentale di un Blockchain e rappresenta il trasferimento di valore tra due indirizzi.
Anche quando non vi è una transazione esplicitamente di bonifico, esistono quasi sempre dei costi di transazione, commissioni, ecc.
Blocchi
Un blocco è composto da una o solitamente più transazioni, più i campi di gestione.
Peer-to-Peer
E' una rete di pari, senza differenze gerarchiche a livello software di rete. Tutti i nodi possono, in linea di principio, inviare e ricevere messaggi.
Se vi sono limitazioni d'accesso, sono configurate a livelli software superiori.
Linguaggio di Scripting
Una transazione può essere corredata da una procedura eseguibile, scritta in un opportuno linguaggio che dipende dall'implementazione. Questo aggiunge un livello di intelligenza alla transazione, descrivendo condizioni e vincoli alla sua esecuzione.
Vi sono molti linguaggi di scripting in varie implementazioni, ma non esistono ancora standard.
Turing Complete
Un linguaggio di programmazione è detto Turing Complete se può emulare in tutti i suoi aspetti una Macchina di Turing, un nastro infinito con testina di lettura e scrittura e movimento bidirezionale. Si tace di solito che qualsiasi computer fisico ha memoria finita.
In pratica un linguaggio imperativo con costrutti decisionali e di ciclo viene considerato Turing Complete.
Non esiste correlazione tra la sicurezza di un linguaggio e la sua completezza di Turing. La sicurezza, formale o meno, è ad un livello più alto.
Macchina Virtuale
E' una estensione alla struttura di un Blockchain che permette l'esecuzione di procedure Turing Complete presenti nelle transazioni.
Evidentemente sono i nodi che gestiscono le transazioni, non il Blockchain stesso, che definiscono le procedure.
Le macchine virtuali sono fortemente dipendenti dall'implementazione e non esistono ancora standard affermati o tentativi.
Nella giusta ottica, si può adottare l'astrazione che il Blockchain è una singola Macchina Virtuale Distribuita.
Macchina a Stati Finiti
Una transazione compie il passaggio da uno stato iniziale ad uno finale, ed è rappresentabile nell'ambito della teoria informatica degli Automi a Stati Finiti.
Nonce
E' un campo di un blocco che contiene un valore pseudocasuale.
L'intero hash del blocco, incluso il nonce ha certè proprietà definite a priori, per esempio deve essere inferiore ad un certo valore. Con certi schemi di consenso, chi genera il blocco deve inventare un nonce che produca queste proprietà. Dato che lo hash non è invertibile, il nonce può essere solo indovinato. Questo implica numerosi tentativi e capacità computazionale notevole.
Smart Contract
Una particolare procedura inglobata in una transazione ed eseguita dalla Macchina Virtuale, con Logica Business che risolve determinati problemi.
Visto che un Blockchain non è modificabile, anche uno Smart Contract non lo è.
Dipende fortemente dall'implementazione e linguaggio di scripting e non è presente in tutti i tipi di Blockchain.
Ledger
In ambito di Contabilità il vocabolo inglese ledger corrisponde a Prima Nota o Libro Mastro.
In contesto di Blockchain possiamo meglio parlare di Registro o Archivio di Protocollo.
Meglio usare la parola inglese che è contestuale.
E' un database con un'unica tabella, di dimensione potenzialmente infinita e scrivibile solo in modalità append.
Il ledger di Blockchain è distribuito ad una certa quantità di nodi di rete. Possiamo distinguere due tipi di nodi:
- Full Nodes - che contengono una copia dell'intero ledger
- Client Nodes - che non lo contengono, p.es. Smartphone, ecc.
Sia i nodi pieni che i client possono eseguire transazioni, possedendo sufficiente criptovaluta sia per le transazioni che i costi aggiuntivi d'esercizio. Le transazioni sono compiute tramite un programma client, il Wallet.
Il nodo pieno può occuparsi dell'attività detta mining cioè contribuire:
- alla verifica delle transazioni
- al tentativo di costruzione di nuovi blocchi
Sequenza di Estensione
La sequenza di estensione del Ledger è la seguente:
-
Un nodo inizia una transazione e la firma con la sua chiave privata
-
La transazione è propagata a molti nodi tramite protocolli broadcast, effettivamente inserita in un transaction pool distribuito di transazioni pendenti.
-
Più di un nodo verifica la validità della transazione.
-
Più nodi miner inseriscono la transazione in un blocco in costruzione.
-
Il meccanismo di consenso decide quale dei blocchi in costruzione alternativi è l'unico accettabile.
-
Il blocco è aggiunto al Blockchain ed estende il Ledger. La transazione può ritenersi confermata, anche se molte implementazioni preferiscono attendere ancora la generazione di altri blocchi successivi.
Modello Software di Rete
Blockchain può essere visto come un livello in un modello di comunicazione distribuita peer-to-peer e a sua volta basato sulla rete Internet.
Proprietà
Proprietà di un Blockchain
Requisite:
- Consenso Distribuito - Accordo su unico stato del Blockchain.
- Verifica delle Transazioni - Solo transazioni valide vengono inserite nel Blockchain.
- Trasferimento di Valore - Le transazioni trasferiscono valore tra indirizzi identificativi.
- Immutabilità - Il Blockchain non è modificabile in pratica.
- Univocità - Ogni transazione compare una sola volta. Questo evita, per esempio, la doppia spesa.
- Comunicazione Peer-to-Peer – i nodi comunicano tra loro in una rete dove nessuno è prominente.
- Estendibilità – il blockchain cresce col tempo.
Desiderabili:
- Generazione di Valore - Può venir generata nuova criptovaluta.
- Confidenzialità - Si può evitare di rivelare l'identità dei partecipanti alle transazioni.
- Smart Contracts -Possono venir registrate azioni condizionali da intraprendere automaticamente.
- Smart Properies - Può venir registrata l'associazione indubitabile di un asset ad un indirizzo, e quindi al detentore della chiave privata che può gestire quell'indirizzo.
Livelli di Blockchain
- Blockchain 1.0
- Usato dalle criptovalute.
- Bitcoin e tutti i successivi Altcoins
- Tecnologia ben nota, ma passibile di migliorie e innovazioni.
- Blockchain 2.0
- FinTech: azioni, derivate, opzioni, bond, ecc.
- Altri applicativi basati su contratti.
- Dimostratamente funzionante, ma richiede evoluzione.
- Blockchain 3.0
- Applicativi non finanziari in vari ambiti: governo, salute, media, giustizia, ecc.
- Tecnologia ancora sperimentale e cutting edge, che di sicuro avrà sostanziali modifiche.
- Blockchain 4.0
- Diffusione globale, incluso Internet of Things (IoT).
- Ancora a livello di visione, con pochi esperimenti e nessuna implementazione solida. Web 3.0.
Classificazione
Visibilità in rete
Public Blockchains
- Aperti a chiunque voglia parteciparvi. Non appartengono a nessun ente giuridico.
- La Governance è nelle mani di un gruppo volontario.
- L’applicazione di regole da parte di autorità pubblica è difficile o impossibile.
- Nonostante le proprietà anarchiche spesso funzionano bene e sono gestiti responsabilmente.
Private Blockchains
- Appartengono ad un ente giuridico, ditta, consorzio, gruppo, ecc. che ne detiene la Governance.
- L'accesso è limitato secondo modalità definite dal possessore.
- Possono avere soluzioni ibride o estreme.
Fully Private Blockchains
Private e non decentralizzate, che usano la tecnologia principalmente come archiviazione di dati. Possono essere p.es. enti governativi, o sedi separate di vaste organizzazioni.
Semi-private Blockchain
Soluzioni ibride, parte pubbliche e parte private. La parte privata ha un possessore formale. Sono spesso iniziative private derivate e legate ad una chain pubblica.
Sidechains
Formalmente Pegged Sidechains, con criptovaluta che può essere scambiata col chain principale, secondo regole precise e vincolanti.
Diritti d’Accesso
Permissionless Ledger
- Chiunque può partecipare al blockchain.
- Basati sull’Assenza di Fiducia a priori, sostituita da meccanismi matematici e crittografici.
- Possono essere public o private.
Permissioned Ledger
- I partecipanti sono noti e hanno già fiducia ottenuta precedentemente con altri mezzi. La presenza di strati di sicurezza ulteriori e indipendenti, fa sì che l'esistenza di Nodi Bizantini possa essere ignorata, e i meccanismi di consenso semplificati.
- Non devono necessariamente essere chain private, quello che è importante è il meccanismo di controllo accesso funzionale e funzionante.
Accesso alla Rete
MainNet soltanto
- Esiste solo una rete principale di scopo globale, su cui la valuta associata ha valore di mercato.
- Per sua natura architettonica non è possibile avere altre blockchain locali che usino Internet.
- Ci possono essere una o più TestNet, in cui la valuta ha solo valore interno.
- La valuta di test viene distribuita in siti Faucet.
LocalNet possibile
- Sono possibili reti interne a scopo limitato.
- Viene usata la tecnologia del blockchain, ma ristretta ad una comunità come una ditta o un gruppo definito.
- Possono costruire Blockchain Privati.
Uso di Criptovaluta
Tokenized Blockchains
- Per il loro funzionamento richiedono che gli utenti spendano qualche tipo di token, p.es. Criptovaluta.
- Vi sono commissioni d’uso del blockchain per coprire le spese ed incentivare i miners.
Tokenless Blockchains
- Non c'è bisogno di token di nessun tipo. Il costo delle transazioni è dichiarato nullo.
- La copertura dei costi è a livello esterno al blockchain.
- A volte gli utenti adoperano le risorse del blockchain in proporzione al loro investimento o possesso di criptovaluta.
Licenze Software
Open Source
- Completa visibilità del software usato sia dai Nodi pieni che dai Wallet.
- Repository su GitHub.
- Vari tipi di licenze aperte.
Di proprietà
- Il codice sorgente appartiene ad un possessore e non è visibile.
- Gli utenti devono fidarsi della bontà del software ed onestà del vendor.
- Finora il pubblico degli utenti non si è fidato delle soluzioni proprietarie.
Problemi
Problemi del Blockchain
- Consenso
- Algoritmi efficaci, veloci e non dispendiosi di risorse
- Bitcoin consuma elettricità come la Danimarca
- Possibilità di numero elevato di transazioni
- Storaggio
- Metodi e luoghi per la ritenzione e l’accesso con enormi quantità di dati
- L’infinito non è possibile
- Eliminazione di dati obsoleti o inutilizzati
- Comunicazione
- Garanzia di link non controllati o impediti
- Protocolli di rete intrinsecamente efficienti
- Naming
- Denominazione comprensibile dei nodi e degli indirizzi
- Garanzia di unicità
Consenso
Tipi di Consenso a Elezione
Nakamoto Consensus
Consenso ottenuto sull'elezione o autoelezione di un singolo, che decide quale sia il prossimo blocco valido da inserire nel chain.
La velocità di decisione determina la velocità di produzione blocchi, e quindi il flusso di transazioni accettabili per unità di tempo.
Proof of Work (PoW)
- Consenso basato sulla dimostrazione di aver compiuto molto lavoro computazionale per poter costruire un blocco valido.
- Usato attualmente da molte implementazioni, incluso Bitcoin e la versione corrente di Ethereum.
- E' un metodo di provato successo e resistente agli attacchi.
Il requisito di capacità computazionale corrisponde purtroppo a vasti consumi di energia elettrica.
Al momento questo è il singolo metodo che dà più fiducia, ma si stanno alacremente valutando alternative più ecologiche.
Proof of Stake (PoS)
- Consenso basato sull'investimento in criptovaluta.
- Vengono scelti i blocchi da chi possiede più criptovaluta e/o da più tempo, oppure i nodi più ricchi hanno maggior peso di voto nella scelta del blocco accettabile (Delegated PoS).
Il metodo è più efficiente del PoW e consuma meno, ma vi sono tutta una serie di situazioni che possono causare un double spending o una fork ostile. Le implementazioni che adottano questo metodo introducono anche una serie di controlli per evitare questi effetti.
Altre possibilità:
Deposit-based
Il peso di voto nella scelta di un blocco è proporzionale al valore di un deposito in criptovaluta, che può essere perso in caso di comportamenti provatamente scorretti.
Proof of Importance
Estensione del PoS con algoritmi che tengono conto non solo degli asset di criptovaluta posseduti, ma anche del volume di scambio effettuato in criptovaluta.
Reputation-based
Il peso di voto è influenzato dalla reputazione del votante, ottenuta con meccanismi simili ai likes. Si sospetta che possa essere un metodo polarizzante, a feedback positivo, fino potenzialmente a superare il 50% del controllo consenso.
Byzantine Consensus
Metodi che richiedono molti interscambi di messaggi di voto prima di arrivare ad un accordo.
Teoricamente sopportano un numero più elevato di Nodi Bizantini e sono sistemi più equi, ma soffrono di relativa lentezza di produzione dei blocchi.
Practical Byzantine Fault Tolerance (PBFT)
L'algoritmo classico basato su interscambio di messaggi potenzialmente tra nodi qualsiasi.
Federated Byzantine Consensus
Anche chiamato Stellar Consensus Protocol (SCP). Essenzialmente le transazioni sono validate da un sottogruppo di nodi più fidati, che determinano il blocco prescelto.
Nuovi Metodi di Consenso
Idee nuove basate su modi diversi di concepire il concetto stesso di consenso.
Proof of Elapsed Time
Basato su hardware particolare, al momento fornito solo da Intel SGX, il processore con Software Guard Extensions, che crea l'ambiente Trusted Execution Environment (TEE).
Al momento Hyperledger (soprattutto in variante IBM) sta considerando questa soluzione.
Quantum Byzantine Agreement
Protocollo molto teorico ed esso stesso bizantino basato su quantum computer a 4 qubits e che usa proprietà dello entanglement quantistico (uso del Principio di Indeterminazione di Heisenberg). Futuribile, forse.
PoW e Difficoltà
Il livello di difficoltà è ricalibrato regolarmente per produrre un tempo medio noto di generazione di un nuovo blocco.
Con Bitcoin ~10 minuti.
Questo serve:
- A dare una chance anche al piccolo miner
- A impedire che un Mining Pool conquisti la maggioranza assoluta
- Controlla sempre quale blocco sia scelto
- Può eseguire double spending
Diverse criptovalute hanno tempi e algoritmi diversi
- Correlaziione tra valore e difficoltà
Pool Hopping (Time Warp Attack)
- Mining quando la difficolta è bassa e il valore alto
- Sospendere quando la difficoltà aumenta
- Rientrare quando ritorna bassa
Algoritmi di Difficoltà
- Bitcoin
- Ricalcolata ogni 2016 blocchi. Molto vulnerabile a Time Warp Attack, ma difesa intrinseca data dall’elevato numero di miners.
- Kimoto Gravity Well (KGW) [Megacoin]
- Difficoltà ricalcolata ad ogni blocco. Vulnerabile a Time Warp Attack.
- Dark Gravity Wave (DGW) [Darkcoin]
- Media mobile con esponenziali multipli e funzione di smoothing. Per combattere il Time Warp Attack.
- DigiShield [Zcash]
- Ogni blocco o ogni minuto. Più veloce di KGW.
- Basato su una media di più blocchi precedenti.
- MIDAS (Multi Interval Difficulty Adjustment System)
- Rapido responso a cambiamenti improvvisi di hashrate.
- Algoritmo molto complesso.
Storaggio
I dati possono essere storati (conservati) direttamente all'interno dei blocchi del Blockchain, e questa è la soluzione tradizionale di Bitcoin ed Ethereum.
Vi sono due principali problemi di scalabilità:
- la quantità di dati cresce col tempo e la diffusione delle tecnologie Blockchain
- ogni nodo miner deve scaricare dalla rete tutto il Blockchain corrente e mantenerlo costantemente aggiornato. Si parla tipicamente al momento di 100+ GB per Bitcoin ed Ethereum
La soluzione deve necessariamente andare verso lo storaggio dati esterno al Blockchain, e l'inserimento nel chain di soli riferimenti ai dati veri.
Distributed Hash Tables (DHT)
I dati sono distribuiti sui sistemi dei partecipanti, come con Torrent
Problemi:
- I partecipanti non tengono i dati all'infinito, che invece è un requisito del Blockchain. Anche in caso di numerose repliche non è garantita la conservazione di tutti i dati.
- In un determinato istante alcuni dati possono essere inaccessibili perchè i nodi che li detengono sono offline.
Inter Planetary file System (IPFS)
Risolve i problemi del DHT e si propone in futuro di sostituire interamente il protocollo HTTP.
E' basato su Kademilia DHT per lo storaggio e Merkle DAG (Directed Acyclic Graphs) per le ricerche dati.
Include un modello di versionamento dei dati simile a quello di Git.
L'incentivo alla ritenzione dati è dato dal pagamento ai nodi in criptovaluta, come nel sistema Filecoin.
Ethereum Swarm e Whisper
Sono prodotti dell'ecosistema Ethereum e in continua evoluzione. Swarm è un sistema cluster per lo storaggio, Whisper è un protocollo di comunicazione.
Maidsafe
Altro progetto che intende sostituire HTTP e formare una rete più efficiente e sicura.
Basato su crowdsourcing e il pagamento servizi di storaggio nella criptovaluta Safecoin.
BigChainDB
Iniziativa Open Source con estensioni Enterprise. Combina caratteristiche di database distribuiti NoSQL con cartteristiche del Blockchain.
Si dice compatibile con IPFS e i prodotti Ethereum. Può essere un metodo promettente nel non lontano futuro.
Problemi di Networking
- Problemi Tecnici
- Latenza
- Banda
- Tempo di Processamento
- Problemi Sociopolitici
- Censura
- Governance e Controllo
Problemi Tecnici
Velocità della luce → Latenza mondiale: 1 secondo.
Banda media mondiale: 10 MB/s, serve 1 GB/s.
Tempo sincronizzazione iniziale di Ethereum: 8 ore.
Quando stabile, latenza di intercambio messaggi:
- Verifica blocchi e trransazioni
- Raggiungimento del consenso
- Notifica di eventi, come nuovo blocco
- Manutenzione di stato
- Gossip: queries, comunicazione conWallets, …
Notifica nuovi blocchi in Ethereum: ~30 secondi
- Generazione di Fork temporanee (frequenti)
- Necessità di Tempo di Ritenzione dei blocchi
Per un blocco: tempo propagazione < tempo generazione
Blocchi grandi:
- più tempo di propagazione
- più transazioni al secondo e guadagno per i miner
- più efficienza di storaggio
- meno sicurezza contro fork
Generazione veloce:
- più stabilità di rete
- più velocità di validazione
- meno transazioni per blocco
- meno efficienza di storaggio
Transazioni al Secondo (TPS)
Metrica più importante per la scalabilità.
Attualmente:
- Bitcoin: ~5 TPS
- Ethereum: ~20 TPS
- VISA: ~2,000 TPS
In futuro:
- Economia mondiale: 10,000 TPS
- Internet of Things: 100,000 TPS
Soluzioni Proposte
Meno blocchi sui nodi
- Sharding - l’intero chain è in un gruppo di nodi, non in ogni nodo: nuovo Ethereum
- Comunicazioni intra-shard e inter-shard
- Sharding di solo Blockchain o anche Macchina a Stati: Harmony
Meno partecipanti al consenso
- Numero limitato di decisori, es. con Delegated Proof of Stake: EOS, Tron
- Eletti con voto o decisi a priori: Fabric
Soluzioni gerarchiche
- Sidechains con protocolli diversi: Lightning
- Reti di Blockchains a più livelli: Cosmos
Problemi Sociopolitici
Le implementazioni correnti di Blockchain sono ultimamente basate su Internet.
Per quanto forse all'inizio Internet fosse una rete a mesh, ovvero con tendenza a diventare sempre più distribuita, ora non lo è certamente più.
Tutto il traffico dei nodi finali passa attraverso gerarchie di Internet Service Providers (ISP), che per ragioni politiche, dei servizi, militari o solo commerciali, possono filtrare il transito dei dati.
Sono auspicabili reti fisiche alternative se si vuole mantenere l'indipendenza delle applicazioni Blockchain.
- Un esempio di rete a mesh è dato da Firechat.
Il problema è veramente di Governance globale, non tecnico.
Naming
Il teorema di Zooko Wilcox-O'Hearn parla delle proprietà dei Naming Systems in generale.
I requisiti di un nome sono:
- Sicuro - non cambiabile senza la dovuta autorità
- Decentralizzato - senza un elemento radice di controllo
- Significativo - per gli esseri umani, per esempio facilmente ricordabile
L'asserzione di Zooko è che sono possibili solo due di queste proprietà.
Esempi:
- DNSSec è sicuro e significativo ma non decentralizzato
- Gli indirizzi Onion Routing (Tor) e Bitcoin sono sicuri e decentralizzati, ma incomprensibili agli umani
Namecoin
E' un Ledger distribuito per la registrazione di coppie nome=valore
. Il record può avere la lunghezza massima di 520 bytes.
Possiede la criptovaluta pure chiamata Namecoin (NMC).
- La registrazione ha un costo in Namecoins.
- I Namecoins sono acquistabili in altre criptovalute, come Bitcoin o Ethereum.
I valori registrati scadono dopo 35999 blocchi aggiunti (circa 200 giorni). I valori possono essere rinfrescati ad un costo aggiuntivo. Le chiavi sono valide all'infinito e non devono essere rinfrescate.
Le operazioni di registrazione si effettuano tramite il client Namecoin Wallet, che permette di spendere NMC anche per altri scopi.
Namecoin permette la creazione di Namespaces, ambiti ristretti di visibilità delle chiavi. Alcuni namespaces sono già definiti:
a
- dati di applicativid
- nome di dominio senza TLSds
- nome di dominio con accesso TLSid
- identitàis
- identità sicurap
- prodotto
Una chiave completa assume la forma, p.es. d/example.com
. Per convenzione i client più importanti riconoscono i namespaces principali.
Namecoin è Open Source e sperimentale, ma si sta affermando. Molte sue iniziative coinvolgono la difesa della privacy, dei diritti libertari, dell'anonimato, p.es.:
- NameID, la registrazione di identificativi
- OpenID identità digitali globali e sicure
Il Dominio .bit
Il Blockchain ha bisogno di un Name Service distribuito.
L'implementazione Namecoin è ideale per il mappaggio necessario ad un Name Server. L'aggancio al DNS è tramite il dominio .bit.
I browser devono possedere plugins o software che interagisca con la rete Namecoin, e supportare i namespaces d
e ds
. P. es. il plugin di Firefox FreeSpeechMe.
Quello che ottengono è il valore associato alla chiave, che è il nome di dominio. Spesso tale valore è un indirizzo Blockchain.
Il dominio .bit non è registrato da ICANN, RIPE, ecc. e non è raggiungibile tramite i root servers del DNS tradizionali, tipicamente basati sul software BIND. Esiste software che lo riconosce però, ad esempio OpenDNS, così come riconosce parecchie altre radici DNS alternative.
Decentralizzazione
Cosa vogliamo dal Blockchain
- Criptovaluta
- Valore di scambio per prodotti e servizi
- Mezzo di finanziamento del Blockchain
- Asset di investimento (Hodling)
- Smart Contract
- Registrazione di transazioni future
- Smart Entity
- Database irrefutabile e resiliente
Blockchain è una tecnologia.
Su di esso si basano applicativi decentralizzati.
Tramite gli applicativi si possono costruire organizzazioni decentralizzate.
Smart Contract
E’ un programma:
- Sicuro – non può essere contraffatto o negato
- Eseguito automaticamente – in un tempo finito e ragionevole
- Non interrompibile – va a compimento
- Sicuramente eseguito – da qualsiasi nodo di rete
- Ben definito - semanticamente
Definisce un contratto in un linguaggio di programmazione:
- Definisce i termini del contratto
- Determina l’evento che ne causerà l’esecuzione
Mantiene uno stato interno consistente:
- Deterministico
- Macchina a stati finiti
Motto: Code is Law
- Ma: vera accettabilità legale nel modo reale?
Oracle
Meccanismo che permette ad uno Smart Contract di accedere ai dati dal mondo esterno:
- Può firmare digitalmente i dati
- Può derivare i dati da un’altra blockchain
Problema dell’integrità dei dati dal Data Source, p.es. tlsnotary.com
A volte fornito come servizio:
www.oracleize.it
www.realitykeys.com
Organizzazioni Decentralizzate
Ve ne sono due tipi fondamentali.
Decentralized Organization (DO)
Un programma software che:
- esegue in un Blockchain
- è composto di Smart Contracts
- modella l'organizzazione di un ente umano, con ruoli e protocolli
A questo livello richiedono ancora interazione umana - input, decisioni.
Decentralized Autonomous Organization (DAO)
Una DO che procede autonomamente nell'espletamento delle attività programmate, senza alcun intervento umano.
Vi sono comunque persone coinvolte nel funzionamento di un DAO:
- Curator - per la manutenzione del codice
- Contractor - personale d'aiuto tipicamente esterno e temporaneo
Sottoinsiemi di DAO:
-
Decentralized Autonomous Corporations (DAC) - che si mappano su corporazioni (profit) veramente esistenti e con identità giuridica. Un DAC sarebbe finanziato con normale emissione di partecipazioni e avrebbe uno schema di pagamento dividendi.
-
Decentralized Autonomous Societies (DAS) - che si mappano su organizzazioni (no-profit) esistenti: Stato, NGO, ecc. Specie a livello di Pubblica Amministrazione un DAS può teoricamente aumentare l'efficienza, ridurre gli sprechi, evitare la corruzione. Tecnicamente è fattibile, ma politicamente?
Applicativi Decentralizzati
DAOs, DACs, DASs sono basati su programmi composti da più Smart Contracts: gli Applicativi Decentralizzati (DApp - Decentralized Application).
Se ne distinguono tre tipi:
- Tipo I - girano sul proprio Blockchain, implementato appositamente
- Similitudine: sistema operativo
- Tipo II - girano su un Blockchain preesistente
- Similitudine: software applicativo
- Tipo III - non girano su un Blockchain, ma ne usano i protocolli
- Similitudine: plugin per un applicativo
Requisiti di un DApp
(David Johnston, The General Theory of Decentralized Applications, Dapps)
-
Un DApp deve essere Open Source, autonomo e non controllato. Ogni miglioria software è adottata a maggioranza, non imposta.
-
I dati devono essere crittati e mantenuti in un Blockchain
-
Un DApp deve essere basato su un token o criptovaluta per la gestione del valore
-
La generazione e gestione della criptovaluta devono essere basate su un meccanismo di consenso
La generazione di valore non è limitata al mining ma può estendersi ad altri meccanismi di raccolta fondi.
Il meccanismo di consenso deve essere resistente a varie tipologie di attacchi.
Bitcoin e Criptovalute
Le criptovalute sono monete virtuali basate sulla tecnologia blockchain e servono per acquistare beni o servizi e scambiare valore. Le criptovalute sono composte da codici crittografici, sono autonome e non girano nei normali servizi finanziari, bancari e soprattutto governativi. Le informazioni sulle transazioni in criptovaluta sono memorizzate in un registro digitale decentralizzato, basato tipicamente sulla tecnologia blockchain.
(Wikipedia)
Dal primo esempio di Bitcoin (2008) ad oggi, sono state inventate circa 25000 criptovalute. Più del 98% di loro sono scomparse.
Sempre secondo Wikipedia:
Secondo Jan Lansky, una criptovaluta è un sistema che soddisfa sei condizioni:
- Il sistema non richiede un'autorità centrale, il suo stato è mantenuto attraverso un consenso distribuito.
- Il sistema mantiene un controllo delle unità di criptovaluta e della loro proprietà.
- Il sistema determina se possono essere create nuove unità di criptovaluta. Se tali unità si possono creare, il sistema definisce la loro origine e come determinare il loro possessore.
- La proprietà di una criptovaluta può essere provata solo crittograficamente.
- Il sistema consente di eseguire transazioni nelle quali avviene un cambio di proprietà delle unità crittografiche. La conferma della transazione può essere rilasciata solo da un ente che può provare la proprietà delle criptovalute oggetto della transazione.
- Se vengono date simultaneamente due diverse istruzioni per il cambio di proprietà delle stesse unità crittografiche, il sistema esegue al massimo una delle due.
Jan Lansky, Possible State Approaches to Cryptocurrencies, in Journal of Systems Integration, vol. 9, n. 1, 31 gennaio 2018, pp. 19–31, DOI:10.20470/jsi.v9i1.335
Ci occuperemo qui di esaminare alcune caratteristiche di Bitcoin, come prototipo di criptovaluta per antonomasia.
Struttura di Bitcoin
Blocco e Header
Sono strutture (struct) nel senso del Linguaggio C, in cui Bitcoin è scritto.
Sono relativamente semplici.
Merkle Tree
Un albero di Merkle è un albero in cui ogni nodo foglia è etichettato con l'hash crittografico di un blocco di dati e ogni nodo non foglia è etichettato con l'hash crittografico delle etichette dei suoi nodi figli. Gli alberi hash consentono una verifica efficiente e sicura dei contenuti di grandi strutture di dati.
Il Merkle Hash punta al nodo radice di un Albero di Merkle in cui sono organizzate le transazioni.
Transazioni
Bitcoin è un metodo di registrazione permanente di transazioni monetarie.
La struttura di una transazione è la seguente.
Il Lock Time indica il numero di blocchi o il timestamp del blocco prima che la transazione possa considerarsi valida.
Valida vuol dire che può essere spesa.
La prima transazione si chiama Coinbase e non è considerata valida se non sono stati prodotti almeno 100 blocchi.
Inputs e Outputs
Una transazione può avere più inputs e più outputs.
Struttura di un input (esempio):
Viene importato valore dall'output di indice 0 nella transazione di hash f5d8...
. Il campo scriptSig è una procedura codificata per la verifica della firma del generatore della transazione - un algoritmo crittografico complesso.
Nella stessa transazione è incluso un output (esempio):
Vengono inviati 50 BTC (5000000000 Satoshi) all'indirizzo esadecimale 4043...
, con ulteriori flags di specifica di trattamento.
I valori sono indicati in Satoshi (1 Bitcoin = 100.000.000 Satoshi) per costringere l'uso di un numero intero.
Estensione di Bitcoin
I blocchi sono aggiunti al Blockchain solo dopo verifica multipla delle transazioni e solo se queste fanno parte del blocco che ottiene il consenso.
Meccanismo di Consenso
Il consenso è basato sul metodo Proof of Work.
Occorre trovare un Nonce che, insieme al resto del blocco, produca uno hash inferiore ad un valore determinato. L'unico metodo possibile è basato su tentativi di indovinare il Nonce (Forza Bruta).
Il campo Difficoltà esprime il valore minimo dello hash target.
La Difficoltà viene cambiata a intervalli regolari, nel tentativo di ottenere un nuovo blocco ogni circa 10 minuti.
Il miner del blocco vincente riceve come compenso alcuni BTC. Il compenso per nuovi blocchi diminuisce col tempo, al momento è di BTC 12.50. Il miner percepisce anche un transaction fee da ogni transazione finalizzata.
Le transazioni proposte risiedono temporaneamente in un Transaction Pool finchè non si vedono inserite nel blocco vincente. Se una transazione offre un fee appetibile può venir considerata da più miners nei loro tentativi di generazione blocchi, quindi ha più probabilità di successo.
Blocchi Speciali
- Stale Blocks
- Quando un blocco vince e viene accettato per l'aggiunta al Blockchain, tutti gli altri miners si trovano ad avere Stale Blocks: li abbandonano e ricominciano nella 'gara' col prossimo blocco.
- Orphan Blocks
- Hanno passato il requisito di difficoltà (hash inferiore al minimo), ma prima di venire accettati viene offerto un altro blocco valido con difficoltà maggiore (hash inferiore).
- Le transazioni nei Blocchi Stale od Orfani non vengono confermate.
- Blocco Genesis
- E' il primo blocco del chain e le sua struttura è fissata nel codice.
Fork
In caso di offerta di due blocchi validi viene scelto quello con difficoltà maggiore.
Se la rete è partizionata al momento della scelta, ciascuna partizione può effettuare una scelta ragionevole ma condotta nell'ignoranza dell'altra partizione.
Come conseguenza otteniamo due Blockchains accettati, una Fork. Blockchain si basa sul principio della Eventual Convergence.
Quando il partizionamento termina e tutta la rete è visibile, il ramo del Fork con difficoltà minore viene rifiutato, e tutti i suoi blocchi divengono Orfani.
Hard Fork
Si raccomanda in Bitcoin di non considerare le transazioni confermate, cioè spendibili, se non sono stati aggiunti un certo numero di blocchi, tipicamente almeno 4.
Se per cause incidentali o dolose, abbiamo un fork e le transazioni di entrambi i rami sono state spese, abbiamo una situazione di Hard Fork, da cui è molto difficile uscire:
- o un branch del fork viene totalmente sacrificato
- oppure bisogna generare un intero nuovo Blockchain indipendente e separato dal precedente.
Il problema è tipico di tutti i sistemi di Controllo Versione basati su DAG (Directed Acyclic Graph) come Git. I Fork (branch in Git) sono facili, i Merge possono essere difficili, e richiedono sacrificio di codice.
In Bitcoin i Merge non sono possibili.
Nei sistemi di consenso basati sul voto, consorzi che controllino il 50%+1 dei voti possono imporre un Fork.
Una Hard Fork può essere pianificata e indolore, p.es.per l’aggiornamento del software dei miner.
Mining
Il mining è un'attività computazionalmente intensiva e richiede un investimento in hardware piuttosto notevole. Visto il dispendio di calore e la necessità di raffreddamento, occorre valutare anche il costo dell'energia elettrica.
L'evoluzione dei dispositivi di mining, in particolare per Bitcoin è stata come segue.
Evoluzione del Mining
CPU
All'inizio (2008) bastava anche un Desktop per il mining, poichè le difficoltà erano basse. Non è più il caso.
Per un breve periodo si è ricorsi all'overclocking di CPU.
GPU
L'utilizzo di Graphical Processing Units, come nelle schede grafiche NVidia, permetteva di svolgere operazioni in parallelo.
Presto sono stati introdotti sul mercato arrays di GPU dedicate e concepiti proprio per il Bitcoin Mining.
FPGA
I Field Programmable Gate Arrays sono stati la soluzione successiva.
Questi richiedono però la conoscenze di determinati linguaggi di programmazione, come VHDL, e competenze nello sviluppo embedded.
ASICs
Gli Application Specific Integrated Circuits contengono i programmi per lo hash SHA-250 direttamente nel microcodice, e gli ASICs non sono in grado di fare altro oltre quello per cui sono stati costruiti.
Varie ditte commerciali hanno offerto ASICs per il Bitcoin Mining.
Mining Pools
Con le difficoltà correnti i singoli individui non sono più competitivi. Sono state create strutture con la complessità e potenza di un centro di calcolo moderno, interamente dedicate al mining.
Il singolo utente sottoscrive una quota ad un Mining Pool e riceve un profitto proporzionale all'investimento ogni volta che questa ha successo nella produzione di un nuovo blocco.
Concorrenza
I Mining Pools tendono ad avere successo proporzionale alla loro dimensione. Nel tempo i Mining Pools presenti sul mercato si sono ridotti notevolmente di numero.
Esiste il pericolo potenziale, se uno di loro conquista la maggioranza di successi, che possa imporre uno Hard Fork a proprio vantaggio.
Bitcoin tenta di impedire questo aspetto variando il livello di difficoltà. Altri Altcoins adottano strategie appropriate.
Bitcoin in Pratica
- Organizzare un Wallet
- Può essere il solo Wallet (client) o associato a un nodo pieno, capace (potenzialmente) di mining.
- Online Wallets
- Spesso associati ad Exchanges.
- Dispositivi Hardware
- Paper Wallet
I Paper Wallet non sono altro che una stampa di backup dei dati di transazioni Bitcoin, o altre criptovalute. Servono nel malaugurato caso di perdita del wallet elettronico.
Contengono informazioni per il restore dei dati su un successivo wallet elettronico, sia direttamente numeriche che come QRcode.
Come comprare Bitcoins
L'investimento in Bitcoin è un'attiviyà finanziaria speculativa.
I metodi e i siti web di riferimento cambiano in continuazione ed è quindi necessario documentarsi specificamente al momento dell'acquisto.
La seguente è solo una generica lista di categorie di metodi.
Tramite un Exchange
Over-the-Counter
A volte vi sono stalls in luoghi pubblici per il trading di Bitcoins ma questo capita più che altro in città mondiali e di rado. Tali eventi si possono ricercare su: http://www.meetup.com.
Più comunemente vi sono bacheche online per il contatto diretto tra acquirente e venditore.
Per esempio: https://localbitcoins.com/
.
Mining
Veramente è necessario iscriversi ad un 'mining pool'.
Una lista aggiornata e con link è fornita da Stelareum : https://www.stelareum.io/it/mining/pool.html
Fondi di Investimento
Destinati ad investitori professionali, non al mercato retail.
Una lista dei maggiori Exchange Traded Funds (ETF) in Bitcoin è fornita da Forbes : https://www.forbes.com/advisor/it/investire/etf/etf-bitcoin/
Bancomat
In alcuni paesi sono illegali, p.es. Germania. Sono simili ad ATM bancari. Si inserisce la valuta e
- o viene visualizzato il codice QR da scandire ed acquisire
- o viene stampato un foglio cartaceo col codice appropriato
In Italia ve ne sono una dozzina-
Come paragone, nel Regno Unito ve ne sono più di 500, 200 dei quali a Londra.
Wallets
Disponibile su https://bitcoin.org/en/choose-your-wallet
.
Vi sono numerosi wallet disponibili con caratteristiche diverse.
Nodo Pieno
Per l'installazione di Bitcoin Core 25.0 si può far riferimento al sito https://bitcoin.org/en/download
.
Le istruzioni aggiornate per l'installazione di un Bitcoin Full Node si trovano a https://bitcoin.org/en/full-node#setup-a-full-node
.
E' particolarmente importante leggere i requisiti di sistema e i caveat.
Un nodo pieno permette si il mining, ma la probabilità di riuscita con un sistema personale è praticamente nulla.
Attenzione inoltre che in paesi ove Bitcoin è pure legale, p.es. UK, vi sono restrizioni d'uso di un Nodo Pieno, e complicazioni burocratiche e legali.
Evoluzione di Bitcoin
Bitcoin Improvement Proposals (BIP)
Documenti per informare le comunità Bitcoin della sua evoluzione e per proporre cambiamenti. Tre tipi di BIPs:
- Standard BIP - cambiamenti maggiori con notevole impatto, p.es. dimensione del blocco, protocolli in uso, esecuzione delle transazioni
- Process BIP - cambiamenti di processi che sono al di fuori del codice Bitcoin
- Informational BIP - piccoli cambiamenti che richiedono solo notifica, p.es. aggiustamenti di design
Problemi di Bitcoin
- Scalabilità
- La dimensione del blocco è solo 1 MB
- Un blocco viene aggiunto ogni 10 minuti circa
- Limite al numero di transazioni possibili
- Attacchi Direct Denial of Service (DDoS)
- Pagamento off-chain: non attendere per la conferma
- Malleabilità
- La firma di una transazione non copre tutti i campi
- Possibilità di aggiungere altre firme
- Necessario per Lightning Network
- Si può potenzialmente cambiare l’ID di transazione
- Inviare di nuovo bitcoin in assenza di ID sul blockchain
SegWit
Segregated Witness (BIP141)
Cambiamenti:
- Blocco misurato in 1 milione di unità non bytes
- Separare i dati di firma - witness - dal Merkle Tree
- Ogni byte del witnwss conta come 1 unità
- Muovere la firma di transazione fuori dalla transazione
- Risolve problema di malleabilità
La dimensione del blocco arriva ora a circa 1.8 MB.
- Spostato solo il problema della scalabilità a dopo
SegWit adottato il 24/6/2017
- Necessità di upgrade del software
- Compatibilità tra le versioni
- Lento aggiornamento in pratica da privati, ma totale da mining pools
Proposta una nuova versione: SegWit2x
- Controversa, richiede grosso upgrade del software
Lightning Network
Protocollo di secondo strato, sopra Bitcoin
- Sistema peer-to-peer per micropagamenti
- costi di commissione delle transazioni
- Transazioni istantanee tra nodi partecipanti
Funzionamento
- Transazione iniziale di finanziamento al blockchain
- Seguite da n transazioni anonime su LN fino al limite finanziato
- Transazione finale sul blockchain recupera il saldo rimanente de finanziamento
Problemi
- Richiede lo stabilimento di circuiti virtuali dedicati
- Problemi col routing su link insicuri
- Necessità di watchover contro frodi
- Proposto in outsourcing
- DDoS possibili: 20/3/2018 - 200 nodi offline
Altcoins
Bisogna distinguere tra applicazioni diverse basate su Blockchain:
- Generazione 1 - solo criptovaluta
- Generazione 2 - Smart Contracts
La criptovaluta di Generazione 1 alternativa a Bitcoin si chiama Altcoin.
In pochi anni più di 500 Altcoins inventate. circa il 90% sono morte.
Trattandosi di valuta fiduciaria, senza nessun backing in assets o collegamenti a valute centrali, la volatilità del mercato è enorme, i rischi ingenti, e solo criptovalute con un Market CAP ragguardevole hanno qualche speranza.
Parametri degli Altcoins
Parametri di design:
- Nome e denominazioni della criptovaluta
- Algoritmo di consenso
- Algoritmo di hash
- Algoritmo di aggiustamento difficoltà
- Tempo medio per un blocco
- Compenso iniziale per un blocco
- Tempo di dimezzamento del compenso
- Dimensione blocco
- Dimensione transazioni
- Commissione sulle transazioni
- Invecchiamento della criptovaluta
- Valore totale massimo di criptovaluta
Parametri di mercato:
- Valore della criptovaluta
- Market CAP
- Transazioni per unità di tempo
- Valore medio di transazione
- Volatilità
- Criptovaluta in circolazione
- Exchange con altre criptovalute
- Asset o valuta
- Facilità di trading
- Mercanti che accettano la criptovaluta
- Legalità d’uso
Litecoin
Litecoin è molto simile a Bitcoin, ma volutamente più leggera nelle operazioni.
Principali differenze tra Bitcoin e Litecoin (Valori al 17/06/2017):
Anche Litecoin è basato su consenso Proof-of-Work ma il suo algoritmo Scrypt (S-crypt) è intensivo di memoria, non di potenza di calcolo.
I miners usano apparecchiature basate su GPU con molta RAM localizzata, anziche farms di ASICs come Bitcoin.
Proprietà:
- Flusso accettabile di transazioni molto più alto di Bitcoin, per quanto il blocco abbia la stessa dimensione massima di 1 MB
- Numero di blocchi generati potenzialmente molto più alto e DB potenzialmente più pesante
- Rischio ridotto di double-spending per il più elevato ritmo di generazione blocchi
- Tempo di conferma transazioni molto più corto
- Rischio maggiore di fork (al momento non si sono generate)
In pratica:
- Il mercato preferisce Bitcoin, e questo dà una differenza tra i valori attuali dei parametri e quelli potenziali
- Litecoin è molto più valuta e molto meno asset di investimento di Bitcoin
- molti più blocchi orfani
- i transaction fees inferiori favoriscono molto di più le microtransazioni
- il tempo medio di conferma è ininfluente: i mercanti solitamente danno conferma immediata delle transazioni e si assumono i rischi che siano poi invalidate
- Sia Bitcoin che Litecoin sono disponibili Open Source su GitHub. Il loro numero di release è molto basso: BTC 0.14.2, LTC 0.13.3rc1. L'interesse intorno a BTC (Tweets/giorno) è 40 volte maggiore di LTC.
- Il peso ecologico corrente di LTC è una frazione piccola di BTC, poichè le GPU consumano molto meno delle ASIC.
- Nonostante questo nemmeno LTC è scalabile, ha solo il paletto più in la.
Sicurezza di Bitcoin
Bitcoin Proibito
Bitcoin fino a pochi anni fa' era proibito o limitato in molti paesi, per esempio:
- Bangladesh - per mancanza di controllo centralizzato, e la possibilità di uso improprio e non controllato: fino a 10 anni di reclusione
- Bolivia - è illegale l'uso di valuta non controllata da istituzioni finanziarie centrali
- Cina - è proibito solo alle banche, non ai privati cittadini
- Ecuador - perchè ha sviluppato un sistema proprio di pagamento elettronico e non vuole concorrenza
- India - non è ufficialmente proibito, ma osteggiato da tutte le banche
- Islanda - poichè viola le leggi sull'esportazione di valuta
- Russia - non ufficialmente proibito, ma fortemente combattuto dalle banche, a difesa del Rublo
- Svezia - limitatamente al commercio di rifiuti, a causa di casi specifici passati in giudicato
- Tailandia - illegale a causa dell'assenza di leggi regolatorie
- Vietnam - a causa del pericolo d'uso in commerci illegali
La situazione si è evoluta e l'accettabilità di Bitcoin è cambiata.
Europa
Direttive del Consiglio Europeo
-
E' fortemente consigliato alle banche di astenersi dal commercio in qualsiasi criptovaluta finchè non sarà approvato un codice regolatorio appropriato. Non vi sono consigli o direttive per i privati cittadini.
-
E' un punto molto dibattuto e con opinioni nazionali diverse se Bitcoin sia da considerarsi un asset, ovvero una proprietà in possesso di qualcuno, o una valuta convertibile.
-
Il Consiglio Europeo la considera una valuta e la ritiene libera da IVA. Negli USA è un asset e soggetto a tasse di proprietà. Anche alcuni stati europei come la Danimarca lo considerano un asset, ma in tale paese sono le proprietà ad essere esenti.
Italia
-
Vige l'assenza di legislazione specifica, dovuta alla solita forte correlazione negativa tra Giurisprudenza ed Informatica (un problema peraltro mondiale).
-
L'Agenzia delle Entrate considera Bitcoin come valuta, e come tale soggetta a IVA in guadagni speculativi. Questo è in contrasto con le direttive europee, ma l'AdE sembra equiparare i guadagni in Bitcoin alle vincite in seguito a lotterie e scommesse, non ad una valuta convertibile.
-
Ufficialmente però non vi è alcun riconoscimento del Bitcoin come valuta,e il computo contabile in Bitcoin produrrebbe problemi amministrativi. La conversione tra Bitcoin ed Euro è scoraggiata da documenti della Banca d'Italia.
-
L'Agenzia delle Entrate ha anche allo studio una possibile inclusione del Bitcoin nelle tasse di compravendita di proprietà, qualora una futura legislazione decidesse che è un asset.
Domande
E' illegale essere un 'miner'?
- In alcune nazioni sì, poichè trattasi in molti casi di battere moneta, e questa è una prerogativa di enti autorizzati.
Lo storaggio di contenuto illegale in un Blockchain è una violazione della legge?
- Si, nei paesi in cui il contenuto è illegale e viene estratto dal Blockchain in una forma fungibile.
Se un nodo ospita l'intero Blockchain, condivide la responsabilità legale del contenuto?
- No, tratta solo sequenze di bit senza conoscenza della loro rappresentazione umana. Questo dipende molto però dai paesi, dal controllo fine delle autorità, e se la legge sia vista nell'ottica prescrittiva o proscrittiva.
Bitcoin e il Dark Web
Il Bitcoin è fortemente associato al Dark Web.
Nel commercio B2C può essere venduto:
- Oggetto fisico (droghe, armi)
- Problema ausiliario del delivery
- Servizio (hacking, bounty killer)
- Esecuzione del servizio e conferma
- Valore intrinseco (intelligence, materiale copyright)
- Delivery immediato in internet
Inoltre il Bitcoin permette:
- Non tracciabilità (condizionale) delle transazioni
- Evasione fiscale
- Riciclaggio
- Ransomware
Bitcoin è un Crimine Ecologico
Blockchain Hacking
Sybil Attack
- Numero enorme di nodi con lo stesso possessore, che genera identità pseudonime e rimane nascosto
- Generazione di transazioni errate
- Manipolazione di transazioni valide
- Efficace difesa col consenso Proof of Work poichè ogni identità spende
- In Proof of Stake chi è scoperto perde il deposito
Routing Attack
- Al momento i miner principali sono con pochi Service Providers
- Compromettere uno o più Service Provider
- Generare partizioni nella rete del Blockchain
- Doppia spesa
- Hard Fork
Direct Denial of Service (DDoS)
- Uno degli attacchi più comuni, acquistabile sul Dark Web
- Saturare i nodi miner con elevato traffico di rete
- Rallentamento delle operazioni legittime
- Non vi è furto di fondi
Spamming
- Invio di un numero elevatissimo di piccole transazioni
- Satura il Transaction Pool di Bitcoin (Mempool)
- Attacchi avvenuti veramente nel 2016 ma Bitcoin ha solo rallentato ed è sopravvissuto
Majority Attack
- Entità che possiede il 51% dei nodi
- Spende transazioni
- Forza uno Hard Fork precedente
- Riesegue le transazioni - double spending
- 2016: 51Crew attacca piccoli cloni di Ethereum - Krypton e Shift - con ransomware
Sicurezza dei Wallet
L’utente è la maggiore debolezza di una criptovaluta e del blockchain in generale.
Le chiavi private degli account possono essere rubate dal computer o smartphone.
- Peggio quando le chiavi sono conservate su un sito remoto
Gli utenti possono aderire a iniziative fraudolente di falsi Altcoin Exchange.
Il wallet può semplicemente essere perso:
- cancellazione del file
- avaria al computer
- furto del computer
La criptovaluta persa non è riottenibile in assenza di backup.
Almeno 10% dei Bitcoin sono stati persi per sempre in questo modo.
Ethereum
E' il blockchain secondo per interesse e importanza a Bitcoin.
E' stato il primo blockchain a supportare gli smart contracts.
La sua architettura è più complessa e moderna di quella di Bitcoin.
Si tratta di un prodotto in continua evoluzione, ed è supportato da una vasta comunità di entusiasti.
Origini e Scopi
Inventato nel 2013 da Vitalik Buterin.
L'idea era di fornire una piattaforma per gli Smart Contracts, basata su un linguaggio Turing Complete e con molte più possibilità di Bitcoin.
Releases di Ethereum:
- Frontier - ora ritirata
- Homestead - precedente
- Basata su Proof of Work come Bitcoin
- Metropolis - tentativa, con semplificazioni di protocollo e maggiore performance
- Serenity - finale
- Basata su Proof of Stake Casper
Denominazioni
La valuta ufficiale e lo Ether (ETH).
Dopo il disastroso fork del DAO, alcuni tradizionalisti sono rimasti con il vecchio Blockchain e la loro valuta si chiama Ether Classic (ETC).
Le denominazioni sono dei sottomultipli di Ether.
Struttura di Ethereum
Lo Stack
Il client ethereum è in connessione continua con la rete distribuita di nodi ethereum e mantiene in sincronia una copia locale del blockchain.
Il client espone un'interfaccia RPC (Remote Procedure Call) accessibile da client web tramite la libreria web3.js
(JavaScript).
Struttura del Blocco
Un blocco è composto di:
- testata
- lista transazioni
- lista delle testate degli Uncle
Struttura della Testata
- Parent hash - del blocco precedente
- Ommers hash - della lista delle testate di Uncles
- State root - hash della radice del Trie di stato
- Transaction root - hash della radice del Trie delle transazioni
- Receipts root - hash della radice del Trie delle ricevute
- Logs bloom - filtro che punta all'indirizzo del logger ed entries di log
- Difficulty - livello corrente di difficoltà
- Number - numero sequenziale del blocco corrente; il Blocco Genesis è lo zero
- Gas limit - limite di consumo di gas dell'intero blocco
- Gas used - consumo di gas di tutte le transazioni
- Timestamp - data ed ora di generazione del blocco
- Extra data - altri dati relativi al blocco
- Mixhash - coinvolto nel calcolo dello hash di difficoltà
- Nonce - da aggiustare per il calcolo della difficoltà
Macchina a Stati
Ethereum è una macchina a stati basata su transazioni.
Una transazione porta da uno stato iniziale ad uno stato finale
Transazioni
Una transazione è un messaggio firmato incluso in un blocco, e può essere di due tipi:
- Message Call - semplice interscambio di informazioni
- Contract Creation - per un nuovo contratto, anche transazione puramente monetaria
Una transazione ha i campi:
- Nonce - identificativo incrementato ad ogni transazione
- Gas Price - costo della transazione in Wei.
- Gas Limit - massimo numero di Wei che il mittente è disposto a pagare
- To - destinatario
- Value - valore trasferito
- Signature - firma crittografica della transazione
Tutte le transazioni sono raccolte in un Patricia Trie, e lo hash della sua radice è un campo della testata del blocco corrente.
Validazione delle Transazioni
Una transazione è valida se:
- ben formata
- la firma della transazione è valida
- il nonce della transazione è uguale a quello dell'emittente
- non ha ecceduto i limiti di gas
- il mittente ha fondi per coprire la commissione
Vi è un Sottostato di Transazione, creato durante la transazione e processato al suo termine. E' composto da:
- Suicide Set - lista degli account da eliminare al termine della transazione
- Log Series - lista di eventi da comunicare ad applicativi esterni
- Refund Balance - saldo del gas che deve essere reso
Validazione del Blocco
La validazione di un blocco è composta da:
- Validazione del Blocco Precedente
- Validazione degli Uncles - devono essere blocchi validi a loro volta
- a profondità non superiore a 6 dal blocco corrente
- non più di 2
- Validazione delle Transazioni
- Validazione dello Stato
- Validazione del Timestamp - successivo a quello del blocco precedente
- Viene tollerato fino a 15 minuti nel futuro
- Validazione del Nonce - compatibile con la difficoltà
Accounts
Un account è un'unità intenzionale che causa il cambiamento di stato tramite transazioni.
Ci sono due tipi di account:
- Externally Owned Accounts (EOA) - non può inviare codice associato alle transazioni
- Contract Accounts - invia il codice del contratto assieme alla transazione
Mining
Processo con cui si genera nuova valuta.
Il miner esegue le funzioni:
- Riceve le nuove transazioni trasmesse in rete e determina quale processare
- Determina i blocchi Uncle da includere nel blocco corrente
- Calcola lo hash necessario per un nuovo blocco
- Aggiorna il saldo contabile con la ricompensa per la produzione del blocco corrente
- Calcola lo stato finale risultante da tutte le transazioni
- Sottomette il blocco alla rete e spera di vincere
Il mining si compie solo con un cliente pieno:
- Chiunque lo può fare
- Connettersi alla rete e compiere una sincronizzazione
- Può impiegare del tempo
Consenso
Il Meccanismo di consenso è basato su GHOST (Greedy Heaviest Observed SubTree), un algoritmo di Zohar e Sompolinski, progettato per minimizzare il numero di Stale Blocks.
E' comunque un metodo nella categoria Proof of Work.
Gli Stale Blocks, in Ethereum chiamati Uncle o Ommer vengono inclusi nel Blockchain. Il ramo con più blocchi vince, anche se qualcuno è un uncle, perchè evidentemente ha generato più sforzo, anche se non di successo.
In Bitcoin il ramo più lungo vince:
In Ethereum il ramo più pesante vince:
Obiezioni:
- appesantimento del Blockchain
- tentazione di trovare uncles e non blocchi validi
Difficoltà
Sono considerati blocchi validi quelli che superano un certo livello di difficoltà. Questa è data da un numero intero e calcolata con l'algoritmo Ethash. (https://github.com/ethereum/wiki/wiki/Ethash
)
L'algoritmo è complesso e l'unica soluzione è data da un approccio di forza bruta. Ethash è concepito per favorire grandi quantità di RAM, anzichè potenza di CPU. Questo consente l'uso di GPU anzichè di ASIC.
Le piattaforme di riferimento per i miners sono:
- Ubuntu Linux ultima versione
- EthOS - un linux modificato per il mining di Ethereum (
http://ethosdistro.com/
)
La difficoltà varia ad ogni blocco nuovo, nel tentativo di mantenere costante il rateo di generazione blocchi a circa 15 secondi. La difficoltà è calcolata dall'espressione:
block_diff = parent_diff + parent_diff / 2048 *
max(1 - (block_timestamp - parent_timestamp) / 10, -99) +
int(2**((block.number / 100000) - 2))
La difficoltà aumenta se il rateo è inferiore a 10 secondi, diminuisce se superiore a 20 secondi.
La difficoltà inoltre aumenta esponenzialmente ogni 100.000 blocchi.
Time Bomb
Anche detta Ice Age. L'incremento esponenziale di difficoltà è voluto, per costringere i miners col tempo a passare dal consenso Proof of Work al consenso Proof of Stake, implementato del protocollo Casper e finalizzato nella release Serenity.
Gas
E' un microcosto per l'esecuzione di contratti.
- Ogni istruzione ha un prezzo in gas.
- La transazione indica il costo massimo accettabile.
Il fatto che esiste un limite impedisce loop infiniti per errore o per attacchi di Diniego di Servizio.
In caso di gas insufficiente il contratto non viene eseguito e lo stato non viene cambiato. Il mittente si vede però comunque detratto del gas, come commissione.
Il contratto è eseguito da ogni nodo miner. Solo il vincente pone sul Blockchain il nuovo stato dopo la transazione. Il miner vincente riscuote il gas di commissione. Il gas rimanente dopo l'esecuzione e la commissione è ritornato al mittente.
Il contratto viene attivato (triggered) o da un'altra transazione, oppure da un messaggio.
Ricompensa del Miner
Ogni miner riceve la ricompensa corrente per la generazione di un nuovo blocco, al momento di 5 Eth.
Inoltre riceve il gas di commissione per le transazioni incluse nel blocco.
I miners dei blocchi Uncle ricevono i 7/8 della ricompensa.
Anche i miners dei blocchi Stale ricevono una ricompensa, di 1/32 del valore di quella del blocco accettato.
Ethereum Virtual Machine
E' l'interprete per i contratti intelligenti ed il suo ambiente di esecuzione. Ogni transazione è un contratto.
I programmi per la EVM sono scritti in bytecode. Vengono eseguiti in un Sandbox, indipendenti da altri programmi.
Proprietà della EVM:
- basata su stack LIFO (Last In First Out)
- parole da 256 bit, 1024 sullo stack
- big-endian
- codice ospitato in Virtual ROM e copiato in memoria al momento dell'esecuzione
- è associato un Program Counter per l'istruzione corrente
- Turing-complete
- memoria e risorse limitate dal gas disponibile
Due tipi di storaggio:
- memory - byte array, parole da 256 bit, ripulito al termine di ogni esecuzione
- storage - word array basato su chiavi e valori da 32 bytes, permanente, conservato nel blockchain
E' allo studio usare come bytecode il WASM (Web Assembly), iniziativa di Google, Mozilla e Microsoft.
Parametri di Esecuzione
E' mantenuto un ambiente di esecuzione costituito di:
- Indirizzo del possessore del codice
- Indirizzo del mittente
- Prezzo del Gas
- Dati di input delle transazione
- Indirizzo dell'iniziatore della transazione
- Valore in Wei
- Bytecode
- Testata del blocco
- Profondità di chiamata del messaggio
- System State iniziale
- Gas disponibile
Il risultato della transazione è:
- System State finale
- Gas rimanente dopo la transazione
- Insieme self destruct o suicide
- Log Series
La EVM mantiene lo stato di esecuzione corrente, in continuo cambiamento, composto di:
- Gas disponibile
- Program Counter
- Contenuto della Memoria
- Numero di parole nello stack
- Contenuto dello stack
La EVM può emettere delle eccezioni che causano la terminazione del programma, p.es. Gas insufficiente, stack overfolw, istruzione.
Esempio di Programma
In Solidity:
pragma solidity ^0.4.0;
contract Test1 {
uint x=2;
function addition1(uint x) returns (uint y) {
y=x+2;
}
}
Convertito in Bytecode:
PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x2 PUSH1 0x0 SSTORE CALLVALUE
PUSH1 0x0 JUMPI JUMPDEST PUSH1 0x45 DUP1 PUSH1 0x1A PUSH1 0x0
CODECOPY PUSH1 0x0 RETURN PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0xE0
PUSH1 0x2 EXP PUSH1 0x0 CALLDATALOAD DIV PUSH4 0x989E1731 DUP2 EQ
PUSH1 0x1C JUMPI JUMPDEST PUSH1 0x0 JUMP JUMPDEST CALLVALUE PUSH1
0x0 JUMPI PUSH1 0x29 PUSH1 0x4 CALLDATALOAD PUSH1 0x3B JUMP
JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2
SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x2 DUP2 ADD
JUMPDEST SWAP2 SWAP1 POP JUMP
Hardware e Software
La Rete Ethereum
E' una rete Peer-to-Peer in tre tipi diversi:
- MainNet
- rete principale, anche detta Costantinople nella release corrente
- la precedente era Homestead
- TestNet
- anche detta StPetersburg, rete di test
- la precedente era Ropsten
- Provare i contratti su questa rete prima del deployment sulla rete vera *Vi sono anche altre reti di test
- Private Nets
- un numero qualsiasi di reti private possono essere create
Oltre alla rete Main di Ethereum vi sono altre numerose reti pubbliche di test
- Ogni rete corrisponde ad un blockchain
- Differiscono nello ID nel Blocco Genesi
- Alcune reti sono ideali per il testing
- Non tutti i clients supportano tutte le TestNets
- Differiscono nel metodo di consenso:
- POW - Proof of Work
- POA - Proof of Authority
Akcune reti di test:
- Morden, ora Ethereum Classic Testnet - ID: 2
- Ropsten, con tutti i client - ID: 3
- Rinkeby, client
geth
- ID: 4 - Kovan, client
Parity
- ID: 42 - Sokol, non per
geth
- ID: 77
Whisper
Protocollo di comunicazione messaggi decentralizzato e peer-to-peer. Oltre alla normale sincronizzazione del Blockchain.
Caratteristiche:
- Messaggi crittografati
- Permette piccolo interscambio di dati
- Consente la non tracciabilità dei comunicanti (dark communication)
Disponibile con il client geth
. Installare con l'opzione -shh
. Da considerarsi un prodotto non ancora completo.
Swarm
Piattaforma per il file storage distribuito.
- Ancora in fase di sviluppo.
- Basato sulla registrazione dei files su più nodi, con ridondanza automatica, e l'identificazione dei files tramite il loro hash.
- Sarà integrato con Whisper.
Ethereum Clients
I client Ethereum gestiscono la Macchina Virtuale Ethereum. Sono scritti in un linguaggio di programmazione specifico.
I più completi clients con interfaccia a caratteri sono:
- Geth (Go) - anche come nodo pieno - implementazione di riferimento
- Parity (Rust)
- eth (C++)
- Harmony/EthereumJ (Java)
- Trinity/pyethapp (Python) - quasi completo
- Exthereum (Elixir)
Ethereum Wallets
Servono a connettersi con le reti basate su blockchains con tecnologia Ethereum.
Requisiti:
- Sicurezza delle chiavi private
- Facilità d’uso
- Comunità di supporto
- Backup e restore
- Compatibilità col sistema operativo
Sono di vari tipi:
- Desktop - a caratteri o GUI
- Mobile - Android o iPhone
- Browser plugins
- Web-based - siti free o a pagamento
- Hardware - dispositivi su USB
- Carta - metodo offline insicuro ma permanente, per backup
Web Wallets
Esempi:
- Coinbase -
https://www.coinbase.com
- Già presente per Bitcoin
- Chiavi su sito remoto
- Non supporta Smart Contracts
- Non in tutti i paesi
- MyEtherWallet -
https://www.myetherwallet.com/
- Chiavi storate in locale
- Necessita metodo locale di storaggio
- Plugin per Chrome
- Hardware wallet
Hardware Wallets
Esempi:
Ledger Nano S
Trezor
Funziona con MyEtherWallet
Paper Wallet
Metodo migliore per un backup del wallet.
Modo più fidato di generarlo: procedimento su MyEtherWallet.
Risultato:
Non perdere e non dare a nessuno
Problemi di Ethereum
Costi di Transazione Inflazionati
Gas Oracle
- Funzione interna che calcola il prezzo del gas di una transazione
- Usato da MyEtherWallet, ShapeSift, ecc.
Basato su commissioni di transazioni recenti
- Casi in cui si instaura un feedback positivo
- Tentativo di acquisire priorità per l’inserimento in un blocco
- Anche $1 per transazione
Sincronizzazione
- I nuovi partecipanti alla Main Net devono attendere tempi notevoli per sincronizzarsi al blockchain distribuito:
- anche molti giorni
- Problema che scala col tempo
- Ethereum mantiene lo stato della EVM, ora molto grosso
- Vi sono molti account vuoti o inattivi da lungo tempo (dust accounts)
- Anche le Test Nets hanno tempi di sincronizzazione considerevoli: ore
Casper
Casper Test Network per la release Serenity
Molti cambiamenti suggeriti: software non ancora del tutto stabile.
Difficoltà di mantenere il contatto e la sincronizzazione col blockchain
- Distacco di molti sottodomini
- Distacchi prolungati producono Hard Forks
Difficoltà di implementazione pratica del nuovo consenso Proof of Stake, necessario per:
- Più throughput
- Minor consumo energetico
Evoluzione
Ethereum Costantinople
Fork avvenuto il 15/1/2019:
- Per correggere bachi di sicurezza e migliorare le prestazioni
- Introdotta anche la nuova testnet StPetersburg
Cambiamenti:
- Nessuno per i ritentori di ETH (hodlers)
- I miner devono scaricare e usare i nuovi programmi:
- Geth client (v1.8.23)
- Parity client (v2.2.10-stable)
- Harmony client (v2.3 Build 74)
- Pantheon client (v0.9.1)
- EthereumJS VM client (v2.6.0)
- Nethermind client (v0.9.4)
- Ethereum Wallet (v0.11.1)
Riferimenti: Ethereum Improvement Proposals (EIPs) 145, 1052, 1014, 1234
Ethereum 2.0
Ultima generazione del blockchain Ethereum
- Sviluppata dalla Comunità Ethereum
- In via di sviluppo costante
Codename: Serenity
Migliorie
- Scalabilità
- Sharding e Offchain Storage
- Efficienza e Sostenibilità Ambientale
- Adozione di Casper: Proof of Stake
- Velocità ed Usabilità
- Linguaggio Ewasm per la Macchina Virtuale
Altri targets:
- Riduzione della complessità di rete
- Sopravvivere a estremo partizionamento (80%)
- Migliorie negli algoritmi crittografici
- Preparazione al Quantum Computing, resistenza crittografica
Approccio ad Ethereum 2.0 in quattro fasi.
WASM - NIM
Ethereum Web Assembly come bytecode della VM
Progetto nimbus del gruppo status
- Smart Contracts scritti in NimPlay
- Derivato dal linguaggio Nim come metaprogramming
Nim:
- Derivato da Python
- Tipi forti e Garbage Collection
- Filosofia simile a Go ma non così puro
- Genera eseguibili tramite C
Altri Blockchain
Generazioni di Blockchain
3.0 è veramente 2.0 con numerose innovazioni
Vogliamo studiare Blockchain 3.0
Vogliamo immaginare Blockchain 4.0
Guardiamo alla Cina
Classifica Marzo 2019
Le migliori tecnologie sono EOS e TRON.
Ethereum ha la più alta applicabilità e creatività.
Bitcoin è molto giù nella graduatoria.
Hyperledger
Gestito dalla Linux Foundation
- 200+ membri, ma molto movimento
Frameworks per Distributed Ledgers:
-
Burrow - permissioned smart contract
-
Indy - distributed ledger (DLT)
-
Quilt - tool di interoperabilità
-
Iroha - attivo, smart contracts e utilities
-
Fabric – permissioned, framework
(Tutti progetti Open Source disponibili su GitHub)
Concentrato su applicativi per Supply Chain.
Versioni derivate da Hyperledger:
- IBM Blockchain
- Walmart, Kroger, Nestle
- Huawey Blockchain
- Ripple
Hyperledger Fabric
Framework completo per Permissioned Blockchain:
- Grandi quantità di utenti simultanei
- Migliaia di transazioni al secondo
- Enterprise
- Modulare
- Canali Privati
- Smart Contracts
- Nessuna criptovaluta di base
Target: Mondo Business, B2B
Modi di operazione: Permissioned, privata
Consenso: Byzantine Fault Tolerance
Linguaggi per Smart Contracts: Go, Node.js, Java
Tokens: Scambiabili con Smart Contracts
EOS
Anche detto EOSIO (https://eos.io
)
Nuova architettura blockchain:
- Piattaforma per Smart Contracts
- Concetto di Sistema Operativo Distribuito
- Scalabile a milioni di utenti simultanei
- Uso senza commissioni di transazione o gas
- Bassa latenza
- Operazioni sia sequenziali che parallele
- Usa il consenso Delegated Proof of Stake
Sponsorizzato da Block.one ( https://block.one
)
Costruzione di Decentralized Autonomous Communities (DAC)
Delegated Proof of Stake
Il token si chiama EOS.
Per validare un transazione occorre un certo numero di Witnesses:
- Ricevono un compenso per farlo
- Per poterlo essere occorre possedere molti tokens
- Molti nodi sono disponibili per fungere da Witness
- I partecipanti votano chi debba essere Witness
- Il voto ha un peso proporzionale ai token posseduti
- Ne vengono eletti 21
A intervalli regolari i Witnesses vengono ruotati
- Possono anche essere revocati per comportamento scorretto
Dati Eos
- Tempo tipico per la prima conferma di transazione: 1.5 sec
- Vi sono 21 Witnesses. Una conferma diventa irreversibile quando confermata da 14 Witnesses
- Il 99% delle transazioni sono irreversibili entro 4.5 sec
- Il 100% sono irreversibili entro 40 sec, o rifiutate (freeze)
- E’ possibile il freeze di una transazione per impedire attacchi (come quello del DAO) e conseguenti forks
- Banda passante totale (parallela + sequenziale): > 300000 transazioni per secondo (TPS)
- Banda passante sequenziale: > 3000 TPS
Architettura Eos
Componenti:
- nodeos - gestisce il blockchain, core con numerosi plugins
- keosd - gestisce i wallet e gli account
- cleos - comandi CLI per usare
nodeos
ekeosd
Il comando cleos
è eseguito su nodeos
Tron
Sviluppo
- Fondato da Justin Sun della Peiwo, Singapore
- Derivato da Ripple
- Fortemente supportato dalla Cina, sviluppato a Pechino
- Rivolto al mondo dell’Online Entertainment (giochi e porno)
- Scopo dichiarato: Ethereum killer
Caratteristiche
- Criptovaluta: Tronix (TRX)
- Almeno 2000 transazioni al secondo
- Consenso con Distributed Proof of Stake
- 27 controllori di rete – Super Representatives
- Forma di Governance Comunitaria
Scritto in Java
Smart contracts scritti in Solidity
DAG
Decentralized Ledger Technology
Un archivio decentralizzato e immutabile non deve per forza essere un Blockchain, che è una struttura lineare.
Può essere un Directed Acyclic Graph (DAG) generalizzato.
Esistono alcune iniziative in tal senso.
IOTA
Nuovo progetto Open Source che vuole integrare Blockchain X con Internet of Things.
Innovazioni:
- Il consenso è determinato da tutti i partecipanti che emettono transazioni, non solo dai miner
- Non è una catena ma un DAG (Directed Acyclic Graph), detto il Tangle
- Transazioni vecchie si possono accorpare e troncare
- Sopporta partizionamenti di rete anche prolungati
- Usa logica ternaria anzichè la consueta logica binaria (!)
HashGraph
Nuovo tipo di consenso basato sul protocollo Gossip-about-Gossip di intercambio messaggi
- Basato su DAG ed un concetto di Virtual Voting
- Protocollo equo con Consensus Time Stamping
- Più di 250,000 TPS
- Supporta Smart Contracts e Smart Properties
Il protocollo si chiama Swirlds, di E. Lawson
- Asyncrhronous Byzantine Fault Tolerant (aBFT)
Copyright, codice non disponibile:
- Interamente posseduto dalla ditta Hedera
- Permissioned e privato, a pagamento
- Occorre dar fiducia ad Hedera
Soluzione promettente ma non definitiva
Applicazioni di Blockchain
Gaming dApps
Gambling dApps
Dark Web
Criptovalute Nazionali
In progetto attivo:
- Venezuela: Petro
In progetto a breve:
- Russia: CryptoRuble
- Estonia: Estcoin
- Svezia: E-Krona
In considerazione:
- Regno Unito
- Danimarca
- Cina
- Cambogia
- Iran
- Canada
- Liberland
liberland.org
Idea di un Ceco del 13/4/2015, isoletta di Gornja Siga sul Danubio tra Serbia e Croazia e mai contesa: "terra nullius"
Identità basata su Blockchain
Iniziative:
- IBM Blockchain Trusted Identity
- Pangea Arbitration Token (PAT)
- Blockverify
- XID
- Selfkey
- Civic
- Shocard
- UniquID
- Netki (Hyperledger Fabric)
- uPort (ConsenSys)
- BlockAuth
- Blockstack
Catasto basato su Blockchain
Elimina frodi, corruzione, ritardi burocratici
Iniziative:
- Svezia: Lantmäteriet dal luglio 2017
- Ucraina: registro di immobili posseduti da stranieri
- Georgia: 100.000+ immobili
- Brasile: Cartório de Registro de Imóveis, tramite startup Ubitquity LLC
- Andhra Pradesh (India), tramite la startup svedese ChromaWay
- Vermont (USA), tramite la startup Propy
Piattaforme:
- Bitland, Propy, Neocapita, Bitfury, Ubitquity, Chromaway, IBM, Land Layby Pty
Governo basato su Blockchain
Bitnation Pangea (Governance 2.0)
Ideata da Susanne Tarkowski Tempelhof nel luglio 2014.
Decentralised Borderless Voluntary Nation (DBVN)
Altcoin: XPAT (sidechain di Ethereum)
Sfortunatamente, il progetto è stato ritirato.
Conclusione
L'entusiasmo iniziale per la tecnologia Blockchain ha avuto un rallentamento negli ultimi anni. La tecnologia è maturata, ha avuto più esperienza e ora si hanno idee e aspettative più chiare sul suo impiego.
I miei punti di vista personali sullo stato dell'arte dono:
- Il futuro del Blockchain o è Sharding o è DAG
- Servirà interoperabilità tra differenti Blockchains
- La criptovaluta è un problema geopolitico non tecnico
- L’anonimato è meglio dell’accessibilità
- I dAPP e i DAO sono la sfida tecnica
- I linguaggi di programmazione saranno Go e Rust
- Le API avverranno con JSON-RPC o gRPC e Protocol Buffers
- Si passerà ad uno standard comune di WebAssembly
- La Crittografia è una materia fondamentale
- Manca ancora un join efficace di Blockchain con Intelligenza Artificiale (AI) e Internet of Things (IoT)