Protocolo Wire

O formato das mensagens entre nós

⚡ Lightning · Técnico

Tudo o que vimos — abrir canais, mover HTLCs, fofocar sobre a rede — acontece por mensagens que os nós trocam. O protocolo Wire (BOLT 1) define o formato dessas mensagens.

Uma mensagem

Toda mensagem começa com um tipo de 2 bytes (big-endian), seguido do payload. O tipo diz o que é a mensagem (e, portanto, como interpretar o resto):

[ tipo: 2 bytes ][ payload: bytes ]

Há mensagens de controle (init, error, ping/pong), de canal (open_channel, commitment_signed, revoke_and_ack…) e de gossip (channel_announcement, node_announcement…). A primeira mensagem trocada é sempre a init, que carrega os feature bits (BOLT 9) — o que cada lado suporta.

Ícone Ferramenta Feature Bits (BOLT 9)
Ícone Ferramenta

Feature Bits (BOLT 9)

As mensagens init e os anúncios carregam um vetor de bits que diz o que um nó suporta. Cole o vetor em hex.

Estrutura de uma mensagem Wire: 2 bytes de tipo seguidos do payload; tipos pares são obrigatórios e ímpares podem ser ignorados.

"It's ok to be odd"

Como evoluir o protocolo sem quebrar nós antigos? Pela paridade do tipo:

TLV: campos opcionais e extensíveis

Para acrescentar campos novos a uma mensagem sem reescrever o protocolo, usa-se um stream TLV (type-length-value) no fim do payload. Cada registro é:

[ type (BigSize) ][ length (BigSize) ][ value: length bytes ]

Os registros vêm em ordem crescente de tipo, e vale a mesma regra par/ímpar (par = obrigatório, ímpar = opcional). O BigSize é um inteiro de tamanho variável: valores < 253 cabem em 1 byte; senão, um prefixo 0xfd/0xfe/0xff indica 2, 4 ou 8 bytes (big-endian).

Um registro TLV: type, length e value (com type e length em BigSize), formando um stream ordenado por tipo.

Identifique uma mensagem pelo seu tipo e desmonte um stream TLV:

Ícone Ferramenta Mensagens Wire e TLV
Ícone Ferramenta

Mensagens Wire e TLV

Toda mensagem começa com um tipo de 2 bytes; campos opcionais vão num stream TLV.

Tipo da mensagem

Stream TLV

As mensagens viajam dentro de um túnel cifrado entre os nós. Como esse túnel é estabelecido é o assunto da próxima página: o transporte criptografado (Noise).