Glossário / Lightning e camada 2
Transação de compromisso
- O que é uma transação de compromisso?
- Uma transação de compromisso é a transação de bitcoin assinada e não transmitida que cada lado de um canal Lightning guarda, gastando a saída de depósito do canal conforme a divisão atual do saldo.
Cada pagamento Lightning substitui as transações de compromisso dos dois lados por um novo par, e o par antigo é revogado em vez de excluído. O BOLT 3 fixa o peso esperado do compromisso de um canal com âncoras em 1.124 unidades de peso mais 172 por cada pagamento ainda em trânsito. Manter uma significa manter uma saída que você pode tomar sozinho, com uma taxa que seu par aceitou semanas antes.
Como funciona
Uma transação de compromisso tem exatamente uma entrada, a saída de depósito 2 de 2 do canal, e suas saídas são a divisão atual desse dinheiro.
Existem duas delas a qualquer momento, uma por par, e de propósito não são a mesma transação. Cada cópia atrasa o pagamento ao seu próprio detentor atrás de um bloqueio OP_CHECKSEQUENCEVERIFY de to_self_delay blocos enquanto paga o outro lado mais cedo, de modo que quem a transmite é quem espera. Com option_anchors nem mesmo o outro lado é imediato: a saída to_remote carrega um bloqueio CSV de um bloco, acrescentado para que nenhum par possa travar o compromisso anexando transações filhas baratas a ela.
A transação esconde seu próprio contador. O BOLT 3 define o campo de versão como 2, pega o número de compromisso de 48 bits, aplica XOR com os 48 bits inferiores do SHA256 sobre os dois valores payment_basepoint de open_channel e accept_channel, e então divide o resultado entre dois campos: os 24 bits superiores vão para a sequência da entrada atrás do byte 0x80, os 24 inferiores para o locktime atrás de 0x20. Ambos os pares o recalculam em um instante. Qualquer outra pessoa que observe a cadeia vê dois números de aparência arbitrária e não consegue contar quantos pagamentos o canal transportou.
Quem depositou os fundos no canal paga pela saída. Antes de qualquer saída ser disposta, a taxa base é subtraída do lado que depositou os fundos no canal e, com option_anchors, duas saídas âncora fixas de 330 satoshis cada uma saem desse mesmo lado também. As saídas são então ordenadas por valor, da menor para a maior, depois por scriptPubKey comparado byte a byte, depois por cltv_expiry nas saídas HTLC, para que ambos os pares cheguem a uma transação idêntica byte a byte sem nunca enviá-la um ao outro.
O que é pequeno demais para valer a pena registrar não é registrado. O BOLT 3 chama essas de saídas recortadas: um HTLC cujo valor, menos a taxa que sua própria transação de segunda etapa custaria, fica abaixo do dust_limit_satoshis do proprietário não recebe saída alguma, e o dinheiro se torna taxa de minerador em vez do saldo de alguém. Os limites que o BOLT 3 lista são os do Bitcoin Core: 330 satoshis para "pay to witness script hash", 294 para "pay to witness pubkey hash", 240 para "pay to anchor". Esses são um piso e não a configuração em si, e o BOLT 3 orienta os canais com âncoras a ficarem acima dele, porque nesses canais a transação de segunda etapa não paga taxa e por isso deixa de contribuir de todo para o recorte.
A forma mais recente da transação descarta a taxa embutida. Onde zero_fee_commitments se aplica, o campo de versão passa a 3, feerate_per_kw é fixado em 0, e uma saída shared_anchor que carrega o script pay to anchor OP_1 <0x4e73> é acrescentada nesse limite de 240 satoshis. Qualquer um pode gastá-la, então o compromisso chega a um bloco por child pays for parent ao preço que o mercado de taxas cobrar no dia, e não ao que custava quando o par foi assinado.
Por que isso importa quando você compra bitcoin
A transação de compromisso é onde um saldo Lightning deixa de ser um número na tela e se torna satoshis menos taxas, e duas de suas regras custam dinheiro de verdade.
A primeira é o recorte. Valores pequenos dentro de um canal não são arredondados, são excluídos, e o próprio exemplo prático da especificação entrega 1.800 satoshis de pagamentos em trânsito ao minerador porque cada um ficou abaixo do limite de poeira mais o custo de sua segunda etapa. Isso estabelece um piso abaixo do qual não vale a pena levar nada para a Lightning. A Phoenix, a carteira da ACINQ em nossas análises, cobra 1.000 satoshis para criar um canal e afirma que se recuperar de um fechamento forçado leva aproximadamente 720 blocos, cerca de cinco dias. Um canal aberto com um depósito de alguns milhares de satoshis é uma conta que nunca fecha.
A segunda é que a taxa dentro de uma transação de compromisso foi escolhida quando ela foi assinada. O saldo de quem depositou os fundos foi debitado pelo feerate_per_kw daquele dia e, se a mempool se moveu desde então, a transação que está na sua carteira pode não confirmar pelo preço que carrega. As âncoras existem exatamente por isso, e zero_fee_commitments existe para transferir a decisão para o momento da transmissão.
Nenhuma das duas regras chega até você se outra pessoa detém o canal. A Strike, avaliada com 4,6 em nossas análises de corretoras, é nativa de Lightning e custodial enquanto seu saldo fica no aplicativo, e a Coinbase precifica seus saques via Lightning abaixo de um envio on-chain para valores pequenos e acima dele para valores grandes. Aquilo de que você abre mão está documentado nas análises de carteiras: a Wallet of Satoshi, avaliada com 2,7 e sinalizada como cautela, deixou de atender clientes dos Estados Unidos em 23 de novembro de 2023, e mais tarde retirou seu serviço Lightning custodial em toda a União Europeia à medida que os períodos de transição do MiCA se encerravam. Não existia nenhuma transação de compromisso sua à qual recorrer.
Passo a passo pelo exemplo de taxa do BOLT 3
O BOLT 3 publica um único cálculo de taxa resolvido, e acompanhá-lo do início ao fim mostra para onde o dinheiro de um canal realmente vai.
A configuração é um feerate_per_kw de 5.000, um dust_limit_satoshis de 546 e quatro pagamentos em trânsito: HTLCs oferecidos de 5.000 e 1.000 satoshis, HTLCs recebidos de 7.000 e 800 satoshis. Com essa taxa por kiloweight, uma transação HTLC timeout custa 3.315 satoshis e uma transação HTLC success custa 3.515.
O peso começa em 724, o número de um canal sem option_anchors, que é o formato que todo este exemplo pressupõe. O HTLC oferecido de 5.000 satoshis supera 546 mais 3.315, então recebe uma saída e o peso sobe para 896. O HTLC oferecido de 1.000 satoshis não supera e é recortado. O HTLC recebido de 7.000 satoshis supera 546 mais 3.515, então recebe uma saída e o peso sobe para 1.068. O HTLC recebido de 800 satoshis é recortado.
A taxa base é 5.000 multiplicado por 1.068 e dividido por 1.000, ou 5.340 satoshis, retirados apenas da saída de quem depositou os fundos. A taxa que um minerador realmente recebe é 7.140 satoshis, porque os dois HTLCs recortados são somados por cima. De 13.800 satoshis em trânsito, 1.800 deixam de existir como saldo de qualquer pessoa, e o total pode subir ainda mais se a própria saída de quem depositou os fundos ficar abaixo do limite de poeira depois que a taxa for retirada dela.
Transação de compromisso vs transação de penalidade
Uma transação de compromisso paga uma divisão que ambos os pares assinaram; uma transação de penalidade toma todo o canal de um par que publicou uma divisão que já havia revogado.
As duas gastam coisas diferentes. Uma transação de compromisso gasta a saída de financiamento. Uma transação de penalidade gasta as saídas de uma transação de compromisso que se revelou obsoleta, usando a chave de revogação que seu detentor entregou quando aquele estado foi substituído. O script to_local escreve os dois futuros em uma única saída: um ramo precisa da chave atrasada após to_self_delay blocos, o outro precisa de uma assinatura de revogação e funciona sem atraso algum.
Transação de compromisso vs fechamento forçado
Uma transação de compromisso é um objeto que você detém; um fechamento forçado é o evento de alguém transmitir uma.
A distinção importa porque você não precisa ser quem age. Se seu par faz um fechamento forçado sobre um estado atual, a cópia dele paga o seu lado sem nenhuma ação sua, sujeita apenas ao bloqueio CSV de um bloco que os canais com âncoras colocam na saída to_remote. Sua própria cópia é a alternativa para um par que ficou em silêncio, e é a cópia que faz você esperar todo o atraso. Manter uma transação de compromisso é normal, contínuo e gratuito; transmitir uma é um evento que você preferiria nunca ter.