As carteiras on-chain alcançam um mapeamento aproximadamente 1-1 de transações para transações: para cada transação econômica que um usuário realiza, aproximadamente uma transação em blockchain é necessária. Agregações, coinjoin, pagamentos de corte, etc. mudam um pouco essa afirmação. Mas é aproximadamente correto.
O Lightning alcançou um mapeamento de muitos para um de transações para transações: a magia do Lightning é que um número efetivamente infinito de transações econômicas pode acontecer em um único canal Lightning, que por sua vez está ligado a uma única saída de transação não gasta (UTXO). Essencialmente, pegamos a dimensão do 'tempo' - transações - e alcançamos uma escalabilidade significativa ao colapsar essa dimensão.
Mas criar até mesmo um único UTXO por usuário, talvez, não seja bom o suficiente. Por isso, existem muitas propostas por aí para alcançar ainda maior escalabilidade, permitindo que vários usuários compartilhem um único UTXO de forma auto-soberana. Novamente, colapsando outra dimensão de escalabilidade - os usuários - em um único UTXO.
Nosso objetivo aqui é fazer uma visão geral de todas essas propostas, descobrir quais padrões técnicos elas compartilham, descobrir que tipos de novos opcodes e outras atualizações de garfo suave elas precisam para funcionar e criar uma tabela de comparação de como todas as partes se encaixam. No caminho, também definiremos o que é um protocolo L2, que tipo de escalabilidade o Lightning já é capaz e entenderemos que melhorias precisamos fazer nos mempools para alcançar tudo isso.
Agradecimentos vão para Fulgur Venturespor patrocinar esta pesquisa. Eles não tiveram controle editorial sobre o conteúdo desta postagem e não o revisaram antes da publicação.
Obrigado também vai paraDaniela Brozzoni, Sarah Cox, e outros para revisão pré-publicação.
Dito isso, a retirada unilateral é sempre nosso objetivo de design principal.2
Com esta definição, coisas como o Lightning são considerados sistemas L2. No entanto, sistemas como Liquid, Cashu e Fedimint não são L2, porque outra parte ou outras partes têm controle sobre seus fundos. Esquemas de validação do lado do cliente como RGB também não são L2s nesta definição, porque não são capazes de transacionar BTC de forma confiável. Finalmente, @RubenSomsen/statechains-non-custodial-off-chain-bitcoin-transfer-1ae4845a4a39">Statechains não consegue passar no teste, porque a entidade Statechain pode roubar fundos se não seguir o protocolo.
No script do Bitcoin, os convênios são mecanismos pelos quais a maneira como um txout pode ser gasto é restrita antecipadamente, de modo que a forma das transações usadas para gastar esse txout seja pré-definida ou de outra forma restrita de uma forma que não seja puramente limitada a assinaturas. Sistemas L2 que compartilham UTXOs entre várias partes precisam de convênios porque precisam de maneiras de restringir como o UTXO pode ser gasto para implementar as regras e incentivos do protocolo L2.

Estima-se que cerca de metade da população global possui um smartphone, 4,3 bilhões de pessoas. Portanto, podemos realmente embarcar uma porcentagem significativa de toda a população que provavelmente será capaz de utilizar um canal Lightning por ano.
No entanto, os canais não duram para sempre. De vez em quando, os usuários desejarão trocar de carteiras, aumentar ou diminuir a capacidade do canal, etc. O método mais eficiente para alterar a capacidade de um canal é por meio deemenda, implementado principalmente emCarteira Phoenix.
Assim como a abertura do canal, a emenda também pode ser feita de forma amortizada para melhorar a eficiência, com várias operações de emenda compartilhando uma única transação para reduzir o número de entradas e saídas necessárias para adicionar e remover fundos5. Assim, o espaço de bloco delta necessário por splice de usuários, assumindo o uso de musig, é a saída taproot 43vB mais o
57.5vB chave de caminho de gasto taproot, totalizando 100.5vB. Se assumirmos novamente uma utilização de espaço de bloco de 90%, obtemos:

Finalmente, observe como a troca de canais Lightning entre carteiras pode ser feita em uma única transação, confiando na próxima carteira para assinar uma transação de compromisso após os fundos terem sido enviados para o endereço de compromisso, ou com suporte próximo de encerramento cooperativo-para-nova-canal em ambas as implementações de carteira.
Certamente, existem casos de uso concorrentes para o Bitcoin além dos canais Lightning, e como isso se traduzirá em taxas é difícil de saber. Mas esses números nos dão uma ideia aproximada que sugere que, com a tecnologia atual, é pelo menos tecnicamente possível suportar centenas de milhões de usuários autônomos do Lightning.
No padrão de design Virtual UTXO (V-UTXO), do qual Ark é o exemplo mais proeminente, os V-UTXOs são criados por meio de convenants ou acordo multi-parte, por meio da criação de transações que poderiam ser mineradas para retirar unilateralmente os fundos V-UTXO, colocando-os na cadeia, mas não estão no 'caminho feliz'. Nesse aspecto, os V-UTXOs são semelhantes aos canais. Mas, ao contrário dos canais, os esquemas V-UTXO realizam transações gastando os próprios V-UTXOs, em (conceitualmente) um único6transação pré-assinada.
O padrão de design do “caminho feliz” é o uso de um caminho de script de “todas as partes concordam”, como um N-of-N multisig; o taproot é projetado especificamente para esse conceito, permitindo que o caminho da chave seja um N-of-N multisig via musig. Supondo que todas as partes concordem, o caminho feliz permite que as moedas sejam gastas de forma eficiente (e privada).
Curiosamente, uma vez que as UTXOs virtuais são “reais” em muitos sentidos, é bastante fácil construir canais em cima das UTXOs virtuais simplesmente criando UTXOs virtuais que, se minerados, levariam à criação das UTXOs necessárias para os canais. Nesse sentido, os esquemas de UTXO virtuais são um
camada ligeiramente inferior às canais.
Como discutido acima, a característica chave do Lightning é o seu limite de escalabilidade para o usuário final, devido à necessidade de ter pelo menos uma UTXO por usuário. Dito isso, para o elemento de roteamento "core" do Lightning - os nós públicos do Lightning que roteiam a grande maioria das transações - esses limites de escalabilidade não são muito preocupantes, pois o Lightning funciona muito bem se houver muito mais usuários finais do que nós de roteamento, porque cada canal público usado para o roteamento de pagamento pode facilmente suportar um grande número de transações por segundo. É por isso que muitos sistemas futuros de L2 também esperam participar da rede Lightning. Também vemos isso em como sistemas existentes não-quite-L2 como Cashu dependem muito da rede Lightning para serem realmente úteis: o uso primário do Cashu provavelmente é enviar e receber pagamentos do Lightning.
Como as fábricas de canal estão negociando UTXOs que podem ser minerados, mas não se espera que sejam realmente minerados no caminho feliz, elas são um exemplo muito primitivo de V-UTXOs.
As fábricas de canais por si só não exigem nenhum soft-fork para serem possíveis. No entanto, as fábricas de canais simples descritas acima são provavelmente impraticáveis além de um pequeno número de partes devido à coordenação necessária para realmente alcançar um benefício de escala. Assim, propostas de convênios como OP_Evictou CTV (por meio de árvores txout) tem como objetivo permitir resultados mais refinados em que as partes individuais possam ser forçadas em cadeia, sem forçar todos em cadeia de uma vez.
Enquanto os canais Poon-Dryja incentivam o estado correto a ser publicado on-chain punindo estados incorretos, o LN-Symmetry permite que estados incorretos sejam atualizados com uma transação adicional. Isso tem a vantagem de simplificar os canais do Lightning, eliminando a complexidade das penalidades. No entanto, é provável que isso seja uma desvantagem em cenários não confiáveis, já que as penalidades são indiscutivelmente necessárias para desencorajar a fraude.
LN-Symmetry precisa de um garfo suave para habilitarSIGHASH_ANYPREVOUT, que é necessário para permitir que transações de estado reutilizem outras transações de estado durante as atualizações.
Por si só, o LN-Symmetry não oferece melhorias de dimensionamento nos canais convencionais do Lightning. Mas defensores argumentaramque torna coisas como fábricas de canais mais fáceis de implementar.
Para transacionar V-UTXOs entre as partes, o coordenador Ark co-assina transações que gastam um ou mais V-UTXOs, de modo que as transações só são válidas se um ou mais outros V-UTXOs forem criados em uma rodada diferente. Em combinação com alguns timeouts cuidadosos - consulte a documentação Ark para obter todos os detalhes - essa dependência é o que torna o gasto de V-UTXOs sem confiança: os V-UTXOs não podem ser reivindicados na cadeia, a menos que novos V-UTXOs sejam criados em uma transação de pool diferente. Existem algumas maneiras potenciais de implementar essa dependência. Mas os detalhes exatos não são relevantes para os fins deste artigo.
Observe como isso significa que um determinado ASP terá muitas rodadas ativas diferentes acontecendo ao mesmo tempo. Novas rodadas são frequentemente criadas para permitir a transferência de recursos em rodadas existentes. Mas as rodadas existentes se sobrepõem às novas rodadas, pois geralmente expiram em algum momento após novas rodadas, e novas rodadas de pool são criadas.
Especificamente, o custo é incorrido quando o V-UTXO é gasto. Embora o V-UTXO não seja gasto, ele representa um UTXO potencial muito real que poderia ser colocado em cadeia para retirar unilateralmente os fundos; o usuário é o proprietário desses fundos. No entanto, para gastar o V-UTXO, o ASP deve criar um novo pool txout, usando fundos que o ASP obtém em outro lugar, enquanto os fundos no V-UTXO gasto não estão disponíveis para o ASP até que o tempo de expiração seja atingido.
Assim, gastar um V-UTXO requer um empréstimo de curto prazo, emprestando fundos para cobrir o intervalo de tempo entre agora e quando a rodada expirar. Isso significa que o custo de liquidez para gastar um V-UTXO realmente diminui à medida que o V-UTXO envelhece e o tempo de expiração se aproxima, eventualmente - teoricamente - chegando a zero quando a rodada finalmente expirar.
Por fim, lembre-se de que o custo de gastar um V-UTXO está relacionado ao tamanho total do V-UTXO gasto. Não ao valor pago ao destinatário. Isso significa que as carteiras destinadas a transações diretas de V-UTXOs (em oposição à gestão de um único V-UTXO para fins, por exemplo, de um canal baseado em V-UTXO Lighting), têm que fazer compensações na forma como dividem os fundos em V-UTXOs. Um único V-UTXO minimiza o custo de saque unilateral, ao mesmo tempo que maximiza as taxas de transação baseadas em liquidez; dividir os fundos em muitos V-UTXOs faz o oposto. Isso é completamente diferente da economia do Bitcoin on-chain ou das transações do Lightning.
Qual é esse custo de liquidez? No momento em que escrevo, a carteira Lightning Phoenix cobra uma taxa de 1% para reservar liquidez do canal por 1 ano; na pior das hipóteses, Phoenix teria que amarrar seus fundos por 1 ano. No entanto, isso pressupõe que a liquidez não seja usada. É bem possível que o custo de capital para Phoenix seja de fato maior, e eles estão assumindo que o cliente médio usa sua liquidez recebida em menos de um ano. Phoenix também ganha dinheiro com taxas de transação, potencialmente subsidiando a liquidez do canal. Finalmente, Phoenix pode não ser rentável!
A taxa de Letra do Tesouro dos EUA nos dá outra estimativa. No momento da redação, a taxa de Letra do Tesouro de 3 meses está em torno de 5% ao ano. Como há um argumento de que essa taxa está inflada devido ao dólar americano ser inflacionário, vamos supor que o custo de liquidez para fundos denominados em BTC seja de 3% ao ano para nossa análise.
Se o intervalo da rodada for de 4 semanas, isso significa que uma transação começaria com um custo de liquidez de
eventualmente declinando para zero. Supondo que o usuário tente mover seus fundos para uma nova rodada duas semanas antes do vencimento da rodada, o usuário está pagando cerca de 1,5% ao ano em custos de liquidez para alcançar a auto-custódia de seus fundos. Por outro lado, se o usuário esperar até o último momento.8 , o custo poderia ser quase zero, com o risco de perder o tempo de expiração.Os usuários podem não ver isso como um custo trivial. E este custo pressupõe que os custos fixos de cada rodada tenham se tornado insignificantes através da amortização das taxas de transação e outros custos ao longo de um grande número de participantes.
E se os custos fixos não forem tão insignificantes? Suponha que o ASP tenha 1000 usuários e as transações de pool sejam criadas em média uma vez por hora. Ao longo de um período de 4 semanas, isso representa 672 transações na cadeia. O que significa que, apenas para manter seus fundos, os usuários do ASP coletivamente têm que pagar por quase a mesma quantidade de transações que os usuários! Provavelmente seria mais barato para eles todos abrirem seus próprios canais Lightning, mesmo que o ASP exija que eles esperem uma hora inteira para uma confirmação.
Porque as rodadas expiram, esse problema é contínuo, ainda pior do que o enfrentado pelos canais Lightning: pelo menos um canal Lightning pode continuar a ser útil indefinidamente, permitindo que um canal seja aberto agora e amortizado gradualmente ao longo de muitos meses. Em segundo lugar, porque as rodadas expiram, há menos flexibilidade quanto a quando criar as novas txouts que respaldam essas rodadas: se as taxas forem altas por uma semana ou duas, os usuários cujas txouts de pool estão expirando não têm escolha a não ser (coletivamente) pagar essas altas taxas para manter a custódia sobre seus fundos. Com os canais Lightning, há muito mais flexibilidade quanto a quando realmente abrir um canal.
Enquanto os autores do Ark inicialmente imaginavam um cenário muito otimista onde novas rodadas a cada poucos segundos, a inicial inicialização provavelmente terá que acontecer com casos de uso que podem esperar várias horas para uma transação Ark confirmar, se as taxas de transação não forem subsidiadas.
Considere o que acontece com um V-UTXO se o proprietário ficar offline: após o término do round, o ASP precisa recuperar os fundos para obter sua liquidez de volta para os próximos rounds. Se um proprietário de V-UTXO ficar offline, colocar esse V-UTXO on-chain tem custos significativos de transação, pois o ASP agora precisa recuperar fundos em vários níveis da árvore de V-UTXO. O ASP pode recriar os V-UTXOs não gastos em um novo round. Mas isso não é confiável do ponto de vista dos proprietários de V-UTXO, pois eles não podem gastar esses V-UTXOs sem obter dados.9do ASP. O ASP também pode simplesmente registrar V-UTXOs não gastos como saldo custodiado. Ou talvez até mesmo ter uma política de apreensão dos fundos!
Pessoalmente, suspeito que, dada a alta custo de auto-guarda em Ark, muitos usuários escolherão ASPs com uma política de rolar os fundos para uma nova rodada e simplesmente aceitar o potencial de fraude no final de cada rodada. Isso é mais barato do que mover proativamente seus fundos cedo o suficiente para garantir a segurança no caso de, por exemplo, falharem em ligar o telefone a tempo de mover os fundos para uma nova rodada.
Da mesma forma, através de pactos Sufficiently Advanced™, toda a estrutura da árvore txout poderia ser substituída por algum tipo de esquema de retirada contínua, potencialmente oferecendo economia de espaço. Vamos abordar isso em uma seção posterior, já que essa técnica pode ser potencialmente útil para outros esquemas.
A questão da custódia no final da rodada é outro caso em que os convênios Sufficiently Advanced™ poderiam resolver um problema: um convênio, em particular, um convênio de prova ZK, poderia forçar o ASP a recriar todos os V-UTXO's não gastos na próxima rodada, removendo o problema da custódia revertendo para eles no final de uma rodada. Embora provavelmente não seja possível tornar isso sem confiança, pois o usuário provavelmente precisará de alguns dados do ASP para gastar seu V-UTXO na nova rodada, poderia impedir o ASP de obter ganhos financeiros com fraudes contra usuários offline.
Pagamento de Taxa On-Chain em Retirada Unilateral
Similar ao Lightning, a economia de pagamento de taxa on-chain e o valor real de um V-UTXO após as taxas determinam se o uso do Ark atende à nossa definição de um L2 através de saque unilateral, ou fraude que não beneficia a ASP. Vamos discutir os detalhes disso mais adiante quando discutirmos o padrão de design da árvore de txout.
Do ponto de vista do Bitcoin, um esquema de rollup de validade requer um pacto, pois queremos ser capazes de criar UTXO's para o esquema que só podem ser gastos se as regras do esquema forem seguidas. Não se trata necessariamente de um processo descentralizado. Muitos esquemas de acumulação de validade são, na verdade, totalmente centralizados; A prova de rollup está provando que o sequenciador centralizado de transações seguiu as regras para uma determinada sequência de transações.
Quanto a que aliança... A tecnologia Zero-Knowledge Proof ainda é um campo muito novo, com avanços ainda sendo feitos com frequência. Portanto, é altamente improvável que vejamos quaisquer opcodes adicionados ao Bitcoin que validem diretamente quaisquer esquemas específicos à prova de ZK. Em vez disso, é geralmente aceito que esquemas específicos usariam opcodes mais gerais, em particular OP_CAT, para validar provas de ZK por meio de scripts. Por exemplo StarkWare É campanhapara ter o OP_CAT adotado.
Pacotes cumulativos de validade é um tópico potencial tão grande, com tantos projetos de baixa substância/alto hype, que não vamos discuti-lo mais além de apontar quais opcodes potencialmente tornam essa classe de design viável.
Canais Hierárquicos
Canais Hierárquicos10visa tornar a redimensionamento de canal rápido e barato: "Canais hierárquicos fazem pela capacidade do canal o que a LN faz pelo bitcoin". No entanto, eles ainda não excedem fundamentalmente o limite de 1 UTXO por usuário. Eles também não exigem nenhuma alteração no protocolo do Bitcoin de qualquer forma. Portanto, não vamos discuti-los mais. Seus defensores devem simplesmente implementá-los! Eles não precisam da nossa permissão.
No momento, o desenvolvimento do CoinPool parece ter estagnado, com o último compromisso com o site de especificações sendo há dois anos.
O exemplo mais simples de pinning vem do fato de que sem full-RBF, a substituição de transação pode ser desativada. Assim, podemos ter uma transação de baixa taxa de comissão, com a substituição desativada, que não será minerada, mas não pode ser substituída. Essencialmente, 100% do poder de hash resolveu esse problema habilitando o full-RBF e, no momento da escrita deste texto, o full-RBF deve estar habilitado por padrão na próxima versão do Bitcoin Core (após o fork).11 anos de esforço!).
Isso deixa a Regra #3 do BIP-125 fixando, o único problema de fixação restante que é relevante para protocolos L2 de vários participantes e não corrigido no Bitcoin Core. Para referência, a Regra #3 do BIP-125 afirma o seguinte:
Uma transação de substituição é necessária para pagar a taxa absoluta mais alta (não
maior que a soma das taxas pagas por todas as transações que estão sendo substituídas.
Esta regra pode ser explorada através da transmissão de uma grande e baixa taxa de taxa de fixação de transações gastando a(s) saída(s) relevante(s) para o protocolo multipartido (alternativamente, um grupo de transações). Como a transação tem uma taxa baixa, ela não será minerada em tempo hábil, se é que alguma vez. No entanto, como tem uma taxa total alta, substituí-la por uma transação diferente é antieconômica.
Regra nº 3 a fixação é bastante facilmente corrigida através desubstituir por taxa de taxae esta solução funciona em todas as situações. Infelizmente, não está claro se RBFR será adotado pelo Core em um futuro próximo, já que eles gastaram uma quantidade substancial de esforço em uma solução parcial inferior.Transações TRUC/V3.
A RBF é o padrão-ouro para pagamento de taxas porque é a mais eficiente em quase todos os bloqueios11situações: as transações de substituição não precisam de entradas ou saídas extras, em relação ao que seria necessário se a taxa correta tivesse sido adivinhada na primeira tentativa.
A eficiência é importante, porque as ineficiências no pagamento de taxas fazem com que pagamento de taxa fora de banda uma fonte lucrativa de receita para grandes mineradoras; Mineradores menores e descentralizados não podem lucrar com pagamentos de taxas fora da banda devido à impraticabilidade e inutilidade de pagar a um pequeno minerador para obter uma transação confirmada. O pagamento de taxas fora de banda também parece convidar a problemas de AML/KYC: atualmente, a maioria dos sistemas de pagamento de taxas fora de banda realmente disponíveis agora exigem algum tipo de processo AML/KYC para fazer um pagamento de taxa, com a notável exceção do mempool.space acelerador, que, no momento da escrita (agosto de 2024), aceita Lightning sem precisar de uma conta.
Para fazer uso do RBF diretamente em situações com transações pré-assinadas, você precisa pré-assinar variantes de taxas cobrindo toda a gama de taxas potenciais. Embora isso seja bastante viável em muitos casos, pois o número de variantes necessárias geralmente é pequeno12, até agora o protocolo Lightning de produção - e outros protocolos propostos - optaram por usar Child-Pays-For-Parent (CPFP), geralmente por meio de saídas âncora.
A ideia por trás de uma saída de âncora é adicionar uma ou mais saídas a uma transação com um valor mínimo ou zero, com a intenção de pagar taxas via CPFP gastando essas saída(s) em transações secundárias. Isso, é claro, é muito ineficiente quando aplicado a protocolos como o LN, que possuem transações pequenas na cadeia, quaseduplicando o tamanho total de uma transação de compromisso LN usando saída de âncora efêmera. Seria menos preocupante quando aplicados protocolos que utilizam transações maiores, como qualquer coisa que use OP_CAT para implementar convenants.
Um problema menos óbvio com as saídas de âncora é a necessidade de manter UTXOs adicionais para pagar taxas. Em uma aplicação típica de "cliente", isso pode ser um fardo geral significativo, pois sem as saídas de âncora muitas vezes não há necessidade de manter mais de um UTXO. De fato, é provável que algumas carteiras Lightning focadas no consumidor existentes sejam vulneráveis a roubo pelo lado remoto do canal em ambientes de alta taxa devido à incapacidade de pagar taxas.
SIGHASH_ANYONECANPAY pode ser usado para pagamento de taxas em alguns casos, permitindo que entradas adicionais sejam adicionadas às transações assinadas; SIGHASH_SINGLE permite que as saídas também sejam adicionadas. O Lightning usa isso para transações HTLC. No momento, essa prática pode ser vulnerável à fixação de transações se não for tratada com cuidado13, como um atacante poderia adicionar um grande número de entradas e/ou saídas a uma transação para criar um pin de taxa alta/baixa. O RBFR resolve esse problema; a abordagem usada em transações TRUC/V3 não é capaz de resolver esse problema. Esse estilo de pagamento de taxa não é tão eficiente quanto o RBF. Mas pode ser mais eficiente do que saídas âncora.
Finalmente, houve uma variedade de propostas de garfo suave para adicionar um patrocínio de taxasistema para o protocolo Bitcoin. Isso permitiria que as transações declarassem dependências de outras transações, de modo que a transação patrocinadora só pudesse ser minerada se a transação patrocinada também fosse minerada (provavelmente no mesmo bloco). Isso poderia ser muito mais eficiente do que um CPFP tradicional, já que a transação patrocinadora poderia declarar essa dependência usando significativamente menos vbytes do que o tamanho de uma entrada de transação.
O exemplo canônico é contra um Contrato Bloqueado por Tempo e Hashed (HTLC). Embora seja fácil pensar em um HTLC como sendo um contrato para permitir uma transação a ser gasta através da revelação de uma pré-imagem, ou através de um tempo limite. Na realidade, devido às limitações de script do Bitcoin, um HTLC permite que uma transação sempre seja gasta através da revelação de uma pré-imagem e, em seguida, após um tempo limite, adicionalmente através do mecanismo de tempo limite.
A substituição da ciclagem aproveita isso usando a pré-imagem após o tempo limite para substituir a transação que tenta resgatar a saída HLTC por meio do mecanismo de tempo limite sem que a vítima aprenda a pré-imagem. Um ataque de ciclagem de substituição bem-sucedido faz isso tempo suficiente para que o HTLC de um canal diferente expire.
Um desafio principal na exploração lucrativa do ciclo de substituição é que cada rodada de substituição custa dinheiro. Uma implementação do Lightning awareness de prazos gastará taxas mais altas ao tentar gastar a saída HTLC expirada antes do vencimento da próxima saída HTLC, que por sua vez expira. Em segundo lugar, qualquer pessoa pode derrotar o ataque simplesmente rebroadcastando a transação substituída15uma vez que o ciclo de substituição estiver concluído.
Assim como o pinning de transações, a substituição cíclica também é uma exploração econômica em relação aos mineradores. No final de cada ciclo de substituição, existe uma transação que foi removida dos mempools, mas que ainda é totalmente válida e poderia ser minerada se os mineradores ainda a tivessem em seus mempools.
Um soft-fork OP_Expire real provavelmente consistiria em duas características, semelhante ao modo como o OP_CheckLockTimeVerifyeOP_CheckSequenceVerifyos opcodes são divididos em duas partes:
Um desafio muito notável ao implantar e usar OP_Expire são as reorganizações: a comunidade técnica do Bitcoin, começando com Satoshi17tentou garantir que o protocolo de consenso do Bitcoin seja projetado de forma que, após uma reorganização profunda, transações previamente mineradas possam ser mineradas em novos blocos. Esse princípio de design tenta evitar o cenário de pesadelo de um grande número de moedas confirmadas se tornando permanentemente inválidas - e, portanto, as pessoas que dependem dessas moedas perdendo dinheiro - se uma falha de consenso levar a uma grande reorganização.
No caso de uma grande reorganização, as transações que usam a expiração podem se tornar inmináveis devido à sua altura de expiração ser atingida. A OP_Expire proposta, propõe mitiGate esta questão tratando as saídas de transações de expiração de forma semelhante às transações coinbase, também tornando-as impagáveis para ~100 blocos.
Uma barreira significativa para implantar a expiração da transação é chegar a um consenso sobre se essa compensação é aceitável ou mesmo necessária. Os tipos de transações em que OP_Expire seria útil já envolvem tempos de espera relativamente longos em que os fundos do usuário estão congelados. Adicionar ainda mais tempo a esses tempos de espera não é desejável. Além disso, as transações de gastos duplos sempre foram outra maneira de invalidar moedas após uma reorganização: com o aumento do uso de RBF e o uso proposto de saídas de âncora sem chave, a expiração da transação faria uma diferença significativa?
SIGHASH_ANYPREVOUT também é potencialmente útil em casos em que queremos usar variantes de taxa de taxa RBF pré-assinadas em conjunto com transações pré-assinadas, uma vez que o fato de que a assinatura não depende mais de um txid específico evita umexplosão combinatória de variantes fee-rateNo entanto, a proposta atual do BIP-118 não aborda esse caso de uso e pode ser incompatível com ele devido ao fato de que o SIGHASH_ANYPREVOUT também é proposto para comprometer o valor do UTXO.
Uma objeção inicial a SIGHASH_ANYPREVOUT era a ideia de que as carteiras teriam problemas ao usá-las de maneiras inadequadas. O problema é que, uma vez que uma única assinatura SIGHASH_ANYPREVOUT tenha sido publicada, ela pode ser usada para gastar qualquer txout com o script especificado. Assim, se uma segunda saída com o mesmo script é criada acidentalmente, SIGHASH_ANYPREVOUT permite um ataque de repetição trivial para roubar essas moedas. No entanto, como existem tantas outras armas de pé inerentes às carteiras e implementações L2, essa preocupação parece ter desaparecido.
No momento, a comunidade técnica em geral parece razoavelmente positiva sobre a implementação do BIP-118. No entanto, como discutido acima em nossa discussão sobre LN-Symmetry, há um debate sobre se seu principal caso de uso — LN-Symmetry — é realmente uma boa ideia.
Por que covênios recursivos não são possíveis em CTV? Porque as funções de hash: o CTV verifica a transação de gastos em relação a um hash de modelo, e não há nenhuma maneira18de criar um modelo contendo um CTV com um hash de si mesmo.
Dito isso, essa não é necessariamente uma limitação real: você pode facilmente hash uma cadeia de hashes de modelo CTV para uma profundidade de dezenas de milhões de transações em apenas alguns segundos em um computador moderno. Com timelocks de nSequence relativoe o tamanho limitado do bloco realmente chegando ao fim de tal cadeia poderia facilmente levar milhares de anos.
A proposta atual da CTV em BIP-119tem apenas um modo de hash, conhecido como DefaultCheckTemplateVerifyHash, que essencialmente se compromete com todos os aspectos da transação de gasto no hash do modelo. Do ponto de vista prático, isso significa que em muitas circunstâncias o único mecanismo disponível para pagamento de taxas será CPFP. Como mencionado acima, isso é um problema potencial devido a tornar o pagamento de taxas fora de banda uma economia não trivial nos casos em que as transações que usam CTV são pequenas.
É justo dizer que CTV tem o maior suporte entre a comunidade técnica de qualquer proposta de opcode de aliança devido à sua simplicidade relativa e ampla gama de casos de uso.
Embora os autores provavelmente tenham boas razões para sua proposta, cabe a eles explicar essas razões e justificá-las adequadamente. Assim, não discutiremos isso mais.
A concatenação é suficiente para implementar muitos tipos de acordos, incluindo acordos recursivos, fazendo o seguinte:
O fato de que só precisamos montar a transação sem os dados da testemunha é um ponto-chave: o contrato só precisa validar o que a transação faz - suas entradas e saídas - e não os dados da testemunha (se houver) que realmente a tornam válida.
Limites de tamanho de script do módulo, a combinação de OP_CAT e OP_CheckSigFromStack é suficiente para construir muitos tipos de convênios, incluindo convênios recursivos. Em comparação com soluções mais eficientes como CTV, é mais caro. Mas a diferença de custo é menor do que você esperaria!
Grosso modo, usar OP_CAT para fazer isso requer que toda a parte não testemunhal da transação de gastos seja colocada na pilha por meio da testemunha. Para casos de uso típicos de CTV, como árvores txout, a transação de gastos não terá dados de testemunhas. Como o espaço da testemunha é descontado em 75%, isso aumenta nossa taxa de transação efetiva para a transação infantil em apenas 25%. Nada mau!
Um ótimo exemplo é como OP_CAT é alegado ser suficiente para permitir razoavelmente eficiente e seguro Verificação STARK a ser implementada no script do Bitcoin. Uma forte argumentação contra o OP_CAT é que esses casos de uso podem não ser totalmente bons para os usuários do Bitcoin.
A criação de Valor Minerável Centralizador prejudicial é um problema potencial chave, denominado de 'MEV que é mau' (MEVil)por Matt Corallo. Em resumo, MEVil é qualquer circunstância em que grandes mineradores/pools podem extrair valor adicional ao empregar estratégias sofisticadas de mineração de transações - além de simplesmente maximizar as taxas totais - que são impraticáveis para os menores mineradores/pools adotarem. A complexidade potencial de instrumentos financeiros que poderiam ser criados com OP_CAT torna muito difícil descartar o MEVil. O MEVil significativo já apareceu no Bitcoin a partir de protocolos de leilão de tokens; felizmente, esse caso específico foi derrotado por meio da adoção de full-RBF.
Além do potencial do MEVil, existem muitos outros casos de uso OP_CAT concretos que são potencialmente prejudiciais. Por exemplo, a proposta de Drivechains foi revisado aqui, e é amplamente considerado prejudicial ao Bitcoin. É acredita-se ser possívelpara implementar o Drivechain com OP_CAT. Outro exemplo são as propostas de token, como Ativos Taproot. Embora seja impossível, em geral, impedi-los de serem implementados comvalidação do lado do cliente, existem propostas para implementá-las com OP_CAT de maneiras que são potencialmente muito mais atraentes para os usuários finais, enquanto também usam muito mais espaço em bloco, o que poderia potencialmente superar as transações de Bitcoin “legítimas”. Esses casos de uso também podem levantar questões legais devido à frequência com que os protocolos de token são usados para fraudes financeiras.
Uma decisão de design importante é se expor ou não os bytes do estado intermediário real na pilha em algum tipo de forma canônica, ou representá-los em algum novo tipo de item de pilha opaco cujo valor real dos bytes não pode ser manipulado diretamente. SHA256 é especificado para um vetor de inicialização particular e fixo, e parece ser desconhecido se as propriedades criptográficas do SHA256 são verdadeiras se estados intermediários/vetores de inicialização arbitrários forem permitidos.
Claro, uma vez que o hash incremental pode fazer praticamente o que o OP_CAT pode fazer, apenas de forma mais eficiente, ele compartilha todas as preocupações sobre o OP_CAT ser muito poderoso.
Ressurreição do Script
OP_CAT foi um dos 15 códigos de operação que Satoshi desativou. Além de restaurar OP_CAT, Rusty Russell está propondo21para essencialmente restaurar o script do Bitcoin para a 'Visão Original de Satoshi' ao reabilitar a maioria desses opcodes, adicionando limites de DoS e potencialmente adicionando mais alguns no mesmo garfo suave. Em particular, um OP_CheckSigFromStack é provável.
Embora OP_CAT por si só permita covenants (recursivos), uma completa "revitalização do script" tornaria possíveis covenants mais sofisticados - e muito mais fáceis de implementar - pois partes da transação de gastos poderiam ser manipuladas diretamente. Por exemplo, você poderia imaginar um script de covenant que usa opcodes aritméticos para garantir que o valor total dos txouts na transação siga alguma propriedade desejada.
Novamente, o ressurgimento do script levanta todas as mesmas preocupações, e mais, sobre ser excessivamente poderoso que apenas o OP_CAT faz.
Na prática, Simplicidade é tanto muito simples, quanto não simples de todo. Os combinadores primitivos são tão ridiculamente de baixo nível que operações básicas como a adição têm de ser implementadas laboriosamente do zero; a Simplicidade pura seria excepcionalmente verbosa na prática. Assim, qualquer uso real da Simplicidade faria uso de um sistema de substituição de código, semelhante a chamadas de funções de biblioteca, conhecido como jatos. Isso representa um problema prático/político: como decidir em quais garfos implementar? Provavelmente, os garfos seriam implementados em C++, como qualquer outro código de operação, exigindo um garfo suave para cada novo garfo.
Para os fins deste artigo, não precisamos entrar em detalhes sobre cada uma dessas muitas propostas. Em vez disso, podemos falar sobre elas como um grupo: todas são propostas relativamente específicas para casos de uso que tornam uma classe de Camada 2 possível, idealmente sem efeitos colaterais indesejados. Todas têm a vantagem da eficiência: todas usam menos espaço de bloco do que alcançar o mesmo objetivo com opcode genéricos como a manipulação OP_CAT. Mas todas têm a desvantagem de adicionar complexidade ao sistema de script, para um caso de uso potencialmente de nicho.
A mesma dinâmica aconteceria se o Bitcoin adotasse o sistema de script Simplicity. O equivalente aos opcodes em Simplicity é adicionar um jato para um padrão comumente usado. Novamente, implementar jatos para operações específicas de casos de uso, como manipulação de árvores, tem prós e contras semelhantes à implementação de opcodes complexos para operações específicas de casos de uso.
Para que um pool de fundos seja útil, ele deve ter algum tipo de "estado de dados de compartilhamento" associado a ele: como o valor do txout é dividido? Se o pool de fundos evoluir ao longo do tempo, esse estado também deve mudar à medida que os fundos são adicionados ou removidos do pool. Como estamos construindo em Bitcoin, adicionar ou remover fundos do pool inevitavelmente envolverá gastar o UTXO que o pool controla.
Lembre-se de que o próprio sistema de consenso do Bitcoin é baseado na validação de mudanças de estado: as transações provam por meio de suas testemunhas que as mudanças no estado do conjunto UTXO são válidas; a prova de trabalho nos permite chegar a um consenso sobre qual conjunto de transações está correto. Isso significa que os pools de fundos também serão baseados na validação de mudanças de estado: estamos provando para cada nó Bitcoin que as regras do pool de fundos estão sendo seguidas em cada mudança de estado.
Mas há outro aspecto chave para os pools de fundos L2 sem confiança: quando o estado do pool de fundos muda, o sistema deve publicar intrinsecamente dados suficientes para que os usuários que participam do pool de fundos possam recuperar seus fundos. Se não fizermos isso, então nosso sistema falha em fornecer retirada unilateral, sem a cooperação de terceiros. Muitos esquemas baseados em rollup falham aqui: eles sofrem com falhas de disponibilidade de dados, onde o usuário não consegue recuperar seus fundos se os coordenadores de terceiros ficarem offline, porque eles não têm como obter os dados necessários para eles construírem uma transação de recuperação de fundos válida.
Com essas restrições em mente, em quais estruturas de dados os fundos de pools serão baseados? Inevitavelmente, todas elas são algum tipo de árvore. Especificamente, algum tipo de árvore de Merkel. Elas precisam ser uma árvore, porque essa é praticamente a única estrutura de dados escalável em ciência da computação; elas precisam ser merkelizadas, porque essa é basicamente a única maneira razoável de se comprometer criptograficamente com o estado da árvore. Por fim, as atualizações na árvore inevitavelmente serão publicadas na blockchain do Bitcoin, porque essa é a meio de publicaçãotodos os usuários da Camada 2 compartilham, e o único que podemos forçar os usuários a publicar para mover moedas. E porque qualquer implementação de contrato vai precisar de partes da árvore para validar que as regras do contrato estão sendo seguidas.
Então, com a teoria de alto nível fora do caminho, como isso realmente se traduz em scripts e transações de Bitcoin?
A única "aliança" necessária aqui é a aliança mais básica: a transação pré-assinada.
Árvores TxOut
O próximo padrão de design mais complexo que vemos em pools de fundos é a árvore txout. Ark é um exemplo notável. Aqui, o pool de fundos pode ser dividido gastando o UTXO raiz em uma árvore de transações pré-definidas, aplicadas com convênios simples como transações pré-assinadas ou CTV, dividindo o valor desse UTXO em quantidades cada vez menores até que sejam alcançados nós folha que podem ser gastos pelos proprietários legítimos.
É importante reconhecer que o objetivo da árvore txout é dar aos usuários opções de como recuperar seus fundos, e essas opções têm um custo: uma árvore txout sempre será uma maneira mais cara de dividir um pool de fundos, devolvendo-os aos seus proprietários, do que simplesmente dividir o UTXO em uma única transação. Cada camada na árvore adiciona custo devido aos bytes usados nos txouts e txins necessários para criar essa camada.
Então, que tipo de opções um txout tree pode fornecer? Novamente, Ark é um ótimo exemplo: não queremos que o resgate na cadeia de um único V-UTXO exija que todos os V-UTXOs sejam colocados na cadeia. Ao usar uma árvore, o resgate pode dividir a árvore em partes menores até que o V-UTXO desejado seja colocado na cadeia.
Assim como no caso de transação individual pré-assinada, as informações sendo publicadas são as próprias transações, o que informa a carteira de outros usuários como gastar seus fundos, se necessário.
A escalabilidade das árvores de txout tem economias interessantes de escala. O custo para colocar a primeira V-UTXO na cadeia, em um pool de fundos com n V-UTXOs, é aproximadamente log2(n)log2(n) vezes mais caro do que uma única transação, pois log2(n) níveis de transações divididas devem ser colocados na cadeia. No entanto, uma vez que a primeira V-UTXO é colocada na cadeia, as V-UTXOs subsequentes se tornam mais baratas para resgatar na cadeia, porque outra pessoa já pagou o custo de obter as transações intermediárias mineradas.
Lembre-se de que o número total de elementos em uma árvore binária com
n leaves is 2n. Isso significa que para colocar todos os V-UTXOs na cadeia, o custo total para fazê-lo por meio de uma árvore de txout seria um pequeno múltiplo do custo total para fazê-lo em uma única transação. Surpreendentemente eficiente!
Ou talvez não... Se o tamanho total dos resgates do fundo for suficientemente alto, eles podem representar uma demanda não trivial no espaço total do bloco. O espaço do bloco é um sistema de oferta e demanda, então em algum momento as taxas aumentarão devido à alta demanda. No extremo, é bastante possível criar árvores txout tão grandes e profundas que realmente resgatar cada
RBF é complexo de implementar devido à permissão: o local óbvio para cobrar taxas para RBF é o valor V-UTXO. Mas como garantir que apenas o proprietário tem a capacidade de assinar uma transação com taxa mais alta? Em muitas circunstâncias, não é óbvio como fazer isso de forma mais eficiente do que uma saída de âncora sem chave. No entanto, a falha em fazer isso apresenta desafios sérios para esquemas usados por carteiras de usuários finais, que podem não ter um UTXO para gastar para realizar um CPFP, se os próprios V-UTXOs não puderem ser gastos imediatamente.
Finalmente, é necessário pensar cuidadosamente nos incentivos existentes em sistemas de árvore de txout, levando em conta o pagamento de taxas. Por exemplo, em um sistema como o Ark, se um conjunto de V-UTXOs custar individualmente muito dinheiro para valer a pena serem levados a V-UTXOs on-chain, um coordenador desonesto poderia se recusar a permitir que esses V-UTXOs fossem resgatados off-chain e, em seguida, obter lucro roubando o valor desses V-UTXOs em uma única transação de UTXO assim que um tempo limite for atingido.
Se este for o caso, é discutível que tal sistema não atenda aos nossos critérios para ser um L2 para pequenos V-UTXOs.
Para fazer isso, precisamos implementar uma máquina de estado não trivial. Mas também precisamos do que é essencialmente uma base de dados partilhada. Por que? Porque o objetivo aqui é compartilhar um UTXO entre muitos proprietários diferentes. Finalmente, se realmente vamos obter uma melhoria de escalabilidade, devemos fazê-lo de uma forma que coloque o mínimo possível desses dados de propriedade na cadeia.
Esses requisitos naturalmente nos levam a algum tipo de estrutura de dados merkelizada em forma de árvore, como uma árvore de soma de merkle. Manipular essa estrutura de dados vai exigir algo como OP_CAT, algum tipo de opcode de verificação de prova de conhecimento zero, ou um opcode de manipulação de árvore específico de propósito.
Curiosamente, assim como nas árvores txout, você não pode fazer melhor do que a ordem log(n) enquanto mantém propriedades de segurança similares. Por quê? Vamos supor que tivéssemos um hipotético OP_ZKP que, através de algumas matemáticas avançadas, precisasse de apenas 32 bytes para provar qualquer declaração. Embora essa prova zk pudesse provar que a estrutura de dados merkelizada foi manipulada de acordo com as regras do sistema da camada 2, ela não forneceria os dados necessários para que o próximo usuário também faça uma mudança de estado. Isso não atende aos nossos critérios preferidos de permitir retirada incondicional: no máximo, um usuário poderia conseguir uma retirada incondicional. Mas nenhum outro usuário poderia fazê-lo.
Em contraste, se as partes modificadas da estrutura de dados merklizada forem publicadas via scriptsig do pacto — por exemplo, os dígests irmãos em uma árvore de Merkle — o próximo usuário tem dados suficientes para atualizar sua compreensão do estado do sistema e fazer uma retirada incondicional.
Uma possível maneira de contornar esse problema é se o pacto exigir prova de publicação em um meio de publicação diferente do que a cadeia do Bitcoin. No entanto, as garantias de segurança serão mais fracas do que é possível via Bitcoin.
Finalmente, observe como as árvores txout e uma abordagem baseada em equilíbrio podem ser combinadas. Se a estrutura de dados que está sendo manipulada for uma árvore txout, os fundos poderiam ser adicionados à árvore txout gastando a saída e adicionando novos fundos, com um script de convênio que valida que os fundos foram de fato adicionados à árvore txout. Da mesma forma, os fundos podem ser removidos por todos os mecanismos normalmente disponíveis para uma árvore txout. A Arca Avançada é um exemplo dessa classe de esquema.
A capacidade máxima de bloco em todas as blockchains descentralizadas (e centralizadas) é limitada por restrições técnicas. No Bitcoin, o tamanho máximo do bloco é tal que o Bitcoin opera essencialmente na capacidade ~100% do tempo. Como a mineração de Bitcoin atua como um sistema de leilão, leiloando o espaço do bloco para o licitante mais alto, na prática isso significa que a taxa mínima para obter uma transação minerada aumenta e diminui à medida que a demanda aumenta e diminui.
A taxa de pagamento sempre influencia na economia e nos modos de falha da Camada 2. Por exemplo, no Lightning, os HTLCs de tamanho 'poeira' que são muito pequenos para serem resgatados de forma lucrativa na cadeia usam um modelo de segurança diferente dos HTLCs maiores. Embora o protocolo Lightning ainda não implemente corretamente isso, teoricamente esse limite deve ser dinâmico, baseado nas taxas de pagamento à medida que elas sobem e descem, idealmente até o ponto em que uma parte possa escolher se um HTLC existe ou não em uma determinada transação de compromisso com base na taxa de pagamento.
Uma variedade de ataques foram propostos onde essa situação é intencionalmente ativada no Lightning, como inundação e saque22e o ataque de saída em massa23. Como a capacidade da blockchain do Bitcoin é compartilhada entre todos os casos de uso, também são possíveis ataques entre diferentes sistemas L2: por exemplo, provocar uma saída em massa na Ark para lucrar com os canais Lightning.
L2 que compartilham UTXO entre vários usuários fazem com que esses problemas sejam potencialmente piores, pois a demanda máxima de espaço em bloco durante uma falha é proporcionalmente maior. Até o momento, nunca vimos falhas em grande escala no Lightning onde um grande número de canais precisou ser fechado de uma vez. Há um bom argumento de que devemos obter experiência operacional adicional com o Lightning e sua escala aproximada de 1-UTXO por usuário, antes de empurrar os limites ainda mais com esquemas de compartilhamento de UTXO.
Em segundo lugar, antes que novos esquemas de compartilhamento UTXO sejam amplamente adotados, uma pesquisa cuidadosa deve ser feita sobre a lucratividade potencial dos ataques durante a alta demanda por espaço de bloqueio. Por exemplo, em um sistema como o Ark, onde o ASP pode resgatar fundos usando muito menos espaço de bloqueio do que outras partes, pode ser o caso de que intencionalmente acionar altas taxas de taxa e, em seguida, apreender fundos que não podem ser retirados unilateralmente de forma lucrativa é uma fraude lucrativa, violando ambas as nossas condições para um verdadeiro sistema L2.
O soft-fork mais recente, taproot, teve um processo de implantação relativamente contencioso, levando bastante tempo para realmente ser implantado. Um argumento para fazer um soft-fork de limpeza de consenso primeiro, antes de habilitar quaisquer novos opcodes ou outros recursos para novos tipos de L2, é que aprenderíamos mais sobre como a comunidade em geral está disposta a implementar o que deveria ser um soft-fork relativamente incontroverso que sem dúvida beneficia a todos.
Uma abordagem mais simples é simplesmente fingir que certas partes não podem fazer as ações que os pactos impediriam. Por exemplo, se um protocolo proposto deseja usar o CTV para garantir que uma árvore de txout seja gasta em uma árvore de transações, cada uso do CTV pode ser substituído por um NOP ou CheckSig. Embora na realidade a árvore de txout não esteja sendo realmente aplicada, cada código que interage com a árvore e cada parte pode ser testada como se estivesse, e como NOP e CheckSig são permitidos em scripts padrão, o protocolo pode ser testado na mainnet com fundos reais.
Também vamos deixar de fora todos os códigos de operação de manipulação de árvore de Merkle propostos. Todos eles são muito específicos, muito específicos para casos de uso, para ter uma chance significativa de serem adotados neste momento. Na medida em que esses códigos de operação são úteis, implementar seus efeitos por meio de OP_CAT e / ou Script Revival é um caminho muito mais provável para adoção.

CTV é o claro vencedor aqui, seguido por SIGHASH_ANYPREVOUT (OP_Expire é útil para muitas coisas sendo uma correção de ciclagem de substituição, mas não essencial). CTV vence porque tantas coisas se encaixam no padrão de design de 'garantir que a transação de gastos corresponda a este modelo'; até mesmo construções OP_CAT podem fazer uso eficiente de CTV.
Ao contrário do OP_CAT, o CTV não parece aumentar muito o risco de consequências não intencionais além de incentivar pagamentos de taxas fora da banda em certos casos. Isso não é o ideal. Mas ninguém apresentou uma alternativa amplamente apoiada.
Minha recomendação pessoal: faça uma limpeza de consenso soft-fork, seguida por CTV.
Isenção de Responsabilidade por Responsabilidade: As opiniões e opiniões expressas neste artigo são exclusivamente do autor e não constituem nenhum conselho de investimento.
As traduções do artigo para outros idiomas são feitas pela equipe do Gate Learn. A menos que mencionado, copiar, distribuir ou plagiar os artigos traduzidos é proibido.





