BFT frontier: notas de campo
Artículo 2 de 9
22%
completado al llegar aquí
Sistemas distribuidosNota de investigación14 min de lectura
Shoal: pipelining de anclas y reputación de líderes sobre DAG-BFT
Cómo Shoal añade a Bullshark un ancla por ronda y una reputación de líderes leída del DAG para bajar la latencia y no esperar timeouts de líderes caídos.
Prerequisitos recomendados
Si alguno de estos conceptos todavía está medio nebuloso, empieza por aquí. Te ahorra tropiezos y un par de cejas fruncidas.
Narwhal: cuando el mempool se vuelve DAG
Por qué Narwhal no es simplemente otro consenso, cómo separa disponibilidad de datos y ordenamiento, y cómo se conecta con HotStuff/Tusk.
Blockchain8 min de lectura→Tusk: Consenso asíncrono y aleatorizado sin timeouts en el camino feliz
Tusk ordena el DAG de Narwhal sin timeouts: una moneda aleatoria compartida elige el líder de cada ola y el orden total sale del grafo sin mensajes extra.
Blockchain12 min de lectura→
Comprende cómo Shoal (Spiegelman, Arun, Gelashvili y Li, 2023) envuelve un protocolo DAG-BFT tipo Bullshark para tener un ancla en cada ronda (pipelining) y elegir anclas según una reputación calculada sobre la historia confirmada del DAG, reduciendo la latencia y las esperas por timeout.
- Narwhal como mempool DAG (narwhal-dag-mempool-hotstuff)
- Tusk: consenso asíncrono sobre el DAG (tusk-consenso-asincrono-sin-timeouts)
Detente cuando puedas explicar por qué todas las réplicas correctas coinciden en dónde empieza cada instancia de Shoal y en qué reputación tiene cada validador, sin intercambiar un solo mensaje adicional.
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 Shoal sobre un DAG tipo Bullshark
1. Bullshark como base
Anclas en rondas alternas
2. Pipelining por instancias
Un ancla por ronda
3. Reputación de líderes
Calculada desde el DAG
4. Menos esperas
Progreso al ritmo de la red
Decodificador Didáctico de Conceptos BFT
En palabras simples: Una línea de metro que, en lugar de esperar a que un tren termine su recorrido completo para despachar el siguiente, despacha uno en cada estación usando la misma vía.
Detalle técnico: Shoal no cambia la regla de confirmación del protocolo base: ejecuta instancias sucesivas de él sobre el mismo DAG y usa el ancla ordenada de cada instancia como punto de arranque de la siguiente.
En palabras simples: Un entrenador que decide la alineación revisando el acta oficial de los partidos ya jugados, que es idéntica para todo el cuerpo técnico, y no las impresiones de cada asistente.
Detalle técnico: Las puntuaciones se calculan sobre la parte del DAG que ya quedó ordenada, por lo que el resultado es determinista e idéntico en todas las réplicas correctas.
Los protocolos de consenso sobre un DAG separan dos trabajos. Narwhal se encarga de difundir y certificar los datos: en cada ronda cada validador emite un vértice que referencia al menos vértices de la ronda anterior, y el resultado es un grafo dirigido acíclico que todas las réplicas correctas terminan viendo de forma consistente. [3] Encima de ese grafo, un protocolo como Bullshark decide el orden total sin enviar mensajes propios: cada réplica interpreta su copia local del DAG y llega al mismo orden que las demás. [2]
Ese diseño es muy eficiente en throughput, pero deja dos fuentes de latencia que Shoal ataca directamente: no todas las rondas tienen un ancla y, cuando el líder de un ancla está caído o es lento, el protocolo puede quedarse esperando un timeout antes de avanzar. Shoal, propuesto por Spiegelman, Arun, Gelashvili y Li en 2023, es un marco que se coloca por encima de cualquier protocolo DAG-BFT basado en Narwhal y añade dos mecanismos: pipelining y reputación de líderes. [1]
Dónde pierde tiempo Bullshark
En la versión parcialmente síncrona de Bullshark, las rondas pares tienen un líder predefinido cuyo vértice es el ancla de esa ronda, y los vértices de la ronda impar siguiente funcionan como votos: si al menos vértices de la ronda siguiente referencian al ancla, una réplica la confirma. [2] Al confirmar un ancla, la réplica revisa las anclas anteriores todavía no ordenadas y ordena primero las que tienen un camino hasta la nueva; después ordena de forma determinista la historia causal de cada ancla. [2]
La consecuencia es que un vértice cualquiera, que no es ancla, no queda ordenado por sí mismo: tiene que esperar a que alguna ancla posterior lo incluya en su historia causal y a que esa ancla reciba sus votos. Como solo hay ancla en una de cada dos rondas, los vértices que no son ancla pagan rondas extra de espera respecto de las propias anclas. [1]
El segundo problema aparece con fallas. Para garantizar liveness bajo sincronía parcial, Bullshark hace que las réplicas esperen el ancla de la ronda, o los votos sobre ella, hasta que vence un timeout. [2] Si el líder asignado está caído, cada vez que le toque ser ancla la red entera pierde el tiempo del timeout. Con un calendario de líderes fijo, como un round-robin, un validador caído vuelve a provocar esa espera periódicamente. Por qué un valor fijo de timeout es un compromiso incómodo se discute en Por qué no timeouts fijos.
Flujo visual
Cómo Shoal reorganiza el trabajo sobre el mismo DAG
Pipelining: una instancia nueva en cada ronda
La idea central de Shoal es tratar al protocolo base como una caja negra que se puede reiniciar. Una instancia de Bullshark empieza en cierta ronda del DAG y corre hasta ordenar su primera ancla. En ese momento la instancia termina y comienza otra nueva, que interpreta el mismo DAG a partir de la ronda siguiente a esa ancla. [1] No se crea un DAG nuevo ni se detiene la difusión de Narwhal: solo cambia la forma en que las réplicas leen lo que ya tienen.
Si todo va bien, la primera ancla de cada instancia se ordena en la primera ronda de esa instancia, y la instancia siguiente empieza en la ronda inmediatamente posterior. El efecto es que, en el caso favorable, aparece un ancla en cada ronda en lugar de una cada dos. [1] Para los vértices que no son ancla esto importa mucho: la próxima ancla que puede incluirlos en su historia causal está más cerca, y por eso esperan menos.
El punto delicado es la seguridad del cambio de instancia. Si dos réplicas correctas creyeran que la instancia siguiente empieza en rondas distintas, interpretarían el DAG de forma distinta y podrían ordenar cosas en otro orden. Shoal evita ese riesgo apoyándose en la propiedad que ya garantiza el protocolo base: todas las réplicas correctas ordenan las mismas anclas en el mismo orden. [2] Como la primera ancla ordenada de cada instancia es la misma para todas, también coincide la ronda donde arranca la siguiente, y el cambio de instancia no requiere comunicación. [1]
Acuerdo sobre el punto de arranque de cada instancia
Reputación de líderes calculada desde la historia causal
Pipelining reduce la espera en el caso favorable, pero no resuelve el líder caído: si el calendario sigue eligiendo a un validador que no responde, su ronda vuelve a costar un timeout. La segunda pieza de Shoal es asignar las anclas según una reputación que favorece a los validadores que han mostrado actividad reciente en el DAG. [1]
La idea de reputación no nace con Shoal. DiemBFT v4, un descendiente de HotStuff diseñado para producción, ya describe un mecanismo de reputación para elegir líderes a partir de información confirmada, de modo que los validadores que no participan dejen de ser seleccionados. [4] El contexto productivo de esa familia se resume en DiemBFT, Jolteon y Ditto en producción.
La dificultad en un DAG es la misma que en un protocolo con líder: todas las réplicas correctas deben estar de acuerdo en quién es el ancla de cada ronda. Si cada réplica puntuara a los validadores con lo que observa localmente, por ejemplo latencias medidas o vértices recibidos tarde, dos réplicas podrían asignar líderes distintos a la misma ronda y romper la interpretación común del DAG. Shoal resuelve ese acuerdo calculando la reputación solo sobre la historia causal que ya fue ordenada, que es idéntica en todas las réplicas correctas. [1]
Aquí es donde las dos mejoras encajan. El momento natural para actualizar el calendario es justamente el cambio de instancia: cuando se ordena la primera ancla de una instancia, cada réplica actualiza las puntuaciones con la nueva historia ordenada y la instancia siguiente arranca con un calendario de anclas que refleja esas puntuaciones. [1] No hace falta un subprotocolo de votación ni mensajes de medición: el DAG ya contiene la evidencia de quién participó, porque los vértices de cada validador y sus referencias quedan registrados en el grafo. Para una explicación de por qué el DAG funciona como un registro de causalidad, ver El DAG como máquina del tiempo.
Timeouts que casi nunca vencen
Shoal no elimina los timeouts del modelo: bajo sincronía parcial siguen siendo la red de seguridad que garantiza liveness. Lo que cambia es cuántas veces llegan a vencer. Los autores llaman a esta propiedad prevalent responsiveness: el protocolo avanza a la velocidad real de la red en casi todos los escenarios, y esperar un timeout queda reservado a casos poco comunes. [1]
El razonamiento es directo. Un validador caído deja de producir vértices, así que deja de aparecer en la historia ordenada y su reputación cae. Tras la siguiente actualización del calendario deja de ser elegido como ancla, y las rondas que antes habrían esperado su timeout pasan a tener un ancla activa que se ordena en cuanto llegan sus votos. [1] El costo de una falla se paga, en esencia, mientras la reputación todavía no la refleja, en lugar de pagarse cada vez que el validador caído vuelve a tocar en un round-robin.
Esto conecta con una tensión clásica que este curso recorre desde HotStuff: los protocolos parcialmente síncronos necesitan timeouts para liveness, pero cada timeout que vence es latencia perdida. Tusk evita los timeouts usando aleatoriedad asíncrona; Shoal se queda en el modelo parcialmente síncrono y reduce la frecuencia con que los timeouts vencen. [3] [1]
Qué cambia para quien opera un comité DAG-BFT
Con un calendario fijo de líderes, un validador caído o mal conectado vuelve a costar un timeout cada vez que le toca ser ancla.
Shoal deriva el calendario de la historia ordenada del DAG, de modo que los validadores inactivos dejan de ser anclas sin coordinación adicional.
Límites y lectura crítica
Conviene leer Shoal con precisión. Primero, no cambia el modelo de fallas ni el tamaño del comité: hereda , la difusión certificada de Narwhal y las garantías de safety del protocolo base. [2] Segundo, la ganancia del pipelining depende del caso favorable: si la primera ancla de una instancia no se confirma, la instancia necesita más rondas para ordenar una, igual que ocurriría en Bullshark. [1]
Tercero, la reputación reacciona a la historia ya ordenada, así que hay un retardo entre que un validador falla y que el calendario lo refleja. Un validador que alterna entre responder y no responder puede degradar la latencia mientras su puntuación oscila. Cuarto, la cifra concreta de mejora depende del despliegue y de la carga; el paper reporta su propia evaluación sobre un protocolo base concreto, y esas mediciones no deben trasladarse sin más a otro sistema. [1]
Finalmente, Shoal sigue pagando el costo estructural de un DAG certificado: cada vértice pasa por la difusión fiable de Narwhal antes de poder ser referenciado. [3] Reducir ese costo exige otra línea de diseño, la de los DAG sin certificación, que se comenta en HotStuff-2, la frontera DAG-BFT y Twins.
Checklist mental de Shoal
5 de 5 revisados
Bibliografía académica
- [1]
A. Spiegelman, B. Arun, R. Gelashvili, and Z. Li, "Shoal: Improving DAG-BFT Latency And Robustness," arXiv:2306.03058, 2023.
Fuente primaria para pipelining por instancias, reputación de líderes sobre la historia ordenada y prevalent responsiveness.
- [2]
A. Spiegelman, N. Giridharan, A. Sonnino, and L. Kokoris-Kogias, "Bullshark," arXiv:2201.05677, 2022.
Protocolo base: anclas en rondas pares, votos implícitos en el DAG, ordenamiento de anclas previas y timeouts para liveness.
- [3]
G. Danezis, L. Kokoris-Kogias, A. Sonnino, and A. Spiegelman, "Narwhal and Tusk: A DAG-based Mempool and Efficient BFT Consensus," in Proc. EuroSys, pp. 34-50, 2022, doi: 10.1145/3492321.3519594
Construcción del DAG certificado por rondas y la alternativa asíncrona de Tusk.
- [4]
The Diem Team, "DiemBFT v4: State Machine Replication in the Diem Blockchain," 2021.
Antecedente de reputación de líderes en un descendiente productivo de HotStuff.
Siguiente lectura
Si quieres repasar cómo se construye el grafo que Shoal reinterpreta, vuelve a Narwhal como mempool DAG. Para comparar con la ruta que evita los timeouts mediante aleatoriedad, lee Tusk: consenso asíncrono sin timeouts, y para el panorama de la frontera DAG-BFT continúa con HotStuff-2, la frontera DAG-BFT y Twins.
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
HotStuff: de cero a estado del arte
Ruta progresiva para entender consenso BFT moderno: quórums, sincronía parcial, locks, taxonomía one/two/three-chain, QC/highQC, multipipeline, view-change, responsiveness, AggQC, Fast-HotStuff, sync y frontera DAG-BFT.
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.
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.
El Grafo Dirigido Acíclico (DAG) como una máquina del tiempo inmutable
Cómo el DAG por rondas de Narwhal enlaza cada vértice con 2f+1 certificados previos y por qué Tusk y Bullshark derivan el orden total sin mensajes extra.
La arquitectura de Workers en Narwhal: Desacoplar propagación y orden
Cómo Narwhal divide cada validador en un primary que certifica headers con digests y varios workers que difunden batches, y por qué eso escala el mempool.
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.
BFT en consorcios bancarios vs. redes públicas: El dilema del control de identidad
Consorcio permisionado o red abierta: quién certifica identidades, quién ordena, por qué abrir la membresía exige un costo y qué aporta execute-order-validate.