P2TR
Pay To Taproot — trava uma saída a uma chave pública e scripts opcionais
BIP 341: Taproot — Regras de gasto do SegWit versão 1
P2TR (Pay To Taproot) é um script de travamento que trava uma saída a uma chave pública e a múltiplos scripts de travamento personalizados opcionais*.
É efetivamente um híbrido dos scripts P2WPKH e P2WSH, mas a trava em si é pequena e contém uma única chave pública (graças a uma matemática e criptografia engenhosas).
O P2TR foi introduzido na atualização Taproot.
*Os scripts personalizados usam uma variante do script chamada tapscript.
Uso
Como o P2TR funciona?
Os detalhes técnicos de um P2TR são um pouco complexos, então vou mostrar a estrutura do ScriptPubKey e da testemunha para você ter uma ideia de como funcionam.
ScriptPubKey (trava)
Um script de travamento P2TR começa com o opcode de versão OP_1 seguido do push de dados de uma chave pública:
OP_1 <chave pública (32 bytes)> Porém, essa chave pública é um pouco "diferente" por dois motivos:
- É uma chave pública ajustada (tweaked). É como qualquer chave pública normal, mas foi ajustada para incluir um compromisso com todos os scripts personalizados que você gostaria de usar para destravar a saída. Esse valor de ajuste (tweak) é basicamente o hash de todos os scripts personalizados.
- As chaves públicas no P2TR têm apenas 32 bytes. São um pouco mais curtas que as chaves comprimidas de 33 bytes dos scripts antigos, pois não incluem o byte inicial (0x02 ou 0x03) que indica se a coordenada y é par ou ímpar.
A chave pública ajustada é chamada de taproot, daí o nome Pay To Taproot.
ScriptSig
Uma saída P2TR não é destravada pelo ScriptSig, e sim pelo campo de testemunha.
Testemunha (destrava)
Uma saída P2TR pode ser destravada de duas formas, e a estrutura do campo de testemunha varia conforme o método:
- Gasto por caminho de chave (Key Path Spend). Método padrão. Você fornece uma única assinatura (Schnorr) para a chave pública ajustada — barato e indistinguível de um pagamento comum.
- Gasto por caminho de script (Script Path Spend). Você revela um dos scripts personalizados (tapscript), uma prova de Merkle de que ele faz parte do compromisso, e os dados para satisfazê-lo.
Ferramentas
O endereço P2TR é uma codificação Bech32m da versão de testemunha 1 + a chave pública ajustada de 32 bytes (endereços começando com bc1p):