Skip to main content

Script | Bitcoin Glossary | Mapping Bitcoin

Script

Protocolo

Also known as: Bitcoin Script

Lenguaje basado en stack para definir condiciones de gasto en Bitcoin. Permite contratos simples sin un sistema de computación Turing completo.

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 ScriptDescripciónPrefijo de dirección
P2PKPago a Clave Pública (original, raramente usado)N/A
P2PKHPago a Hash de Clave Pública1...
P2SHPago a Hash de Script3...
P2WPKHPago a Hash de Clave Pública Testigobc1q...
P2TRPago a Taprootbc1p...

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.