Skip to content

FirstOnDie/BlockchainTransaction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔗 Blockchain en Java: Registro de Transacciones Descentralizado

📌 Descripción

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.


🔍 ¿Qué es Blockchain?

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


🔗 Cómo Funcionan las Transacciones Descentralizadas

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.


📊 Tabla Comparativa: Blockchain vs. Bases de Datos Tradicionales

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.


🚀 Cómo Funciona Este Proyecto

   ┌───────────────┐   ┌───────────────┐   ┌───────────────┐
   │  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ías Utilizadas

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

📍 Explicación del Código

📌 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.


🔥 Cómo Ejecutar el Proyecto

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


🎯 Conclusión

Este proyecto demuestra cómo funciona una blockchain real en Java sin depender de criptomonedas.


👨‍💻 Autor

📌 Creador: Carlos Exposito (Frody)
📌 GitHub: FirstOnDie
📌 Contacto: LinkedIn

About

Ejemplo de transacciones descentralizadas en blockchain

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages