Pular para o conteúdo
buybitcoinsmart

Glossário / Lightning e camada 2

Segredo de pagamento

O que é um segredo de pagamento?
Um segredo de pagamento é um valor de 32 bytes que o destinatário gera por fatura e exige de volta na carga útil final da cebola, de modo que conhecer apenas o hash de pagamento não faz de você o pagador.

O segredo de pagamento da Lightning funciona como uma senha por fatura que o pagador devolve antes que o nó receptor aceite o dinheiro. O BOLT 11 dá a ele a letra de etiqueta s, fixa seu comprimento em 52 caracteres bech32 e orienta o leitor a rejeitar qualquer fatura que chegue sem um. Para você, é a razão pela qual um nó de roteamento que viu seu hash de pagamento não consegue saber que o pagamento terminou na sua carteira.

Como funciona

Um segredo de pagamento é criado pela carteira receptora, nunca pelo pagador, e permanece selado dentro da cebola até que o pagamento chegue ao seu último salto.

O BOLT 11 o define como campo etiquetado do tipo 16, escrito com a letra s e um data_length fixo de 52. Esses 52 caracteres bech32 carregam 260 bits, um valor de 32 bytes mais preenchimento, e quem escreve uma fatura deve incluir exatamente um. O leitor deve rejeitar o pagamento se um campo de comprimento fixo tiver o comprimento errado, e também se não houver nenhum campo s válido.

O pagador copia o valor para a carga útil da cebola do último nó, que o BOLT 4 chama de registro TLV do tipo 8, payment_data, contendo o segredo de 32 bytes e um valor total_msat. Somente o destino pode descascar essa camada, então os saltos intermediários nunca o veem, ao contrário do hash de pagamento ao qual todos prendem seus HTLCs.

A verificação na ponta final é deliberadamente pouco informativa. Um segredo que não corresponde ao esperado para aquele hash de pagamento, ou que é obrigatório e está ausente, faz o HTLC falhar com incorrect_or_unknown_payment_details, erro PERM|15, a mesma resposta que um hash de pagamento desconhecido recebe. O BOLT 4 explica a fusão: o par mais antigo, PERM|16 incorrect_payment_amount e 17 final_expiry_too_soon, permitia que um nó de encaminhamento reenviasse pagamentos com o mesmo hash por valores muito menores e lesse a resposta para confirmar que havia encontrado o destino.

O suporte não é mais negociado. O BOLT 9 lista os bits de recurso 14 e 15, payment_secret, como ASSUMED, e os bits 16 e 17, basic_mpp, dependem dele.

Onde você o vê

Você pode identificar um segredo de pagamento em uma string lnbc moderna como o trecho que começa com sp5 e continua por 52 caracteres de bech32.

Nos vetores de teste do BOLT 11, esse trecho é zyg3 repetido doze vezes e depois zygs, codificando um segredo cujos 32 bytes são todos 0x11. Você nunca digita um segredo de pagamento: somente quem escreve a fatura e a carteira pagadora alguma vez lidam com o valor.

Onde o campo se justifica é nos pagamentos multipartes. Quando nenhuma rota isolada tem liquidez suficiente e a fatura oferece basic_mpp, o BOLT 4 permite que uma carteira divida o valor entre vários HTLCs que compartilham um hash de pagamento, e cada parte deve carregar o segredo e deveria concordar com o total_msat. O receptor não liquida nada até que o total chegue, e deveria esperar pelo menos 60 segundos após o primeiro HTLC antes de rejeitar o conjunto com um mpp_timeout. Assim, um saque Lightning maior, que fica pendente por um minuto e depois retorna, vindo de um aplicativo que prioriza a Lightning, como o Strike, pode ser um conjunto de HTLC incompleto expirando, e não dinheiro perdido. Se é a sua própria carteira que monta essas partes, como a Phoenix faz ao executar um nó Lightning real no celular, ou se uma plataforma que guarda seus fundos faz isso em um servidor que você não controla, o segredo as marca como um único pagamento.

Segredo de pagamento vs hash de pagamento

O hash de pagamento e o segredo de pagamento são ambos campos de 256 bits em uma fatura BOLT 11, e a diferença está em quem pode vê-los. Cada salto conhece o hash, porque cada um prende a ele o HTLC que encaminha, enquanto ninguém além do nó final conhece o segredo, que viaja na camada mais interna da cebola. O hash responde se o pagamento foi liquidado, e a preimagem que o abre é o recibo. O segredo responde se o pagador está trabalhando a partir da fatura que você escreveu, o que um hash não pode fazer, por ser visível a todos na rota. Na codificação eles parecem gêmeos: etiqueta p e etiqueta s, ambas com 52 caracteres, ambas rejeitadas em qualquer outro comprimento.

Não confundir com

Perguntas frequentes

Alguma vez preciso digitar um segredo de pagamento?

Não, sua carteira cuida disso de ponta a ponta. A carteira receptora gera o valor de 32 bytes e o escreve na fatura, e a carteira pagadora o copia para a carga útil da cebola do último salto sem nunca mostrá-lo a você. Se você está colando uma string lnbc, o segredo já está dentro dela.

O segredo de pagamento é a mesma coisa que a preimagem?

Não. A preimagem é o segredo do receptor que destranca o hash de pagamento e se torna sua prova de pagamento, enquanto o segredo de pagamento percorre o caminho contrário, da fatura para o receptor, mostrando que o pagador está trabalhando a partir daquela fatura. Ambos têm 32 bytes, e é aí que a confusão geralmente começa.

Por que meu pagamento Lightning falhou com incorrect_or_unknown_payment_details?

Porque o nó final encontrou algo errado e não vai dizer o quê. Nos termos do BOLT 4, esse único erro, PERM|15, abrange um hash de pagamento desconhecido, um segredo de pagamento ausente ou que não confere, um valor abaixo do que a fatura pedia e uma expiração CLTV próxima demais da ponta da cadeia. A vagueza é proposital: um erro específico permitiria que alguém testasse suposições contra seu nó.

Leia a seguir

Termos relacionados

Mais em Lightning e camada 2

Ler esta página em inglês