Glossário / Lightning e camada 2
Route hint
- O que é um route hint?
- Um route hint é uma entrada em uma fatura Lightning que nomeia um nó público, um canal e suas taxas, para que um pagador consiga alcançar um destinatário cujos próprios canais não são anunciados.
Um canal privado nunca aparece no grafo de gossip público, então a própria fatura precisa carregar o último trecho da rota. O BOLT 11 torna obrigatório um hint quando o beneficiário não tem canal público, e cada salto custa 51 bytes: id do nó, id do canal, taxa base, taxa proporcional e delta CLTV. Sacar para uma carteira de celular sem canal anunciado só funciona porque esses bytes estão lá.
Como funciona
Um route hint viaja no campo etiquetado do BOLT 11 escrito com o caractere r, que contém uma lista em vez de um único valor.
Cada entrada tem cinco valores colocados um após o outro: um pubkey de 264 bits, um short_channel_id de 64 bits, um fee_base_msat de 32 bits, um fee_proportional_millionths de 32 bits e um cltv_expiry_delta de 16 bits. Isso dá 408 bits, exatamente 51 bytes por salto. As entradas formam uma rota de ida de um nó público até o beneficiário, e cada pubkey nomeia o nó no início do seu canal, não no fim.
Os três últimos valores são os que um nó público transmitiria em channel_update sob o BOLT 7. Um canal privado não transmite nada, então a fatura é o único lugar onde um pagador descobre quanto esse salto cobra.
A regra para quem escreve é restrita: se nenhum canal público estiver associado à chave do beneficiário, a fatura deve carregar pelo menos um campo r. Quem a escreve pode incluir vários deles para oferecer rotas alternativas, com a mais preferida primeiro. O teto é o próprio campo etiquetado, cujos dados não podem passar de 1023 grupos de 5 bits, ou 639 bytes, o que deixa espaço para no máximo doze saltos em um único campo.
Os hints são um conselho, não uma instrução: o pagador pode usar a sequência de canais indicada, e a especificação chama o campo de "limited routing assistance". O cegamento de rotas do BOLT 4 é a resposta posterior ao mesmo problema. Em vez de um id de nó e um id de canal em claro, o destinatário entrega ao remetente um ponto de introdução mais ids de nó ajustados e blobs criptografados para cada salto, de modo que o remetente obtém um caminho utilizável sem saber quem está nele.
Onde você vê isso
Route hints são o que um decodificador de faturas mostra como informação extra de roteamento para uma rota privada.
O próprio vetor de teste da mainnet da especificação é uma fatura de 20 milibitcoin roteada por dois saltos indicados: o canal 66051x263430x1800, com taxa base de 1 milisatoshi, 20 partes por milhão e delta CLTV de 3 blocos, depois o 197637x395016x2314, com 2 milisatoshis, 30 partes por milhão e 4 blocos. Esses dois saltos ocupam 164 dos caracteres bech32 da fatura, mais do que o hash de pagamento e o segredo de pagamento juntos.
A mesma estrutura aparece na prática. A Phoenix, uma das 41 carteiras analisadas neste site, mantém seus canais com a ACINQ e não com o grafo aberto, e onde esses canais não são anunciados, a regra acima obriga toda fatura a nomear o nó da ACINQ. O próprio FAQ da ACINQ, citado nessa análise, já admite que ela conhece o destino e o valor dos seus pagamentos; um hint estende essa divulgação para fora, já que quem paga a você descobre com qual provedor você opera. Saque por Lightning de uma corretora como a Strike e é a corretora, como pagadora, que paga as taxas base e proporcional do salto indicado, lidas da fatura que a sua carteira emitiu.
Route hint vs liquidez de entrada
Um route hint diz a um pagador como chegar até você; a liquidez de entrada decide se o pagamento cabe depois que chega.
Os dois falham de formas que, vistas de fora, parecem idênticas, e só um se resolve editando uma fatura. Um hint pode estar perfeitamente formado e indicar as taxas corretas, e mesmo assim o pagamento morre no último salto porque o seu lado desse canal não tem espaço. A Phoenix publica o preço de resolver isso: receber é grátis quando você já tem liquidez de entrada, e custa 1% mais as taxas de mineração quando a carteira precisa ir on-chain para abrir espaço. Se um pagamento falha enquanto o remetente insiste que a rota foi resolvida, verifique a capacidade antes de culpar a fatura.