Corso Blockchain in Rust

Dalle transazioni firmate a una rete di nodi: costruire una blockchain da zero e comprenderne consenso, sicurezza e limiti

Corso di formazione professionale per sviluppatori in cui si costruisce una blockchain da zero in Rust. Il progetto cresce a ogni modulo: dalle prime transazioni firmate a una rete di nodi che scambiano blocchi, sincronizzano la catena e verificano l'inclusione dei pagamenti.

Si implementano il modello UTXO, la mempool, la persistenza su disco e due algoritmi di consenso: Proof of Authority e Proof of Work. Si affrontano anche la validazione dei dati ricevuti dalla rete, gli attacchi a transazioni e blocchi, la gestione dei fork e le Merkle proof.

Il corso può essere tenuto in italiano o in inglese, sia in presenza a Torino che da remoto. Il percorso completo comprende 20 moduli di mezza giornata (4 ore ciascuno), per un totale di 80 ore.

Per partecipare servono ottime capacità di programmazione in almeno un altro linguaggio e un computer con Linux, macOS o Windows con WSL2. Non sono richieste conoscenze pregresse di Rust o delle blockchain.

Il programma è il seguente:

  • Introduzione a Rust
    • Installazione, Cargo e struttura di un progetto;
    • Variabili, tipi di dato e funzioni;
    • Espressioni e controllo del flusso;
    • Il tipo String;
  • Ownership e borrowing
    • Ownership e borrowing;
    • Slice;
    • Struct;
  • Enum, moduli e collezioni
    • Enum e pattern matching;
    • Pacchetti e moduli;
    • Vettori e hash map;
  • Errori, generics, trait e lifetime
    • Gestione degli errori;
    • Generics;
    • Trait;
    • Lifetime;
  • Crittografia e transazioni
    • Componenti di una blockchain;
    • Un algoritmo di hash intercambiabile;
    • Chiavi, firme e indirizzi;
    • Modelli di gestione dello stato;
    • Input, output e firma delle transazioni;
  • Blocchi e catena
    • Struttura e hash del blocco;
    • La catena e i blocchi fuori ordine;
    • Gli output non spesi e l'aggiornamento dello stato;
    • La mempool;
  • Concorrenza e programmazione asincrona
    • Thread, canali e stato condiviso;
    • Async Rust e Tokio;
  • Il consenso
    • Byzantine faults, safety e liveness;
    • Le principali famiglie di algoritmi e la finality;
    • Un trait per gli algoritmi di consenso;
    • Il ciclo e il thread di produzione dei blocchi;
  • Il nodo
    • Libreria, binario e workspace;
    • Comandi a riga di comando;
    • Configurazione e identità del nodo;
  • La genesi e la Proof of Authority
    • Una genesi deterministica e il file di genesi;
    • L'avvio del nodo;
    • I validatori, il determinismo e l'assegnazione dei turni;
    • Costruzione e verifica dei blocchi;
    • Block time e blocchi vuoti;
  • Spendere i fondi
    • Il modello UTXO;
    • Saldo, change e fee;
    • La console del nodo;
  • Inviare una transazione
    • Il comando send;
    • Il double spending in mempool;
    • La remunerazione dei validatori e la coinbase;
  • Persistenza
    • Serializzazione dei blocchi;
    • L'archivio su disco e il ripristino;
    • Archivi alterati, blocchi mancanti e scritture interrotte;
  • La rete: libp2p, la connessione e le transazioni
    • Indirizzi, protocolli, trasporto e sicurezza;
    • Il nodo libp2p e lo Swarm;
    • La configurazione e l'event loop;
    • La diffusione delle transazioni con gossipsub;
  • I blocchi sulla rete
    • L'annuncio dei blocchi;
    • La sincronizzazione tra nodi;
    • Un validatore senza archivio;
  • Una rete di sconosciuti
    • Il possesso degli output;
    • Overspending e integer overflow;
    • L'hash dichiarato e la firma degli input;
  • I blocchi ricevuti
    • I blocchi falsificati;
    • Le regole del consenso sui blocchi ricevuti;
    • Il validatore assente;
  • Proof of Work
    • Il puzzle e la ricerca del nonce;
    • Il mining e la block reward;
    • Il difficulty adjustment;
  • I fork e la scelta della catena
    • La fork choice e il lavoro cumulativo;
    • La chain reorganization;
    • La probabilistic finality e il 51% attack;
  • Merkle tree e light client
    • Il Merkle tree e la Merkle root nel blocco;
    • Le Merkle proof;
    • I block header e la verifica di un pagamento;
    • I limiti del light client;

Ogni modulo prevede esercizi sul progetto. Nell'esercitazione finale i partecipanti collegano i propri nodi a una rete comune, eseguono trasferimenti e ne verificano l'inclusione nei blocchi. Provano inoltre il riavvio dei nodi, la separazione e il ricongiungimento della rete e gli attacchi studiati durante il corso.