Glossário / Lightning e camada 2
Transação de penalização
- O que é uma transação de penalização?
- Uma transação de penalização é a varredura on-chain que leva todas as saídas de um canal Lightning quando seu par publica um compromisso revogado, assinada com a chave de revogação que você já possui.
Os canais Lightning são policiados pelos seus dois participantes, e a transação de penalização é a forma de fazer cumprir as regras. O BOLT 5 dá a essa varredura uma testemunha de 160 bytes para a saída do saldo principal, e diz para dividi-la por saída se ela não tiver sido confirmada 18 blocos antes de expirar o timelock do trapaceiro. Se você mantém bitcoins em canais, essa transação é o que fica entre você e um par que rebobina o seu saldo.
Como funciona
Uma transação de penalização gasta saídas cujo dono já lhe entregou o direito de tomá-las.
Toda vez que o saldo de um canal muda, cada lado entrega o segredo por trás do estado que está substituindo. Guarde esse segredo e você pode derivar a chave privada de revogação da antiga transação de compromisso do seu par, que é a chave que destranca o lado dele nessa transação. O BOLT 5 resume a consequência em uma linha: quando um nó descobre uma transação de compromisso para a qual tem uma chave privada de revogação, a saída da transação que depositou os fundos do canal fica resolvida. Não sobra nada a negociar.
O que você varre depende do que o compromisso obsoleto carregava. A especificação manda você resolver a saída principal do trapaceiro com a chave de revogação, resolver cada pagamento que ele ofereceu de uma de três formas (gastar o compromisso com a chave de revogação, gastá-lo com a preimagem do pagamento se você a conhece, ou gastar a transação HTLC-timeout dele depois que ele a publicar) e resolver as transações HTLC-success e HTLC-timeout dele também com a chave de revogação. Ela também diz para você retirar a preimagem da testemunha da entrada enquanto está nisso, porque um pagamento que você estava prestes a perder ainda pode ser resgatado do salto anterior a você.
Três formatos de testemunha cobrem tudo isso, e o BOLT 5 dá o tamanho de cada um: 160 bytes para a saída do saldo principal, 243 bytes para um pagamento oferecido, 249 bytes para um aceito. Some o peso de 164 da própria entrada e cada saída resgatada custa 324, 407 ou 413. O restante da transação são 53 bytes de dados que não são de testemunha mais um cabeçalho de testemunha de 2 bytes. Você também pode incorporar a sua própria saída principal do mesmo compromisso, o que acrescenta 272 e serve principalmente para reduzir a taxa que você paga.
Duas coisas que uma transação de penalização não é. Ela não é automática: o bitcoin não pune ninguém, e a varredura só acontece se um software que você executa, ou que você contratou, vê a transação obsoleta ser confirmada e reage antes de o timelock do trapaceiro expirar. Ela também não é gratuita. A varredura paga a taxa vigente como qualquer outra transação, então um canal que contém menos do que custa esvaziá-lo não vale a pena defender, permitam o que permitirem as regras.
Por que isso importa quando você compra bitcoin
Uma transação de penalização só defende você em uma carteira na qual você guarda transações de compromisso próprias, o que exclui a maioria dos aplicativos Lightning fáceis.
As 41 análises de carteiras neste site se dividem exatamente nessa linha. A Phoenix executa um nó Lightning de autocustódia de verdade no celular, então o mecanismo de punição pertence a você, e também o dever de vigiar: a rota de recuperação da ACINQ faz você forçar o fechamento e esperar aproximadamente 720 blocos, cerca de cinco dias, antes que os fundos do canal sejam seus on-chain. A BlueWallet é somente bitcoin e incomumente capaz on-chain, mas seu lado Lightning é uma conta em um servidor LNDHub, e a menos que esse servidor seja seu, o operador pode mover esses bitcoins, então não existe nenhuma transação de compromisso sua para punir ninguém. A Wallet of Satoshi também é custodial no modo padrão, o que é parte do motivo de ela ter uma classificação de 2,7 aqui em vez de estar em uma recomendação.
Leia isso como uma troca, não como um veredito. A Lightning custodial elimina os pares trapaceiros da sua lista de ameaças e os substitui por uma única empresa que pode congelar ou retirar o serviço. A Lightning de autocustódia entrega a você a transação de penalização e a obrigação de estar acordado. O erro que pega as pessoas dos dois lados é reutilizar um backup antigo da frase de recuperação: doze palavras restauram bitcoins on-chain e não sabem nada sobre qual estado do canal é o atual, então o compromisso que você publica é obsoleto e a transação de penalização que se segue mira você.
Um fechamento revogado em um canal da Phoenix
Imagine um canal da Phoenix com três pagamentos ainda em trânsito quando o nó do outro lado publica um compromisso da semana passada.
Seu software detecta o txid, deriva a chave de revogação e monta uma única varredura. O peso dela é 324 pela saída principal do trapaceiro, 413 por cada uma das três saídas de pagamentos aceitos, 272 por incorporar a sua própria saída principal, quatro vezes 53 bytes de corpo da transação e um cabeçalho de 2 bytes: 2.049 unidades de peso, ou cerca de 512 bytes virtuais. O dinheiro deles fica atrás do timelock relativo que os dois lados acordaram quando o canal foi aberto, e atrasos desse tipo correm em dias, não em minutos: recuperar-se de um fechamento forçado na Phoenix leva aproximadamente 720 blocos, cerca de cinco dias. O seu é gastável no momento em que um minerador aceita a sua transação.
O BOLT 5 também calcula o teto. Contra um peso padrão máximo de 400.000 e a maior entrada em 413, uma única transação de penalização alcança 966 saídas de pagamento, o dobro dos 483 pagamentos pendentes por lado que o protocolo entre pares já permite, então até um canal completamente cheio pode ser esvaziado de uma só vez.
Depois vem o motivo para não fazer isso. Onde o canal usa saídas âncora, as próprias transações de pagamento do trapaceiro são assinadas com SIGHASH_SINGLE e SIGHASH_ANYONECANPAY, então ele pode anexar entradas próprias e fixar a sua varredura combinada na mempool por tempo suficiente para o timelock da saída principal dele expirar. Se a confirmação não tiver chegado quando faltar para essa saída menos que o atraso de segurança para expirar, uma janela que o BOLT 5 deixa a critério de cada nó embora recomende 18 blocos, você é instruído a dividir o trabalho: uma transação de penalização por saída revogada, com a taxa aumentada até que cada uma seja confirmada. Sob compromissos sem taxa, cada uma delas também deve ficar dentro do limite de 10.000 bytes virtuais que as transações de versão 3 carregam, ou pode nunca chegar aos mineradores.
Transação de penalização vs fechamento forçado
Um fechamento forçado é qualquer saída unilateral de um canal, enquanto uma transação de penalização é a resposta a uma saída desonesta.
A maioria dos fechamentos forçados é sem graça. Um par ficou offline, um prazo de pagamento se aproximou, o nó de alguém publicou o estado atual, e os dois lados recebem o saldo que lhes era devido quando o atraso passa. Uma transação de penalização existe apenas no caso restrito em que o compromisso publicado já havia sido revogado, e ela toma o canal inteiro em vez de uma parte. Toda transação de penalização segue um fechamento forçado, e quase nenhum fechamento forçado produz uma.
Transação de penalização vs watchtower
Uma transação de penalização é uma transação de bitcoin assinada, enquanto uma watchtower é uma máquina que fica esperando para transmitir uma em seu nome.
A watchtower guarda um prefixo curto do txid revogado e um bloco de dados que ela não consegue descriptografar até que essa transação apareça em um bloco. A varredura lá dentro foi construída e assinada pelo seu próprio nó, com pagamento para um endereço escolhido antes de qualquer coisa dar errado, então contratar uma não custa nenhuma chave sua. Confundir as duas produz a preocupação errada. Não executar nenhuma watchtower não enfraquece em nada a transação de penalização; significa que ninguém está acordado para enviá-la enquanto o seu notebook está fechado.