Gossip y el Grafo de Canales

Cómo los nodos descubren la red

⚡ Lightning · Técnico

En el enrutamiento onion asumimos que la origen ya conoce la ruta. Pero, ¿cómo sabe ella qué nodos y canales existen, si no hay un servidor central? La respuesta es el gossip (cotilleo): los nodos anuncian y reenvían información unos a otros, y cada uno construye su propio grafo de canales.

Los tres mensajes del gossip

El protocolo de descubrimiento (BOLT 7) gira en torno a tres mensajes, que se inundan (flooded) por la red:

Los tres mensajes del gossip (node_announcement, channel_announcement, channel_update) inundándose entre los nodos de la red.

Anunciar un canal cuesta bitcoin (anti-spam)

Cualquiera podría inventar canales falsos para ensuciar la red. Para evitarlo, el channel_announcement solo se acepta si la salida de financiación realmente existe on-chain — y las firmas Bitcoin prueban que quien anuncia controla esa salida multisig. Es decir: para anunciar un canal, tienes que haber bloqueado bitcoin de verdad. Eso hace que el spam sea caro.

Short Channel ID (SCID)

¿Cómo apunta el anuncio a la salida de financiación? Por el Short Channel ID: un identificador compacto (8 bytes) que es, literalmente, la ubicación de la salida en la blockchain:

SCID = <altura_del_bloque> x <índice_de_la_tx> x <índice_de_la_salida>

Se escribe como 700000x1337x0 (bloque 700000, transacción 1337 del bloque, salida 0) — la x ahí es solo un separador, no una multiplicación. Por debajo, es una forma numérica con los tres campos empaquetados en 64 bits (24 bits de altura + 24 de índice de la tx + 16 de índice de la salida). Con el SCID, cualquier nodo puede ir al bloque y verificar que el canal existe.

Anatomía del Short Channel ID: altura del bloque, índice de la transacción e índice de la salida, apuntando a la salida de financiación en la blockchain.

Convierte entre las dos formas:

Short Channel ID

ID de Canal Corto

El SCID identifica un canal por la ubicación de su salida de financiación en la blockchain: bloque, índice de la transacción e índice de la salida, empaquetados en 64 bits (escritos como bloquextxsalida).

Componer

Límites: bloque y transacción usan 24 bits; salida usa 16 bits.

SCID (string):
SCID (decimal):
SCID (hex):
Bytes (bloque | tx | salida):

Descomponer

El valor debe caber en 64 bits. Un alias puede no representar una ubicación on-chain.

Bloque: · Tx: · Salida:
SCID (string):
SCID (decimal):
SCID (hex):

Construyendo el grafo de canales

Juntándolo todo, cada nodo construye un grafo: los nodos (de node_announcement), las aristas (canales, de channel_announcement) y el peso de cada arista (la política de comisión/cltv, de channel_update). Es ese grafo el que la búsqueda de camino usa para elegir una ruta.

Un nodo construyendo el grafo de canales a partir de los mensajes de gossip: nodos como vértices y canales como aristas, cada uno con su política de comisión y cltv.

Canales públicos vs. privados

No todo canal se anuncia. Un canal privado (unannounced) no entra en el gossip — existe, pero la red no lo conoce. Para recibir por un canal privado, el destinatario incluye pistas de enrutamiento (routing hints) en la invoice, diciéndole al pagador el camino final que no encontraría por sí solo.

Manteniendo el grafo fresco

Para no inundar la red sin parar, los anuncios tienen timestamps y existen reglas de throttling (límites de frecuencia) y staggered broadcast (envíos en lotes periódicos). Los canales sin actualización durante mucho tiempo se consideran obsoletos y se podan (pruned) del grafo.

Con el grafo en mano, falta el último paso del enrutamiento: elegir una buena ruta entre muchas posibles. Es la búsqueda de camino — la próxima página.