Este proyecto es una implementación de una blockchain en Java, diseñada para demostrar cómo funcionan los bloques, los hashes y la seguridad en un sistema descentralizado.
📌 ¿Qué hace esta aplicación?
✅ Crea una cadena de bloques segura con SHA-256.
✅ Cada bloque almacena transacciones y mantiene la integridad de la cadena.
✅ Permite verificar si la blockchain ha sido alterada.
Blockchain es una estructura de datos descentralizada que almacena información de forma segura e inmutable.
📌 Ejemplo en la vida real:
Imagina que en un grupo de amigos llevamos un registro de quién le debe dinero a quién, y todos tenemos una copia del mismo registro.
- Si alguien modifica su propia copia para decir "no debo nada", los demás podrán demostrar que está mintiendo.
- En blockchain, cada "registro" es un bloque, y para que sea válido, todos deben estar de acuerdo.
💡 Blockchain = Un libro de contabilidad distribuido + Seguridad criptográfica
A diferencia de una base de datos tradicional donde una empresa controla los datos, en blockchain:
✅ Los datos se distribuyen entre múltiples nodos (computadoras).
✅ Cada transacción se verifica con criptografía.
✅ Es inmutable: No se puede alterar sin invalidar toda la cadena.
| Característica | Blockchain | Base de Datos Tradicional |
|---|---|---|
| Control | Descentralizado | Centralizado |
| Seguridad | Criptografía (SHA-256) | Accesos restringidos |
| Alteraciones | Casi imposibles (hashing) | Pueden ser modificadas |
| Escalabilidad | Alta, con múltiples nodos | Limitada al servidor |
| Ejemplo | Bitcoin, Ethereum | MySQL, PostgreSQL |
📌 ¿Por qué es importante?
Blockchain es ideal para sistemas donde la confianza es crucial, como registros médicos, votaciones y contratos inteligentes.
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Bloque #1 │ → │ Bloque #2 │ → │ Bloque #3 │
│ Hash: 1234 │ │ Hash: 5678 │ │ Hash: 91011 │
│ PrevHash: 000│ │ PrevHash: 123│ │ PrevHash: 567│
└───────────────┘ └───────────────┘ └───────────────┘
📌 Cada bloque contiene:
✅ Un ID único.
✅ Un hash SHA-256 basado en los datos del bloque.
✅ El hash del bloque anterior (garantiza integridad).
✅ Datos de la transacción (ej: "Juan envió 5 BTC a Pedro").
| Tecnología | Uso en el Proyecto |
|---|---|
| Java | Lenguaje principal |
| SHA-256 | Hashing criptográfico |
| JSON (Gson) | Serialización de bloques |
| RSA (Opcional) | Firma digital para transacciones |
📌 Clase Block (Representa un bloque en la blockchain)
public class Block {
private int index; // Número del bloque
private long timestamp; // Fecha de creación
private String data; // Datos de la transacción
private String previousHash; // Hash del bloque anterior
private String hash; // Hash propio
public Block(int index, String data, String previousHash) {
this.index = index;
this.timestamp = Instant.now().getEpochSecond();
this.data = data;
this.previousHash = previousHash;
this.hash = calculateHash();
}
public String calculateHash() {
String input = index + timestamp + data + previousHash;
return applySha256(input);
}
private String applySha256(String input) {
try {
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);
}
}
}📌 Explicación:
✅ calculateHash() genera un hash único para el bloque usando SHA-256.
✅ applySha256() transforma cualquier dato en un hash hexadecimal.
📌 Clase Blockchain (Gestiona la cadena de bloques)
public class Blockchain {
private List<Block> chain;
public Blockchain() {
this.chain = new ArrayList<>();
chain.add(new Block(0, "Bloque Génesis", "0"));
}
public void addBlock(String data) {
Block previousBlock = chain.get(chain.size() - 1);
Block newBlock = new Block(previousBlock.getIndex() + 1, data, previousBlock.getHash());
chain.add(newBlock);
}
public boolean isChainValid() {
for (int i = 1; i < chain.size(); i++) {
Block currentBlock = chain.get(i);
Block previousBlock = chain.get(i - 1);
if (!currentBlock.getPreviousHash().equals(previousBlock.getHash())) {
return false;
}
}
return true;
}
}📌 Explicación:
✅ addBlock() crea un nuevo bloque basado en el anterior.
✅ isChainValid() verifica que la cadena no haya sido manipulada.
1️⃣ Clonar el repositorio
git clone https://github.com/FirstOnDie/BlockchainTransaction.git
cd "Transacciones Descentralizadas Blockchain"2️⃣ Compilar y ejecutar el programa
mvn clean install
mvn exec:java -Dexec.mainClass="org.cexpositoce.transaccionesBlockchain.TransaccionesDescentralizadasBlockchainApplication"3️⃣ Verificar que la Blockchain es válida
Este proyecto demuestra cómo funciona una blockchain real en Java sin depender de criptomonedas.
📌 Creador: Carlos Exposito (Frody)
📌 GitHub: FirstOnDie
📌 Contacto: LinkedIn