Una implementación funcional y educativa de una Blockchain descentralizada escrita en Python.
Este proyecto fue desarrollado para comprender los principios fundamentales de la tecnología blockchain:
Inmutabilidad, Proof-of-Work, Hashing Criptográfico y Arquitectura Distribuida.
- Bloques y Hashing: SHA-256 enlazando cada bloque.
- Proof-of-Work: Algoritmo de minería básico.
- Transacciones: Envío de "monedas" entre direcciones.
- Red P2P (Simulada): Ejecución de múltiples nodos en distintos puertos.
- Consenso: Resolución de conflictos mediante el algoritmo de “Cadena más larga”.
- API REST: Implementada con Flask.
git clone https://github.com/TU_USUARIO/simple-blockchain.git
cd simple-blockchainpython -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activatepip install -r requirements.txtPodés ejecutar un nodo o simular una red completa con múltiples nodos.
python node.py -p 5000El nodo estará activo en:
👉 http://localhost:5000
python node.py -p 5001Podés usar Postman, cURL o el navegador.
curl -X GET http://localhost:5000/minecurl -X POST http://localhost:5000/transactions/new \
-H "Content-Type: application/json" \
-d '{"sender": "d4ee26...", "recipient": "address-bob", "amount": 5}'curl -X GET http://localhost:5000/chainSi tenés dos nodos (5000 y 5001), podés probar el consenso:
curl -X POST http://localhost:5000/nodes/register \
-H "Content-Type: application/json" \
-d '{"nodes": ["http://127.0.0.1:5001"]}'- Miná 1 bloque en el nodo 5000.
- Miná 3 bloques en el nodo 5001 (cadena más larga).
curl -X GET http://localhost:5000/nodes/resolveResultado:
El nodo 5000 adoptará la cadena del 5001 por ser más larga y válida.
simple-blockchain/
│
├── node.py # Punto de entrada - inicia el servidor Flask.
├── api.py # Endpoints de la API REST.
├── blockchain.py # Lógica de la Blockchain, bloques y consenso.
├── utils.py # Funciones auxiliares.
├── requirements.txt # Dependencias.
└── README.md # Documentación.
El sistema busca un nonce que haga que el hash del bloque empiece con 0000.
Esto garantiza:
- Costos computacionales para minar
- Verificación rápida
Cada bloque contiene el previous_hash.
Modificar un bloque invalida todos los posteriores, protegiendo la cadena.
Proyecto bajo licencia MIT.
Ver archivo LICENSE para más información.
Hecho por Santiago Domínguez