Script
Un mini lenguaje de programación que bloquea y desbloquea bitcoins
Script es un mini lenguaje de programación usado como mecanismo de bloqueo de las salidas en las transacciones de bitcoin.
Si un script completo (desbloqueo + bloqueo) es válido, la salida queda "desbloqueada" y puede gastarse.
El lenguaje Script
¿Qué es Script?
Script es un lenguaje de programación muy básico. Consiste en dos cosas:
1. Opcodes
Los opcodes son comandos que realizan operaciones — por ejemplo, OP_DUP (duplica el elemento superior de la pila), OP_HASH160 (hashea el elemento superior), OP_EQUALVERIFY (verifica si dos elementos son iguales) y OP_CHECKSIG (verifica una firma contra una clave pública). Cada opcode se representa con un solo byte.
2. Datos
Los elementos de datos dentro de un Script (por ejemplo, claves públicas, firmas) necesitan ser empujados manualmente a la pila usando un opcode de push. El opcode usado depende de cuántos bytes quieres empujar:
OP_0aOP_16— empujan los números de 0 a 16 (bytes0x00y0x51–0x60).OP_PUSHBYTES_X(0x01–0x4b) — empujan de 1 a 75 bytes.OP_PUSHDATA1/2/4— empujan cantidades mayores de datos.
Ejecución
¿Cómo se ejecuta un script?
Script es un lenguaje basado en pila (stack). Los comandos se ejecutan de izquierda a derecha. Para gastar una salida, el ScriptSig (desbloqueo) se concatena con el ScriptPubKey (bloqueo), y el resultado se ejecuta:
- Los datos se empujan a la pila.
- Los opcodes retiran elementos de la pila, operan sobre ellos y empujan los resultados de vuelta.
Si, al final de la ejecución, el elemento superior de la pila es "verdadero" (cualquier valor distinto de cero/vacío), el script es válido y la salida queda desbloqueada.
Validez
Un script es inválido si: la ejecución termina con "falso" en la cima de la pila; un opcode OP_VERIFY falla; o se encuentra un opcode inválido/deshabilitado (como OP_RETURN).
Scripts estándar
¿Qué scripts retransmiten los nodos?
Aunque puedes crear cualquier script personalizado, los nodos solo retransmiten un conjunto de patrones "estándar" (standard). Los tipos estándar son:
Legados:
- P2PK — Pay To Public Key
- P2PKH — Pay To Public Key Hash
- P2MS — Pay To Multisig
- P2SH — Pay To Script Hash
- OP_RETURN — almacenamiento de datos (no gastable)
SegWit / Taproot:
- P2WPKH — Pay To Witness Public Key Hash
- P2WSH — Pay To Witness Script Hash
- P2SH-P2WPKH y P2SH-P2WSH — versiones anidadas
- P2TR — Pay To Taproot
Los nodos no retransmiten scripts no estándar para proteger a los usuarios de crear trabas con errores (y por eso los scripts complejos se envuelven normalmente en P2SH o P2WSH).
Límites
¿Cuáles son los límites de Script?
- Límites de validez (consenso): un script no puede tener más de 201 opcodes, la pila no puede superar 1000 elementos, y un elemento de datos no puede tener más de 520 bytes.
- Límites de "estandaridad" (relay): además de las reglas de consenso, los nodos solo retransmiten los tipos de script estándar enumerados arriba.
Bitcoin Script es intencionalmente no Turing-completo (no tiene bucles), lo que mantiene la ejecución predecible y segura.