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.