Title
La prima blockchain indipendente dalle criptovalute distribuita per tutti i dispositivi
Context
Il documento originale di BitCoin realizzato da Satoshi Nakamoto prevede di memorizzare in un ledger pubblico tutte le transazioni effettuate.
Le transazioni effettuate rappresentano degli scambi di una valuta virtuale.
La tecnologia su cui viene archiviato il ledger pubblico è la blockchain.
Il sistema blockchain prevede di legare la prossima informazione da memorizzare all’ultima utilizzando degli algoritmi di hashing.
Ogni blocco è quindi legato da un riferimento al suo precedente.
E’ possibile quindi validare tutto il ledger partendo dall’ultima informazione disponibile e scorrere a ritroso ogni singolo blocco.
Essendo un sistema distribuito peer-to-peer viene validato il blocco più lungo utilizzando un algoritmo basato su Proof-Of-Work.
In particolare l’algoritmo scelto per il POW scala sul calcolo matematico degli hash portando quindi un POW che richiede CPU per essere garantito.
In breve tempo il costo computazionale CPU ha richiesto l’implementazione del medesimo in ASIC e reso inaccessibile ai normali PC desktop di casa la generazione del blocco da inserire nella blockchain.
History
L’evoluzione del bitcoin dal 2009 ha portato all’evoluzione delle criptovalute per scopi alternativi: grazie ad ethereum è possibile eseguire del codice consumando GAS a pagamento. Ad oggi il costo computazionale e il sistema Proof-Of-Work ha determinato il limite massimo di scalabilità delle blockchain ad oggi basate su questo paradigma.
Cryptocurrencies
Le criptovalute sono un esempio di dati che vengono memorizzati nelle blockchain ed hanno i seguenti vantaggi:
- Peer to Peer: il ledger è distribuito in tutto il mondo
- Anonimato: la transazione è riconducibile ad un determinato indirizzo
- Alimentazione delle transazioni: il costo della transazione viene scalato dall’ammontare della memorizzazione stessa
Similar solutions
https://storj.io | Blockchain-based, end-to-end encrypted, distributed object storage, where only you have access to your data. |
https://ethereum.org | decentralized platform that runs smart contracts |
https://www.enigma.co | Decentralizing Privacy: Using Blockchain to Protect Personal Data |
https://www.bigchaindb.com | The scalable blockchain database powering IPDB |
https://recordskeeper.co | Blockchain is changing the way we store documents, data & any other information on the Cloud |
https://www.ascribe.io | Lock in attribution, securely share and trace where your digital work spreads |
MILK
La blockchain di memorizzazione MILK ha come goal quello di poter essere eseguita e mantenuta da ogni singolo dispositivo esistente in commercio, ad esempio i dispositivi IOT, Smartwatch che hanno potenza di calcolo limitata.
Per poter essere utilizzata da ogni singolo dispositivo viene utilizzato, al posto di Proof-of-Work, il Proof-of-Relay.
Questo algoritmo si basa sulla latenza della propagazione delle informazioni.
La blockchain MILK viene quindi progettata per memorizzare brevi informazioni utente e distribuirle nel più veloce modo possibile ai peer collegati.
MILK Goals
Abbiamo progettato MILK in modo da essere una blockchain indipendente dalle criptovalute: le informazioni memorizzate nella blockchain MILK sono scorrelate rispetto alle criptovalute.
Avendo la possibilità di inserire brevi informazioni in ogni singolo blocco è possibile creare una sincronizzazione tra più blockchain contemporaneamente.
I goal che ci prefiggiamo sono quindi:
- Blockchain distribuita su tutti i sistemi collegabili ad internet ad oggi disponibili
- Memorizzazione di informazione utente generiche, potenzialmente indipendenti dalle criptovalute
- Propagazione delle informazioni nel modo più veloce possibile
MILK è agnostica rispetto alle informazioni scambiate tanto che è possibile parallelizzare diversi rami di blockchain indipendenti sincronizzate tra loro.
Applications
In general, there are three types of applications on top of MILK.
The first category is financial applications, providing users with more powerful ways of managing and entering into contracts using their intellectual properties.
The second category is semi-financial applications, where PI is involved but there is also a heavy non-monetary side to what is being done; a perfect example is self-enforcing bounties for solutions to computational problems. Finally, there are applications such as online voting and decentralized governance that are not financial at all.
Naming
MILK: identificativo della blockchain, My Ledger Keeper
DropContent: informazioni da memorizzare all’interno della blockchain
Drop: blocco che trasporta le informazioni e che verrà memorizzato nella blockchain
Fly: coda ordinata temporanea
Ledger: coda ordinata che mantiene la blockchain
Ledger
Il Ledger è composto da blocchi collegati tra di loro, ogni blocco può occupare al massimo 1KB. In ogni blocco l’utente finale può memorizzare le seguenti informazioni: nickname, note e signature.
Il blocco è valido perchè connesso al suo blocco precedente: il campo parent contiene infatti l’hash precedente.
Per bloccare il contenuto viene fatto quindi l’hash complessivo del blocco che andrà nella blockchain.
Ogni blocco in gergo tecnico viene chiamato drop.
Proof of something
Tutte le blockchain distribuite si basano sul concetto di “non-trust” dei peer che ne fanno parte, per proteggersi e quindi “bilanciare” il consensus del quorum vengono attivati degli impedimenti a generare blocchi. Il sistema più famoso al mondo ed implementato è quello del Proof-of-Work: utilizzare dei calcoli pesanti a livello di CPU in modo che un peer malevolo “da solo” non riesca ad infettare la rete.
MILK si differenzia rispetto alle altre blockchain perchè implementa un algoritmo diverso per la validazione delle informazioni: “Proof-of-Relay”, tradotto in italiano “prova della staffetta”
Peer to peer
La mesh peer to peer su cui si basa MILK è un algoritmo proprietario disponibile in modo indipendente: anche in questo caso il nostro goal è stato quello di trovare un sistema di trasporto che rispetti i seguenti:
- Funziona anche sotto firewall
- Funziona tramite proxy o su protocolli standard https o http
- Tempi di propagazione molto bassi
- Implementabile in tutti i dispositivi in commercio (ad esempio smartwatch, IOT, smartphone, routers ect…)
- Semplice
E’ possibile utilizzare su un progetto standalone la libreria opensource.
Utilizzare questo sistema di connessione tra i nodi ha aggiunto la possibilità di distribuire la blockchain anche sui siti web basati su protocolli di trasporto http e https.
Nodes capabilities
I nodi posso svolgere i seguenti compiti:
Client semplice | Crea e invia i contenuti della blockchain al nodo “proxy” più vicino |
Proxy | Nodo che è in grado di connettersi alla rete ricevendo connessioni dai client |
Archive | Memorizza in modo persistente le informazioni del ledger |
Ledger Rule | Concorre al quorum per la validazione di un nuovo blocco |
I vari funzionamenti possono essere eseguiti contemporaneamente dal dispositivo in base alle proprie risorse hardware, è anche possibile eseguire la stessa funzionalità su più blockchain in parallelo.
Network connectivity
La mesh di MILK è composta da peer connessi attraverso diversi protocolli di trasporto:
- https
- http
- TCP
- UDP
- Telegram
Ogni peer che svolge la funzione di proxy è in grado di accettare dei client in ingresso e propaga i pacchetti ricevuti alla mesh peer to peer. La topologia di mesh è a grafo dinamico che può chiudersi.
La dinamicità del grafo dipende dai seguenti fattori:
- Disponibilità delle risorse del nodo corrente
- Velocità di propagazione del nodo adiacente
- Il nodo adiacente porta ad un percorso chiuso
- Pesi dell’arco adiacente provenienti dalla rete neurale MMNN (Milk Mesh Neural Network) che si adatta per mantere un quorum di consensus del 51%
Boot
Il peer to peer funziona tramite un primo nodo di scouting della rete: questo nodo contiene gli indirizzi dei peer a cui collegarsi per entrare nella rete ufficiale MILK.
Visto che MILK è un progetto opensource è possibile avere un proprio {bootStrapUrl}: sconsigliamo il fork della blockchain, mentre suggeriamo eventualmente di cambiare la chiave di crittografia della blockchain {blockchainKey}.
Per avere i valori aggiornati, collegatevi a https://web.myledgerkeeper.com
Mesh messages
Download last block | Legge l’ultimo ID memorizzato nella blockchain |
Put Block | Invia un nuovo blocco al fly per essere memorizzato nella blockchain |
Get Fly | I validatori utilizzano il Proof-of-Relay per completare e ordinare il fly |
Validate Fly | Quando il fly raggiunge il 51% di quorum questo viene scritto nel ledger |
Download Ledger | Download in stream del ledger |
Supported devices
La progettazione di questa blockchain ha come goal quello di supportare il piu alto numero di modelli di dispositivi. Verificate la compatibilità attraverso i pacchetti pronti oppure l’integrazione di librerie SDK open source.
Blockchain
La peculiarità della blockchain MILK è che i blocchi generati dai client non vengono memorizzati subito all’interno del ledger ma rimangono in attesa in una coda ordinata.
Il “fly” è il sistema di coda ordinata che contiene i blocchi ancora non scritti nel ledger: il fly è il sistema utilizzato per garantire l’algoritmo Proof-Of-Relay.
Blockchain data
Esempio di pacchetto root memorizzato nella blockchain:
{ "chain": "13a521de668f88a4d5410ab25ae4aad8e4769d84b20b98509c5a781236816f4f", "parent": null, "id": "0.1775515249", "content": "{\"signature\":\"307322dc6eedbd871001cf85c5c08b40047a2df71e8194d5d0d1c6a8e884ec58\",\"nickname\":\"Official Milk Blockchain\",\"note\":\"Blockchain root\"}", "hash": "8add1413631b631c44c8480f86bd1be4fa5df28d0c7864b8d08042bc0c4bcdc0" }
Gli altri pacchetti conterranno valorizzato “parent” con l’hash precedente. Ogni blocco può occupare in formato JSON massimo 1KB: questo prevede anche il passaggio a SHA-512.
Blockchain flow
L’inserimento di una informazione nel ledger pubblico segue un flusso determinato dai seguenti passi:
Proof of Relay
Il fly viene scaricato nel ledger quando ottiene una validazione dal quorum sopra al 51%.
Blocks validation
La validazione del blocco avviene alla fase del “fly”. Fly è il treno di blocchi che ha come valore di major pari a FlyMajor=LastBlockMajor+1. In questa coda sono presenti in modo ordinato crescente tutti i “Drop” ricevuti in periodo di tempo.
Il fly viene validato in una delle seguenti ipotesi:
- Numbero di Drop supera il parametro di configurazione (ad esempio 7KB)
- Il tempo a partire dalla prima Drop ha superato il parametro di configurazione (ad esempio 1 minuto)
- Il tempo a partire dall’ultima Drop ha superato il parametro di configurazione (ad esempio 1 minuto)
- Le risorse del nodo si stanno esaurendo
Il Fly di Drop una volta validato sarà memorizzato nel ledger:
Fee
L’algoritmo di proof-of-relay prevede una remunerazione in base all’affidabilità dei nodi al momento disponibili nella rete di MILK. Alcuni parametri importanti sono i seguenti:
- Bonus: velocità di propagazione
- Malus: numero di Drop aggiunti nel Fly
- Bonus: archiviazione persistente delle informazioni (numero delle volte di download del frammento di ledger)
I bonus vengono accumulati per garantire una spesa nella memorizzazione delle informazioni nel ledger.
Scalability
Per poter scalare abbiamo pensato al sistema multi-chain che è già presente nella versione 1.2 del protocollo.
Foreign blockchains
La blockchain MILK è agnostica alle informazioni memorizzate, questo permette di sincronizzare il proof-of-releay con altri sistemi esterni.
Plugin
Il sistema MILK è basato su un protocollo implementato in librerie API disponibili su tutti i linguaggi e ambienti di sviluppo. E’ possibile quindi scrivere una routine di codice eseguita nel vostro nodo dedicato in modo che possa implementare una delle seguenti idee:
- Aggiungere un pacchetto singolo o immerso in un Fly con le informazioni di blockchain esterne
- Aggiungere le informazioni di token di ethereum all’interno di DropContent
- Sincronizzare la blockchain MILK con sistemi centralizzati, quali marche temporali NTP
- Criptare o controfirmare le informazioni memorizzate all’interno della stessa MILK
Multiple chains
Abbiamo progettato MILK in modo da essere agnostica alle informazioni memorizzate all’interno: è possibile, ma sconsigliato, aggiungere blocchi firmati da {blockchainKey} diverse in modo da poter sfruttare tutta la topologia della rete MILK memorizzando contenuti proprietari verificabili solo dal vostro {blockchainKeyCustom}.
Il vantaggio di supportare dalla versione 1.2 il multiple chain è quello di resistere a fork temporanei o perpetui della blockchain: siamo la prima blockchain in grado di rimanere integra anche con più fork attivi al suo interno.
Foreign partners
Scrivendo un plugin che sincronizza la blockchain MILK con Bitcoin o Ethereum è possibile integrare sistemi di pagamento o criptovalute all’interno di MILK.
Chain alloy
Il collante che permette di fare una “treccia” di blockchain è il sistema di proof-of-relay: al momento della scrittura verranno computati gli hash incrociati di tutte le blockchain attive.
Notes, References and Further Reading
Notes
References
Ethereum White paper | https://github.com/ethereum/wiki/wiki/White-Paper |