Gossip e o Grafo de Canais

Como os nós descobrem a rede

⚡ Lightning · Técnico

No roteamento onion assumimos que a origem já conhece a rota. Mas como ela sabe quais nós e canais existem, se não há um servidor central? A resposta é o gossip (fofoca): os nós anunciam e repassam informações uns para os outros, e cada um monta o seu próprio grafo de canais.

As três mensagens do gossip

O protocolo de descoberta (BOLT 7) gira em torno de três mensagens, que são inundadas (flooded) pela rede:

As três mensagens do gossip (node_announcement, channel_announcement, channel_update) sendo inundadas entre os nós da rede.

Anunciar um canal custa bitcoin (anti-spam)

Qualquer um poderia inventar canais falsos para poluir a rede. Para evitar isso, o channel_announcement só é aceito se a saída de financiamento realmente existir on-chain — e as assinaturas Bitcoin provam que quem anuncia controla aquela saída multisig. Ou seja: para anunciar um canal, você precisa ter trancado bitcoin de verdade. Isso torna o spam caro.

Short Channel ID (SCID)

Como o anúncio aponta para a saída de financiamento? Pelo Short Channel ID: um identificador compacto (8 bytes) que é, literalmente, a localização da saída na blockchain:

SCID = <altura_do_bloco> x <índice_da_tx> x <índice_da_saída>

É escrito como 700000x1337x0 (bloco 700000, transação 1337 do bloco, saída 0) — o x aí é só um separador, não uma multiplicação. Por baixo, é uma forma numérica com os três campos empacotados em 64 bits (24 bits de altura + 24 de índice da tx + 16 de índice da saída). Com o SCID, qualquer nó consegue ir até o bloco e verificar que o canal existe.

Anatomia do Short Channel ID: altura do bloco, índice da transação e índice da saída, apontando para a saída de financiamento na blockchain.

Converta entre as duas formas:

Ícone Ferramenta Short Channel ID
Ícone Ferramenta

Short Channel ID

O SCID identifica um canal pela localização da sua saída de financiamento na blockchain: bloco, índice da transação e índice da saída, empacotados em 64 bits (escritos como blocoxtxxsaída).

Compor

SCID (string):
SCID (decimal):
SCID (hex):

Decompor

Bloco: · Tx: · Saída:
SCID (string):

Montando o grafo de canais

Juntando tudo, cada nó constrói um grafo: os nós (de node_announcement), as arestas (canais, de channel_announcement) e o peso de cada aresta (a política de taxa/cltv, de channel_update). É esse grafo que a busca de caminho usa para escolher uma rota.

Um nó montando o grafo de canais a partir das mensagens de gossip: nós como vértices e canais como arestas, cada uma com sua política de taxa e cltv.

Canais públicos vs. privados

Nem todo canal é anunciado. Um canal privado (unannounced) não entra no gossip — ele existe, mas a rede não o conhece. Para receber por um canal privado, o destinatário inclui dicas de roteamento (routing hints) na invoice, contando ao pagador o caminho final que ele não acharia sozinho.

Mantendo o grafo fresco

Para não inundar a rede sem parar, os anúncios têm timestamps e há regras de throttling (limites de frequência) e staggered broadcast (envios em lotes periódicos). Canais sem atualização há muito tempo são considerados obsoletos e podados (pruned) do grafo.

Com o grafo em mãos, falta o último passo do roteamento: escolher uma boa rota entre as muitas possíveis. É a busca de caminho — a próxima página.