Decodificador BigSize/TLV
Decodifique inteiros BigSize e fluxos TLV do protocolo Lightning
O BigSize é a codificação de inteiros de tamanho variável usada pelo protocolo Lightning (BOLT 1). Valores pequenos (0–252) cabem em 1 byte; valores maiores usam prefixos 0xFD (2 bytes), 0xFE (4 bytes) ou 0xFF (8 bytes). O TLV (Type-Length-Value) empacota um tipo BigSize, um comprimento BigSize e o valor correspondente, formando a base das mensagens modernas da Lightning.
A ferramenta apenas decodifica bytes. Ela não interpreta semântica de tipos TLV, não valida regras de odd/even, não monta mensagens e não substitui um nó Lightning. Use valores fictícios.
Conteúdo
Ferramenta
Escolha o modo BigSize para decodificar um inteiro, ou TLV para decodificar uma sequência de registros Tipo-Comprimento-Valor. Cole os bytes em hexadecimal (sem 0x) ou clique em um exemplo.
Decodificador BigSize/TLV
Fonte primária
O BigSize e o formato TLV são definidos na BOLT 1 — Base Protocol. A seção Type-Length-Value especifica a codificação, as regras de odd/even para tipos (ímpares = opcionais/ignoráveis, pares = obrigatórios/conhecidos) e a ordem canônica (tipo crescente, sem duplicatas de tipos pares).
Codificação BigSize
| Valor mínimo | Valor máximo | Prefixo | Bytes totais |
|---|---|---|---|
| 0 | 252 | Nenhum (valor direto) | 1 |
| 253 | 65.535 | 0xFD | 3 |
| 65.536 | 4.294.967.295 | 0xFE | 5 |
| 4.294.967.296 | 2⁶⁴−1 | 0xFF | 9 |
BigSize aparece em quase toda mensagem Lightning moderna: comprimentos de payload, tipos TLV, tamanhos de campos, channel_id v2, feature bits estendidos e short_channel_id em contexto TLV.
TLV (Type-Length-Value)
Um registro TLV é composto por:
[type: BigSize] [length: BigSize] [value: length bytes] O tipo BigSize diz o que o valor significa (ex.: tipo 2 = amount_msat em um payload onion). O comprimento BigSize diz quantos bytes o valor ocupa. O valor são os bytes brutos. Vários TLV podem aparecer em sequência — a BOLT 1 exige ordem crescente de tipo (canônica) e sem duplicatas de tipos pares.
Tipos pares (even) são obrigatórios: quem recebe precisa entender. Tipos ímpares (odd) são opcionais: podem ser ignorados se desconhecidos — mesma regra dos feature bits.
Exemplos
BigSize: valor 0, 252 e 253
Hex: 00fc fd00fd
0 = 1 byte
252 = 1 byte
253 = 0xFD + 0x00FD (big-endian) = 3 bytes BigSize: valor 65535 e 65536
Hex: fdffff fe00010000
65535 = 0xFD + 0xFFFF = 3 bytes
65536 = 0xFE + 0x00010000 = 5 bytes TLV: tipo 1, comprimento 5, valor "hello"
Hex: 01 05 68656c6c6f
tipo 1 (BigSize 1 byte) | compr. 5 (BigSize 1 byte) | 68 65 6c 6c 6f ("hello" em ASCII) TLV: múltiplos registros
Hex: 010568656c6c6f0203020301
TLV #1: tipo=1, compr.=5, valor="hello"
TLV #2: tipo=2, compr.=3, valor=0x020301 Limites da ferramenta
A ferramenta decodifica a estrutura, mas não valida: ordenação canônica, duplicatas, tipos reservados, ranges de valores semânticos, nem se o TLV faz sentido no contexto de uma mensagem específica. BigSize acima de 2⁵³−1 (não seguro para inteiro JS) é exibido como string. O modo TLV aceita qualquer sequência — mesmo que viole as regras de odd/even ou ordem canônica.
Mapa conceitual
Antes de usar esta ferramenta
- Protocolo Wire e Mensagens, para entender onde BigSize e TLV aparecem no fio.
- Mensagens Wire e TLV, para ver mensagens completas que usam TLV.
Depois de usar esta ferramenta
- Roteamento Onion, para ver TLV no payload onion.
- Construtor de Rota (Onion), para montar payloads TLV onion.
Referências
- BOLT 1 — Base Protocol (seção Type-Length-Value)