> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# IntentionBFT

> El consenso: cómo se confirman juntos un orden y un vector de precios certificados, y cómo está dispuesta la red.

IntentionBFT es el protocolo de consenso de Intention: un protocolo BFT de la familia HotStuff extendido para infraestructura financiera. La seguridad se mantiene incondicionalmente por debajo del umbral de fallos; la vivacidad se mantiene una vez que la red se estabiliza.

Aquí el consenso hace dos cosas que el consenso de una cadena de propósito general no hace: confirma **un orden** como objeto de primera clase y confirma **un vector de precios certificados** en el mismo evento. Todo lo que el [kernel](/es/protocol/architecture/kernel) puede garantizar sobre la ejecución depende de que ambos queden fijados antes de que la ejecución empiece.

<h2 id="model">
  El modelo
</h2>

IntentionBFT tolera a un adversario bizantino que controle hasta un tercio del stake total. El stake honesto es por tanto siempre superior a dos tercios, y el quórum estándar es cualquier conjunto de validadores cuyo stake combinado supere los dos tercios: lo que estas páginas llaman un **quórum de $2f+1$ ponderado por stake**. La red es parcialmente síncrona: antes de un punto de estabilización los retardos son arbitrarios; después de él, los retardos entre validadores honestos están acotados.

<div className="dg" data-dg="bft-prices">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-wire" d="M 163.00 78.00 L 176.60 78.00" />

      <path className="dg-head" d="M 183.00 78.00 L 176.60 82.40 L 176.60 73.60 Z" />

      <path className="dg-wire" d="M 350.00 78.00 L 363.60 78.00" />

      <path className="dg-head" d="M 370.00 78.00 L 363.60 82.40 L 363.60 73.60 Z" />

      <path className="dg-wire" d="M 537.00 78.00 L 550.60 78.00" />

      <path className="dg-head" d="M 557.00 78.00 L 550.60 82.40 L 550.60 73.60 Z" />
    </svg>

    <div className="dg-b dg--sky" style={{left:"0.0000%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Sidecar de oráculo</span><span className="dg-s">uno por validador</span></div>
    <div className="dg-b dg--blue" style={{left:"25.9722%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">El validador valida y firma</span><span className="dg-s">incluida la frescura frente a umbrales configurados</span></div>
    <div className="dg-b dg--blue" style={{left:"51.9444%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Gossip entre validadores</span><span className="dg-s">mensaje de la red de consenso</span></div>
    <div className="dg-b dg--green" style={{left:"77.9167%",top:"8.1761%",width:"22.0833%",height:"32.7044%"}}><span className="dg-t">Precios certificados</span><span className="dg-s">por epoch y ronda</span></div>
    <div className="dg-b dg--orange dg-left" style={{left:"0.0000%",top:"48.4277%",width:"100.0000%",height:"21.3836%"}}><span className="dg-t">Sin precios disponibles no hay bloque</span><span className="dg-s">Un validador solo puede proponer un bloque si presenta observaciones de precio válidas para la ronda en curso — así, las firmas que confirman las transacciones confirman también los precios contra los que se compensan.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"75.4717%",width:"100.0000%",height:"19.4969%"}}><span className="dg-t">Lo que esto no afirma</span><span className="dg-s">Ata el precio a la transacción; no hace que el precio sea correcto — el consenso certifica que un quórum de validadores envió estas observaciones en esta ronda, nada más.</span></div>
  </div>
</div>

Cada ronda tiene un líder designado. Dentro de una ronda, una propuesta reúne agregados sucesivos de firmas $2f+1$, y las fases se solapan en pipeline entre rondas adyacentes, de modo que un bloque alcanza la firmeza en dos viajes de ida y vuelta por la red en el caso común. Con capacidad de respuesta optimista, el avance queda acotado por el retardo real de los mensajes; el backoff del pacemaker solo entra en juego cuando la red es adversarial o está particionada.

<h2 id="committing-an-ordering">
  Confirmar un orden
</h2>

El orden de las transacciones dentro de un bloque se eleva a objeto confirmado por el consenso en lugar de quedar como un subproducto de la ejecución. El hash del bloque cubre el payload ordenado, así que cualquier reordenación posterior al consenso invalida las firmas que lo confirmaron.

El efecto: una vez que un bloque es firme, un quórum de $2f+1$ ponderado por stake ha firmado un compromiso con ese orden exacto, y ningún validador honesto habrá firmado un orden distinto de las mismas transacciones en la misma ronda. Junto con la ejecución secuencial sobre ese orden confirmado, esto es lo que convierte la reejecución determinista de una convención de implementación en una propiedad que cualquiera puede comprobar.

<Note>
  La discrecionalidad del líder dentro de una misma propuesta (qué lotes disponibles incluir y cómo disponerlos) sigue siendo una superficie residual, mitigada por la reputación del líder y por el hecho de que un líder no puede producir bloque alguno sin observaciones de precio válidas. Se hace seguimiento de construcciones de ordenación equitativa más fuertes como posible mejora futura.
</Note>

<h2 id="batch-availability">
  Disponibilidad de los lotes
</h2>

En un protocolo ingenuo, el líder propone un bloque cuyo payload lleva todas las transacciones de la ronda, lo que acopla el tamaño de los mensajes de consenso al rendimiento. IntentionBFT separa la difusión de datos de la ordenación.

Los validadores difunden continuamente lotes de transacciones en segundo plano. De cada lote se acusa recibo hasta que su originador puede demostrar disponibilidad $2f+1$ ponderada por stake, y solo entonces puede una propuesta referenciarlo, por digest y no por contenido. Los mensajes de consenso se mantienen pequeños con independencia del rendimiento, y un bloque confirmado siempre es reejecutable, porque ningún bloque puede referenciar datos que solo tuviera en su poder una minoría bizantina.

<h2 id="certifying-prices">
  Certificar los precios
</h2>

Los validadores son además observadores de precios, y un bloque lleva consigo los precios contra los que se ejecutó.

<div className="dg" data-dg="bft-topology">
  <div className="dg-c" style={{aspectRatio:"720 / 322"}}>
    <svg className="dg-w" viewBox="0 0 720 322" aria-hidden="true">
      <path className="dg-wire dg-soft" d="M 215.00 95.00 L 215.00 99.00" />

      <path className="dg-wire dg-soft" d="M 215.00 167.00 L 215.00 171.00" />

      <path className="dg-wire dg-soft" d="M 215.00 239.00 L 215.00 243.00" />
    </svg>

    <div className="dg-b dg--blue dg-left" style={{left:"0.0000%",top:"9.3168%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Validadores</span><span className="dg-s">consenso · mempool · sidecar de oráculo · kernel · almacenamiento</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"9.3168%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Los únicos participantes que votan</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"31.6770%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Nodos completos de validador</span><span className="dg-s">siguen y ejecutan los bloques confirmados; no votan</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"31.6770%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Aislamiento — absorben lecturas públicas y conexiones de pares para que los validadores no queden expuestos a la internet abierta</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"0.0000%",top:"54.0373%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Nodos completos públicos</span><span className="dg-s">abierto a todos; siguen, ejecutan y sirven lecturas</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"54.0373%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">El nivel abierto</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"0.0000%",top:"76.3975%",width:"59.7222%",height:"19.2547%"}}><span className="dg-t">Clientes</span><span className="dg-s">front ends · agentes · market makers · indexadores</span></div>
    <div className="dg-b dg-plain dg-left" style={{left:"63.6111%",top:"76.3975%",width:"36.3889%",height:"19.2547%"}}><span className="dg-s">Se conectan a nodos completos, nunca a validadores. Quien necesita la vista más completa y de menor latencia ejecuta el suyo.</span></div>
    <div className="dg-free" style={{left:"0.0000%",top:"0.0000%",width:"59.7222%"}}><div className="dg-n">Cuatro niveles, del consenso hacia fuera</div></div>
    <div className="dg-free" style={{left:"63.6111%",top:"0.0000%",width:"36.3889%"}}><div className="dg-n">Por qué existe el nivel</div></div>
  </div>
</div>

Cada validador ejecuta su propio [sidecar de oráculo](/es/protocol/architecture/oracle), que recoge datos de los exchanges y produce un precio índice por instrumento. El validador toma ese precio, lo valida (incluida su frescura frente a los umbrales configurados), lo firma y difunde por gossip el envío firmado a los demás validadores como mensaje de la red de consenso. Los precios certificados se ensamblan por epoch y ronda y viajan en el bloque, de modo que las firmas que confirman las transacciones confirman también los precios contra los que esas transacciones se compensan.

Un validador solo puede proponer un bloque si es capaz de presentar observaciones de precio válidas para la ronda en curso. La disponibilidad de precios es por tanto una precondición de la producción de bloques, no una entrada que la ejecución espera encontrar.

<Warning>
  Esto ata el precio a la transacción; no hace que el precio sea correcto. El consenso certifica que un quórum de validadores envió estas observaciones en esta ronda. Si los exchanges subyacentes eran exactos es otra cuestión, que abordan las reglas de agregación de la página [Oráculo](/es/protocol/architecture/oracle) y acotan las [advertencias de riesgo](/es/protocol/security/risks).
</Warning>

<h2 id="leader-reputation">
  Reputación del líder
</h2>

Los líderes se seleccionan ronda a ronda mediante una rotación determinista ponderada por stake, ampliada con una heurística de reputación sobre una ventana deslizante. Un validador con propuestas fallidas repetidas (señal de indisponibilidad o de comportamiento adversarial) queda degradado en las selecciones posteriores y sus turnos se redistribuyen entre validadores que han respondido recientemente, de modo que un validador no disponible no frene el avance reclamando el liderazgo de los turnos que tiene asignados.

Como las observaciones de precio condicionan la elegibilidad para proponer, la reputación también tiene que evitar concentrar el liderazgo en los validadores con mejor conectividad a datos de mercado. Un requisito de diversidad de exchanges (observaciones tomadas de varias fuentes independientes por instrumento) cierra esa vía.

<h2 id="epochs-and-reconfiguration">
  Epochs y reconfiguración
</h2>

El tiempo se organiza en epochs. Dentro de un epoch, el conjunto de validadores y la mayoría de los parámetros son constantes. En los límites entre epochs pueden cambiar mediante una reconfiguración autorizada por la gobernanza: cambios en el conjunto de validadores, cambios de parámetros de consenso, actualizaciones de parámetros de riesgo y acciones de emergencia. Las transiciones son atómicas: todo validador honesto ve la misma transición a la misma altura de bloque.

<h2 id="network-topology">
  Topología de la red
</h2>

<div className="dg" data-dg="bft-round">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-rule dg-dash" d="M 90 40 L 90 266" />

      <path className="dg-rule dg-dash" d="M 360 40 L 360 266" />

      <path className="dg-rule dg-dash" d="M 630 40 L 630 266" />

      <path className="dg-wire dg--blue" d="M 94.00 64.00 L 349.60 64.00" />

      <path className="dg-head dg--blue" d="M 356.00 64.00 L 349.60 68.40 L 349.60 59.60 Z" />

      <path className="dg-wire dg--sky" d="M 364.00 92.00 L 414.00 92.00 L 414.00 114.00 L 374.40 114.00" />

      <path className="dg-head dg--sky" d="M 368.00 114.00 L 374.40 109.60 L 374.40 118.40 Z" />

      <path className="dg-wire dg--sky dg-dash" d="M 356.00 146.00 L 100.40 146.00" />

      <path className="dg-head dg--sky" d="M 94.00 146.00 L 100.40 141.60 L 100.40 150.40 Z" />

      <path className="dg-wire dg--blue" d="M 94.00 218.00 L 349.60 218.00" />

      <path className="dg-head dg--blue" d="M 356.00 218.00 L 349.60 222.40 L 349.60 213.60 Z" />

      <path className="dg-wire dg--green dg-dash" d="M 364.00 254.00 L 619.60 254.00" />

      <path className="dg-head dg--green" d="M 626.00 254.00 L 619.60 258.40 L 619.60 249.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"2.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Líder</span></div>
    <div className="dg-b dg--sky" style={{left:"39.7222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Validadores</span></div>
    <div className="dg-b dg--green" style={{left:"77.2222%",top:"0.0000%",width:"20.5556%",height:"9.4340%"}}><span className="dg-t">Cadena</span></div>
    <div className="dg-b dg-dashed dg-tight dg-solid" style={{left:"14.4444%",top:"52.2013%",width:"33.6111%",height:"8.1761%"}}><span className="dg-s">Agregado 2f+1 ponderado por stake</span></div>
    <div className="dg-b dg--green" style={{left:"68.8889%",top:"86.7925%",width:"31.1111%",height:"11.9497%"}}><span className="dg-s">El orden y los precios son ya inmutables</span></div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"15.0943%",width:"34.4444%",whiteSpace:"normal"}}>Propone bloque — digests de lotes y precios certificados</div>
    <div className="dg-lbl" style={{left:"72.7778%",top:"32.3899%",width:"26.3889%",whiteSpace:"normal"}}>Verifican disponibilidad, orden y precios</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"40.8805%"}}>Voto</div>
    <div className="dg-lbl" style={{left:"31.2500%",top:"63.5220%"}}>Certifica la ronda</div>
    <div className="dg-lbl" style={{left:"68.7500%",top:"74.8428%"}}>Confirman</div>
  </div>
</div>

**Los validadores** participan en el consenso. Cada uno ejecuta la pila completa: consenso, mempool, un sidecar de oráculo, la ejecución del kernel y el almacenamiento. Son los únicos participantes que votan.

**Los nodos completos de validador** se sitúan justo detrás de los validadores. Siguen los bloques confirmados y los ejecutan, pero no votan. Su función es aislar: absorben el tráfico público de lectura y las conexiones de pares para que los validadores no queden expuestos directamente a la internet abierta.

**Los nodos completos públicos** son el nivel abierto. Cualquiera puede ejecutar uno. Siguen la cadena, ejecutan los bloques confirmados, sirven lecturas y alimentan los sistemas de aguas abajo.

**Los clientes** (front ends, agentes de trading, market makers, indexadores) se conectan a nodos completos y no a validadores. Un cliente que necesita la vista más completa y de menor latencia ejecuta su propio nodo completo en lugar de depender del de otro.

Los nodos que se unen a la red no reejecutan desde el génesis por defecto; consulta [sincronización de estado](/es/protocol/architecture/state/sync) para ver cómo se pone al día un nodo nuevo.

<h2 id="where-to-go-next">
  Qué leer a continuación
</h2>

<CardGroup cols={2}>
  <Card title="Mempool" href="/es/protocol/architecture/mempool">
    Qué llega al consenso, en qué orden y qué se descarta.
  </Card>

  <Card title="IntentionKernel" href="/es/protocol/architecture/kernel">
    Qué le ocurre a un bloque una vez confirmados su orden y sus precios.
  </Card>

  <Card title="Oráculo" href="/es/protocol/architecture/oracle">
    Cómo se produce un precio índice antes de que un validador lo firme.
  </Card>

  <Card title="Ejecutar un nodo" href="/es/developers/run-a-node">
    Por qué el conjunto de validadores es cerrado y cómo preguntar por la incorporación.
  </Card>
</CardGroup>
