Tempo di lettura: 2 minuti

Come tutti sappiamo la base e il futuro delle criptovalute non sono solo le transazioni, ma la tecnologia su cui le transazioni sono memorizzate: blockchain!

Cos’è una blockchain

Una blockchain è letteralmente una catena di blocchi, in cui sono salvate delle informazioni. Più precisamente è un database distribuito, distribuito in tanti nodi di una rete. Per capire la struttura della blockchain che andremo a studiare usiamo una linked list, quella che nei manuali di informatica viene chiamata semplicemente “lista con nodi”.

linked list blockchain
Struttura di una linked list

Come creare una Blockchain

Per prima cosa serve scrivere la classe che descrive un nodo, un semplice oggetto con i seguenti attributi: index, l’hash del nodo precedente, timestamp del blocco, il dato salvato nella chain e infine l’hash attuale.

Molto probabilmente vi starete chiedendo: come viene generato l’hash identificativo del nodo? Attraverso questa funzione

Quando sarà richiesta l’immissione di un nuovo blocco all’interno della chain basterà chiamare il costruttore del nodo attraverso l’arrow function generateBlock, che riceverà come parametro il dato da salvare.

Per lo storage della nostra blockchain useremo un semplice array, in cui inseriremo il primo blocco.

Ogni tecnologia che lavora con blockchain deve poter fornire una metodo per verificare l’integrità di questo database distribuito, evitando inserimenti di blocchi danneggiati o errati! Per questo avremo bisogno di una funzione che verificherà la correttezza degli indici, del previousHash e del calcolo dell’hash.

Quando si sviluppa un database distribuito il primo problema da risolvere è la sincronizzazione tra i singoli nodi, in particolare la risoluzione di conflitti causati da serie di blocchi diversi tra loro. Nell’immagine seguente trovate la soluzione: scegliere il blocco più lungo, che evita la perdita di blocchi successivi.

blockchain javascript
Risoluzione di un conflitto all’interno di una blockchain

Oltre al database distribuito è necessario gestire la connessione tra i nodi che compongono la nostra rete, che dovranno condividere e sincronizzare i propri blocchi. Ecco tre requisiti fondamentali:

  1. Quando un nodo genera un nuovo blocco questo verrà inviato in broadcast in tutta la rete
  2. Quando un nodo si connette con un nuovo peer dovrà inviare l’ultimo blocco nella chain
  3. Quando un nodo riceve un blocco con indice maggiore del corrente (nella sua chain) deve aggiungere questo blocco alla chain attuale, oppure richiedere tutta la chain

La nostra piccola blockchain può essere controllata attraverso un server HTTP:

Potrete ottenere la lista di tutti i blocchi, creare un nuovo blocco e infine aggiungere o rimuovere nodi. Questo server usa due tipi di comunicazione: l’interfaccia HTTP per gestire il server e un’altra per la comunicazione peer to peer tra i nodi (websocket).

Se siete interessati a provare NaiveChain, il nome che Lauri Hartikka (qui il profilo GitHub) ha dato a questa piccola demo di una blockchain trovate qui il repository.

Autore

Sono uno studente Web&Cloud. Amo programmare, negli anni ho sviluppato competenze full-stack, in particolare nel mondo Javascript. Linux e la crittografia mi hanno sempre appassionato, fino a portarmi nel mondo delle cryptovalute.

8 Comments

    • Simone Da Re Reply

      Ciao Francesco!
      Complimenti per il tuo post, mi sembra di averlo già letto è possibile che io l’abbia trovato su Facebook?
      Presto farò un articolo che avrà alcuni punti in comune con il tuo, in particolare con Metamask!
      Complimenti per i tuoi articoli, continua ad esplorare questo bellissimo mondo, si imparano davvero tantissime cose!

      • Ciao Simone,
        grazie per avermi risposto 🙂
        l’ho condiviso su facebook un po’ di tempo fa.
        Rimango in attesa del tuo nuovo articolo allora! A presto!

        • Ciao Francesco! come ti trovo su facebook? Sto leggendo il tuo articolo e sto cercando di seguirlo passo passo. Molto interessante!

  1. ciao,ho piu’ di 60 anni ma sono stato sempre interessato alle nuove tecnologie.
    Avendo lavorato per anni in campo finanziario ho studiato una criptovaluta veramente innovativa; vorrei avere un consiglio sull’iter da seguire per passare dalla teoria ai fatti (cioè all’emissione di questo coin) e su quante persone necessitano e in che funzioni per poter completare questo mio progetto.

  2. Alessandro Reply

    Ciao Fabrizio.
    Hai poi creato la crypto? Hai scritto la white paper?

  3. ho comprato tempo fa delle cripto monete attraverso una società con sede a Londra…ora, le ho vendute. per avere i soldi che ho incassato sul mio conto corrente mi hanno chiesto di aprire una blokchain, pagando 100 dollari…cosa significa?

    • Riccardo Masutti

      Ciao Giuseppe,
      potresti spiegare meglio la situazione? Di che azienda si tratta? Sei sicuro che ti abbiano chiesto di ‘aprire una blockchain’?

      Il tutto suona molto strano, per non dire truffaiolo… Aspetto una tua risposta, anche in privato, per aiutarti

Scrivi un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.