HotStuff: de cero a estado del arte
Artículo 21 de 47
45%
completado al llegar aquí
Sistemas distribuidosNota de investigación14 min de lectura
Rompiendo la regla: ¿Por qué 2 cadenas en HotStuff original permite bifurcaciones?
Por qué un commit de dos cadenas en HotStuff pierde safety o responsividad sin reglas extra, y cómo Fast-HotStuff, Jolteon y HotStuff-2 lo recuperan.
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.
Analiza qué ocurre si HotStuff básico compromete con dos QCs consecutivos: con sus locks originales se pierde safety, y si se adelanta el lock se pierde el cambio de vista lineal y responsivo. Después revisa cómo Fast-HotStuff, Jolteon y HotStuff-2 recuperan el commit de dos cadenas con mecanismos adicionales.
- Taxonomía de Commit (chain-commit-taxonomy-one-two-three-chain)
- HotStuff: QC, highQC y la regla de 3 cadenas (hotstuff-qc-highqc-three-chain)
Detente cuando puedas construir los dos contraejemplos (bifurcación por lock tardío y bloqueo por lock oculto) y explicar qué pieza adicional usa cada protocolo de dos cadenas para evitarlos.
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 la Vulnerabilidad de 2 Cadenas en HotStuff Base
1. Propuesta y Vista v1
Formación de QC1
2. Propuesta y Vista v2
Formación de QC2
3. Cambio de Vista v3 (Líder Bizantino)
Ocultación de QC2
4. Bifurcación Catastrófica
Violación de Safety
Decodificador Didáctico de Conceptos BFT
En palabras simples: Un notario registra la venta, pero los demás notarios solo anotan el bloqueo de la propiedad un día después. Si en ese intervalo alguien presenta una escritura vieja, ningún registro la rechaza.
Detalle técnico: En Chained HotStuff una réplica fija lockedQC = QC1 recién al ver QC2. Si el commit también ocurre al ver QC2, las réplicas que no lo vieron siguen sin lock en A.
En palabras simples: Exigir una firma más antes de cerrar la venta, de modo que cuando se cierra ya hay suficientes notarios con el bloqueo anotado.
Detalle técnico: QC3 prueba que n - f réplicas votaron después de ver QC2 y, por tanto, fijaron lockedQC = QC1; al menos f + 1 son correctas y bloquean cualquier rama que no extienda A.
En la taxonomía de commit y en QC, highQC y la regla de tres cadenas vimos que Chained HotStuff compromete un bloque cuando aparece una cadena de tres QCs consecutivos que lo extiende. [1]
Un ingeniero inquieto podría preguntarse:
Si en la vista logramos para el bloque y en la vista logramos para su hijo , ¿por qué no consideramos finalizado ya y nos ahorramos una fase?
La pregunta es legítima, y la respuesta tiene dos caras. Si acortamos el commit y dejamos los locks como están, perdemos safety. Si además adelantamos el lock para recuperar safety, perdemos la combinación de cambio de vista lineal y responsividad que justifica HotStuff. Vamos a construir ambos contraejemplos y después ver cómo los protocolos de dos cadenas posteriores pagan esa diferencia con mecanismos adicionales.
El atajo tentador: commit al ver dos QCs
Recordemos las piezas de HotStuff básico. Cada réplica mantiene un highQC, el QC más alto que conoce, y un lockedQC, su memoria de seguridad. Antes de votar, aplica el predicado safeNode: acepta una propuesta si extiende el bloque de su lockedQC (regla de safety) o si el QC que la justifica tiene una vista mayor que la de su lockedQC (regla de liveness). [1]
En la versión encadenada, los tres saltos de la cadena tienen funciones distintas. Cuando una réplica recibe una propuesta cuyo QC certifica a , y a su vez lleva sobre , la réplica actualiza su highQC y fija su lock en . Solo cuando aparece un tercer QC consecutivo se compromete . [1]
La regla ingenua cambia una sola línea: comprometer en el mismo momento en que la réplica fija su lock en , es decir, al ver . Parece inocente porque el lock y el commit ocurren juntos en la réplica que observa la cadena. El problema está en las réplicas que no la observan.
Usaremos un comité de réplicas, , con . El quórum es votos, y es bizantina.
Primera forma de romperlo: el lock llega tarde y safety cae
El ataque explota que, en HotStuff, los votos de una vista se envían al líder de la vista siguiente, que es quien forma el QC. Un líder bizantino puede formar un QC y mostrarlo selectivamente. [1]
Vista 1. propone . , y votan, y el siguiente líder forma .
Vista 2. propone , hijo de , justificado con . Las tres réplicas correctas votan y envían sus votos a , líder de la vista 3. Al votar, su highQC pasa a ser , pero su lock sigue en la génesis: todavía no vieron un QC sobre .
Vista 3. forma y se lo muestra solo a , dentro de una propuesta que no envía a nadie más. ve la cadena , con dos QCs consecutivos: fija su lock en y, bajo la regla ingenua, compromete .
El fork. propone ahora , que extiende la génesis y no a , justificado con el QC de la génesis. y aplican safeNode: extiende el bloque de su lockedQC, que sigue siendo la génesis. Votan. Con el voto de hay tres votos y se forma un QC para . Si las vistas siguientes certifican un hijo de , verá dos QCs consecutivos y comprometerá .
Dos réplicas correctas comprometieron bloques incompatibles. Ninguna regla local se violó; la falla es de diseño. El commit se declaró cuando solo una réplica correcta tenía el lock que debía protegerlo, y una sola réplica no alcanza para impedir un quórum de .
Secuencia de ataque y bifurcación en una regla 2-chain no protegida
Fuentes:
[1]Cómo leer esta figura
El diagrama de árbol muestra dos ramas derivadas de la génesis. La rama superior tiene el bloque A en la vista 1 y B en la vista 2, unidos por QC1; la regla de dos cadenas declara A comprometido. En la vista 3, un líder bizantino propone A' extendiendo la génesis. Las réplicas que nunca vieron QC2 conservan QC1 solo como highQC y su lock no cubre A, de modo que safeNode las deja votar A'. Resultado: A y A' terminan comprometidos en ramas incompatibles.
Commit de dos cadenas con los locks de HotStuff básico
Segunda forma: bloquear antes y perder el progreso responsivo
La reparación evidente es adelantar el lock: que cada réplica se bloquee en apenas vota por un bloque que lo transporta, sin esperar a . Así, cuando existe , al menos réplicas, y entre ellas correctas, ya están bloqueadas en , y la rama conflictiva no reúne quórum. Es esencialmente el diseño de dos fases de Tendermint y Casper. [1]
Safety vuelve, pero aparece otro problema: el lock oculto. Repitamos la escena con el lock adelantado.
Vista 2 con líder bizantino. forma para , pero envía la propuesta que lo transporta solo a . vota y se bloquea en . y nunca ven .
Vista 3 con líder correcto. recoge mensajes new-view con el highQC de cada réplica. Para ser responsivo, avanza en cuanto tiene mensajes, y los primeros en llegar son los de , y . Ninguno contiene . propone sobre la génesis.
El bloqueo. rechaza la propuesta: no extiende y su QC no supera la vista de su lock. Votan y ; se abstiene. Dos votos no forman QC. El adversario puede repetir el patrón vista tras vista retrasando el mensaje de dentro del límite de la red. [1]
El paper de HotStuff explica que Tendermint y Casper evitan este estancamiento haciendo que el nuevo líder espere el retraso máximo de red conocido antes de proponer, para asegurarse de oír el lock más alto de toda réplica correcta. Funciona y mantiene la comunicación lineal, pero el progreso queda atado a ese límite de red en lugar de a la velocidad real de la red: se pierde la responsividad optimista. [1]
La otra salida es la de PBFT: que el líder pruebe con un expediente cuál es el lock más alto. Es responsiva, pero el cambio de vista deja de ser lineal.
Qué compra exactamente la tercera cadena
HotStuff resuelve el dilema moviendo el lock un escalón hacia atrás y el commit otro escalón más. Una réplica correcta se bloquea en solo cuando ve . Para que exista, réplicas votaron por , y al hacerlo guardaron como highQC. [1]
Esa observación cierra el problema del lock oculto. Si alguna réplica correcta está bloqueada en , al menos réplicas correctas tienen un highQC igual o superior. Cualquier conjunto de mensajes new-view intersecta a ese grupo en al menos una réplica correcta. El nuevo líder ve siempre un QC tan alto como cualquier lock correcto, y su propuesta pasa la regla de liveness de safeNode. No necesita esperar ni adjuntar expedientes. [1]
El costo es que, al ver , todavía no hay suficientes réplicas bloqueadas para comprometer . Hace falta sobre el hijo de : prueba que réplicas votaron después de ver y, por tanto, se bloquearon en . Con eso, el primer contraejemplo desaparece, porque la rama conflictiva necesitaría el voto de alguna de esas réplicas.
El paper de HotStuff resume este compromiso: la fase adicional es lo que permite tener a la vez cambio de vista lineal y responsividad optimista, mientras que una variante de dos fases debe volver a esperar el retraso máximo de red. [1] La lectura detallada de esas propiedades está en safety, liveness y responsividad en HotStuff.
Cómo recuperan dos cadenas Fast-HotStuff, Jolteon y HotStuff-2
La tercera cadena no es una ley de la naturaleza. Es el precio de un conjunto concreto de objetivos. Los protocolos posteriores comprometen con dos cadenas, pero cada uno agrega una pieza que reemplaza la garantía perdida.
Fast-HotStuff y AggQC. Tras un cambio de vista, el nuevo líder adjunta un AggQC: la agregación de mensajes new-view firmados, cada uno con el highQC de su emisor. Las réplicas comprueban que la propuesta extiende el QC más alto contenido en esa prueba. [2] El líder ya no puede ocultar un QC alto, y una réplica bloqueada puede verificar que su lock no protege un commit. El camino feliz sigue siendo lineal; el costo se concentra en verificar AggQC después de un cambio de vista. Los autores también presentan este diseño como defensa frente a ataques de bifurcación que afectan el rendimiento de HotStuff encadenado. [2] Los detalles están en Fast-HotStuff con AggQC.
Jolteon y el cambio de vista cuadrático. Jolteon compromete con dos cadenas en el camino feliz, con comunicación lineal, y acepta un cambio de vista cuadrático cuando hay timeouts: las réplicas difunden mensajes de timeout con su highQC, y el certificado de timeout resultante permite justificar la propuesta del nuevo líder. [3] Es una apuesta explícita: optimizar el caso común y pagar más solo en el camino infeliz. Su paso a producción se discute en DiemBFT, Jolteon y Ditto.
HotStuff-2 y la espera condicional. Malkhi y Nayak muestran que dos fases bastan para un protocolo lineal y optimistamente responsivo. [4] La idea es no esperar siempre. Si el nuevo líder tiene el certificado de la vista inmediatamente anterior, ese certificado ya es el lock más alto posible y puede proponer de inmediato. Si no lo tiene, espera un intervalo acotado por el retraso de red para recoger los locks de las réplicas correctas antes de proponer. [4] El análisis de esa frontera sigue en HotStuff-2 y la frontera DAG-BFT.
En los tres casos, la información que la tercera cadena garantizaba de forma implícita ahora se obtiene explícitamente: con una prueba agregada, con un certificado de timeout o con una espera condicional.
Impacto de elegir la regla de commit
Recortar una fase de consenso sin la evidencia o la espera que la compensa expone el sistema a bifurcaciones entre réplicas correctas o a estancamientos tras un cambio de líder.
HotStuff eligió la regla de tres cadenas porque ofrece cambio de vista lineal y responsividad con una regla uniforme; los diseños de dos cadenas reubican ese costo.
Checklist mental de la Regla de 3 Cadenas
4 de 4 revisados
Bibliografía académica
- [1]
M. Yin, D. Malkhi, M. K. Reiter, G. G. Gueta, and I. Abraham, "HotStuff: BFT Consensus in the Lens of Blockchain," PODC, 2019.
safeNode, locks, regla de tres cadenas y la relación entre la fase adicional, el cambio de vista lineal y la responsividad.
- [2]
M. M. Jalalzai, J. Niu, C. Feng, and F. Gai, "Fast-HotStuff: A Fast and Robust BFT Protocol for Blockchains," IEEE Transactions on Dependable and Secure Computing, vol. 21, no. 4, pp. 2478-2493, 2024, doi: 10.1109/TDSC.2023.3308848
Commit de dos cadenas con AggQC en el cambio de vista.
- [3]
R. Gelashvili et al., "Jolteon and Ditto: Network-Adaptive Efficient Consensus with Asynchronous Fallback," arXiv:2106.10362, 2021.
Commit de dos cadenas con camino feliz lineal y cambio de vista cuadrático.
- [4]
D. Malkhi and K. Nayak, "HotStuff-2: Optimal Two-Phase Responsive BFT," IACR ePrint 2023/397, 2023.
Protocolo de dos fases, lineal y optimistamente responsivo.
Siguiente lectura
Continúa con Fast-HotStuff con AggQC y commit de dos cadenas, donde la prueba agregada del cambio de vista se analiza mensaje por mensaje.
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.
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.
HotStuff: QC, highQC y la regla de tres cadenas
El núcleo visual de HotStuff: cómo una propuesta se convierte en QC, por qué highQC guía al líder y cuándo una cadena certificada permite comprometer un bloque.