Cuando hay dos cadenas, todos eligen la misma
El consenso es la regla con la que muchos ordenadores, sin ningún jefe, se ponen de acuerdo en cuál es la cadena buena. Cuando dos bloques nuevos aparecen a la vez, la cadena se bifurca y hay que elegir una.
Piensa en dos copias del mismo cuaderno de apuntes que se han seguido escribiendo por separado. Necesitas una regla que no dependa de a quién creas.
Al final de esta lección
Nota
Puedo elegir la cadena válida con más trabajo entre varias cadenas que compiten.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Nodo | un ordenador que guarda una copia de la cadena |
| Bifurcación | dos cadenas válidas que comparten un principio y se separan |
| Consenso | el acuerdo de todos los nodos sobre una sola cadena |
| Trabajo de una cadena | los intentos que costó minar todos sus bloques |
| Bloque huérfano | un bloque de la cadena que pierde |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una bifurcación son dos cadenas válidas
Dos nodos minan un bloque casi a la vez, y cada uno lo envía a sus vecinos. Unos nodos reciben el primero y otros el segundo.
Las dos cadenas son válidas. Comparten todos los bloques hasta uno, y desde ahí se bifurcan.
La regla: la cadena válida con más trabajo
Cada nodo aplica la misma regla. Primero descarta toda cadena que no sea válida. De las que quedan, elige la que tiene más trabajo.
El trabajo es lo que costó minarla. Con la misma dificultad en todos los bloques, la cadena con más bloques tiene más trabajo.
Ejemplo: dos cadenas con dificultad 2
| Cadena | Bloques | Trabajo (bloques por 16 elevado a 2) | Resultado |
|---|---|---|---|
| A | 3 | 768 | se descarta |
| B | 4 | 1024 | gana |
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: "both chains valid", "work" y "wins". Escribe True True si las dos cadenas son válidas.
Al final pregunta si el último bloque de las dos cadenas es el mismo. Es lo que define una bifurcación.
Compara dos cadenas que se bifurcan
docker exec jupyter python3 steps/fork.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Calcula el trabajo y elige
DIFICULTAD = 2
cadenas = {"A": 3, "B": 4}
mejor = ""
mayor = 0
for nombre in cadenas:
trabajo = cadenas[nombre] * 16 ** DIFICULTAD
print("cadena", nombre, "bloques", cadenas[nombre], "trabajo", trabajo)
if trabajo > mayor:
mayor = trabajo
mejor = nombre
print("gana la cadena", mejor)
# Cambia B a 3 bloques. ¿Quién gana ahora? Y si las dos tienen 3, ¿por qué gana la primera?
Un error frecuente
Advertencia
Mucha gente cree que gana siempre la cadena más larga. No es así. Primero hay que comprobar que la cadena es válida. Una cadena de diez bloques con uno falso se descarta antes de contar nada.
Los bloques de la rama perdida quedan huérfanos
Cuando llega un bloque más a una rama, los nodos cambian a esa rama. Los bloques de la otra quedan huérfanos.
Sus pagos vuelven a la lista de pagos pendientes y entran en bloques nuevos. Por eso un pago reciente se considera firme solo cuando hay varios bloques detrás.
Para ir más lejos
En el cuaderno del laboratorio crea dos cadenas desde un mismo principio y añade bloques distintos a cada una.
Prueba a cambiar un dato en la rama más larga. ¿Sigue ganando? ¿Qué tendrías que rehacer para que gane otra vez?