Nivel 5

P2TR (Pay-to-Taproot)

La culminación de años de desarrollo. Privacidad por defecto, eficiencia máxima, flexibilidad total.

El estándar más avanzado

P2TR (Pay-to-Taproot), definido en BIP 341, es el tipo de transacción más moderno de Bitcoin. Las direcciones empiezan por bc1p.

P2TR combina todo lo aprendido de los tipos anteriores:

  • La simplicidad de P2PKH cuando solo hay una clave
  • La flexibilidad de P2SH/P2WSH para scripts complejos
  • La privacidad de ocultar condiciones no usadas
  • La eficiencia de firmas Schnorr

El scriptPubKey

OP_1 <32 bytes: tweakedPubKey>

En hexadecimal: 5120<32 bytes tweakedPubKey>

OP_1 (0x51) indica witness version 1. Los 32 bytes son la coordenada x de la clave pública "tweaked".

La tweaked key

La clave pública en la dirección no es la clave interna directamente. Es una versión "ajustada" (tweaked): Q = P + hash(P || m) · G

Donde:

  • P = clave pública interna
  • m = Merkle root del árbol de scripts (o bytes vacíos si no hay scripts)
  • G = punto generador
  • Q = clave tweaked (la que aparece en la dirección)

Este tweak tiene dos propósitos:

  1. Comprometer el árbol de scripts sin revelarlo
  2. Permitir gastar por key path con una firma de Q

Key path: el camino rápido

Si puedes firmar con la clave correspondiente a Q, el gasto es trivial:

Witness: <64 bytes: firma Schnorr>

Solo 64 bytes. El nodo verifica que la firma es válida para Q. No sabe ni le importa si había scripts alternativos.

Desde fuera, todo gasto por key path se ve igual: una firma de 64 bytes. Un multisig 3-de-5 donde los 3 firmantes cooperan se ve idéntico a un pago simple de una persona.

Script path: cuando necesitas scripts

Si quieres gastar usando un script del árbol MAST:

Witness: <datos que satisfacen el script> <script> <control block> ``` El control block contiene:

1 byte: versión + flag de paridad de la clave interna 32 bytes: clave pública interna P 32 bytes × n: prueba Merkle (hermanos en el árbol)

El nodo:

Extrae P del control block Calcula el hash del script Usa la prueba Merkle para calcular el Merkle root m Calcula Q' = P + hash(P || m) · G Verifica Q' == Q (del scriptPubKey) Ejecuta el script con los datos proporcionados

Ejemplo: herencia con script path Condiciones deseadas:

Key path: firma de Alice (propietaria) Script 1: firma de Bob (heredero) después de 1 año Script 2: multisig 2-de-3 de emergencia

Setup:

P = clave pública de Alice (o agregación MuSig2 si hay copropietarios) Árbol MAST con dos scripts

En el caso común, Alice gasta con su firma (key path). Nadie sabe que existían las otras condiciones. Si Alice muere, Bob espera 1 año y usa el script 1. Se revela ese script pero no el script 2. Bech32m (BIP 350) Las direcciones Taproot usan Bech32m, una corrección de Bech32. Bech32 original tenía un edge case: si el último carácter era p, añadir o quitar q al final no cambiaba el checksum. Bech32m corrige esto. Las direcciones Taproot empiezan por bc1p: bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297 El p indica witness version 1 (OP_1 = 0x51, y 0x51 - 0x50 = 1). Tapscript: reglas de script modificadas BIP 342 define Tapscript, las reglas de ejecución de scripts dentro de Taproot: Cambios principales:

OP_CHECKMULTISIG deshabilitado (usar OP_CHECKSIGADD) Firmas Schnorr de 64 bytes Limits de recursos ajustados Opcodes de éxito (OP_SUCCESSx) reservados para futuras actualizaciones

OP_CHECKSIGADD: <n> <pubKey> OP_CHECKSIGADD Verifica una firma. Si es válida, incrementa n y lo empuja. Si no, empuja n sin cambiar. Para multisig k-de-n: OP_0 <sig_n> <pubKey_n> OP_CHECKSIGADD ... <sig_1> <pubKey_1> OP_CHECKSIGADD <k> OP_NUMEQUAL Adopción Taproot se activó en noviembre 2021 (bloque 709.632). La adopción ha sido gradual:

Wallets: Sparrow, Blue Wallet, y hardware wallets principales lo soportan Exchanges: soporte variable, mejorando con el tiempo Uso: creciente, especialmente para nuevos protocolos y usuarios técnicos

Para máxima privacidad y eficiencia, Taproot es la mejor opción cuando está soportado por todas las partes involucradas.