Glosario / Protocolo y actualizaciones
Tapscript
- ¿Qué es tapscript?
- Tapscript es la versión de Script de Bitcoin que se ejecuta en los gastos por ruta de script de Taproot, con firmas Schnorr, sin tope de opcodes (códigos de operación) y con un presupuesto de firmas en vez de los antiguos contadores.
Se especifica en el BIP-342.
Lo define el BIP-342, y el byte de versión de hoja 0xc0 marca una rama de un taptree (árbol de scripts de Taproot) como tapscript y no como algo inventado más adelante. Frente al lenguaje de script que se usa en todos los demás casos, elimina el límite de 201 operaciones distintas de las inserciones de datos y el tope de tamaño de script de 10.000 bytes, y desactiva el opcode OP_CHECKMULTISIG. Si usted gasta una moneda Taproot revelando un script, este es el lenguaje en el que está escrito ese script.
Cómo funciona
Un gasto con tapscript entrega a la red tres cosas en la pila del testigo: los argumentos que pide el script, el propio script y un bloque de control que demuestra que el script pertenece a la dirección.
Lo primero que cambió fue la verificación de firma. Los opcodes OP_CHECKSIG y OP_CHECKSIGVERIFY esperan ahora una clave pública x-only (solo coordenada x) de 32 bytes y una firma Schnorr de 64 bytes, o de 65 bytes cuando se añade un tipo de sighash no predeterminado. Los opcodes OP_CHECKMULTISIG y OP_CHECKMULTISIGVERIFY fallan sin más, y el opcode OP_CHECKSIGADD ocupa su lugar.
Lo segundo que cambió fue la contabilidad de recursos, y esta es la parte con consecuencias reales. Los antiguos contadores, 201 operaciones por script y un recuento global de sigops, han desaparecido. En su lugar, cada entrada recibe un presupuesto de validación que parte de 50 unidades de peso más el tamaño de su propio testigo, y cada verificación de firma que tiene éxito le resta 50. El trabajo de verificación se compra con bytes, lo que es una regla más limpia que un recuento fijo y significa que un script puede contener tantas claves como se esté dispuesto a pagar.
Se dejaron dos puertas abiertas para futuras actualizaciones. Los opcodes 80, 98, 126 a 129, 131 a 134, 137, 138, 141, 142, 149 a 153 y 187 a 254 pasaron a ser OP_SUCCESS: si cualquiera de ellos aparece en cualquier parte del script, incluso en una rama que nunca se ejecuta, el script tiene éxito de inmediato. Las claves públicas de cualquier longitud distinta de 32 bytes se tratan como un tipo de clave desconocido y se aceptan. Ambas reglas permiten que una bifurcación blanda (soft fork) posterior asigne un comportamiento real sin una bifurcación dura (hard fork). Lo que se mantuvo sin cambios es el tope de 520 bytes para un solo elemento de la pila y el límite de 1.000 elementos en la pila.
Dónde aparece
Tapscript aparece cada vez que una salida Taproot se gasta de la forma difícil, revelando una rama en lugar de firmar con la clave agregada.
El mayor usuario real es el almacenamiento de datos. Una inscripción de Ordinals es un sobre de tapscript, una porción de contenido apilada en tramos de 520 bytes entre los opcodes OP_FALSE OP_IF y OP_ENDIF, y existe de esa forma precisamente porque tapscript eliminó el límite de 10.000 bytes de script y puso a su favor el descuento del testigo. Piense usted lo que piense de esa práctica, es la razón por la que la mayoría de la gente ha visto un gasto con tapscript sin saberlo.
Los usos más cercanos a un ahorrador son más discretos. Las ramas de recuperación con bloqueo temporal (timelock), las alternativas de escrow (depósito en garantía) y los scripts de canal más recientes de Lightning viven todos como hojas de tapscript, y Bitcoin Core puede construirlas y firmarlas mediante Miniscript dentro de un descriptor tr().
Tapscript frente a Script de Bitcoin
Script de Bitcoin es la familia; tapscript es uno de sus miembros. En la red están vigentes a la vez tres versiones de script: el lenguaje heredado (legacy), el lenguaje de la versión 0 de SegWit y tapscript, y un nodo elige entre ellas a partir de la salida que se gasta, no de nada que haya en el propio script.
Eso importa cuando usted copia un script de un tutorial. Un dos de tres escrito con OP_CHECKMULTISIG es válido en una salida P2WSH e inválido en una hoja de un taptree. Un script que apila 4.000 bytes supera el límite de consenso en un script de testigo P2WSH y no plantea ningún problema en tapscript. Los mismos opcodes en la página, otro reglamento por debajo.