MSTR Cat

Blockchain/Nível IV · Protocolo a fundo/4.2 Atualizações/Lição 2

Tapscript e árvores de script (MAST)

A árvore que esconde o contrato

MateriaisUm explorador de blocos com capacidade de inspeção de dados de testemunhaUma carteira compatível com Taproot que suporta árvores de scriptsPapel milimetrado para desenhar árvores Merkle binárias

Curiosidade

  1. Por que gastar segundo uma cláusula específica de um contrato deveria revelar todo o contrato?
  2. O que faz com que uma assinatura cooperativa seja indistinguível de uma assinatura simples?
  3. Como uma única chave pode comprometer toda uma biblioteca de condições ocultas de gastos?

Explorar

  1. As árvores de sintaxe abstrata Merkleizadas (MAST) foram descritas pela primeira vez por Russell O’Connor em 2013 e desenvolvidas em propostas em 2016 e 2017. O conceito consiste em inserir condições alternativas de gasto em uma árvore Merkle, permitindo que o gastador revele apenas o ramo específico que está utilizando. Enquanto o termo “árvore de sintaxe abstrata” se referia a estruturas de compiladores nas quais cada condição criava um novo nó, a implementação do Bitcoin evoluiu de maneira diferente. Anthony Towns cunhou posteriormente o backronym “Merklized Alternative Script Tree” para descrever a estrutura efetivamente adotada: um conjunto de scripts completos e independentes, dos quais apenas um é selecionado no momento do gasto.
  2. O Taproot integrou essa estrutura de árvore nas regras de consenso por meio do BIP341. Cada folha da árvore Merkle contém um script, e a raiz dessa árvore contribui para a chave de saída final. Quando os fundos são gastos pelo “caminho do script”, o gastador revela o script específico da folha, seus inputs e a prova Merkle – os hashes dos nós irmãos em cada nível. Os galhos não utilizados permanecem ocultos na cadeia, preservando a privacidade para arranjos complexos como multisig ou timelocks, que anteriormente eram forçados a usar estruturas P2SH.
  3. Tapscript (BIP342) é o dialeto específico utilizado para esses scripts de folha, divergindo do Bitcoin Script legado em vários aspectos cruciais. OP_CHECKMULTISIG está desativado no tapscript. Seu substituto, OP_CHECKSIGADD, verifica uma assinatura contra uma chave e soma 1 a um contador; uma assinatura vazia não adiciona nada, enquanto uma inválida e não vazia faz com que todo o script falhe; um script encadeia uma verificação por chave e compara o valor do contador com o limite. Cada assinatura é associada a uma chave conhecida, portanto não há necessidade de tentativas sucessivas para encontrar a correspondência, e as assinaturas podem ser verificadas em lote.
  4. O Tapscript também reserva espaço para atualizações com códigos de operação OP_SUCCESS: hoje, qualquer script que contenha um deles funciona sem condições, por isso ninguém os utiliza, e um futuro soft fork pode atribuir a eles significados mais restritivos sem invalidar nada que esteja em uso. O limite antigo de 10.000 bytes para o tamanho dos scripts é removido no Tapscript; em vez disso, o tamanho do script é limitado apenas pelo peso do bloco e pelos limites estabelecidos pelas políticas. Além disso, o orçamento destinado às operações de assinatura aumenta conforme o tamanho do “witness”, evitando ataques de negação de serviço por meio da verificação excessiva de assinaturas.
  5. Considere um exemplo prático: um usuário possui fundos em um caminho de chave 2-de-2 para despesas cotidianas, onde ambas as partes assinam de forma cooperativa para revelar apenas uma assinatura Schnorr padrão. No entanto, a árvore de scripts inclui uma folha oculta que permite que uma única chave gaste os fundos após um período de bloqueio de um ano. Se o parceiro cooperativo deixar de responder, o usuário pode ativar esse ramo de recuperação. A prova Merkle revela apenas aquele script específico relacionado ao bloqueio temporal, mantendo outros ramos potenciais — como recuperação social ou hashlocks — completamente privados.
  6. Para verificar essas mecânicas, abra um explorador de blocos e localize uma transação Taproot gasta por meio do caminho do script. Inspecione o “witness”: as entradas do script, o próprio script folha e um bloco de controle cujo primeiro byte combina a versão da folha (0xc0 para tapscript) com um bit de paridade, seguido pela chave interna e um hash de 32 bytes por nível da árvore. Compare isso com um gasto por meio do caminho da chave do mesmo tipo de endereço; este último revela apenas uma assinatura de 64 ou 65 bytes e nenhum dado do script, demonstrando como contratos complexos permanecem invisíveis quando não são utilizados.

Fatos-chave

  • MAST significa Merklized Alternative Script Tree, um backronym cunhado por Anthony Towns para descrever a estrutura do Taproot.
  • O Tapscript remove o limite antigo de tamanho do script de 10.000 bytes, restringindo os scripts apenas pelo peso do bloco e pela política.
  • OP_CHECKSIGADD em tapscript substitui OP_CHECKMULTISIG para verificações de limite compatíveis com loteamento.
  • O path do script revela o script filho, suas entradas e uma prova Merkle dos hashes dos irmãos.
  • OP_SUCCESS os códigos OP reservam espaço para futuros soft forks sem quebrar os tapscripts existentes.
  • A versão da folha 0xc0 indica TapScript; as versões desconhecidas da folha permanecem sem restrições para futuros soft forks.

Exercício nove, seis, três, um

9ReunirListe 9 condições de gasto distintas (por exemplo, multisig, timelock, hashlock) que poderiam ser inseridas em uma árvore de scripts Taproot. Indique o propósito principal de cada condição.
6AgruparAgrupe as 9 condições em 6 categorias com base em suas implicações de privacidade: totalmente ocultas, parcialmente reveladas, sempre visíveis ou outras restrições estruturais.
3DestilarReduza os 6 grupos a 3 razões principais pelas quais esconder ramificações específicas de scripts é importante para a eficiência da cadeia e a segurança do usuário.
1CristalizarEscreva 1 frase explicando como uma árvore Merkle permite que uma única chave pública se comprometa com várias regras de gasto mutuamente exclusivas sem revelá-las.

Verificação de fatos

Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.

Abrir na academia interativa →

EN ES ZH JA KO RU DE FR MS