Laboratorio de blockchain: una cadena de juguete en Python para leer, romper, minar y firmar
Este laboratorio da a cada alumno un JupyterLab propio con una blockchain de juguete escrita en Python sencillo, lo bastante corta para leerla entera: bloques que guardan el hash del anterior, el minado, un libro de cuentas que calcula saldos a partir de pagos, una firma hecha solo de hashes y dos cadenas que no coinciden. Seis scripts pequeños muestran lo que hace cada idea, siempre igual.
Es un juguete que enseña las ideas. No tiene moneda, ni red, ni mercado, ni precio, no da consejos sobre dinero y no es lo bastante seguro para un uso real. Tampoco es un laboratorio de ataque: cada copia no tiene salida a internet ni acceso a ningún otro alumno, y no se descarga nada en ella.
Qué aprenden los alumnos
Cómo un hash es la huella de unos datos y cómo un bloque que guarda el hash del anterior forma una cadena. Rompen una cadena cambiando un importe y ven que la comprobación falla en el bloque cambiado; después minan ese bloque otra vez y ven que falla en el siguiente. Ven el minado como ensayo y error, 15 intentos para un cero al principio y 109028 para cuatro, así que el trabajo crece muy deprisa con la dificultad. Calculan saldos a partir de pagos y ven que se rechaza un gasto excesivo, comprueban una firma basada en hashes y ven que una letra cambiada la rompe, y resuelven una bifurcación siguiendo la cadena con más trabajo. Sirve para introducciones a la seguridad informática, los sistemas distribuidos y las estructuras de datos; consulta en la unidad de tu propio organismo certificador la redacción exacta, aquí no se cita ninguna.
Ejecútalo en tu navegador
El laboratorio inicia un solo servicio, jupyter, que escribe chain.py, ledger.py, lamport.py, un cuaderno de inicio y los scripts cortos en su carpeta de trabajo, sin descargar nada. JupyterLab no pide token, porque la puerta de la plataforma ya sabe quién lo abre. El terminal junto al laboratorio no tiene Python propio: llega al del laboratorio con docker exec jupyter, seguido del comando que se ejecuta dentro.
- Abre la página Contenedor. Abre «Crear» en la barra y elige «Ejecutar un contenedor». Cualquiera puede abrir la página, y el laboratorio de Git y el de SQL se inician sin cuenta. Todos los demás laboratorios necesitan una cuenta gratuita: crea una, inicia sesión y pulsa «Iniciar».
- Busca el laboratorio. La tarjeta «Laboratorios de ejemplo» lista todos los ejemplos. Busca Blockchain: una cadena de juguete en Python.
- Pulsa «Iniciar». «Iniciar» lo ejecuta tal cual, con una sola pulsación. «Editar el archivo primero» abre el archivo compose para que lo cambies antes de iniciarlo.
- Ábrelo. En la página del laboratorio, la barra del laboratorio tiene un enlace llamado JupyterLab: púlsalo para abrir JupyterLab en tu navegador y leer chain.py en el editor de archivos. Después pulsa «Abrir terminal» y escribe docker exec jupyter python3 steps/link.py para ver tres bloques, cada uno con el hash del anterior.
Qué pedir a los alumnos que entreguen
Un cuaderno propio que use chain.py para responder a una pregunta que hayan elegido, por ejemplo cómo crece el número de intentos con la dificultad, qué hace falta para cambiar un bloque antiguo y mantener una cadena válida, o qué pasa con una bifurcación cuando un lado tiene más dificultad, descargado desde JupyterLab con File, Download. Y una o dos frases, con sus propias palabras, sobre lo que encontraron. Nada se califica automáticamente: la frase muestra si se entendió. Para un trabajo más avanzado, pide que expliquen por qué una cadena válida no demuestra que cada pago que contiene sea verdadero.
Una lección básica sobre este laboratorio
Blockchain Basics es una lección pequeña que se hace en este laboratorio. En ella el alumno enlaza tres bloques, cambia un importe y ve fallar la comprobación, mina un bloque con cuatro dificultades, calcula saldos y ve que se rechaza un gasto excesivo, firma un mensaje y rompe la firma con una letra, y resuelve una bifurcación con la cadena que tiene más trabajo.
Las cuentas personales gratuitas la tienen en el módulo Basics, que está en Inicio, y cada centro puede copiarla de la carpeta Basics de la Biblioteca. Es pequeña a propósito: muestra a un docente lo que es una lección que se hace en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.
El código en GitHub
El archivo compose no tiene Dockerfile: ejecuta una sola imagen pública, el scipy-notebook de los Jupyter Docker Stacks, fijado a una etiqueta con fecha, con su propia cuenta sin privilegios y 512 MB de memoria, y el juguete solo usa la biblioteca estándar de Python. La imagen tiene licencia BSD-3-Clause y no la distribuimos nosotros. El archivo escribe cada archivo de Python a partir de un texto fijo al arrancar, el minado siempre empieza en el nonce 0 y las claves de la firma salen de una semilla fija, así que cada copia imprime lo mismo y no se descarga nada. Los límites son honestos: es una sola máquina y no una red, un bloque lleva una lista corta de pagos, la clave de la firma firma un solo mensaje y no se conserva nada cuando el laboratorio se detiene, así que el alumno descarga antes su cuaderno.
Ponlo como tarea
Indica en la tarea qué entregar.
- Crea el laboratorio. En tu módulo añade una tarea y elige la tarjeta «Laboratorio de contenedores», y después «En un repositorio de GitHub». Indica https://github.com/mitsurutech/lab-blockchain-lab con la rama main. El archivo compose es el predeterminado, compose.yaml. Haz un fork del repositorio antes si quieres modificarlo, por ejemplo para cambiar la cadena de juguete.
- Publica y pruébalo. «Publicar» fija el commit que te mostraron, así que un cambio posterior en el repositorio no altera un laboratorio que ya has asignado. Inicia primero tu propia copia.
- Asígnalo. Asígnalo como cualquier tarea, con una fecha de entrega si quieres, e indica en la tarea qué hacer y qué entregar.
- Califica lo entregado. Abre la copia de un alumno y el trabajo que ha entregado, califícalo y devuélvelo con un motivo si necesita más.
Prueba este laboratorio, y lo que cuesta
Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.
Preguntas frecuentes
- ¿Por qué no hay que escribir token ni contraseña?
- A la página web de un laboratorio solo se llega por la puerta de la plataforma, que ya sabe quién eres y solo deja entrar a ti y al personal docente de tu módulo. Por eso JupyterLab se inicia sin token. No lo ejecutes así en una máquina a la que pueda llegar cualquiera.
- ¿Por qué el terminal usa docker exec jupyter?
- El terminal del laboratorio lleva algunos clientes, pero no Python. docker exec jupyter ejecuta un comando dentro del contenedor del laboratorio, que sí tiene Python. JupyterLab tiene además su propio terminal, en File, New, Terminal.
- ¿Es una blockchain de verdad?
- Es un juguete para entender las ideas. Muestra cómo los hashes enlazan los bloques, cómo el minado es ensayo y error, cómo encajan un libro de cuentas y una firma y cómo se resuelve una bifurcación. No tiene red, ni moneda, ni valor, y no es seguro para un uso real. Nada de lo que contiene es un consejo sobre dinero.