White Paper Blockchain

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:

  1. Blockchain distribuita su tutti i sistemi collegabili ad internet ad oggi disponibili
  2. Memorizzazione di informazione utente generiche, potenzialmente indipendenti dalle criptovalute
  3. 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