Taproot

A grande atualização de 2021

Taproot é uma grande atualização do Bitcoin, ativada em 2021.

A principal mudança foi a introdução do script de travamento Pay To Taproot (P2TR), que permite destravar uma saída usando uma escolha de scripts personalizados. Houve também duas mudanças extras importantes: as assinaturas Schnorr e o Tapscript.

Fundamentos

Como o Taproot funciona?

Um script P2TR pode ser destravado de uma de duas formas:

  1. Caminho de chave (key path). Gastar com uma única assinatura, como um pagamento comum.
  2. Caminho de script (script path). Revelar e satisfazer um dos scripts personalizados.

A parte interessante é que todos os scripts personalizados são organizados em uma árvore. Essa árvore de scripts é usada para criar uma raiz de Merkle, que é uma impressão digital de todas as formas de destravar a saída. Essa impressão digital (chamada de tweak) é então combinada com a chave pública para criar uma chave pública ajustada (o "taproot"), que é o que vai no script de travamento.

A beleza do P2TR é que a chave pública ajustada pode ser destravada com uma única assinatura. Essa assinatura é criada ajustando a chave privada original pelo mesmo valor do tweak usado na chave pública — o que funciona graças à matemática das curvas elípticas.

Benefícios

Quais são os benefícios do Taproot?

  1. Flexibilidade. Permite colocar várias condições de gasto diferentes em uma única saída.
  2. Privacidade. Se você gasta pelo caminho de chave, ninguém sabe que havia scripts alternativos. E mesmo uma transação multisig complexa pode parecer um pagamento comum na blockchain.
  3. Eficiência. Você só revela o script que de fato usou (não todos), e as assinaturas Schnorr são menores e podem ser verificadas em lote.

Construção

Como você constrói um endereço P2TR?

  1. Comece com uma chave pública interna.
  2. Organize os scripts de gasto (tapscripts) em uma árvore e calcule a raiz de Merkle dela.
  3. Calcule o tweak = hash(chave pública + raiz da árvore) e ajuste a chave pública: Q = P + tweak·G.
  4. Codifique a chave pública ajustada (32 bytes) em um endereço Bech32m com a versão de testemunha 1 (endereços bc1p...).
Ícone Ferramenta Raiz de Merkle
Ícone Ferramenta

Raiz de Merkle

Calcule a raiz de Merkle a partir de uma lista de TXIDs (um por linha, na ordem de exibição/explorer).

Ícone Ferramenta Endereço (Bech32)
Ícone Ferramenta

Endereço (Bech32)

Crie um endereço segwit (P2WPKH, P2WSH, P2TR) a partir de uma versão de testemunha e um programa de testemunha.

P2WPKH = 20 bytes (hash160) · P2WSH = 32 bytes (sha256) · P2TR = 32 bytes

Algoritmo de Assinatura

O Taproot usa assinaturas Schnorr (BIP340) em vez de ECDSA, com chaves públicas x-only de 32 bytes:

Ícone Ferramenta Schnorr
Ícone Ferramenta

Schnorr (BIP340)

Assine um hash de mensagem de 32 bytes com uma chave privada usando assinaturas Schnorr (usadas no Taproot) e verifique-a.

Tapscript

O Tapscript é uma versão atualizada da linguagem Script usada nos scripts de gasto do Taproot. Ele faz pequenos ajustes nos opcodes (ex.: substitui OP_CHECKMULTISIG por OP_CHECKSIGADD, mais adequado ao Schnorr) e remove o limite de tamanho do script, abrindo espaço para futuras melhorias.

Etimologia

O nome "taproot" (raiz pivotante, em botânica) remete à forma como a chave pública ajustada funciona como uma "raiz" única da qual todas as condições de gasto se ramificam.