Para um algoritmo f, dois participantes mutuamente desconfiados, Alice e Bob, podem estabelecer confiança da seguinte forma:
Para os itens acima 2, 3 e 4, seja x as transações da Camada 2 e o estado inicial, seja f o programa de consenso da Camada 2 e seja y o estado final da transação, correspondendo à solução de escalonamento da Camada 2 do blockchain. Entre eles:
Tabela 1: Formas de Estabelecer Confiança
Além disso, é importante notar:
Atualmente, beneficiando-se dos contratos inteligentes Turing-completos do Solidity, as tecnologias de prova de fraude e prova de validade são amplamente utilizadas na camada 2 do Ethereum para escalonamento. No entanto, sob o paradigma do Bitcoin, limitado pela funcionalidade limitada do opcode do Bitcoin, 1000 elementos de pilha e outras restrições, a aplicação dessas tecnologias ainda está em estágio exploratório. Este artigo resume as limitações e tecnologias de avanço sob o paradigma do Bitcoin no contexto da escalabilidade da camada 2 do Bitcoin, estuda as tecnologias de prova de validade e prova de fraude e esboça a tecnologia única de segmentação de script sob o paradigma do Bitcoin.
Existem muitas limitações no paradigma do Bitcoin, mas vários métodos ou técnicas inteligentes podem ser usados para superar essas limitações. Por exemplo, o compromisso de bits pode superar a limitação estatal do UTXO, o taproot pode superar as limitações do espaço de script, a saída do conector pode superar as limitações do método de gasto do UTXO e os contratos podem superar as limitações pré-assinatura.
O Bitcoin adota o modelo UTXO, onde cada UTXO é bloqueado em um script de bloqueio que define as condições que devem ser atendidas para gastar esse UTXO. Os scripts do Bitcoin têm as seguintes limitações:
Atualmente, os scripts do Bitcoin são completamente sem estado. Ao executar um script do Bitcoin, seu ambiente de execução é reiniciado após cada script. Isso leva à incapacidade dos scripts do Bitcoin de suportar nativamente scripts de restrição 1 e 2 tendo o mesmo valor x. No entanto, esse problema pode ser contornado por meio de alguns métodos, com a ideia principal sendo assinar um valor de alguma forma. Se uma assinatura puder ser criada para um valor, é possível alcançar scripts do Bitcoin com estado. Ou seja, verificando a assinatura do valor x nos scripts 1 e 2, é possível garantir que o mesmo valor x seja usado em ambos os scripts. Se houver uma assinatura conflitante, ou seja, dois valores diferentes forem assinados para a mesma variável x, uma penalidade pode ser aplicada. Essa solução é conhecida como compromisso de bit.
O princípio do compromisso de bit é relativamente simples. Um bit refere-se à definição de dois valores de hash diferentes, hash0 e hash1, para cada bit na mensagem a ser assinada. Se o valor do bit a ser assinado for 0, é revelada a preimagem0 de hash0; se o valor do bit a ser assinado for 1, é revelada a preimagem1 de hash1.
Tomando uma mensagem de bit única m ∈{0,1} como exemplo, o script de desbloqueio de compromisso de bit correspondente são apenas algumas preimagens: se o valor do bit for 0, o script de desbloqueio correspondente é preimage0—“0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140”; se o valor do bit for 1, o script de desbloqueio correspondente é preimage1—“0x47c31e611a3bd2f3a7a42207613046703fa27496”. Portanto, com o compromisso de bit, é possível superar a limitação sem estado do UTXO e alcançar scripts Bitcoin com estado, tornando possíveis várias novas funcionalidades interessantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Isto é hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Este é o hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// Agora o valor do compromisso de bits está na pilha. Ou "0" ou "1".
Atualmente, existem 2 implementações de compromisso de bit:
Atualmente, a biblioteca BitVM2 implementa assinaturas Winternitz baseadas na função hash Blake3. O comprimento da assinatura correspondente a um único bit é de cerca de 26 bytes. Portanto, pode-se ver que a introdução de estado por meio de compromisso de bit é custosa. Assim, na implementação do BitVM2, a mensagem é primeiro hasheada para obter um valor de hash de 256 bits e, em seguida, o compromisso de bit é realizado no valor de hash para economizar overhead, em vez de se comprometer com cada bit da mensagem original mais longa diretamente.
A atualização do soft fork Bitcoin Taproot, ativada em novembro de 2021, inclui três propostas: assinaturas Schnorr (BIP 340), Taproot (BIP 341) e TapScript (BIP 342). Ele introduz um novo tipo de transação: transações Pay-to-Taproot (P2TR). As transações P2TR podem criar um formato de transação mais privado, flexível e escalável, combinando as vantagens das assinaturas Taproot, MAST (Merkel Abstract Syntax Tree) e Schnorr.
P2TR suporta dois métodos de gastos: gastar de acordo com o caminho da chave ou o caminho do script.
De acordo com as disposições do Taproot (BIP 341), ao gastar através do caminho do script, o caminho Merkle correspondente não pode exceder um comprimento máximo de 128. Isto significa que o número de folhas na torneira não pode exceder 2^128. Desde a atualização do SegWit em 2017, a rede Bitcoin mede o tamanho do bloco em unidades de peso, com um suporte máximo de 4 milhões de unidades de peso (aproximadamente 4MB). Quando uma saída P2TR é gasta através do caminho do script, ele só precisa revelar um único script tapleaf, o que significa que o bloco é embalado com um único script tapleaf. Isso implica que, para transações P2TR, o tamanho do script correspondente a cada tapleaf pode ser no máximo de cerca de 4MB. No entanto, sob a política padrão do Bitcoin, muitos nós só encaminham transações menores que 400K; transações maiores precisam colaborar com mineradores para serem empacotadas.
O prêmio de espaço de script trazido pelo Taproot torna mais valioso simular operações criptográficas como multiplicação e hashing usando opcodes existentes.
Ao construir computação verificável baseada em P2TR, o tamanho do script correspondente não está mais limitado à restrição de 4MB, mas pode ser dividido em várias subfunções distribuídas em vários tapleafs, quebrando assim a limitação de espaço de script de 4MB. Na verdade, o algoritmo verificador Groth16 implementado no BitVM2 atual tem um tamanho de até 2GB. No entanto, ele pode ser dividido e distribuído em cerca de 1000 tapleafs, e ao combiná-lo com o compromisso de bits, a consistência entre as entradas e saídas de cada subfunção pode ser limitada, garantindo a integridade e correção de toda a computação.
Atualmente, o Bitcoin fornece dois métodos nativos de gasto para uma única UTXO: gasto por script ou por chave pública. Portanto, desde que a assinatura correta da chave pública ou as condições do script sejam atendidas, a UTXO pode ser gasta. Duas UTXOs podem ser gastas independentemente e não há restrições que possam ser adicionadas para restringir as duas UTXOs, ou seja, condições adicionais devem ser atendidas para que elas sejam gastas.
No entanto, Burak, o fundador do protocolo Ark, utilizou de forma inteligente a flag SIGHASH para alcançar a saída do conector. Especificamente, Alice pode criar uma assinatura para enviar seus BTC para Bob. No entanto, como a assinatura pode se comprometer com várias entradas, Alice pode definir sua assinatura como condicional: a assinatura é válida para a transação Taketx se e somente se essa transação consumir a segunda entrada. A segunda entrada é chamada de conector, ligando UTXO A e UTXO B. Em outras palavras, a transação Taketx é válida se e somente se UTXO B não foi gasto pelo Challengetx. Portanto, destruindo a saída do conector, a eficácia da transação Taketx pode ser bloqueada.
Figura 1: Ilustração da Saída do Conector
No protocolo BitVM2, a saída do conector atua como um if... outra função. Uma vez que a saída do conector é gasta por uma transação, ela não pode ser gasta por outra transação para garantir seus gastos exclusivos. Na implantação prática, para permitir um período de desafio-resposta, UTXOs adicionais com bloqueio de tempo são introduzidos. Além disso, a saída do conector correspondente também pode ser definida com diferentes estratégias de gastos, conforme necessário, como permitir que qualquer parte gaste no caso de transações de desafio, permitindo que apenas o operador gaste ou permitindo que qualquer pessoa gaste após um tempo limite para transações de resposta.
Atualmente, os scripts do Bitcoin limitam principalmente as condições para desbloqueio, sem restringir como o UTXO pode ser gasto posteriormente. Isso ocorre porque os scripts do Bitcoin não podem ler o conteúdo da própria transação, o que significa que eles não podem realizar introspecção de transações. Se os scripts do Bitcoin pudessem verificar qualquer conteúdo da transação (incluindo saídas), a funcionalidade do contrato poderia ser realizada.
As implementações de contrato atuais podem ser divididas em duas categorias:
Tanto as provas de validade como as provas de fraude podem ser usadas para a escalabilidade da Camada 2 do Bitcoin, com as principais diferenças mostradas na Tabela 2.
Tabela 2: Provas de Validade vs. Provas de Fraude
Com base no compromisso de bit, taproot, pré-assinatura e saída do conector, podem ser construídas provas de fraude baseadas em Bitcoin. Com base no taproot, também podem ser construídas provas de validade baseadas em Bitcoin ao introduzir códigos de operação de contrato, como o OP_CAT. Além disso, dependendo se Bob tem um sistema de admissão, as provas de fraude podem ser divididas em provas de fraude com permissão e provas de fraude sem permissão. Em provas de fraude com permissão, apenas grupos específicos podem atuar como Bob para iniciar desafios, enquanto em provas de fraude sem permissão, qualquer terceiro pode atuar como Bob para iniciar desafios. A segurança das provas de fraude sem permissão é superior à das com permissão, reduzindo o risco de colusão entre os participantes permitidos.
De acordo com o número de interações de desafio-resposta entre Alice e Bob, as provas de fraude podem ser divididas em provas de fraude de uma rodada e provas de fraude de várias rodadas, como mostrado na Figura 2.
Figura 2: Provas de Fraude de Uma Rodada vs. Provas de Fraude de Múltiplas Rodadas
Como mostrado na Tabela 3, as provas de fraude podem ser implementadas através de diferentes modelos de interação, incluindo modelos de interação de uma rodada e modelos de interação de várias rodadas.
Tabela 3: Interacção de uma ronda vs. Interacção de várias rondas
No paradigma de escalonamento da Camada 2 do Bitcoin, o BitVM1 adota um mecanismo de prova de fraude de várias etapas, enquanto o BitVM2 utiliza um mecanismo de prova de fraude de uma etapa, e o bitcoin-circle stark utiliza provas de validade. Entre esses, o BitVM1 e o BitVM2 podem ser implementados sem fazer quaisquer modificações no protocolo do Bitcoin, enquanto o bitcoin-circle stark requer a introdução de um novo opcode OP_CAT.
Para a maioria das tarefas computacionais, o signet, testnet e mainnet do Bitcoin não podem representar completamente um script de 4MB, o que torna necessário o uso da tecnologia de divisão de script - ou seja, dividir o script de computação completo em partes menores que 4MB, distribuídas em vários tapleafs.
Como mostrado na Tabela 3, as provas de fraude em várias rodadas são adequadas para cenários em que há um desejo de reduzir o cálculo de arbitragem on-chain e/ou onde não é possível identificar segmentos de computação problemáticos em uma etapa. As provas de fraude multiround, como o nome sugere, exigem várias rodadas de interação entre o provador e o verificador para localizar os segmentos de computação problemáticos, seguidas de arbitragem com base nos segmentos identificados.
O white paper BitVM inicial de Robin Linus (comumente referido como BitVM1) utilizou provas de fraude de várias rodadas. Supondo que cada período de desafio dure uma semana e usando um método de busca binária para localizar os segmentos de computação problemáticos, o período de resposta ao desafio on-chain para o Verificador Groth16 pode se estender por até 30 semanas, resultando em baixa pontualidade. Embora atualmente haja equipes pesquisando métodos de busca n-ários mais eficientes do que a busca binária, sua pontualidade ainda é significativamente menor em comparação com o ciclo de 2 semanas em provas de fraude de uma rodada.
Atualmente, as provas de fraude de várias rodadas no paradigma do Bitcoin empregam desafios com permissão, enquanto as provas de fraude de uma rodada alcançaram um método de desafio sem permissão, reduzindo o risco de colusão entre os participantes e, assim, aumentando a segurança. Para isso, Robin Linus aproveitou totalmente as vantagens do Taproot para otimizar o BitVM1. Não apenas o número de rodadas de interação foi reduzido para uma, mas o método de desafio também foi expandido para uma abordagem sem permissão, embora ao custo de uma maior computação de arbitragem on-chain.
Neste modelo, a verificação de provas de fraude pode ser concluída através de uma única interação entre o provador e o verificador. O verificador só precisa iniciar um desafio, e o provador só precisa responder uma vez. Nessa resposta, o provador deve fornecer evidências afirmando que sua computação está correta. Se o verificador encontrar inconsistências nessas evidências, o desafio é bem-sucedido; caso contrário, falhará. As características das provas de fraude interativas de uma rodada são mostradas na Tabela 3.
Figura 3: Prova de Fraude de Uma Rodada
Em 15 de agosto de 2024, Robin Linus lançou o BitVM2: documento técnico de ponte entre Bitcoin e Camadas Secundárias, que implementou uma ponte cross-chain usando um método de prova de fraude de uma rodada semelhante ao mostrado na Figura 3.
OPCAT fazia parte da linguagem de script original quando o Bitcoin foi lançado, mas foi desativado em 2010 devido a vulnerabilidades de segurança. No entanto, a comunidade Bitcoin tem discutido sua reativação há anos. OPCAT agora foi atribuído o número 347 e foi ativado no signet do Bitcoin.
A função principal do OP_CAT é combinar dois elementos na pilha e empurrar o resultado fundido de volta para a pilha. Esta funcionalidade abre a possibilidade para contratos e Verificadores STARK no Bitcoin:
Embora a carga computacional necessária para executar o algoritmo verificador correspondente para verificar a prova após a prova SNARK/STARK seja muito menor do que a necessária para executar diretamente o cálculo original f, a quantidade de script necessária ao convertê-lo para implementar o algoritmo verificador no script do Bitcoin ainda é enorme. Atualmente, com base nos opcodes existentes do Bitcoin, o tamanho do script verificador otimizado Groth16 e o tamanho do script verificador Fflonk ainda são ambos maiores que 2GB. No entanto, o tamanho de um único bloco do Bitcoin é apenas 4MB, tornando impossível executar todo o script verificador em um único bloco. No entanto, desde a atualização do Taproot, o Bitcoin suporta a execução de scripts por meio do tapleaf, permitindo que o script verificador seja dividido em vários chunks, sendo cada chunk um tapleaf para construir uma taptree. A consistência dos valores entre os chunks pode ser garantida por meio do compromisso de bits.
Na presença de contratos OP_CAT, o Verificador STARK pode ser dividido em várias transações padrão menores que 400KB, permitindo que a verificação completa da prova de validade STARK seja concluída sem a necessidade de colaboração com os mineradores.
Esta seção concentra-se na tecnologia de divisão relevante dos scripts do Bitcoin nas condições existentes, sem introduzir ou ativar novos opcodes.
Ao realizar a divisão do script, as seguintes dimensões de informação devem ser equilibradas:
Atualmente, os métodos para divisão de scripts podem ser divididos nas seguintes três categorias principais:
Por exemplo, após várias rodadas de otimização, o tamanho do script do verificador Groth16 foi reduzido de cerca de 7GB para aproximadamente 1.26GB. Além dessa otimização computacional geral, cada bloco também pode ser otimizado individualmente para utilizar totalmente o espaço de pilha. Por exemplo, introduzindo algoritmos baseados em tabelas de pesquisa melhores e carregando e descarregando dinamicamente a tabela de pesquisa, o tamanho do script de cada bloco pode ser ainda mais reduzido.
Os custos computacionais e os ambientes de tempo de execução das linguagens de programação web2 são completamente diferentes dos das scripts Bitcoin, por isso, simplesmente traduzir as implementações existentes para vários algoritmos em scripts Bitcoin não é viável. Portanto, as otimizações específicas para o cenário Bitcoin precisam ser consideradas:
Este artigo primeiro apresenta as limitações dos scripts Bitcoin e discute o uso de compromissos Bitcoin para superar a limitação sem estado UTXO, usando Taproot para quebrar as limitações de espaço de script, usando saídas de conector para contornar as restrições do método de gastos UTXO e usando contratos para superar limitações de pré-assinatura. Em seguida, fornece uma visão geral abrangente e um resumo das características das provas de fraude e provas de validade, as características das provas de fraude permitidas e sem permissão, as distinções entre provas de fraude de uma rodada e várias rodadas e a tecnologia de divisão de script Bitcoin.
Para um algoritmo f, dois participantes mutuamente desconfiados, Alice e Bob, podem estabelecer confiança da seguinte forma:
Para os itens acima 2, 3 e 4, seja x as transações da Camada 2 e o estado inicial, seja f o programa de consenso da Camada 2 e seja y o estado final da transação, correspondendo à solução de escalonamento da Camada 2 do blockchain. Entre eles:
Tabela 1: Formas de Estabelecer Confiança
Além disso, é importante notar:
Atualmente, beneficiando-se dos contratos inteligentes Turing-completos do Solidity, as tecnologias de prova de fraude e prova de validade são amplamente utilizadas na camada 2 do Ethereum para escalonamento. No entanto, sob o paradigma do Bitcoin, limitado pela funcionalidade limitada do opcode do Bitcoin, 1000 elementos de pilha e outras restrições, a aplicação dessas tecnologias ainda está em estágio exploratório. Este artigo resume as limitações e tecnologias de avanço sob o paradigma do Bitcoin no contexto da escalabilidade da camada 2 do Bitcoin, estuda as tecnologias de prova de validade e prova de fraude e esboça a tecnologia única de segmentação de script sob o paradigma do Bitcoin.
Existem muitas limitações no paradigma do Bitcoin, mas vários métodos ou técnicas inteligentes podem ser usados para superar essas limitações. Por exemplo, o compromisso de bits pode superar a limitação estatal do UTXO, o taproot pode superar as limitações do espaço de script, a saída do conector pode superar as limitações do método de gasto do UTXO e os contratos podem superar as limitações pré-assinatura.
O Bitcoin adota o modelo UTXO, onde cada UTXO é bloqueado em um script de bloqueio que define as condições que devem ser atendidas para gastar esse UTXO. Os scripts do Bitcoin têm as seguintes limitações:
Atualmente, os scripts do Bitcoin são completamente sem estado. Ao executar um script do Bitcoin, seu ambiente de execução é reiniciado após cada script. Isso leva à incapacidade dos scripts do Bitcoin de suportar nativamente scripts de restrição 1 e 2 tendo o mesmo valor x. No entanto, esse problema pode ser contornado por meio de alguns métodos, com a ideia principal sendo assinar um valor de alguma forma. Se uma assinatura puder ser criada para um valor, é possível alcançar scripts do Bitcoin com estado. Ou seja, verificando a assinatura do valor x nos scripts 1 e 2, é possível garantir que o mesmo valor x seja usado em ambos os scripts. Se houver uma assinatura conflitante, ou seja, dois valores diferentes forem assinados para a mesma variável x, uma penalidade pode ser aplicada. Essa solução é conhecida como compromisso de bit.
O princípio do compromisso de bit é relativamente simples. Um bit refere-se à definição de dois valores de hash diferentes, hash0 e hash1, para cada bit na mensagem a ser assinada. Se o valor do bit a ser assinado for 0, é revelada a preimagem0 de hash0; se o valor do bit a ser assinado for 1, é revelada a preimagem1 de hash1.
Tomando uma mensagem de bit única m ∈{0,1} como exemplo, o script de desbloqueio de compromisso de bit correspondente são apenas algumas preimagens: se o valor do bit for 0, o script de desbloqueio correspondente é preimage0—“0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140”; se o valor do bit for 1, o script de desbloqueio correspondente é preimage1—“0x47c31e611a3bd2f3a7a42207613046703fa27496”. Portanto, com o compromisso de bit, é possível superar a limitação sem estado do UTXO e alcançar scripts Bitcoin com estado, tornando possíveis várias novas funcionalidades interessantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Isto é hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Este é o hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// Agora o valor do compromisso de bits está na pilha. Ou "0" ou "1".
Atualmente, existem 2 implementações de compromisso de bit:
Atualmente, a biblioteca BitVM2 implementa assinaturas Winternitz baseadas na função hash Blake3. O comprimento da assinatura correspondente a um único bit é de cerca de 26 bytes. Portanto, pode-se ver que a introdução de estado por meio de compromisso de bit é custosa. Assim, na implementação do BitVM2, a mensagem é primeiro hasheada para obter um valor de hash de 256 bits e, em seguida, o compromisso de bit é realizado no valor de hash para economizar overhead, em vez de se comprometer com cada bit da mensagem original mais longa diretamente.
A atualização do soft fork Bitcoin Taproot, ativada em novembro de 2021, inclui três propostas: assinaturas Schnorr (BIP 340), Taproot (BIP 341) e TapScript (BIP 342). Ele introduz um novo tipo de transação: transações Pay-to-Taproot (P2TR). As transações P2TR podem criar um formato de transação mais privado, flexível e escalável, combinando as vantagens das assinaturas Taproot, MAST (Merkel Abstract Syntax Tree) e Schnorr.
P2TR suporta dois métodos de gastos: gastar de acordo com o caminho da chave ou o caminho do script.
De acordo com as disposições do Taproot (BIP 341), ao gastar através do caminho do script, o caminho Merkle correspondente não pode exceder um comprimento máximo de 128. Isto significa que o número de folhas na torneira não pode exceder 2^128. Desde a atualização do SegWit em 2017, a rede Bitcoin mede o tamanho do bloco em unidades de peso, com um suporte máximo de 4 milhões de unidades de peso (aproximadamente 4MB). Quando uma saída P2TR é gasta através do caminho do script, ele só precisa revelar um único script tapleaf, o que significa que o bloco é embalado com um único script tapleaf. Isso implica que, para transações P2TR, o tamanho do script correspondente a cada tapleaf pode ser no máximo de cerca de 4MB. No entanto, sob a política padrão do Bitcoin, muitos nós só encaminham transações menores que 400K; transações maiores precisam colaborar com mineradores para serem empacotadas.
O prêmio de espaço de script trazido pelo Taproot torna mais valioso simular operações criptográficas como multiplicação e hashing usando opcodes existentes.
Ao construir computação verificável baseada em P2TR, o tamanho do script correspondente não está mais limitado à restrição de 4MB, mas pode ser dividido em várias subfunções distribuídas em vários tapleafs, quebrando assim a limitação de espaço de script de 4MB. Na verdade, o algoritmo verificador Groth16 implementado no BitVM2 atual tem um tamanho de até 2GB. No entanto, ele pode ser dividido e distribuído em cerca de 1000 tapleafs, e ao combiná-lo com o compromisso de bits, a consistência entre as entradas e saídas de cada subfunção pode ser limitada, garantindo a integridade e correção de toda a computação.
Atualmente, o Bitcoin fornece dois métodos nativos de gasto para uma única UTXO: gasto por script ou por chave pública. Portanto, desde que a assinatura correta da chave pública ou as condições do script sejam atendidas, a UTXO pode ser gasta. Duas UTXOs podem ser gastas independentemente e não há restrições que possam ser adicionadas para restringir as duas UTXOs, ou seja, condições adicionais devem ser atendidas para que elas sejam gastas.
No entanto, Burak, o fundador do protocolo Ark, utilizou de forma inteligente a flag SIGHASH para alcançar a saída do conector. Especificamente, Alice pode criar uma assinatura para enviar seus BTC para Bob. No entanto, como a assinatura pode se comprometer com várias entradas, Alice pode definir sua assinatura como condicional: a assinatura é válida para a transação Taketx se e somente se essa transação consumir a segunda entrada. A segunda entrada é chamada de conector, ligando UTXO A e UTXO B. Em outras palavras, a transação Taketx é válida se e somente se UTXO B não foi gasto pelo Challengetx. Portanto, destruindo a saída do conector, a eficácia da transação Taketx pode ser bloqueada.
Figura 1: Ilustração da Saída do Conector
No protocolo BitVM2, a saída do conector atua como um if... outra função. Uma vez que a saída do conector é gasta por uma transação, ela não pode ser gasta por outra transação para garantir seus gastos exclusivos. Na implantação prática, para permitir um período de desafio-resposta, UTXOs adicionais com bloqueio de tempo são introduzidos. Além disso, a saída do conector correspondente também pode ser definida com diferentes estratégias de gastos, conforme necessário, como permitir que qualquer parte gaste no caso de transações de desafio, permitindo que apenas o operador gaste ou permitindo que qualquer pessoa gaste após um tempo limite para transações de resposta.
Atualmente, os scripts do Bitcoin limitam principalmente as condições para desbloqueio, sem restringir como o UTXO pode ser gasto posteriormente. Isso ocorre porque os scripts do Bitcoin não podem ler o conteúdo da própria transação, o que significa que eles não podem realizar introspecção de transações. Se os scripts do Bitcoin pudessem verificar qualquer conteúdo da transação (incluindo saídas), a funcionalidade do contrato poderia ser realizada.
As implementações de contrato atuais podem ser divididas em duas categorias:
Tanto as provas de validade como as provas de fraude podem ser usadas para a escalabilidade da Camada 2 do Bitcoin, com as principais diferenças mostradas na Tabela 2.
Tabela 2: Provas de Validade vs. Provas de Fraude
Com base no compromisso de bit, taproot, pré-assinatura e saída do conector, podem ser construídas provas de fraude baseadas em Bitcoin. Com base no taproot, também podem ser construídas provas de validade baseadas em Bitcoin ao introduzir códigos de operação de contrato, como o OP_CAT. Além disso, dependendo se Bob tem um sistema de admissão, as provas de fraude podem ser divididas em provas de fraude com permissão e provas de fraude sem permissão. Em provas de fraude com permissão, apenas grupos específicos podem atuar como Bob para iniciar desafios, enquanto em provas de fraude sem permissão, qualquer terceiro pode atuar como Bob para iniciar desafios. A segurança das provas de fraude sem permissão é superior à das com permissão, reduzindo o risco de colusão entre os participantes permitidos.
De acordo com o número de interações de desafio-resposta entre Alice e Bob, as provas de fraude podem ser divididas em provas de fraude de uma rodada e provas de fraude de várias rodadas, como mostrado na Figura 2.
Figura 2: Provas de Fraude de Uma Rodada vs. Provas de Fraude de Múltiplas Rodadas
Como mostrado na Tabela 3, as provas de fraude podem ser implementadas através de diferentes modelos de interação, incluindo modelos de interação de uma rodada e modelos de interação de várias rodadas.
Tabela 3: Interacção de uma ronda vs. Interacção de várias rondas
No paradigma de escalonamento da Camada 2 do Bitcoin, o BitVM1 adota um mecanismo de prova de fraude de várias etapas, enquanto o BitVM2 utiliza um mecanismo de prova de fraude de uma etapa, e o bitcoin-circle stark utiliza provas de validade. Entre esses, o BitVM1 e o BitVM2 podem ser implementados sem fazer quaisquer modificações no protocolo do Bitcoin, enquanto o bitcoin-circle stark requer a introdução de um novo opcode OP_CAT.
Para a maioria das tarefas computacionais, o signet, testnet e mainnet do Bitcoin não podem representar completamente um script de 4MB, o que torna necessário o uso da tecnologia de divisão de script - ou seja, dividir o script de computação completo em partes menores que 4MB, distribuídas em vários tapleafs.
Como mostrado na Tabela 3, as provas de fraude em várias rodadas são adequadas para cenários em que há um desejo de reduzir o cálculo de arbitragem on-chain e/ou onde não é possível identificar segmentos de computação problemáticos em uma etapa. As provas de fraude multiround, como o nome sugere, exigem várias rodadas de interação entre o provador e o verificador para localizar os segmentos de computação problemáticos, seguidas de arbitragem com base nos segmentos identificados.
O white paper BitVM inicial de Robin Linus (comumente referido como BitVM1) utilizou provas de fraude de várias rodadas. Supondo que cada período de desafio dure uma semana e usando um método de busca binária para localizar os segmentos de computação problemáticos, o período de resposta ao desafio on-chain para o Verificador Groth16 pode se estender por até 30 semanas, resultando em baixa pontualidade. Embora atualmente haja equipes pesquisando métodos de busca n-ários mais eficientes do que a busca binária, sua pontualidade ainda é significativamente menor em comparação com o ciclo de 2 semanas em provas de fraude de uma rodada.
Atualmente, as provas de fraude de várias rodadas no paradigma do Bitcoin empregam desafios com permissão, enquanto as provas de fraude de uma rodada alcançaram um método de desafio sem permissão, reduzindo o risco de colusão entre os participantes e, assim, aumentando a segurança. Para isso, Robin Linus aproveitou totalmente as vantagens do Taproot para otimizar o BitVM1. Não apenas o número de rodadas de interação foi reduzido para uma, mas o método de desafio também foi expandido para uma abordagem sem permissão, embora ao custo de uma maior computação de arbitragem on-chain.
Neste modelo, a verificação de provas de fraude pode ser concluída através de uma única interação entre o provador e o verificador. O verificador só precisa iniciar um desafio, e o provador só precisa responder uma vez. Nessa resposta, o provador deve fornecer evidências afirmando que sua computação está correta. Se o verificador encontrar inconsistências nessas evidências, o desafio é bem-sucedido; caso contrário, falhará. As características das provas de fraude interativas de uma rodada são mostradas na Tabela 3.
Figura 3: Prova de Fraude de Uma Rodada
Em 15 de agosto de 2024, Robin Linus lançou o BitVM2: documento técnico de ponte entre Bitcoin e Camadas Secundárias, que implementou uma ponte cross-chain usando um método de prova de fraude de uma rodada semelhante ao mostrado na Figura 3.
OPCAT fazia parte da linguagem de script original quando o Bitcoin foi lançado, mas foi desativado em 2010 devido a vulnerabilidades de segurança. No entanto, a comunidade Bitcoin tem discutido sua reativação há anos. OPCAT agora foi atribuído o número 347 e foi ativado no signet do Bitcoin.
A função principal do OP_CAT é combinar dois elementos na pilha e empurrar o resultado fundido de volta para a pilha. Esta funcionalidade abre a possibilidade para contratos e Verificadores STARK no Bitcoin:
Embora a carga computacional necessária para executar o algoritmo verificador correspondente para verificar a prova após a prova SNARK/STARK seja muito menor do que a necessária para executar diretamente o cálculo original f, a quantidade de script necessária ao convertê-lo para implementar o algoritmo verificador no script do Bitcoin ainda é enorme. Atualmente, com base nos opcodes existentes do Bitcoin, o tamanho do script verificador otimizado Groth16 e o tamanho do script verificador Fflonk ainda são ambos maiores que 2GB. No entanto, o tamanho de um único bloco do Bitcoin é apenas 4MB, tornando impossível executar todo o script verificador em um único bloco. No entanto, desde a atualização do Taproot, o Bitcoin suporta a execução de scripts por meio do tapleaf, permitindo que o script verificador seja dividido em vários chunks, sendo cada chunk um tapleaf para construir uma taptree. A consistência dos valores entre os chunks pode ser garantida por meio do compromisso de bits.
Na presença de contratos OP_CAT, o Verificador STARK pode ser dividido em várias transações padrão menores que 400KB, permitindo que a verificação completa da prova de validade STARK seja concluída sem a necessidade de colaboração com os mineradores.
Esta seção concentra-se na tecnologia de divisão relevante dos scripts do Bitcoin nas condições existentes, sem introduzir ou ativar novos opcodes.
Ao realizar a divisão do script, as seguintes dimensões de informação devem ser equilibradas:
Atualmente, os métodos para divisão de scripts podem ser divididos nas seguintes três categorias principais:
Por exemplo, após várias rodadas de otimização, o tamanho do script do verificador Groth16 foi reduzido de cerca de 7GB para aproximadamente 1.26GB. Além dessa otimização computacional geral, cada bloco também pode ser otimizado individualmente para utilizar totalmente o espaço de pilha. Por exemplo, introduzindo algoritmos baseados em tabelas de pesquisa melhores e carregando e descarregando dinamicamente a tabela de pesquisa, o tamanho do script de cada bloco pode ser ainda mais reduzido.
Os custos computacionais e os ambientes de tempo de execução das linguagens de programação web2 são completamente diferentes dos das scripts Bitcoin, por isso, simplesmente traduzir as implementações existentes para vários algoritmos em scripts Bitcoin não é viável. Portanto, as otimizações específicas para o cenário Bitcoin precisam ser consideradas:
Este artigo primeiro apresenta as limitações dos scripts Bitcoin e discute o uso de compromissos Bitcoin para superar a limitação sem estado UTXO, usando Taproot para quebrar as limitações de espaço de script, usando saídas de conector para contornar as restrições do método de gastos UTXO e usando contratos para superar limitações de pré-assinatura. Em seguida, fornece uma visão geral abrangente e um resumo das características das provas de fraude e provas de validade, as características das provas de fraude permitidas e sem permissão, as distinções entre provas de fraude de uma rodada e várias rodadas e a tecnologia de divisão de script Bitcoin.