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:
- Caminho de chave (key path). Gastar com uma única assinatura, como um pagamento comum.
- 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?
- Flexibilidade. Permite colocar várias condições de gasto diferentes em uma única saída.
- 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.
- 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?
- Comece com uma chave pública interna.
- Organize os scripts de gasto (tapscripts) em uma árvore e calcule a raiz de Merkle dela.
- Calcule o tweak = hash(chave pública + raiz da árvore) e ajuste a chave pública:
Q = P + tweak·G. - Codifique a chave pública ajustada (32 bytes) em um endereço Bech32m com a versão de testemunha 1 (endereços
bc1p...).
Raiz de Merkle
Endereço (Bech32)
Algoritmo de Assinatura
O Taproot usa assinaturas Schnorr (BIP340) em vez de ECDSA, com chaves públicas x-only de 32 bytes:
Schnorr
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.