¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Libro de cuentas, transacciones y doble gasto

Después de esta lección: Puedo calcular los saldos de una lista de transacciones y rechazar el pago que supera el saldo.

Lección de 55 min1 comandoLaboratorio de blockchain: una cadena de juguete en Python para leer, romper, minar y firmar

El saldo se calcula repitiendo los pagos

Un libro de cuentas es la lista de quién ha pagado a quién. En una cadena de bloques no se guarda el saldo de nadie, solo los pagos, y el saldo sale de repetirlos desde el principio.

Así se puede rechazar el pago de quien no tiene lo que dice. Piensa en las cuentas de un piso compartido: el saldo de cada persona es lo que sale al sumar todos los apuntes.

Al final de esta lección

Nota

Puedo calcular los saldos de una lista de transacciones y rechazar el pago que supera el saldo.

Palabras clave

PalabraQué significaEjemplo
Libro de cuentasla lista de todos los pagos, en orden
Transacciónun pago de una persona a otraAna paga 5 a Beto
Saldolo que tiene una persona tras repetir todos los pagos
Doble gastogastar dos veces lo que solo se tiene una vez
Rechazarno aplicar un pago que no se puede cumplir

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Los saldos salen de repetir los pagos

Cada bloque guarda pagos. Para saber cuánto tiene cada uno, partes de los saldos iniciales y aplicas los pagos uno a uno, en el orden de la cadena.

Un pago solo se aplica si quien paga tiene saldo suficiente en ese momento. Si no, se rechaza y el saldo no cambia.

Ejemplo: cuatro pagos repetidos uno a uno

PagoAshaBenCaraResultado
Saldo inicial1050
Asha paga 4 a Ben690aceptado
Ben paga 6 a Cara636aceptado
Cara paga 8 a Asha636rechazado: Cara solo tiene 6
Ben paga 3 a Cara609aceptado

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Qué imprime el laboratorio y en qué idioma

El script imprime en inglés: "balances" para los saldos y "refused" para cada pago rechazado. Los nombres son Asha, Ben y Cara.

Los saldos salen como un diccionario de Python, con llaves y dos puntos. Compara el resultado con la última fila de la tabla.

Calcula los saldos de cuatro pagos

Comando
docker exec jupyter python3 steps/balances.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Doble gasto: gastar lo mismo dos veces

Ana tiene 10 y firma dos pagos de 10, uno a Beto y otro a Carla. Si todos aplicaran los pagos en distinto orden, Beto y Carla creerían que han cobrado.

La cadena evita esto: tiene un solo orden para todos. El primer pago se acepta y el segundo se rechaza.

Dos pagos con el mismo saldo

Código: python
saldos = {"Ana": 10, "Beto": 0, "Carla": 0}
pagos = [
    {"from": "Ana", "to": "Beto", "amount": 10},
    {"from": "Ana", "to": "Carla", "amount": 10},
]

for pago in pagos:
    if saldos[pago["from"]] >= pago["amount"]:
        saldos[pago["from"]] = saldos[pago["from"]] - pago["amount"]
        saldos[pago["to"]] = saldos[pago["to"]] + pago["amount"]
        print("aceptado:", pago["from"], "a", pago["to"], pago["amount"])
    else:
        print("rechazado:", pago["from"], "a", pago["to"], pago["amount"])

print(saldos)
# Cambia el orden de los dos pagos y mira quién cobra.

Un error frecuente

Advertencia

Mucha gente cree que el saldo de cada uno está escrito en un bloque. No es así. Los bloques solo guardan pagos. El saldo es un resultado que cualquiera puede recalcular, y por eso nadie tiene que fiarse de otro.

Para ir más lejos

Escribe en un cuaderno cinco pagos de tu grupo de amigos, con saldos iniciales. Calcula los saldos a mano.

Después cambia el orden de dos pagos. ¿Cambia algún saldo? ¿Se rechaza algún pago nuevo?

Sobre este laboratorio y su código: Laboratorio de blockchain: una cadena de juguete en Python para leer, romper, minar y firmar

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.