Whitepaper Capitolo 4 - La blockchain

4.1 Cos’è la blockchain

La blockchain è un registro aperto e distribuito, in grado di memorizzare le transazioni tra due parti in modo sicuro, verificabile e immodificabile.

La natura distribuita e il modello cooperativo rende robusto e sicuro il processo di validazione: l'autenticazione avviene tramite la collaborazione della rete ed è alimentata da interessi collettivi.

Quando si fa riferimento a questa tecnologia, è necessario distinguere tra transazioni e blocchi. I blocchi contengono lotti di transazioni valide che sono trasformate in un codice, chiamato hash e codificate all'interno di un Merkle tree (hash tree). Ogni blocco include l'hash del blocco precedente creando così il collegamento tra due blocchi. L'iterazione di questa procedura forma la catena e garantisce l'integrità del blocco precedente, questo fino al blocco di genesi.

 

In parole povere potremmo paragonare la blockchain ad un foglio di carta digitale, infatti così come su un foglio di carta, possiamo correggere quanto scritto solo riscrivendo su un nuovo foglio senza poter selezionare e cancellare una parte del testo scritto, così sulla blockchain possiamo modificare i blocchi riscrivendo il contenuto corretto in un nuovo blocco ma non possiamo cancellare i blocchi precedenti, a differenza di quanto avviene per i normali fogli digitali. 

 

4.2 Perché Followine utilizza la blockchain?

C’è una serie di ragioni per cui Followine ha deciso di utilizzare la tecnologia blockchain per lo sviluppo del suo progetto:

 

A chi avanza obiezioni nei confronti della blockchain utilizzata per la tracciabilità dei prodotti, dicendo che le informazioni vengono inserite da esseri umani, rispondiamo che: Followine è un progetto studiato per combattere un fenomeno specifico, la contraffazione del vino, che abbiamo studiato, che conosciamo, che sappiamo come funziona. Attraverso l’analisi dei dati inseriti – relativi a quello che viene definito il DNA – possiamo verificare la veridicità delle informazioni. È l’azienda che immette i dati a proprio nome e, qualora questi risultassero fraudolenti, avremo la possibilità di prendere provvedimenti specifici. Infatti, grazie al database distribuito, ognuno può verificare la correttezza delle informazioni inserite e valutarne la bontà, che siano consumatori o organi di competenza.

Followine provvederà, inoltre, a condurre analisi chimico-fisiche a campione, per verificare le proprietà del vino e confermare o meno la provenienza delle uve e i processi di produzione utilizzati. Dette analisi saranno inserite all’interno della blockchain e visibili a tutti e il caricamento dei dati, relativamente a queste analisi, avverrà con un metodo “doppio cieco”, al fine di garantire la trasparenza dell’operazione.

 

L’immodificabilità dei dati inseriti, inoltre, rende l’azienda pienamente responsabile di ogni sua affermazione – vista la crescente attenzione degli Stati nei confronti della blockchain e l’intenzione di conferire ad essa rilevanza legale.

 

RILEVANZA DEI DATI REGISTRATI IN BLOCKCHAIN

 

Lo sviluppo e l’utilizzo della tecnologia blockchain, soprattutto in materia di anticontraffazione, è supportato da molti Paesi. In particolare, Il Governo italiano, ha approvato un decreto legge, che introduce le disposizioni per la deburocratizzazione, il quale stabilisce che la blockchain avrà la stessa validità giuridica attribuita a informazioni e dati certificati attraverso l’uso di altre tecnologie. Inoltre, riconosce che le tecnologie basate su registri distribuiti , definite come i protocolli informatici che usano un registro condiviso, distribuito, replicabile, accessibile simultaneamente, architetturalmente decentralizzato su basi crittografiche ,  finalizzate alla registrazione e convalida di dati verificabili da ciascun partecipante, non alterabili e non modificabili.

Insomma, il Governo Italiano, con questo provvedimento, ha riconosciuto che i dati registrati e convalidati su blockchain pubblica o registri distribuiti sono da considerarsi dati certificati aventi piena validità giuridica

 

4.3 Perché iniziare con Ethereum

I motivi per cui abbiamo deciso di avviare il nostro progetto utilizzando la piattaforma Ethereum sono sostanzialmente due: costi e tempi di sviluppo. Al fine di testare il funzionamento del nostro sistema con pochi produttori, è stato sufficiente collegare le informazioni che dovevano essere analizzate dal nostro algoritmo su uno smart contract e verificare la fattibilità. Per tale motivo abbiamo iniziato con Ethereum e scritto i primi smart contract in Solidity. Verificata la bontà del progetto, abbiamo avviato il pilota.

Durante i test abbiamo cercato di ricreare quanti più casi possibili per studiare la risposta data dalla rete. I risultati sono stati ottimi: tanto i tempi di verifica quanto i tempi di scrittura erano accettabili. Quello che, purtroppo, non era accettabile erano i costi per il gas per il deployment degli smart contract, dato il basso numero di transazioni possibili sulla rete mondiale. Abbiamo quindi deciso di percorrere un'altra strada, perché senza nulla togliere alla rete ethereum in quanto ad affidabilità, sicurezza ed eterogeneità, essa è molto lontana da ciò di cui abbiamo bisogno per il tracciamento di ogni singola bottiglia. Abbiamo ovviato al problema modificando il modo in cui il nostro sistema registra i dati e il modo in cui vengono analizzati dal nostro algoritmo. In questo modo abbiamo garantito una continuità di servizio fino a quando non verrà rilasciata la nostra blockchain proprietaria, basata su Hyperledger.

Crediamo che nei prossimi anni la rete Ethereum riceverà aggiornamenti per aumentare il numero di transazioni e la riduzione del gas ma, a conti fatti, al momento essa non è adatta alle esigenze di un progetto di tracciabilità e anticontraffazione. Perché? Perché per raggiungere un target di transazioni che potrebbe essere interessante e conveniente per Followine dovrebbero moltiplicare per 100 il limite di transazioni ipotizzate per il futuro, nonché dividere il costo del gas attuale per transazione di circa 2000 volte.

Quindi, sperando comunque in un aggiornamento dell’intera rete Ethereum e di un nuovo metodo di consenso, non abbiamo potuto fare altro che rivolgere lo sguardo altrove.

 

4.4 Vediamo Hyperledger Sawtooth

1.         Sawtooth fornisce un concetto di smart contract che permette agli sviluppatori di scrivere contratti logici in un linguaggio di loro scelta. Un’applicazione può essere una business logic nativa oppure uno smart contract su una virtual machine. Sawtooth permette la coesistenza di entrambi i tipi di applicazione sulla stessa blockchain. 

2.         Sawtooth è stato creato per risolvere il problema dei “permissioned (private) networks”. I claster di nodi possono essere facilmente registrati con permessi separati. Non c’è nessun servizio centralizzato che può (anche solo potenzialmente) inficiare o perdere pattern di transazione o altre informazioni confidenziali. I vari ruoli, gli specifici permessi, le identità vengono registrati in blockchain, così tutti i partecipanti possono accedere a tutte le informazioni.

3.         Sawtooth include uno scheduling per le registrazioni in parallelo, che divide le transazioni in flussi paralleli. Basato sullo stato a cui fa capo una transazione, Sawtooth isola l’esecuzione delle transazioni una dall’altra e, al contempo, mantiene intatti i cambiamenti contestuali. Quando possibile, le transazioni vengono eseguite in parallelo, il che permette di evitare una doppia spesa anche quando vi siano modificazioni multiple allo stesso stato. Lo scheduling in parallelo fornisce un sostanziale incremento delle performance sulle esecuzioni seriali.

4.         Al momento Sawtooth supporta diversi tipi di consenso, tra cui il PoET. Proof of Elapsed Time (PoET) è un algoritmo di consenso in stile Nakamoto, che permette di creare un protocollo capace di supportare reti di grandi dimensioni. PoET dipende dalle esecuzioni di istruzioni sicure, al fine di raggiungere i benefici di espansione di un algoritmo di consenso stile Nakamoto, senza l’esagerato consumo di energia utilizzata dall’algoritmo Proof of Work.

5.         In Sawooth, I modelli di data e i linguaggi per le transazioni sono implementati in un sistema estendibile, chiamato “famiglie di transazione”. Definendo e implementando una nuova famiglia, vengono definiti i vari parametri per la validità di una transazione e si definisce, altresì, come questi parametri devono essere applicati. Oltre alla possibilità di far creare ad ogni sviluppatore le proprie famiglie di transazioni, Sawtooth fornisce diversi modelli di base, che permettono di facilitare e velocizzare la nascita di nuovi network basati su Sawtooth

Tabella 4.1

 

 

Consenso

Quando un blocco arriva, il chain controller crea un BlockValidator e lo invia in un thread pool per l’esecuzione. Una volta che il BlockValidator è stato completato, il blocco ritorna al ChainController, il quale indica se il nuovo blocco deve essere il chain head. Questa indicazione dà vita a tre casi:

1.         Il chain head è stato caricato quando il BlockValidator è stato creato. In questo caso, il nuovo BlockValidator è stato creato e inviato per una fork resolution.

2.         Il nuovo blocco dovrebbe diventare il nuovo Chain Head. In questo caso il Chain Head è stato caricato per essere un nuovo blocco.

3.         Il nuovo blocco non dovrebbe diventare il nuovo Chain Head. Questo potrebbe verificarsi in due ipotesi: o perché il nuovo blocco è parte di una catena che ha un blocco invalido, o perché è esso stesso membro di una fork più piccola o meno desiderabile come determinato dal consenso.

Il chain controller, in poche parole, sincronizza il caricamento dei chain Head grazie al risultato di un solo BlockValidator – evitando condizioni derivanti dalla risoluzione di processi che creano fork multiple, tentando di caricare diversi chain head allo stesso tempo. 

 

 

 

4.5 Ethereum VS Sawtooth

Tabella 4.2

Funzione

Ethereum

Sawtooth

Linguaggio

Proprietario

Go, Python, Javascript, C++, Java, Rast, solidity

Consenso

PoW

PoET

Consumo energetico

alto

Basso

Costo deployment

alto

Basso

Velocità di deployment

bassa

Alta

Numero di transazioni

basso

Alto

Smart contract

ERC

Proprietario + ERC

Modulare

NO

SI

Scalabilità

alta

alta

Possibilità di minare

SI

SI

Ricompense per blocco

Medie

A scelta

 

 

4.5 I motivi della nostra scelta

Abbiamo deciso di iniziare con Ethereum e di continuare a sviluppare il sistema su tale rete, anche rinunciando a gran parte delle features del sistema Followine. In questo modo abbiamo potuto testare la bontà del nostro progetto, l’interesse dei produttori e l’interesse dei consumatori: questo ci ha permesso anche di risolvere molti problemi di natura logistica e concettuale. Dal momento che i cambiamenti previsti per Ethereum non soddisfano tutti i requisiti del nostro progetto, abbiamo optato per una soluzione diversa: Hyperledger Sawtooth.

 

Cosa ci permette di fare Sawtooth:

1-         Ridurre i costi di Deployment e aumentare la velocità per transazione, quindi poter inserire ogni bottiglia come unica istanza nella rete.

2-         Ridurre notevolmente i costi di Deployment e quindi, in futuro, poter tracciare non solo ogni bottiglia ma ogni singola pianta coltivata.

3-         Modificare le dinamiche di base della rete per renderla al 100% funzionale al progetto

4-         Creare un Wine Coin minabile da parte dei produttori e dei consumatori e poter gestire le ricompense in modo semplice

5-         Permettere ai produttori di usare il Wine Coin per fronteggiare le spese di utilizzo della rete

6-         Rendere completamente trasparente ogni transazione e ogni funzionalità della rete

7-         Creare un marketplace proprietario e facilmente accessibile a tutti gli aderenti al circuito, in modo da potenziare non solo l’offerta B2B ma anche l’offerta B2C

8-         Poter scrivere tutte le regole di funzionamento, mining, logica, reward e utilizzo in uno smart contract visibile a tutti perché, ricordiamo, che proprietario non significa privato.

 

 

4.6 I Vantaggi del PoET per Followine        

Parte dei vantaggi precedenti derivano dal consenso alla base di Sawtooth, il PoET (proof of elapsed time).

Il PoET offre una soluzione al problema Bizantino che utilizza un ambiente di esecuzione affidabile per migliorare l’efficienza della più diffusa soluzione Proof of Work. Ad alto livello, il PoET elegge peer individuali in modo stocastico per eseguire richieste ad un determinato “target rate”. I peer vengono scelti in base ad una variabile “casuale distribuita esponenziale” e aspettano per una quantità di tempo dettata dal processo di campionamento. I peer con il campionamento minore vincono la lotteria. È possibile prevenire truffe, attraverso l’uso di un ambiente di esecuzione affidabile, la verifica delle identità e il blacklisting basato sull’asimmetria delle chiavi crittografiche. Inoltre, è possibile inserire set aggiuntivi di variabili e regole per l’elezione.

 

Le basi di una buona lotteria:

Equità: La funzione distribuisce equamente l’elezione del leader (il vincitore della lotteria) tra tutta la popolazionepartecipante.

Investimento: Il costo per controllare l’elezione del leader deve essere proporzionale al valore guadagnato dalla transazione stessa.

Verifica: Deve essere semplice per tutti i partecipanti verificare la selezione legittima del leader, nonché le informazioni collegate all’elezione.

 

 
 


Tabella 4.3

 

Un esempio di PoET

1.         Una funzione assegna ad ogni Validator un tempo da aspettare

2.         Il Validator con il tempo minore per un certo blocco di transazioni viene eletto leader

3.         Una funzione, come “CreateTimer”, crea un timer per il blocco di transazione

4.         Un'altra funzione, come “CheckTimer”, verifica che il timer è stato creato dalla funzione originale. Se il timer finisce, questa funzione crea un’attestazione che può essere usata per verificare che il Validator ha aspettato abbastanza tempo prima di vincere il ruolo di Leader nella lotteria.

 

In conclusione crediamo che questo sia il tipo di consenso più adatto a soluzioni per il tracciamento dei prodotti, perché permette di:

  1. Ridurre i costi
  2. Velocizzare le transazioni
  3. Creare una soluzione molto scalabile
  4. Ridurre il gap tra grandi e piccoli produttori, grazie alle regole scelte per il reward
  5. Far partecipare più soggetti ad una rete senza andare a compromettere le dinamiche di controllo nella decentralizzazione e trasparenza, come fanno altre soluzioni alternative al PoW (Proof of Work) basate sul “Voting”

 

Tabella 4.4

Caratteristica

PoW

DPoS

PoET

Controllo Decentralizzazione

NO

SI

NO

Velocità

Bassa

Media

Alta

Sicurezza

Alta

Media

Alta

Specifici Hardware

SI/NO

NO

SI

Trasparenza

possibile

possibile

Possibile

Diffusione

Alta

Bassa

Bassa

Potenza necessaria

Alta

Media

Bassa

Consumo energetico

Altissimo

Medio

Basso

 

 

4.6 Come sarà la nostra blockchain

Non ci siamo, ovviamente, limitati a prendere quanto di buono fatto da altri e integrarlo col nostro progetto ma abbiamo cercato di migliorare il modello di consenso e il processo di validazione di Sawtooth, in modo da garantire l’auto-sostenibilità del progetto nel lungo periodo e proteggere l’investimento di tutti coloro che supportano Followine.

            I principi di base:

 

Il pool per il “mining”

Non sarà un vero e proprio mining perché non andremo a creare nuove monete, i nostri minatori saranno più che altro dei Validatori e garanti dei principi di base della blockchain di Followine. Per ripagare i nostri Validatori sono previste delle ricompense in Token che verranno recuperate da un pool bloccato di Wine Coin.

 

Il pool per il “mining”

Tali principi sono inseriti nello smart contract, già all’apertura della Public Sale.

 

Le regole di funzionamento di Sawtooth:

Il PoET (Pool of Elapsed Time)

Per inserire una macchina all’interno della rete Followine, sarà necessario possedere un Wallet con Wine Coin e bloccarne una determinata parte; in caso contrario il processo di validazione viene bloccato e non si procede al consenso per l’inserimento del nuovo blocco.

Tabella 4.5

 

Abbiamo pensato di creare questo nuovo approccio, per sommare i benefici del pool of stake con quelli del Proof of Elapsed time. In questo modo avremo una rete capace di raggiungere velocità di validazione impressionanti, garantire tutti i principi di base che ci eravamo prefissati, soprattutto quello di decentralizzazione.

Da notare, infatti, che nel nostro nuovo processo di validazione non sarà presente un peso diverso in base alla quantità di Token posseduti, ma la quantità sarà standardizzata in base al valore di mercato del Token stesso e aggiornata in automatico dallo smart contract.

 

Abbiamo anche previsto dei casi in cui il valore del Token raggiunga cifre molto alte e quindi potrebbero sorgere dei problemi per gli Utenti consumer, in quanto ci vorrebbe una quantità elevata di Wine Coin da possedere per poter partecipare al processo di Validazione.

Nel caso si verifichi questa situazione, verrà attivata la funzione “Community Wallet”, grazie a questa funzione gli utenti iscritti alle liste per il “Mining” potranno creare un pool condiviso di Wine Coin bloccati e far lavorare insieme le proprie macchine al fine di partecipare al processo di Validazione.

 

4.7 Il modello di ricompense autogestito

Le regole per le ricompense:

 

4.8 I principi di base la nostra visione

Perché vogliamo rendere tutto pubblico?

In quanto futuro “Organo di Garanzia”, Followine non può schierarsi nè dalla parte dei produttori nè da quella dei consumatori, né tantomeno può favorire un produttore piuttosto che un altro.

Questa è stata una delle principali ragioni che ci hanno portato a scegliere la blockchain: oltre a tutti vantaggi di tipo tecnico ed economico, infatti, questa ci permette di garantire una assoluta trasparenza sui dati forniti e registrati.

Questo, però, a noi non bastava. Avremmo potuto, così come fatto da altri, creare una blockchain privata – in modo da poter comunque manovrare alcuni di quei dati. Ma dal momento che il nostro obiettivo è essere super partes, abbiamo dovuto inserire necessariamente, all’interno della nostra blockchain, dei blocchi che ci impediscano di poterne prendere il controllo (e lo stesso dicasi per soggetti terzi). Per questo abbiamo deciso di scrivere tutto ciò che riguarda il funzionamento e le ricompense all’interno di uno smart contract pubblico, così come tutte le informazioni relative ai prodotti e a chi le ha inserite e quando.

Volendo dimostrare che, senza fare i furbi, creare una rete proprietaria che sia allo stesso tempo pubblica si può.

Pensiamo quindi di aver rispettato i principi alla base del nostro progetto: trasparenza, decentralizzazione e auto-sostenibilità.