Glossário / Lightning e camada 2
Fechamento cooperativo
- O que é um fechamento cooperativo?
- Um fechamento cooperativo encerra um canal Lightning por acordo: os dois pares assinam uma única transação que paga a cada lado seu saldo final, sem atraso e sem risco de penalidade.
Um fechamento cooperativo é uma negociação curta sobre duas coisas: onde cada lado quer receber e quem paga a taxa de mineração. O caminho moderno usa três tipos de mensagem: shutdown, do tipo 38, depois closing_complete, do tipo 40, e closing_sig, do tipo 41, sob as regras da opção option_simple_close. Seu saldo chega como uma saída gastável comum assim que a transação de fechamento é confirmada, sem período de espera.
Como funciona
Um fechamento cooperativo ocorre em duas etapas, e a primeira é uma promessa de parar.
Qualquer um dos pares abre o processo enviando shutdown, do tipo 38, indicando o scriptpubkey para o qual quer receber seu pagamento. O remetente não pode adicionar nenhum HTLC novo depois disso, e o outro lado deve responder com seu próprio shutdown quando não restar nada pendente. O BOLT 2 restringe esse script às formas que a rede retransmite: um push de 20 ou 32 bytes depois de OP_0 ou, uma vez negociada a opção option_shutdown_anysegwit, de OP_1 a OP_16 seguido de um push de 2 a 40 bytes.
A segunda etapa começa quando não resta nenhum HTLC em nenhuma das duas transações de compromisso. Sob a option_simple_close, bits de funcionalidade 60 e 61 no BOLT 9, cada par monta sua própria versão da transação de fechamento, retira toda a taxa do próprio saldo e envia closing_complete, do tipo 40. O outro lado assina o que recebeu e devolve closing_sig, do tipo 41. Como quem propõe paga, a discussão sobre o valor da taxa não tem para onde ir, o que o BOLT 2 apresenta como o objetivo do projeto. Enviar closing_complete de novo com uma taxa maior é como o fechamento é acelerado, e o BOLT 3 dá a essa transação uma sequência de entrada de 0xFFFFFFFD, que a especificação chama de RBF da tentativa anterior.
O caminho legado, closing_signed, do tipo 39, ainda consta na especificação. Nele, quem depositou os fundos indica uma taxa mais um fee_range de min_fee_satoshis e max_fee_satoshis, e a outra parte escolhe um número dentro dele, o que se resolve em duas mensagens se ela escolher o mesmo valor e em três caso contrário. Sem faixa, cada resposta tem de ficar estritamente entre as duas últimas ofertas, então os lados convergem um satoshi de cada vez.
Onde você vê isso
Um fechamento cooperativo é o que sua carteira faz quando você aperta fechar e o par responde: uma transação, sem saldo pendente atrás dela.
O BOLT 2 traz seu próprio passo a passo. A e B trocam scripts de shutdown, os HTLCs pendentes terminam, e então A se oferece para pagar 1.000 satoshis de taxa enquanto B oferece 750 de forma independente. Cada um assina a versão do outro. Mais tarde A muda seu script de pagamento e reenvia com 1.100 satoshis, e B eleva sua própria tentativa para 850.
É nos canais pequenos que as regras pesam. O lado com menos dinheiro pode dispensar sua própria saída, e deve dispensá-la se o valor for considerado poeira. Se as taxas tornarem as duas saídas poeira, quem fecha pode enviar um script OP_RETURN no lugar de um endereço, e o valor de sua saída é definido como zero, de modo que os fundos desse lado vão para as taxas e a transação ainda é retransmitida. A especificação adverte que uma saída de menos de 546 satoshis paga a um script que não é segwit pode nunca chegar a um minerador, e que esse canal tem de ser fechado à força.
Fechamento cooperativo vs fechamento forçado
Um fechamento cooperativo e um fechamento forçado encerram um canal com uma transação on-chain, e a diferença é quem espera.
Em um fechamento cooperativo as duas saídas são pagamentos simples, então cada lado pode gastar na primeira confirmação e nenhum ramo de penalidade entra em jogo. Um fechamento forçado publica uma transação de compromisso, deixando seu próprio saldo atrás de um atraso em blocos acordado quando o canal foi aberto e dando a cada pagamento em trânsito sua própria transação de acompanhamento. Nossa análise da Phoenix estima essa espera em cerca de 720 blocos, aproximadamente cinco dias, antes que os fundos de um fechamento forçado possam ser recuperados.
Um fechamento cooperativo precisa que o outro nó esteja ativo e disposto a responder a um shutdown. É por isso que o fechamento forçado existe, e por isso um par que você não consegue alcançar é um par cuja taxa de fechamento você não controla.