Para um algoritmo f, dois participantes mutuamente desconfiados, Alice e Bob, podem estabelecer confiança das seguintes maneiras:
Para os acima 2, 3 e 4, deixe x ser transações Camada2 e o estado inicial, f ser o programa de consenso Camada2 e y ser o estado final da transação, correspondendo à solução de escalonamento da Camada2 da blockchain. Entre eles:
Tabela 1: Formas de Estabelecer Confiança
Além disso, é importante observar:
Atualmente, beneficiando-se dos contratos inteligentes Turing-completos do Solidity, as tecnologias à prova de fraude e prova de validade são amplamente utilizadas na escalabilidade da Camada 2 do Ethereum. 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 inovadoras 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 de segmentação de script única sob o paradigma do Bitcoin.
Existem muitas limitações sob o 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 bit pode quebrar a limitação sem estado do UTXO, o taproot pode quebrar as limitações do espaço de script, a saída do conector pode quebrar as limitações do método de gasto do UTXO e os contratos podem quebrar 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 aquele 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 é redefinido após cada script. Isso leva à incapacidade dos scripts do Bitcoin de suportar nativamente os scripts de restrição 1 e 2 com o mesmo valor x. No entanto, essa questão pode ser contornada 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 são 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 a definir 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, a pré-imagem0 do hash0 é revelada; se o valor do bit a ser assinado for 1, a pré-imagem1 do hash1 é revelada.
Tomando uma mensagem de bit única m ∈{0,1} como exemplo, o script de desbloqueio de compromisso de bit correspondente são apenas algumas pré-imagens: 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 de estado sem estado do UTXO e alcançar scripts de Bitcoin com estado, tornando possíveis várias novas funcionalidades interessantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Este é o hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Este é o hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
Agora o valor do compromisso de bit 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 de 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 hashada para obter um valor de hash de 256 bits, e então o compromisso de bits é realizado no valor de hash para economizar custos, em vez de se comprometer com cada bit da mensagem original mais longa diretamente.
O upgrade da bifurcação suave do Bitcoin Taproot, ativado 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 do Taproot, MAST (Merkel Abstract Syntax Tree) e assinaturas Schnorr.
O P2TR suporta dois métodos de gastos: gastos de acordo com o caminho 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 de torneira 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, ela 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 de no máximo cerca de 4MB. No entanto, sob a política padrão do Bitcoin, muitos nós apenas 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 hash usando os 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, assim quebrando 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 combinando-o com o comprometimento de bits, a consistência entre as entradas e saídas de cada subfunção pode ser restrita, garantindo a integridade e correção de toda a computação.
Atualmente, o Bitcoin fornece dois métodos nativos de gasto para um único 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, o UTXO pode ser gasto. Dois UTXOs podem ser gastos independentemente, e nenhuma restrição pode ser adicionada para restringir os dois UTXOs, o que significa que condições adicionais devem ser atendidas para que sejam gastos.
No entanto, Burak, o fundador do protocolo Ark, utilizou habilmente a bandeira 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, vinculando UTXO A e UTXO B. Em outras palavras, a transação Taketx é válida se e somente se UTXO B não tiver sido gasto pela transação 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 se... 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 transação em si, ou seja, eles não podem realizar a introspecção da transação. Se os scripts do Bitcoin pudessem verificar qualquer conteúdo da transação (incluindo as 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 quanto as provas de fraude podem ser usadas para escala de Bitcoin L2, com as principais diferenças mostradas na Tabela 2.
Tabela 2: Provas de Validade vs. Provas de Fraude
Com base no compromisso de bits, taproot, pré-assinatura e saída do conector, podem ser construídas provas de fraude baseadas no Bitcoin. Com base no taproot, também podem ser construídas provas de validade baseadas no Bitcoin, introduzindo opcodes de contrato, como OP_CAT. Além disso, dependendo se Bob possui 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. Nas provas de fraude com permissão, apenas grupos específicos podem agir como Bob para iniciar desafios, enquanto nas provas de fraude sem permissão, qualquer terceiro pode agir como Bob para iniciar desafios. A segurança das provas de fraude sem permissão é superior à das provas com permissão, reduzindo o risco de conluio 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 versus provas de fraude de várias rodadas
Conforme mostrado na Tabela 3, provas de fraude podem ser implementadas por meio 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: Interação de Uma Rodada vs. Interação de Múltiplas Rodadas
No paradigma de escala Layer2 do Bitcoin, o BitVM1 adota um mecanismo de prova de fraude de várias rodadas, enquanto o BitVM2 emprega um mecanismo de prova de fraude de uma rodada, e o bitcoin-circle stark utiliza provas de validade. Entre eles, o BitVM1 e o BitVM2 podem ser implementados sem fazer quaisquer modificações no protocolo 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 totalmente um script de 4MB, exigindo o uso da tecnologia de divisão de script - ou seja, dividir o script de cálculo completo em pedaços menores que 4MB, distribuídos em vários tapleafs.
Conforme mostrado na Tabela 3, as provas de fraude de várias rodadas são adequadas para cenários onde há o desejo de reduzir o cálculo de arbitragem on-chain e/ou onde não é possível identificar segmentos problemáticos de cálculo em um único passo. As provas de fraude de várias rodadas, como o nome sugere, requerem múltiplas rodadas de interação entre o comprovante e o verificador para localizar os segmentos problemáticos de cálculo, seguidos de arbitragem com base nos segmentos identificados.
O white paper inicial do BitVM de Robin Linus (comumente referido como BitVM1) utilizou provas de fraude com várias rodadas. Supondo que cada período de desafio dure uma semana e empregando um método de busca binária para localizar os segmentos problemáticos de computação, o período de resposta ao desafio na cadeia para o Verificador Groth16 poderia se estender até 30 semanas, resultando em baixa pontualidade. Embora atualmente existam equipes pesquisando métodos de busca n-ária 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 permitidos, 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, melhorando 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 aumento na computação de arbitragem on-chain.
Nesse modelo, a verificação de provas de fraude pode ser concluída por meio 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 que comprovem que seu cálculo está correto. Se o verificador encontrar inconsistências nessa evidência, o desafio é bem-sucedido; caso contrário, falha. 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 2, 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 do Bitcoin tem discutido sua reativação há anos. OPCAT agora foi atribuído o número 347 e foi habilitado no signet do Bitcoin.
A principal função do OP_CAT é combinar dois elementos na pilha e empurrar o resultado mesclado de volta para a pilha. Essa 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 dentro de um único bloco. No entanto, desde a atualização Taproot, o Bitcoin suporta a execução de scripts por meio de tapleaf, permitindo que o script verificador seja dividido em vários fragmentos, sendo que cada fragmento serve como um tapleaf para construir uma taptree. A consistência dos valores entre os fragmentos pode ser garantida por meio de comprometimento de bits.
Na presença de OP_CAT contratos, o STARK Verifier pode ser dividido em várias transações padrão menores que 400KB, permitindo que toda a verificação da prova de validade STARK seja concluída sem a necessidade de colaborar com mineradores.
Esta seção se concentra na tecnologia de divisão relevante de scripts Bitcoin sob as condições existentes, sem introduzir ou ativar novos opcodes.
Ao realizar a divisão de script, as seguintes dimensões de informação devem ser equilibradas:
Atualmente, os métodos de 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 fragmento também pode ser otimizado individualmente para aproveitar totalmente o espaço de pilha. Por exemplo, ao introduzir algoritmos baseados em tabelas de pesquisa melhores e carregar e descarregar dinamicamente a tabela de pesquisa, o tamanho do script de cada fragmento 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 daqueles dos scripts do Bitcoin, portanto, simplesmente traduzir implementações existentes para vários algoritmos em scripts do Bitcoin não é viável. Portanto, otimizações específicas para o cenário do Bitcoin precisam ser consideradas:
Este artigo primeiro apresenta as limitações dos scripts do Bitcoin e discute o uso de compromissos do Bitcoin para superar a limitação do estado sem UTXO, usar o Taproot para superar as limitações do espaço do script, usar saídas do conector para contornar as restrições do método de gasto do UTXO e usar contratos para superar as limitações de pré-assinatura. Em seguida, fornece uma visão geral abrangente e um resumo das características das provas de fraude e das provas de validade, as características das provas de fraude com permissão e sem permissão, as distinções entre provas de fraude de uma rodada e multirodadas, e a tecnologia de divisão de script do Bitcoin.
Para um algoritmo f, dois participantes mutuamente desconfiados, Alice e Bob, podem estabelecer confiança das seguintes maneiras:
Para os acima 2, 3 e 4, deixe x ser transações Camada2 e o estado inicial, f ser o programa de consenso Camada2 e y ser o estado final da transação, correspondendo à solução de escalonamento da Camada2 da blockchain. Entre eles:
Tabela 1: Formas de Estabelecer Confiança
Além disso, é importante observar:
Atualmente, beneficiando-se dos contratos inteligentes Turing-completos do Solidity, as tecnologias à prova de fraude e prova de validade são amplamente utilizadas na escalabilidade da Camada 2 do Ethereum. 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 inovadoras 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 de segmentação de script única sob o paradigma do Bitcoin.
Existem muitas limitações sob o 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 bit pode quebrar a limitação sem estado do UTXO, o taproot pode quebrar as limitações do espaço de script, a saída do conector pode quebrar as limitações do método de gasto do UTXO e os contratos podem quebrar 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 aquele 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 é redefinido após cada script. Isso leva à incapacidade dos scripts do Bitcoin de suportar nativamente os scripts de restrição 1 e 2 com o mesmo valor x. No entanto, essa questão pode ser contornada 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 são 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 a definir 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, a pré-imagem0 do hash0 é revelada; se o valor do bit a ser assinado for 1, a pré-imagem1 do hash1 é revelada.
Tomando uma mensagem de bit única m ∈{0,1} como exemplo, o script de desbloqueio de compromisso de bit correspondente são apenas algumas pré-imagens: 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 de estado sem estado do UTXO e alcançar scripts de Bitcoin com estado, tornando possíveis várias novas funcionalidades interessantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Este é o hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Este é o hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
Agora o valor do compromisso de bit 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 de 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 hashada para obter um valor de hash de 256 bits, e então o compromisso de bits é realizado no valor de hash para economizar custos, em vez de se comprometer com cada bit da mensagem original mais longa diretamente.
O upgrade da bifurcação suave do Bitcoin Taproot, ativado 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 do Taproot, MAST (Merkel Abstract Syntax Tree) e assinaturas Schnorr.
O P2TR suporta dois métodos de gastos: gastos de acordo com o caminho 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 de torneira 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, ela 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 de no máximo cerca de 4MB. No entanto, sob a política padrão do Bitcoin, muitos nós apenas 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 hash usando os 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, assim quebrando 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 combinando-o com o comprometimento de bits, a consistência entre as entradas e saídas de cada subfunção pode ser restrita, garantindo a integridade e correção de toda a computação.
Atualmente, o Bitcoin fornece dois métodos nativos de gasto para um único 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, o UTXO pode ser gasto. Dois UTXOs podem ser gastos independentemente, e nenhuma restrição pode ser adicionada para restringir os dois UTXOs, o que significa que condições adicionais devem ser atendidas para que sejam gastos.
No entanto, Burak, o fundador do protocolo Ark, utilizou habilmente a bandeira 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, vinculando UTXO A e UTXO B. Em outras palavras, a transação Taketx é válida se e somente se UTXO B não tiver sido gasto pela transação 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 se... 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 transação em si, ou seja, eles não podem realizar a introspecção da transação. Se os scripts do Bitcoin pudessem verificar qualquer conteúdo da transação (incluindo as 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 quanto as provas de fraude podem ser usadas para escala de Bitcoin L2, com as principais diferenças mostradas na Tabela 2.
Tabela 2: Provas de Validade vs. Provas de Fraude
Com base no compromisso de bits, taproot, pré-assinatura e saída do conector, podem ser construídas provas de fraude baseadas no Bitcoin. Com base no taproot, também podem ser construídas provas de validade baseadas no Bitcoin, introduzindo opcodes de contrato, como OP_CAT. Além disso, dependendo se Bob possui 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. Nas provas de fraude com permissão, apenas grupos específicos podem agir como Bob para iniciar desafios, enquanto nas provas de fraude sem permissão, qualquer terceiro pode agir como Bob para iniciar desafios. A segurança das provas de fraude sem permissão é superior à das provas com permissão, reduzindo o risco de conluio 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 versus provas de fraude de várias rodadas
Conforme mostrado na Tabela 3, provas de fraude podem ser implementadas por meio 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: Interação de Uma Rodada vs. Interação de Múltiplas Rodadas
No paradigma de escala Layer2 do Bitcoin, o BitVM1 adota um mecanismo de prova de fraude de várias rodadas, enquanto o BitVM2 emprega um mecanismo de prova de fraude de uma rodada, e o bitcoin-circle stark utiliza provas de validade. Entre eles, o BitVM1 e o BitVM2 podem ser implementados sem fazer quaisquer modificações no protocolo 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 totalmente um script de 4MB, exigindo o uso da tecnologia de divisão de script - ou seja, dividir o script de cálculo completo em pedaços menores que 4MB, distribuídos em vários tapleafs.
Conforme mostrado na Tabela 3, as provas de fraude de várias rodadas são adequadas para cenários onde há o desejo de reduzir o cálculo de arbitragem on-chain e/ou onde não é possível identificar segmentos problemáticos de cálculo em um único passo. As provas de fraude de várias rodadas, como o nome sugere, requerem múltiplas rodadas de interação entre o comprovante e o verificador para localizar os segmentos problemáticos de cálculo, seguidos de arbitragem com base nos segmentos identificados.
O white paper inicial do BitVM de Robin Linus (comumente referido como BitVM1) utilizou provas de fraude com várias rodadas. Supondo que cada período de desafio dure uma semana e empregando um método de busca binária para localizar os segmentos problemáticos de computação, o período de resposta ao desafio na cadeia para o Verificador Groth16 poderia se estender até 30 semanas, resultando em baixa pontualidade. Embora atualmente existam equipes pesquisando métodos de busca n-ária 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 permitidos, 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, melhorando 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 aumento na computação de arbitragem on-chain.
Nesse modelo, a verificação de provas de fraude pode ser concluída por meio 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 que comprovem que seu cálculo está correto. Se o verificador encontrar inconsistências nessa evidência, o desafio é bem-sucedido; caso contrário, falha. 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 2, 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 do Bitcoin tem discutido sua reativação há anos. OPCAT agora foi atribuído o número 347 e foi habilitado no signet do Bitcoin.
A principal função do OP_CAT é combinar dois elementos na pilha e empurrar o resultado mesclado de volta para a pilha. Essa 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 dentro de um único bloco. No entanto, desde a atualização Taproot, o Bitcoin suporta a execução de scripts por meio de tapleaf, permitindo que o script verificador seja dividido em vários fragmentos, sendo que cada fragmento serve como um tapleaf para construir uma taptree. A consistência dos valores entre os fragmentos pode ser garantida por meio de comprometimento de bits.
Na presença de OP_CAT contratos, o STARK Verifier pode ser dividido em várias transações padrão menores que 400KB, permitindo que toda a verificação da prova de validade STARK seja concluída sem a necessidade de colaborar com mineradores.
Esta seção se concentra na tecnologia de divisão relevante de scripts Bitcoin sob as condições existentes, sem introduzir ou ativar novos opcodes.
Ao realizar a divisão de script, as seguintes dimensões de informação devem ser equilibradas:
Atualmente, os métodos de 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 fragmento também pode ser otimizado individualmente para aproveitar totalmente o espaço de pilha. Por exemplo, ao introduzir algoritmos baseados em tabelas de pesquisa melhores e carregar e descarregar dinamicamente a tabela de pesquisa, o tamanho do script de cada fragmento 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 daqueles dos scripts do Bitcoin, portanto, simplesmente traduzir implementações existentes para vários algoritmos em scripts do Bitcoin não é viável. Portanto, otimizações específicas para o cenário do Bitcoin precisam ser consideradas:
Este artigo primeiro apresenta as limitações dos scripts do Bitcoin e discute o uso de compromissos do Bitcoin para superar a limitação do estado sem UTXO, usar o Taproot para superar as limitações do espaço do script, usar saídas do conector para contornar as restrições do método de gasto do UTXO e usar contratos para superar as limitações de pré-assinatura. Em seguida, fornece uma visão geral abrangente e um resumo das características das provas de fraude e das provas de validade, as características das provas de fraude com permissão e sem permissão, as distinções entre provas de fraude de uma rodada e multirodadas, e a tecnologia de divisão de script do Bitcoin.