BFT frontier: notas de campo

Artículo 1 de 9

11%

completado al llegar aquí

Sistemas distribuidosNota de investigación14 min de lectura

Bullshark: El motor de consenso DAG parcialmente síncrono

Cómo Bullshark ordena el DAG de Narwhal con anclas predefinidas, confirma con f+1 votos en la ronda siguiente y por qué sus timeouts sufren con anclas lentas.

En 1 Minuto

Comprende cómo Bullshark (Spiegelman, Giridharan, Sonnino y Kokoris-Kogias, CCS 2022) ordena el DAG de Narwhal bajo sincronía parcial: anclas predefinidas una ronda de cada dos, votos implícitos en las aristas, commit con f + 1 votos y el precio de esperar a anclas lentas.

Prerrequisitos
  • Narwhal y la separación entre mempool y consenso (narwhal-dag-mempool-hotstuff)
  • Tusk: consenso asíncrono sin timeouts (tusk-consenso-asincrono-sin-timeouts)
Cuándo Detenerte

Detente cuando puedas explicar por qué f + 1 votos en la ronda siguiente bastan para confirmar un ancla, cómo se ordena su historia causal y por qué un ancla lenta retrasa a todos.

Glosario Rápido de Notación

Glosario de Notación Matemática y Criptográfica

v— Vista (View / Round)

Número de vista o ronda actual. Cada vista tiene un único líder designado.

Ejemplo: view = 42
Haz clic en un símbolo para desplegar su definición formal y su aplicación en el protocolo.
Mapa conceptual

Ruta mental de Bullshark

  1. DAG de Narwhal

    Difusión por rondas

  2. Anclas predefinidas

    Una ronda de cada dos

  3. Votos implícitos

    Commit con f + 1

  4. Orden total

    Historia causal

Del DAG de Narwhal a un orden total sin mensajes de consenso adicionales.
Explicación Didáctica

Decodificador Didáctico de Conceptos BFT

Ancla predefinida

En palabras simples: Un horario de trenes publicado de antemano: todos saben qué tren debe pasar por qué andén, sin sortearlo en el momento.

Detalle técnico: En Bullshark parcialmente síncrono, el ancla de cada ronda de ancla se determina por una regla conocida por todos los validadores, sin moneda aleatoria compartida.

Voto implícito

En palabras simples: Construir tu piso encima de los cimientos del vecino ya dice que los aceptas; no hace falta enviar una carta aparte.

Detalle técnico: Una arista desde un vértice de la ronda r + 1 hacia el ancla de la ronda r se interpreta como voto; no se envían mensajes de votación separados.

Traducción de lenguaje formal a analogías intuitivas del mundo real.

Tusk mostró que el DAG de Narwhal basta para ordenar transacciones incluso en asincronía, eligiendo líderes a posteriori con una moneda aleatoria compartida. El precio es que el líder solo se conoce cuando la moneda se revela, y la confirmación depende de que esa elección aleatoria tenga suerte.

Bullshark, de Spiegelman, Giridharan, Sonnino y Kokoris-Kogias, se pregunta qué se puede ganar si, además de sobrevivir a la asincronía, el protocolo aprovecha los periodos en que la red se porta bien. Este capítulo recorre su versión parcialmente síncrona: anclas fijadas de antemano, votos que son simples aristas del DAG y una regla de commit sorprendentemente barata. También mira de frente su punto débil, que es el mismo que motivó a Shoal: cuando el ancla es lenta, todos esperan.

De Tusk a Bullshark: qué cambia al asumir sincronía parcial

El modelo de sincronía parcial de Dwork, Lynch y Stockmeyer supone que la red puede comportarse de forma arbitraria hasta un instante desconocido, el GST, y que a partir de ahí los mensajes llegan dentro de una cota. En ese modelo la safety debe valer siempre, pero basta con que la liveness se cumpla después del GST.

Tusk no necesita esa hipótesis: su moneda aleatoria le da liveness probabilística aun sin GST. Bullshark parte de la misma estructura y busca un camino rápido para los periodos síncronos, sin el mecanismo de cambio de vista que caracteriza a los protocolos tipo PBFT o HotStuff. La idea es que el DAG ya contiene toda la información que un cambio de vista transportaría: quién vio qué y en qué ronda.

El paper presenta un protocolo completo que mezcla un camino rápido con un respaldo asíncrono, y también describe una versión independiente solo para sincronía parcial, que es la que se evalúa contra Narwhal-HotStuff y Tusk. Esa versión es la protagonista de este capítulo.

El DAG de Narwhal como sustrato de votos

Narwhal organiza la difusión en rondas. En cada ronda, cada validador publica un vértice con lotes de transacciones y referencias a al menos 2f+12f + 1 vértices certificados de la ronda anterior, con n=3f+1n = 3f + 1 validadores. El certificado garantiza disponibilidad: un vértice certificado puede recuperarse aunque su autor deje de responder.

Para Bullshark, ese grafo es más que un mempool. Cada validador interpreta localmente su copia del DAG y decide el orden sin intercambiar mensajes de consenso adicionales; los autores lo llaman sobrecarga de comunicación nula. Dos validadores correctos pueden tener DAGs locales distintos en un instante dado, porque los vértices llegan en órdenes distintos, pero si ambos tienen un mismo vértice certificado, tienen exactamente la misma historia causal de ese vértice.

Figura 1

Rondas del DAG leídas como votos sobre un ancla

Fuentes:

[2]
Rondas del DAG leídas como votos sobre un ancla
Cómo leer esta figura

Cuatro validadores A, B, C y D con un vértice por ronda en las rondas r, r + 1 y r + 2. Cada vértice de una ronda tiene aristas hacia tres vértices de la ronda anterior. El vértice de A en la ronda r recibe aristas desde los vértices de A, B y D en la ronda r + 1.

Visual original de TrautsLab. DAG de Narwhal con f = 1: si A en la ronda r fuera el ancla, los vértices de A, B y D en la ronda r + 1 la referencian: son tres votos implícitos, más que los f + 1 = 2 que exige la regla de commit de Bullshark.

Anclas predefinidas y la regla de commit con f + 1 votos

En la versión parcialmente síncrona, una ronda de cada dos tiene un ancla predefinida: un validador concreto, conocido por todos de antemano, cuyo vértice en esa ronda es el candidato a confirmarse. La ronda que sigue a cada ronda de ancla funciona como ronda de votación.

La regla es la siguiente. Sea ArA_r el vértice ancla de la ronda rr. Un vértice de la ronda r+1r + 1 vota por ArA_r si tiene una arista hacia él. Un validador confirma ArA_r en cuanto su DAG local contiene al menos f+1f + 1 vértices de la ronda r+1r + 1 que votan por ArA_r.

¿Por qué basta f+1f + 1 y no 2f+12f + 1? La clave está en que cada vértice de la ronda r+2r + 2 referencia 2f+12f + 1 vértices de la ronda r+1r + 1. Como (f+1)+(2f+1)=3f+2>n(f + 1) + (2f + 1) = 3f + 2 > n, cualquier vértice de la ronda r+2r + 2 referencia al menos uno de los votantes, y por tanto tiene un camino hasta ArA_r. Desde ahí, todo vértice de rondas posteriores, incluida la próxima ancla de cualquier validador, contiene a ArA_r en su historia causal. No hace falta una supermayoría de votos: hace falta que el voto sea imposible de esquivar en el futuro.

Fíjate en la diferencia con los protocolos basados en líder, donde cada fase reúne votos firmados explícitos sobre una propuesta. En Bullshark, el umbral de 2f+12f + 1 ya lo paga Narwhal al construir cada ronda; la regla de commit solo tiene que apoyarse en esa estructura. En el caso favorable, un ancla se confirma en dos rondas del DAG.

Lema

Por qué f + 1 votos fijan un ancla

Si un validador correcto confirma el ancla A_r porque observa vértices de la ronda r + 1 con aristas hacia A_r, entonces todo vértice certificado de una ronda r' ≥ r + 2 tiene un camino hasta A_r en el DAG.
Bosquejo de Demostración: Cada vértice de la ronda r + 2 referencia vértices de la ronda r + 1. Entre 3 validadores, un conjunto de y otro de se intersecan, así que al menos una referencia apunta a un votante de A_r. Por inducción, los vértices de rondas posteriores heredan ese camino.

Ordenar la historia causal sin perder anclas

Confirmar un ancla no basta: hay que convertir el DAG en una secuencia. Cuando un validador confirma ArA_r, mira hacia atrás las anclas de rondas anteriores que todavía no ha ordenado. Si existe un camino desde ArA_r hasta una ancla anterior AsA_s, esa ancla se ordena antes que ArA_r, y el proceso se repite desde AsA_s hasta llegar a la última ancla ya ordenada.

Esto resuelve el caso incómodo: un validador puede no haber visto los f+1f + 1 votos de AsA_s que otro sí vio. Por el lema anterior, si alguien confirmó AsA_s, cualquier ancla posterior tiene un camino hasta ella, así que todos la recuperan al confirmar la siguiente. Las anclas sin camino desde la siguiente confirmada se saltan, y como la decisión depende solo de la historia causal compartida, todas las réplicas correctas saltan las mismas.

Una vez fijada la secuencia de anclas, cada una entrega su historia causal todavía no ordenada siguiendo una regla determinista común. Por eso la propiedad de Narwhal sobre historias causales idénticas importa tanto: dos réplicas con la misma ancla producen el mismo bloque de transacciones. Ojo con una consecuencia: solo el ancla goza de la latencia de dos rondas. Los demás vértices esperan a quedar dentro de la historia causal de alguna ancla confirmada, de modo que su latencia es mayor, un punto que Shoal señala explícitamente.

Comparación

Tusk frente a Bullshark parcialmente síncrono

Dos formas de interpretar el mismo DAG de Narwhal.

Tusk

Líder elegido a posteriori con una moneda aleatoria compartida.

  • Liveness probabilística sin suponer GST.
  • El líder solo se conoce cuando se revela la moneda.
  • Sin timeouts en la construcción del DAG.

Bullshark parcialmente síncrono

Ancla predefinida una ronda de cada dos y commit con f + 1 votos.

  • Commit del ancla en dos rondas en el caso favorable.
  • Sin mensajes de consenso adicionales ni cambio de vista.
  • Liveness solo después del GST y con timeouts sobre las anclas.

Versión con fallback asíncrono frente a versión parcialmente síncrona

El protocolo completo de Bullshark agrupa las rondas en olas y combina dos tipos de líderes: anclas predefinidas para el camino rápido y un líder de respaldo elegido con una moneda aleatoria compartida, al estilo de Tusk. Cada validador decide, según lo que observó en la ola anterior, si sus vértices votan en modo rápido o en modo de respaldo, y los dos modos no pueden confirmar líderes incompatibles. El resultado conserva la liveness en asincronía y aprovecha la sincronía cuando existe.

La versión parcialmente síncrona elimina el respaldo aleatorio. A cambio, necesita algo que garantice que, tras el GST, las anclas correctas reciban sus votos. Ese algo son los timeouts: un validador no avanza de la ronda de ancla sin haber recibido el vértice del ancla o sin que expire un temporizador, y en la ronda de votación espera los votos del ancla o un timeout. Sin esa espera, un validador rápido podría construir su vértice antes de ver el ancla y dejarla sin votos.

Es un intercambio clásico de la sincronía parcial: la safety no depende de los tiempos, pero la liveness sí, y los temporizadores son la forma de convertir la cota posterior al GST en progreso.

Por qué los timeouts sobre anclas duelen con validadores lentos

Los timeouts no son gratis. Si el validador al que le toca ser ancla está caído, todos los demás esperan el temporizador completo antes de avanzar, y esa ronda no confirma nada. Si el ancla no está caída sino solo lenta, el problema es más sutil: puede llegar tarde para reunir sus f+1f + 1 votos, y entonces se salta y la confirmación espera a la siguiente ancla, dos rondas después.

Spiegelman, Arun, Gelashvili y Li analizan este efecto en Shoal. Señalan que Bullshark depende de timeouts para su liveness y que, en presencia de fallas, esas esperas dominan la latencia; además, que solo las anclas se confirman en el camino corto. Su propuesta combina tres ideas sobre el mismo DAG: canalizar las instancias para tener un ancla en cada ronda, usar reputación de líder para preferir validadores que responden a tiempo y evitar los timeouts en la mayoría de los casos, una propiedad que llaman prevalent responsiveness.

La lección para quien diseña o opera un comité es concreta. Un protocolo con anclas predefinidas es tan rápido como el ancla de la ronda: el calendario fijo que elimina la moneda aleatoria también impide esquivar a un validador lento. Ajustar el timeout no resuelve el dilema, porque uno corto salta anclas correctas pero lentas y uno largo congela la red cuando el ancla está caída; es la misma tensión que discute por qué no usar timeouts fijos.

Bullshark

Checklist mental de Bullshark

6 de 6 revisados

Lo que deberías poder explicar sin mirar el texto.
Referencias

Bibliografía académica

Formato IEEENumerado para ingeniería, sistemas y protocolos.
  1. [1]

    A. Spiegelman, N. Giridharan, A. Sonnino, and L. Kokoris-Kogias, "Bullshark," arXiv:2201.05677, 2022.

    Anclas predefinidas, votos implícitos, commit con f + 1 votos, ordenación de la historia causal y versión con fallback asíncrono.

  2. [2]

    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

    PaperID: NARWHAL-TUSK-2021Abrir fuente (abre en otra pestaña)

    Estructura de rondas del DAG, certificados de disponibilidad y la moneda aleatoria de Tusk.

  3. [3]

    A. Spiegelman, B. Arun, R. Gelashvili, and Z. Li, "Shoal: Improving DAG-BFT Latency And Robustness," arXiv:2306.03058, 2023.

    Análisis del coste de los timeouts en Bullshark, pipelining de anclas y reputación de líder.

  4. [4]

    C. Dwork, N. Lynch, and L. Stockmeyer, "Consensus in the Presence of Partial Synchrony," JACM, 1988.

    Modelo de sincronía parcial con GST: safety siempre, liveness tras la estabilización.

Fuentes primarias, papers seminales y especificaciones técnicas citadas en esta investigación.

Siguiente lectura

Para ver dónde encaja Bullshark entre las demás propuestas DAG-BFT y las variantes de HotStuff, continúa con HotStuff-2 y la frontera DAG-BFT. Si quieres repasar el sustrato sobre el que corre todo esto, vuelve a Narwhal como mempool DAG.

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.

Sigue leyendo

Ideas conectadas con este artículo

Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.

Los comentarios se cargan al final de la lectura para no meter peso antes de tiempo.