HotStuff: de cero a estado del arte
Artículo 7 de 47
15%
completado al llegar aquí
Sistemas distribuidosNota de investigación15 min de lectura
El Teorema FLP: Por qué una sola computadora lenta puede romper el acuerdo
Por qué ningún consenso determinista asíncrono garantiza terminar con una sola falla por crash, qué es la bivalencia y cómo la evaden los protocolos BFT.
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 el Teorema FLP (Fischer, Lynch, Paterson 1985): por qué en una red puramente asíncrona ningún protocolo de consenso determinista puede garantizar a la vez acuerdo, validez y terminación si incluso un solo proceso puede detenerse.
- Consenso BFT desde cero (bft-consensus-from-zero)
- Intersección de quórums y sincronía parcial (partial-synchrony-quorums-bft)
Detente cuando puedas explicar el concepto de 'configuración bivalente' y por qué un planificador de mensajes puede mantener al sistema indeciso indefinidamente.
Glosario de Notación Matemática y Criptográfica
Definición conceptual para n dentro del contexto de consenso BFT.
Ruta mental de la Imposibilidad FLP
Modelo Asíncrono Puro
Retardos ilimitados
Estado Bivalente
Ambos resultados posibles
El Planificador Adversario
Retardo estratégico
Salida del Dilema
Sincronía parcial / Aleatoriedad
Decodificador Didáctico de Conceptos BFT
En palabras simples: Dos amigos intentan coordinar un almuerzo enviándose cartas por correo postal sin saber si el cartero se retrasó o si el amigo dejó de escribir. Sin asumir algún límite de tiempo, ninguno puede decidir con certeza si esperar otra carta o actuar ya.
Detalle técnico: Ningún algoritmo de consenso determinista puede garantizar acuerdo, validez y terminación en un sistema asíncrono de paso de mensajes si un solo proceso puede fallar por parada (crash).
En palabras simples: Bivalente es un partido 0-0 en el minuto 89: cualquiera de los dos equipos puede ganar. Univalente es cuando cae un gol en el minuto 93 y ya no queda tiempo: el resultado quedó sellado.
Detalle técnico: Una configuración es bivalente si desde ella son alcanzables ejecuciones que deciden 0 y ejecuciones que deciden 1; es univalente si todas las ejecuciones alcanzables deciden el mismo valor.
En 1985, Michael Fischer, Nancy Lynch y Michael Paterson publicaron en el Journal of the ACM un artículo breve que fijó un límite duro para toda la disciplina: "Impossibility of Distributed Consensus with One Faulty Process". [1]
Tras estudiar quórums en Consenso BFT desde cero, es natural preguntarse: si la aritmética de sobre es tan sólida, ¿podemos construir un protocolo que jamás se detenga, sin importar lo mala que sea la red? La respuesta de FLP es que no, al menos no con un algoritmo determinista y sin ninguna hipótesis temporal. Y lo sorprendente es que el obstáculo no requiere traidores bizantinos: basta un proceso que pueda detenerse en silencio.
El modelo exacto que asume FLP
La fuerza del teorema está en lo débil que es el adversario. FLP no supone mensajes falsificados, firmas rotas ni nodos maliciosos. Supone un sistema de procesos que se comunican por mensajes, con estas reglas: [1]
- Asincronía completa: no hay relojes sincronizados, no hay cota conocida para la entrega de mensajes y no hay cota para la velocidad relativa de los procesos.
- Canales fiables: ningún mensaje se pierde ni se duplica; todo mensaje enviado a un proceso que sigue vivo termina entregándose, pero en un orden y un momento arbitrarios.
- Determinismo: cada proceso es una máquina de estados; dado su estado y el mensaje recibido, su siguiente paso está completamente determinado.
- Una falla por parada: a lo sumo un proceso puede detenerse (crash) y, desde fuera, una parada es indistinguible de un proceso extremadamente lento.
Cada proceso tiene un bit de entrada en y un registro de salida que se escribe una sola vez. El protocolo es parcialmente correcto si ningún par de procesos decide valores distintos y si ambas decisiones, y , son posibles para alguna combinación de entradas. Esa última condición descarta el truco trivial de decidir siempre .
Comparado con el problema de los generales bizantinos, el contraste es instructivo. Lamport, Shostak y Pease estudiaron un modelo síncrono, con rondas y relojes, y adversarios que mienten; allí demostraron que con mensajes orales no hay solución si un tercio o más de los generales son traidores. [3] FLP invierte los ejes: la falla es la más benigna posible, pero el tiempo deja de estar acotado. Y eso basta para perder la terminación garantizada. [1]
El enunciado: qué se pierde y qué no
El Teorema FLP establece que:
En un sistema distribuido asíncrono, no existe ningún protocolo de consenso determinista que sea parcialmente correcto y que además garantice la terminación de todos los procesos correctos si se permite que un solo proceso () falle por parada.
Conviene leerlo con precisión. FLP no dice que el consenso nunca termine en la práctica, ni que todo protocolo viole safety. Dice que, para cualquier protocolo determinista que respete acuerdo y validez, existe al menos una ejecución admisible en la que nadie decide jamás. [1]
Un detalle sutil, y muy útil para leer papers posteriores, es que la ejecución no terminante que construye la prueba ni siquiera necesita que algún proceso falle de verdad. Todos los procesos dan infinitos pasos y todos los mensajes terminan entregándose. La mera posibilidad de una parada es lo que obliga al protocolo a no poder esperar indefinidamente a nadie, y esa obligación es la grieta que explota el planificador.
El laberinto de la bivalencia en FLP
Fuentes:
[1]Cómo leer esta figura
El diagrama muestra configuraciones globales de red. Las configuraciones bivalentes C0 y C1 tienen caminos hacia decisiones de valor 0 o valor 1. Al retrasar estratégicamente el mensaje m que forzaría la decisión hacia univalencia, el adversario fuerza al sistema a transicionar a otro estado bivalente C2, atrapando el consenso en un bucle infinito.
Configuraciones bivalentes y univalentes
La prueba razona sobre configuraciones: el estado interno de todos los procesos junto con el conjunto de mensajes en vuelo. Un paso consiste en entregar un mensaje a un proceso (o entregarle "nada"), que entonces cambia de estado y puede enviar nuevos mensajes. Con ese vocabulario se definen dos clases:
- Configuración bivalente: desde ella son alcanzables ejecuciones que deciden y ejecuciones que deciden . El resultado todavía no está escrito.
- Configuración univalente (-valente o -valente): todas las ejecuciones alcanzables deciden el mismo valor, aunque ningún proceso lo haya escrito aún en su registro de salida.
Esta distinción es la pieza conceptual clave. La decisión "real" del sistema ocurre en el instante en que la configuración pasa de bivalente a univalente, no cuando un proceso escribe su salida. Un protocolo que termina tiene que cruzar esa frontera en algún paso concreto. FLP demuestra que el planificador siempre puede impedir que ese cruce ocurra. [1]
La demostración en tres lemas
La estructura de la prueba es corta y elegante. Vale la pena seguirla con calma porque sus ideas reaparecen en casi todos los argumentos de imposibilidad posteriores. [1]
Lema 1, conmutatividad. Si dos secuencias de pasos afectan a conjuntos disjuntos de procesos, aplicarlas en un orden o en el otro conduce a la misma configuración. Es una observación casi obvia sobre independencia, pero permite intercambiar el orden de eventos dentro de la prueba.
Lema 2, existe una configuración inicial bivalente. Supongamos, por contradicción, que todas las configuraciones iniciales fueran univalentes, y ordenémoslas las configuraciones iniciales de forma que dos vecinas difieran solo en la entrada de un proceso . Por validez, hay una configuración inicial -valente y otra -valente, así que en esa cadena existen dos vecinas, una -valente y otra -valente, que difieren solo en .
Ahora consideremos una ejecución en la que no da ningún paso, algo que el protocolo debe tolerar porque podría haber caído. Esa ejecución es indistinguible desde ambas configuraciones para todos los demás procesos, de modo que decide el mismo valor en las dos. Contradicción: alguna configuración inicial tiene que ser bivalente.
Lema 3, siempre se puede seguir siendo bivalente. Sea bivalente y sea un evento aplicable a . Si consideramos todas las configuraciones alcanzables desde sin aplicar , y luego aplicamos al final, al menos una de las configuraciones resultantes es bivalente.
La prueba procede por contradicción. Si todas fueran univalentes, habría dos configuraciones vecinas, separadas por un solo evento , con valencias distintas tras aplicar . Si ocurre en un proceso distinto de , el Lema 1 hace que ambos órdenes coincidan, lo que es imposible. Si también ocurre en , se considera una ejecución finita en la que no da pasos y el resto del sistema decide, algo que el protocolo debe permitir porque podría haber caído. Por el Lema 1, la configuración alcanzada por esa ejecución, que ya contiene una decisión, todavía podría conducir tanto a como a : sería bivalente, lo que es imposible.
Ese segundo caso es el único lugar donde la prueba usa la falla por parada, y lo usa una sola vez. Es exactamente la razón por la que basta.
Teorema de Imposibilidad de FLP
El planificador que nunca deja decidir
Con los lemas, la ejecución infinita se construye por etapas. El planificador mantiene una cola de procesos y, en cada etapa, toma el proceso que está al frente y el mensaje más antiguo pendiente para él. Por el Lema 3, existe una forma de llegar a otra configuración bivalente cuyo último paso es justamente entregar a . El planificador ejecuta esa secuencia, mueve a al final de la cola y repite. [1]
El resultado es una ejecución en la que cada proceso da infinitos pasos, cada mensaje termina entregándose y, sin embargo, la configuración nunca deja de ser bivalente. Ningún proceso puede decidir sin arriesgarse a contradecir otra ejecución alcanzable.
Desde dentro de un proceso, el dilema es siempre el mismo. Cuando falta una respuesta, no puede distinguir entre "el remitente cayó" y "el mensaje viene muy lento". Si decide sin esa información, puede violar acuerdo; si espera, el planificador puede hacerle esperar para siempre. FLP formaliza que ninguna regla determinista resuelve ese dilema en todos los casos.
Cómo evaden FLP los protocolos BFT reales
Si el consenso determinista es imposible en asincronía, ¿cómo funcionan Tendermint o HotStuff? Relajando exactamente una de las hipótesis del teorema, sin tocar las demás.
- Sincronía parcial. Dwork, Lynch y Stockmeyer propusieron un modelo en el que la red puede comportarse de forma asíncrona durante un periodo arbitrario, pero eventualmente existe una cota sobre la entrega de mensajes a partir de un instante desconocido, GST. En ese modelo el consenso es alcanzable tolerando fallas bizantinas con . [2] La clave es que safety se mantiene siempre, y solo la terminación depende de que llegue GST; lo desarrollamos en Sincronía parcial y quórums BFT.
- Aleatorización. Si los procesos pueden lanzar monedas, la ejecución no terminante sigue existiendo, pero su probabilidad puede hacerse cero: el protocolo termina con probabilidad . Esta vía abandona la hipótesis de determinismo, no la de asincronía.
- Detectores de fallas. Otra familia añade un oráculo que sospecha de procesos caídos con cierta precisión eventual. Formalmente equivale a introducir información temporal que el modelo FLP no tiene.
HotStuff es un ejemplo directo de la primera vía. Su análisis declara el modelo de sincronía parcial: la seguridad vale en cualquier ejecución, mientras que el progreso se garantiza después de GST mediante un mecanismo de sincronización de vistas, el pacemaker. [4] El diseño del pacemaker se estudia en View-change y pacemaker en HotStuff.
Lo que FLP enseña sobre safety y liveness
El legado práctico de FLP no es pesimismo, sino una disciplina de diseño. Si la terminación no se puede garantizar en todas las ejecuciones asíncronas, entonces el protocolo tiene que decidir qué propiedad sacrifica temporalmente. La respuesta casi unánime de la literatura BFT es: nunca safety, a veces liveness. [2]
Eso se traduce en invariantes concretos. Un timeout puede cambiar el ritmo del protocolo, provocar un cambio de líder o una nueva vista, pero no puede autorizar a una réplica a votar por algo incompatible con lo que ya certificó. Los quórums y los certificados conservan la memoria segura; los relojes solo deciden cuándo vale la pena intentar de nuevo. [4]
La consecuencia operativa es fácil de olvidar. Un sistema BFT que se detiene durante una partición de red no está "roto": está ejecutando exactamente el compromiso que FLP obliga a aceptar. El error de diseño sería el contrario, un protocolo que decide con prisa durante la asincronía y luego descubre dos historias confirmadas. La relación formal entre ambas propiedades y la responsividad se retoma en Safety, liveness y responsiveness en HotStuff.
Impacto Operativo del Teorema FLP
Intentar diseñar un protocolo BFT comercial pretendiendo que termine bajo asincronía absoluta sin timeouts ni aleatoriedad conduce a estancamientos indefinidos en el peor caso.
Los arquitectos deben aceptar el compromiso de FLP: garantizar safety incondicionalmente bajo asincronía y depender de sincronía parcial (GST) para liveness.
Checklist mental del Teorema FLP
4 de 4 revisados
Bibliografía académica
- [1]
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.
- [2]
C. Dwork, N. Lynch, and L. Stockmeyer, "Consensus in the Presence of Partial Synchrony," JACM, 1988.
Modelo clásico para razonar sobre sincronía parcial y progreso eventual.
- [3]
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.
- [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 Sincronía parcial y quórums BFT, donde GST y la intersección de quórums explican cómo un protocolo recupera el progreso sin renunciar a safety.
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.
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.
HotStuff multipipeline: de fases a cadena viva
Cómo Chained HotStuff convierte prepare, pre-commit, commit y decide en una línea temporal de vistas, GenericQC y commits por profundidad de cadena.