HotStuff: de cero a estado del arte
Artículo 15 de 47
32%
completado al llegar aquí
Sistemas distribuidosNota de investigación14 min de lectura
El abuelo de los consensos BFT: PBFT (1999) y sus tres pasos
Cómo PBFT (Castro y Liskov, 1999) ordena solicitudes con pre-prepare, prepare y commit, qué certifica cada quórum 2f+1 y por qué su view-change es cuadrático.
Ruta HotStuff: 0/47
Prerequisitos recomendados
Si alguno de estos conceptos todavía está medio nebuloso, empieza por aquí. Te ahorra tropiezos y un par de cejas fruncidas.
Comprende la arquitectura pionera de PBFT (Practical Byzantine Fault Tolerance, Castro & Liskov 1999): las tres fases de confirmación (Pre-Prepare, Prepare y Commit), la construcción del certificado preparado y el cambio de vista que lo transporta.
- Consenso BFT desde cero (bft-consensus-from-zero)
- De PBFT a cadenas: el puente mental (pbft-tendermint-streamlet-bridge)
Detente cuando puedas detallar qué evidencia exige un nodo en PBFT antes de pasar de la fase Prepare a la fase Commit, y qué evidencia sobrevive a un cambio de vista.
Glosario de Notación Matemática y Criptográfica
Número de vista o ronda actual. Cada vista tiene un único líder designado.
view = 42Ruta mental de las Fases del Camino Feliz en PBFT
1. Pre-Prepare
Líder propone secuencia
2. Prepare
Acuerdo de orden dentro de la vista
3. Commit
Acuerdo que sobrevive a vistas
4. Ejecución & Reply
Respuesta al cliente
Decodificador Didáctico de Conceptos BFT
En palabras simples: El presidente de una mesa de debates golpea el mazo y dice: 'Abramos el expediente número 45 para discutir la propuesta A'. Asigna un número de orden oficial.
Detalle técnico: Mensaje PRE-PREPARE con vista v, número de secuencia s y digest d, autenticado por el primario, que asigna la posición s a la solicitud de digest d en la vista v.
En palabras simples: Todos los vocales de la mesa se miran entre sí y levantan la mano confirmando: 'Estamos de acuerdo en que la propuesta A es el expediente número 45'.
Detalle técnico: Certificado local que contiene el mensaje Pre-Prepare y 2f mensajes Prepare de réplicas distintas que coinciden en (v, s, d).
En palabras simples: Los vocales firman el acta oficial de la reunión y la sellan. Saben que aunque cambie el presidente de la mesa, el acta no se podrá destruir.
Detalle técnico: La réplica está Prepared y además aceptó 2f + 1 mensajes Commit coincidentes; implica que al menos f + 1 réplicas correctas están Prepared para (v, s, d).
En De PBFT a cadenas trazamos la línea evolutiva del consenso BFT. Para entender qué cambió HotStuff en 2019, primero hay que estudiar al protocolo sobre cuyos hombros se construyó esa línea: PBFT (Practical Byzantine Fault Tolerance), presentado por Miguel Castro y Barbara Liskov en OSDI 1999. [1]
Antes de PBFT, buena parte de la literatura bizantina se apoyaba en sincronía o se consideraba demasiado costosa para un servicio real. La contribución de Castro y Liskov fue un algoritmo de replicación de máquinas de estados (SMR) que es seguro en un sistema asíncrono, que tolera réplicas bizantinas y que incorpora optimizaciones suficientes para que el costo frente a un servicio no replicado fuera moderado en su evaluación. [1] Este capítulo reconstruye el mecanismo, sus invariantes y el precio que pagó por ellos.
Modelo de fallas: por qué n = 3f + 1
PBFT supone réplicas, de las cuales a lo sumo pueden ser bizantinas: pueden mentir, callar, enviar mensajes distintos a distintos pares o coludirse. La red puede perder, retrasar, duplicar o reordenar mensajes. Lo único que el adversario no puede hacer es romper la criptografía: no puede falsificar la autenticación de una réplica correcta ni encontrar colisiones del digest. [1]
Con ese adversario, el protocolo usa réplicas y quórums de tamaño . El argumento es aritmético. Una réplica solo puede esperar respuesta de pares, porque pueden no contestar nunca; pero entre los que sí contestan puede haber hasta bizantinos. Para que las respuestas correctas superen a las maliciosas hace falta , es decir, . Con , dos quórums cualesquiera de se intersecan en al menos réplicas, y al menos una de ellas es correcta.
El umbral de un tercio tiene una genealogía clara. Lamport, Shostak y Pease mostraron que, con mensajes orales, el problema de los generales bizantinos no tiene solución si un tercio o más de los generales son traidores. [2] PBFT trabaja en un modelo distinto, asíncrono y con mensajes autenticados, pero conserva esa resiliencia óptima de . [1]
Hay una segunda frontera igual de importante: FLP. Ningún protocolo determinista puede garantizar terminación en un sistema completamente asíncrono con una sola falla. [3] Castro y Liskov lo asumen explícitamente: safety no depende de sincronía, pero liveness requiere una hipótesis débil de sincronía, en la que los retardos no crezcan indefinidamente más rápido que el tiempo. [1]
El camino normal: vistas, primario y número de secuencia
PBFT organiza la ejecución en vistas. En cada vista existe un único líder, el primario, determinado como ; el resto de las réplicas actúan como respaldos. En este artículo usamos para el número de secuencia y reservamos para el número de réplicas; el paper original usa para la secuencia y para el conjunto de réplicas. [1]
Cuando un cliente envía una solicitud al primario, se desencadenan tres fases de mensajes:
Flujo visual
Secuencia de Mensajes en el Camino Normal de PBFT
La escena sigue esas fases con y la réplica R3 en falla, contando los mensajes de cada una.
1. Fase Pre-Prepare
El primario calcula el digest , asigna un número de secuencia y envía a todas las réplicas:
Una réplica acepta el mensaje si la autenticación del primario es válida, si está en la vista , si no aceptó antes otro Pre-Prepare para la misma vista y secuencia con un digest distinto, y si cae entre dos marcas de agua, y , que impiden que un primario malicioso agote el espacio de secuencias. [1]
2. Fase Prepare
Al aceptar el Pre-Prepare, la réplica difunde a todas las demás:
Cuando reúne el Pre-Prepare más mensajes Prepare coincidentes de réplicas distintas, alcanza el predicado . Ese conjunto de mensajes es el certificado preparado.
3. Fase Commit
Estar Prepared no basta para ejecutar. La réplica sabe que existe un orden acordado dentro de la vista , pero no sabe si ese conocimiento sobreviviría a un cambio de primario. Por eso difunde:
Cuando está Prepared y acepta mensajes Commit coincidentes, alcanza y ejecuta una vez ejecutadas todas las solicitudes con secuencia menor. Después responde al cliente, que acepta el resultado al recibir respuestas idénticas de réplicas distintas: al menos una de ellas proviene de una réplica correcta. [1]
Un detalle de implementación: la notación sugiere firmas, y así se presenta el algoritmo para simplificar. En el sistema original, los mensajes del camino normal se autentican con vectores de MACs, llamados authenticators, y las firmas de clave pública se reservan para el cambio de vista, porque un MAC es mucho más barato de calcular que una firma. [1]
Qué certifica cada quórum
Las dos fases de votación no son redundantes: cada una protege un invariante distinto.
Prepare ordena dentro de una vista. Si una réplica correcta está y otra réplica correcta está , entonces . Ambos certificados contienen réplicas que avalaron el par ; sus conjuntos se intersecan en al menos una réplica correcta, y una réplica correcta nunca acepta dos Pre-Prepare distintos para la misma vista y secuencia. [1]
Commit hace que el orden sobreviva al cambio de vista. Si una réplica correcta está , entonces al menos réplicas correctas están . Ese conjunto es lo bastante grande como para que cualquier quórum futuro de réplicas contenga al menos una que conserve el certificado preparado. Es la propiedad que permite que la decisión sea final sin esperar a que todas las réplicas la conozcan.
Sin la fase Commit, una réplica podría ejecutar tras ver su certificado preparado mientras casi nadie más lo tiene; un cambio de vista en ese momento podría elegir otro valor para la misma secuencia. La segunda ronda de votos convierte un conocimiento local en un hecho que el siguiente primario está obligado a descubrir.
Teorema de Seguridad de PBFT
El cambio de vista: transportar certificados preparados
Si el primario falla o actúa de forma maliciosa, los respaldos lo detectan con temporizadores: una réplica que tiene una solicitud pendiente y no la ve ejecutada a tiempo deja de aceptar mensajes de la vista y difunde un mensaje VIEW-CHANGE para la vista . [1]
Ese mensaje es la memoria de la réplica. Incluye el número de secuencia de su último checkpoint estable con la prueba correspondiente, y un conjunto con el certificado preparado de cada solicitud que alcanzó Prepared con secuencia posterior a ese checkpoint. Cada certificado, a su vez, contiene un Pre-Prepare y mensajes Prepare.
El primario de la vista espera mensajes VIEW-CHANGE válidos de otras réplicas, que junto con el suyo forman un quórum de , y difunde un mensaje NEW-VIEW. Ese mensaje contiene los VIEW-CHANGE recibidos y un conjunto de nuevos Pre-Prepare: para cada secuencia en la que algún VIEW-CHANGE trae un certificado preparado, el nuevo primario vuelve a proponer el digest del certificado de vista más alta; para los huecos, propone una solicitud nula. Las réplicas no confían en esa reconstrucción: la recalculan a partir de los mismos VIEW-CHANGE y rechazan el NEW-VIEW si no coincide. [1]
Aquí se cierra el argumento de seguridad. Si quedó Committed-Local en alguna réplica correcta, al menos réplicas correctas guardan su certificado; el quórum del NEW-VIEW interseca ese conjunto, así que el nuevo primario no puede omitir sin que las réplicas lo detecten.
Los checkpoints completan el cuadro. Periódicamente las réplicas difunden un digest de su estado; con mensajes coincidentes el checkpoint se vuelve estable, pueden descartar los mensajes anteriores y avanzar las marcas de agua y . Sin ellos, los registros y los mensajes de cambio de vista crecerían sin límite. [1]
El talón de Aquiles: intercambios todos contra todos
Observa el patrón de comunicación. En Prepare y en Commit, cada réplica difunde a todas las demás, de modo que cada fase cuesta del orden de mensajes:
Con réplicas (), cada fase cuesta como mucho mensajes. Con , la misma fórmula da del orden de un millón de mensajes por fase. La aritmética no depende de la implementación: es consecuencia de que cada réplica necesita escuchar directamente a un quórum.
El cambio de vista es todavía más pesado. Cada réplica difunde su VIEW-CHANGE a todas, lo que vuelve a dar mensajes, y cada uno transporta certificados preparados que contienen a su vez mensajes; el NEW-VIEW reenvía de esos VIEW-CHANGE. El tamaño total de la evidencia crece más rápido que el número de réplicas.
Esa es la deuda que HotStuff se propuso saldar. Su camino feliz usa un líder que agrega votos en un certificado de quórum (QC) compacto, y su cambio de líder evita reenviar los certificados de todas las réplicas, de modo que el costo de comunicación por vista con líder correcto es lineal en . [4] El precio es una fase adicional de votación respecto a las dos de PBFT, una decisión que se analiza en QC, highQC y la regla de tres cadenas y en View-change y pacemaker en HotStuff.
Impacto Operativo de la Arquitectura PBFT
PBFT fue diseñado y evaluado para grupos pequeños de réplicas en redes locales, donde el tráfico todos-contra-todos es asumible.
Al crecer el comité, el tráfico cuadrático del camino normal y el tamaño de los mensajes de cambio de vista dominan el costo del protocolo.
Checklist mental de PBFT 1999
5 de 5 revisados
Bibliografía académica
- [1]
M. Castro and B. Liskov, "Practical Byzantine Fault Tolerance," OSDI, 1999.
Base práctica para replicación de estado con fallas bizantinas y comparación con fases cuadráticas.
- [2]
L. Lamport, R. Shostak, and M. Pease, "The Byzantine Generals Problem," ACM TOPLAS, vol. 4, no. 3, pp. 382-401, 1982, doi: 10.1145/357172.357176
Fuente primaria para distinguir los modelos de mensajes orales y mensajes firmados.
- [3]
M. J. Fischer, N. A. Lynch, and M. S. Paterson, "Impossibility of Distributed Consensus with One Faulty Process," JACM, vol. 32, no. 2, pp. 374-382, 1985, doi: 10.1145/3149.214121
Resultado de imposibilidad para consenso determinista en un sistema completamente asíncrono con una falla por crash.
- [4]
M. Yin, D. Malkhi, M. K. Reiter, G. G. Gueta, and I. Abraham, "HotStuff: BFT Consensus in the Lens of Blockchain," PODC, 2019.
Fuente central para QC, highQC, Chained HotStuff, view-change lineal y three-chain commit.
Siguiente lectura
Continúa con PBFT, Tendermint y Streamlet para ver cómo las familias posteriores reorganizaron estas fases, o salta a Tendermint: locks vistos desde HotStuff para comparar el certificado preparado con un lock.
Rutas vecinas
Si este tema te abrió hambre, sigue por aquí.
Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.
Series relacionadas
Ethereum: de historia a labs
Serie progresiva para entender Ethereum desde el whitepaper, forks y The Merge hasta EVM, Solidity, proof-of-stake, rollups, account abstraction, DeFi, observabilidad y laboratorios reproducibles.
Substrate: del runtime al consenso propio
Serie de 20 capítulos, de neófito a experto, sobre Substrate (Polkadot SDK): runtime en Wasm, FRAME, extrinsics, estado, pesos, actualizaciones sin fork, Aura, BABE, GRANDPA, sincronización, parachains, XCM, Sassafras, BEEFY y cómo conectar un consenso BFT propio a un nodo.
Ruta práctica: activos digitales en la operación
Nueve módulos, de menor a mayor dependencia, para decidir cómo usar custodia, wallets, llaves, firmas multifirma y MPC, AML/KYT y stablecoins con Fireblocks, BitGo, Kaleido, Circle y Tether.
Labs para convertir lectura en práctica
Prueba de trabajo y reajuste de dificultad
Laboratorio determinista para medir el costo de la prueba de trabajo y ver cómo el reajuste por altura de bloque estabiliza el tiempo entre bloques.
Consensus benchmark
Banco reproducible para comparar consenso BFT y documentar los trade-offs de HotStuff-2.
Ethereum local: Anvil, wallet y primera transacción
Laboratorio base para levantar una red local, crear cuentas, firmar transacciones y observar receipts sin gastar ETH real.
RPC y Cast: leer Ethereum con lupa
Ejercicios con JSON-RPC y Cast para consultar bloques, nonces, gas, receipts, logs y errores reproducibles.
Sigue leyendo
Ideas conectadas con este artículo
Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.
Consenso BFT desde cero: réplicas, quórums y fallas bizantinas
Primer paso de la serie HotStuff: qué problema resuelve BFT, por qué aparece n >= 3f + 1 y cómo separar safety de liveness sin drama matemático.
El concepto de GST: El momento mágico en el que la tormenta de red cesa
Qué es GST en el modelo DLS de 1988: safety en toda ejecución, liveness tras la estabilización y las dos variantes, con Δ desconocida o válida tras GST.
La metáfora del banco sin cajero central: ¿Quién valida las transacciones?
Cómo varias réplicas validan transacciones sin un servidor central: mismo estado inicial, mismo orden y ejecución determinista, la intuición de SMR.
Fast-HotStuff: dos cadenas, AggQC y la letra pequeña
Por qué Fast-HotStuff intenta reducir latencia, cómo usa AggQC para probar highQC en cambios de vista y qué trade-offs aparecen en firmas agregadas.