Pular para o conteúdo
buybitcoinsmart

Glossário / Protocolo e atualizações

Tapscript

O que é o tapscript?
Tapscript é a versão do Bitcoin Script executada nos gastos por caminho de script do Taproot, com assinaturas Schnorr, sem teto de opcodes e com um orçamento de assinaturas no lugar dos antigos contadores.

Especificação no BIP-342.

O BIP-342 o define, e o byte de versão de folha 0xc0 marca um ramo de uma taptree como tapscript e não como algo inventado depois. Em relação à linguagem de script usada em todos os outros casos, ele elimina o limite de 201 operações que não são de empilhamento e o teto de tamanho de script de 10.000 bytes, e desativa o OP_CHECKMULTISIG. Se você gasta um bitcoin do Taproot revelando um script, é nessa linguagem que esse script está escrito.

Como funciona

Um gasto com tapscript entrega à rede três coisas na pilha de testemunhas: os argumentos que o script pede, o próprio script e um bloco de controle que prova que o script pertence ao endereço.

A verificação de assinatura mudou primeiro. O OP_CHECKSIG e o OP_CHECKSIGVERIFY agora esperam uma chave pública x-only de 32 bytes e uma assinatura Schnorr de 64 bytes, ou 65 bytes quando um tipo de sighash não padrão é anexado. O OP_CHECKMULTISIG e o OP_CHECKMULTISIGVERIFY falham de imediato, e o OP_CHECKSIGADD ocupa o lugar deles.

A contabilidade de recursos mudou em segundo lugar, e essa é a parte com consequências reais. Os antigos contadores, 201 operações por script e uma contagem global de sigops, desapareceram. Cada entrada passa a ter um orçamento de validação que começa em 50 unidades de peso mais o tamanho da própria testemunha, e cada verificação de assinatura bem-sucedida subtrai 50 dele. Você compra trabalho de verificação com bytes, o que é uma regra mais limpa do que uma contagem fixa e significa que um script pode conter tantas chaves quantas você estiver disposto a pagar.

Duas portas ficaram abertas para futuras atualizações. Os opcodes 80, 98, 126 a 129, 131 a 134, 137, 138, 141, 142, 149 a 153 e 187 a 254 passaram a ser OP_SUCCESS: se qualquer um deles aparecer em qualquer parte do script, mesmo em um ramo que nunca é executado, o script é bem-sucedido de imediato. Chaves públicas de qualquer comprimento diferente de 32 bytes são tratadas como um tipo de chave desconhecido e são aceitas. As duas regras permitem que um soft fork posterior atribua comportamento real sem um hard fork. O que permaneceu inalterado é o teto de 520 bytes para um único elemento da pilha e o limite de 1.000 elementos na pilha.

Onde você o encontra

O tapscript aparece sempre que uma saída Taproot é gasta pelo caminho difícil, revelando um ramo em vez de assinar com a chave agregada.

O usuário real mais pesado é o armazenamento de dados. Uma inscrição de ordinals é um envelope de tapscript, um trecho de conteúdo empilhado em blocos de 520 bytes entre OP_FALSE OP_IF e OP_ENDIF, e existe nessa forma precisamente porque o tapscript removeu o limite de 10.000 bytes de script e colocou o desconto da testemunha por trás disso. Qualquer que seja sua opinião sobre a prática, é por isso que a maioria das pessoas já viu um gasto com tapscript sem saber.

Os usos mais próximos de quem guarda bitcoins são mais discretos. Ramos de recuperação com bloqueio temporal, alternativas de depósito em garantia e os scripts de canal mais recentes da Lightning vivem todos como folhas de tapscript, e o Bitcoin Core pode construí-los e assiná-los por meio do Miniscript dentro de um descritor tr().

Tapscript vs Bitcoin Script

O Bitcoin Script é a família; o tapscript é um de seus membros. Três versões de script estão ativas na rede ao mesmo tempo: a linguagem legada, a linguagem da versão 0 do SegWit e o tapscript, e um nó escolhe entre elas a partir da saída que está sendo gasta, não a partir de algo no próprio script.

Isso importa quando você copia um script de um tutorial. Um esquema dois de três escrito com OP_CHECKMULTISIG é válido em uma saída P2WSH e inválido em uma folha de taptree. Um script que empilha 4.000 bytes ultrapassa o limite de consenso em um script de testemunha P2WSH e é permitido no tapscript. Os mesmos opcodes na página, um livro de regras diferente por baixo.

Não confundir com

Perguntas frequentes

O tapscript é o que minha carteira usa quando envio de um endereço bc1p?

Normalmente não. A maioria dos gastos do Taproot segue o caminho de chave, que precisa de uma assinatura e de nenhum script. O tapscript só é executado quando a carteira revela um ramo da taptree, como uma condição de recuperação ou de depósito em garantia.

Por que o tapscript eliminou o limite de 10.000 bytes de script?

Porque o limite de peso de bloco já restringe quanto script qualquer pessoa pode publicar, e o antigo teto apenas forçava contratos complexos a assumir formas incômodas. O efeito colateral foi tornar viáveis as inscrições de dados grandes.

Leia a seguir

Termos relacionados

Mais em Protocolo e atualizações

Ler esta página em inglês