Pular para o conteúdo
buybitcoinsmart

Glossário / Lightning e camada 2

ID curto de canal

Outros nomes: scid.

O que é um ID curto de canal?
Um ID curto de canal é o ponteiro de 8 bytes que a Lightning usa para nomear um canal, empacotando a altura de bloco da transação de financiamento, seu índice nesse bloco e seu índice de saída.

A Lightning nomeia um canal público pelo lugar onde sua saída de financiamento está na blockchain, não por um rótulo arbitrário. Três bytes carregam a altura de bloco, três o índice da transação e dois o índice da saída, o que dá 64 bits no total, escrito para pessoas como 539268x845x1. Essa coordenada é o que permite verificar contra a cadeia um canal pelo qual sua carteira está roteando, sem confiar no painel de ninguém.

Como funciona

Os três componentes de um ID curto de canal são concatenados do mais significativo para o menos significativo: a altura de bloco da transação de financiamento, o índice dessa transação dentro do bloco e o índice da saída que paga o canal. As larguras fixas limitam a altura e o índice da transação a 16.777.215 e o índice da saída a 65.535.

Escritos para uma pessoa, os números são impressos em decimal e unidos por uma letra x minúscula, de modo que um canal na saída 1 da transação de índice 845 no bloco de altura 539.268 é 539268x845x1. As razões da especificação: um x minúsculo é visivelmente menor que um dígito na maioria das fontes, então o olho separa as partes, e um clique duplo seleciona o identificador inteiro.

Empacotado, ele é um simples número de 64 bits, e o vetor de teste do BOLT 11 o demonstra: a dica de rota 66051x263430x1800 é a sequência de bytes 01 02 03 04 05 06 07 08 em ordem, porque 66051 é 0x010203, 263430 é 0x040506 e 1800 é 0x0708.

Por ser uma posição e não um hash, um ID curto de canal deixa de ser verdadeiro se o bloco que ele nomeia mudar. É por isso que um canal não é anunciado até que sua transação de financiamento tenha pelo menos 6 confirmações, e por isso um nó deve ignorar um anúncio cuja saída tenha menos. O splicing também move o identificador: um canal com splice é anunciado de novo sob o ID curto de canal da transação de splice, enquanto os nós continuam retransmitindo pagamentos que ainda usam o anterior.

Um canal que ninguém anunciou não tem identificador público, então os pares trocam um alias entre si; uma atualização que carregue um deve definir seu sinalizador dont_forward e nunca deve ser repassada, por privacidade.

Onde você o vê

Os IDs curtos de canal são a camada de endereçamento do gossip da Lightning, e aparecem em toda mensagem sobre um canal específico.

A mensagem de tipo 259, announcement_signatures, carrega um quando dois pares concordam em publicar seu canal. O tipo 256, channel_announcement, carrega aquele que todos os outros nós usam para encontrar a saída de financiamento on-chain. O tipo 258, channel_update, o repete a cada mudança de taxa ou de expiração, uma vez por direção. O tipo 261, query_short_channel_ids, pede a um par os anúncios por trás de uma lista deles, enviada como um array ascendente sob o byte de codificação 0; o byte de codificação 1 antes significava compressão zlib e agora é proibido por completo. Um nó pode podar qualquer canal cuja atualização mais recente em qualquer das duas direções seja mais antiga que duas semanas, 1.209.600 segundos.

O único lugar em que um usuário comum encontra um é uma solicitação de pagamento: o campo r de uma fatura BOLT 11 carrega dicas de rota, e cada salto é uma chave pública de nó, um ID curto de canal de 64 bits, dois valores de taxa e um delta de expiração. O exemplo prático da especificação aponta para 589390x3312x1.

ID curto de canal vs Outpoint

Um ID curto de canal e um outpoint nomeiam a mesma saída de transação, e o fazem por direções opostas. Um outpoint tem 36 bytes, um ID de transação de 32 bytes seguido de um índice de 4 bytes, e nomeia a saída pela transação que a criou; um ID curto de canal tem 8 bytes e nomeia a mesma saída pelo lugar onde ela ficou.

A troca é entre tamanho e estabilidade. Um outpoint é válido no momento em que a transação existe, inclusive sem confirmação, e nunca muda. Um ID curto de canal não existe até que a transação esteja em um bloco, e uma reorganização que a minere de novo em outra altura ou posição gera um identificador diferente para o mesmo canal. A Lightning aceita isso porque a coordenada também serve de instrução para encontrar a saída, e um canal propagar 8 bytes pelo gossip custa muito menos que 36.

Não confundir com

Perguntas frequentes

Posso consultar um canal da Lightning em um explorador de blocos a partir do seu ID curto de canal?

Sim. Divida o identificador em cada letra x: o primeiro número é a altura de bloco, o segundo é o índice da transação dentro desse bloco e o terceiro é o índice da saída que financia o canal. Esses três números levam você até a transação de financiamento em qualquer explorador que liste em ordem as transações de um bloco.

Por que o ID curto de canal de um canal mudou?

Quase sempre porque o canal passou por um splice. Um splice gasta a saída de financiamento antiga em uma nova, e o canal é anunciado de novo sob o ID curto de canal da transação de splice, enquanto os nós continuam retransmitindo pagamentos que ainda usam o identificador anterior. Uma reorganização da blockchain que minere a transação de financiamento de novo em outro lugar também o mudaria.

Um ID curto de canal é a mesma coisa que um ID de canal?

Não. São dois campos distintos, e a mensagem announcement_signatures do BOLT 7 carrega os dois lado a lado. Apenas o ID curto de canal é uma coordenada dentro da blockchain.

Leia a seguir

Termos relacionados

Mais em Lightning e camada 2

Ler esta página em inglês