¿Cómo construyo una dirección P2TR si solo quiero usar la ruta clave?

Quiero crear una dirección P2TR (Pay to Taproot) pero solo quiero acceder al gasto de la ruta clave, no tengo ningún uso para el gasto de la ruta del script en este ejemplo específico. ¿Qué debo hacer con respecto a la ruta del script en ese caso?

Respuestas (1)

BIP 341 (BIP-Taproot) analiza este ejemplo en el que no necesita la ruta del script.

Si las condiciones de gasto no requieren una ruta de secuencia de comandos, la clave de salida debe comprometerse con una ruta de secuencia de comandos no gastable en lugar de no tener ninguna ruta de secuencia de comandos.

El BIP también explica aquí la razón de esto.

Si la clave de salida taproot es un conjunto de claves, existe la posibilidad de que una parte malintencionada agregue una ruta de secuencia de comandos sin que las demás partes se den cuenta. Esto permite eludir la política multipartidista y robar las monedas.

Comprometerse con una ruta de secuencia de comandos no prescindible proporciona la capacidad de demostrar a un observador externo que no existe una ruta de secuencia de comandos oculta. Si no hubiera ningún ajuste, sería necesario revelar cualquier esquema de agregación de claves a ese observador, incluidas las claves públicas individuales para obtener el mismo efecto (e incluso esto puede no ser suficiente para ciertos esquemas de agregación de claves).

El taller de Bitcoin Optech en Taproot explica que se calcula la clave pública modificada usando:

Q = P + H(P|c)G

dónde

Q is the tweaked public key
P is the initial public key (P = xG where x is the private key)
H is the hash function
| is concatenation
c is the commitment to the script path spend
G is the generator point

Si no necesita el gasto de la ruta del script, puede calcular la clave pública modificada usando:

Q = P + H(bytes(P))G

donde bytes(P)es la serialización de P como se define en BIP 340 (BIP-Schnorr).

Esta clave pública modificada Q será su dirección Taproot (P2TR). Recuerde que no hacemos hash (modificado) de claves públicas con Taproot (SegWit v1) como lo hacemos con P2PKH, P2SH, P2WSH (SegWit v0).

¿Cómo funciona que "comprometerse con una ruta de secuencia de comandos no prescindible proporciona la capacidad de demostrar a un observador externo que no hay una ruta de secuencia de comandos oculta"? ¿No podría haber todavía, en el árbol de secuencia de comandos resultante, una ruta de secuencia de comandos oculta? simplemente no entiendo lo que esto significa.
@davidbak: Efectivamente, está revelando que hay una única ruta de secuencia de comandos que está codificada y esto es lo que está modificando su clave pública interna. Para que haya rutas de script adicionales, confía en el equivalente de las colisiones hash. El ajuste no solo es el hash de una ruta de script única, sino que el mismo ajuste también es el hash de otra ruta de script (potencialmente codificada en múltiples en un árbol de Merkle). Tan teóricamente posible pero prácticamente extremadamente improbable.