Come creare una semplice blockchain in Java

In questo articolo vedremo come creare una semplice blockchain da zero utilizzando il linguaggio Java. L'obiettivo è comprendere i concetti fondamentali: blocchi, concatenazione, hash e validazione della catena.

1. Cos'è una Blockchain?

Una blockchain è una struttura dati costituita da una serie di blocchi, ognuno dei quali contiene dati, un timestamp, un hash e l'hash del blocco precedente. Questo la rende immutabile e sicura contro le manomissioni.

2. Definizione della Classe Block

Creiamo una classe Block che rappresenta l'unità fondamentale della blockchain:


import java.util.Date;
import java.security.MessageDigest;

public class Block {
    public String hash;
    public String previousHash;
    private String data;
    private long timeStamp;

    public Block(String data, String previousHash) {
        this.data = data;
        this.previousHash = previousHash;
        this.timeStamp = new Date().getTime();
        this.hash = calculateHash();
    }

    public String calculateHash() {
        try {
            String input = previousHash + Long.toString(timeStamp) + data;
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hashBytes = digest.digest(input.getBytes("UTF-8"));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hashBytes) {
                String hex = Integer.toHexString(0xff & b);
                if(hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            return hexString.toString();
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }
}

3. Costruzione della Blockchain

Ora possiamo creare la nostra blockchain come una lista di blocchi:


import java.util.ArrayList;

public class SimpleBlockchain {
    public static ArrayList<Block> blockchain = new ArrayList<>();

    public static void main(String[] args) {
        blockchain.add(new Block("Blocco iniziale", "0"));
        blockchain.add(new Block("Secondo blocco", blockchain.get(blockchain.size()-1).hash));
        blockchain.add(new Block("Terzo blocco", blockchain.get(blockchain.size()-1).hash));

        for (Block block : blockchain) {
            System.out.println("Hash del blocco: " + block.hash);
            System.out.println("Hash precedente: " + block.previousHash);
            System.out.println();
        }
    }
}

4. Validazione della Blockchain

Aggiungiamo un metodo per verificare l'integrità della catena:


public static boolean isChainValid() {
    for (int i = 1; i < blockchain.size(); i++) {
        Block current = blockchain.get(i);
        Block previous = blockchain.get(i - 1);

        if (!current.hash.equals(current.calculateHash())) {
            return false;
        }

        if (!current.previousHash.equals(previous.hash)) {
            return false;
        }
    }
    return true;
}

Conclusione

Abbiamo costruito una semplice blockchain in Java, comprendendo i suoi componenti fondamentali. Questa implementazione base può essere estesa con funzionalità come proof-of-work, firme digitali, o gestione delle transazioni.

Torna su