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:

  1. É 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.
  2. 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:

  1. 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.
  2. 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):

Í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