Descripción general
Bitcoin Script es el lenguaje de programación que impulsa todas las transacciones de Bitcoin. Cada salida de transacción contiene un script de bloqueo (scriptPubKey) que especifica las condiciones bajo las cuales se puede gastar la salida. Para gastar esa salida, una transacción posterior debe proporcionar un script de desbloqueo (scriptSig) que satisfaga esas condiciones. Script está intencionalmente limitado en capacidad para priorizar la seguridad y la previsibilidad.
Cómo funciona la ejecución de Script
Script utiliza un modelo de ejecución basado en pila donde los datos y los operadores se procesan de izquierda a derecha, empujando valores hacia y extrayendo valores de una pila:
Ejemplo: Verificación P2PKH (Pay-to-Public-Key-Hash)
Script de desbloqueo (scriptSig): <signature> <public_key>
Script de bloqueo (scriptPubKey): OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Ejecución:
Pila: []
Empujar <signature> → [sig]
Empujar <public_key> → [sig, pubKey]
OP_DUP → [sig, pubKey, pubKey]
OP_HASH160 → [sig, pubKey, hash(pubKey)]
Empujar <pubKeyHash> → [sig, pubKey, hash(pubKey), pubKeyHash]
OP_EQUALVERIFY → [sig, pubKey] (los hashes deben coincidir)
OP_CHECKSIG → [true] (firma válida)
Filosofía de diseño
Script es deliberadamente no Turing-completo: no tiene bucles y siempre termina. Esta elección de diseño previene ataques de denegación de servicio y garantiza que el tiempo de ejecución de cada script pueda ser acotado. Aunque esto limita la expresividad de Script en comparación con los lenguajes de contratos inteligentes de propósito general, hace que la validación de transacciones de Bitcoin sea altamente predecible y segura.
Tipos de script comunes
- P2PKH: Pago a un hash de clave pública (direcciones legacy que comienzan con 1)
- P2SH: Pago a un hash de script (direcciones que comienzan con 3), habilitando scripts complejos como multisig
- P2WPKH/P2WSH: Versiones SegWit con datos de testigo separados de la transacción
- P2TR: Salidas Taproot que pueden gastarse mediante una ruta de clave o una ruta de script
Casos límite
Un caso límite notable es el opcode OP_RETURN, que marca una salida como comprobablemente no gastable. Esto se usa para incrustar pequeñas cantidades de datos arbitrarios en la blockchain sin crear UTXOs no gastables que los nodos deban rastrear indefinidamente.