Este proyecto presenta una implementación simple de una blockchain descentralizada en Python utilizando la biblioteca Flask. La estructura del proyecto se divide en varios archivos, cada uno con su funcionalidad específica.
-
Block1.py: Contiene la implementación de la blockchain. Aquí se definen los bloques, la prueba de trabajo (proof of work) y las funciones relacionadas con la cadena de bloques.
-
cripto.py: Este archivo representa la implementación básica de una criptomoneda. Define cómo se crean y gestionan las transacciones, y cómo se lleva el registro de las monedas de los usuarios.
-
cript_nodo_5001.py: Primer nodo de la red. Este archivo establece un nodo que puede minar bloques y conectarse con otros nodos para descentralizar la red.
-
cript_nodo_5002.py: Segundo nodo de la red.
-
cript_nodo_5003.py: Tercer nodo de la red.
Cada nodo se comunica con otros mediante el uso de archivos JSON. Se ha implementado un mecanismo simple para que los nodos se conecten entre sí y formen una red descentralizada.
En mi caso utilicé Postman para el desarrollo de las API's.
En cada pestaña para los nodos 5001, 5002 y 5003, se debe realizar la siguiente configuración:
- Ir a la sección "Body".
- Seleccionar la opción "raw".
- Cambiar el tipo de texto a "JSON".
- Copiar y pegar el contenido del archivo
nodes.json
para cada nodo.
Ejemplos:
- Para el Nodo 5001:
{
"nodes": ["http://127.0.0.1:5002", "http://127.0.0.1:5003"]
}
- Para el Nodo 5002:
{
"nodes": ["http://127.0.0.1:5001", "http://127.0.0.1:5003"]
}
- Para el Nodo 5003:
{
"nodes": ["http://127.0.0.1:5002", "http://127.0.0.1:5001"]
}
Una vez que los nodos están en ejecución, se pueden realizar peticiones POST para conectar los nodos y comenzar a minar la blockchain. Ejemplos:
- Para conectar el Nodo 5001:
POST http://127.0.0.1:5001/connect_node
- Para conectar el Nodo 5002:
POST http://127.0.0.1:5002/connect_node
- Para conectar el Nodo 5003:
POST http://127.0.0.1:5003/connect_node
Luego, se pueden realizar peticiones de minería para agregar bloques a la blockchain:
GET http://127.0.0.1:5001/mine_block
GET http://127.0.0.1:5002/mine_block
GET http://127.0.0.1:5003/mine_block
Con esto, los nodos se conectan, minan bloques y forman una red descentralizada de blockchain