Descripción general
Script es el lenguaje de programación integrado de Bitcoin que define las condiciones para gastar salidas de transacciones. Cada salida de bitcoin contiene un pequeño programa (el script de bloqueo o scriptPubKey) que especifica qué evidencia debe proporcionarse para gastarlo. El gastador proporciona la evidencia en el script de desbloqueo (scriptSig) o en los datos de testigo. Cuando un nodo valida una transacción, ejecuta estos scripts para determinar si las condiciones de gasto se cumplen.
Ejecución basada en pila
Script usa un modelo de ejecución basado en pila, similar al lenguaje de programación Forth. Los datos y las operaciones se procesan usando una pila de último en entrar, primero en salir (LIFO):
Ejemplo: Ejecución de Script P2PKH
Script de desbloqueo: <firma> <clavePública>
Script de bloqueo: OP_DUP OP_HASH160 <hashClavePública> OP_EQUALVERIFY OP_CHECKSIG
Ejecución (de izquierda a derecha, la pila crece hacia arriba):
Paso 1: Paso 2: Paso 3: Paso 4: Paso 5:
<firma> <clavePúb> <clavePúb> <hash160>
<firma> <clavePúb> <clavePúb> OP_EQUALVERIFY
<firma> <firma> (compara los 2 superiores)
<clavePúb>
<firma>
Push firma Push clave OP_DUP OP_HASH160 Paso 6:
OP_CHECKSIG
→ VERDADERO ✓
Por qué no es Turing-completo
Script es deliberadamente limitado. No tiene bucles, no tiene recursión y tiene un conjunto restringido de opcodes. Esto es una característica, no una limitación:
- Ejecución predecible — Cada script termina en tiempo y memoria acotados
- Sin bucles infinitos — Un script malicioso no puede consumir recursos infinitos del nodo
- Verificable — El comportamiento de cualquier script puede analizarse completamente antes de su ejecución
- Enfocado en la seguridad — La superficie de ataque se minimiza limitando las capacidades
Tipos comunes de Script
| Tipo de Script | Descripción | Prefijo de dirección |
|---|---|---|
| P2PK | Pago a Clave Pública (original, raramente usado) | N/A |
| P2PKH | Pago a Hash de Clave Pública | 1... |
| P2SH | Pago a Hash de Script | 3... |
| P2WPKH | Pago a Hash de Clave Pública Testigo | bc1q... |
| P2TR | Pago a Taproot | bc1p... |
Evolución de Script
Bitcoin Script ha evolucionado a través de varias actualizaciones:
- Original — Opcodes básicos para verificaciones de firma y comparaciones de hash
- P2SH (2012) — Habilitó scripts complejos ocultos detrás de un hash
- SegWit (2017) — Movió la ejecución del script al testigo, corrigiendo la maleabilidad de transacciones
- Taproot (2021) — Introdujo Tapscript con nuevos opcodes y verificación Schnorr
Concepto erróneo común
Bitcoin Script a veces se descarta como demasiado limitado para una programabilidad útil. En realidad, admite una amplia gama de condiciones de gasto que incluyen multifirma, timelocks, bloqueos de hash y combinaciones de los mismos. El proyecto Miniscript demuestra que se pueden expresar políticas complejas y componibles dentro de las restricciones de Script mientras se mantienen garantías de seguridad.