Descripción General
Cada UTXO de Bitcoin está bloqueado por una condición de gasto — un conjunto de requisitos criptográficos y lógicos que deben cumplirse antes de que el bitcoin pueda transferirse. Estas condiciones están codificadas en el script de bloqueo de la salida (también llamado scriptPubKey) y se satisfacen proporcionando el script de desbloqueo correcto (scriptSig) o datos de testigo en una transacción de gasto.
Condiciones de Gasto Comunes
Bitcoin admite una variedad de condiciones de gasto, desde simples hasta muy complejas:
- Firma única: La condición más común, que requiere una firma digital válida de una clave privada.
- Multifirma: Requiere M de N firmas (p. ej., 2 de 3) para autorizar el gasto.
- Bloqueo de hash: Requiere revelar una preimagen que hace hash a un valor especificado, utilizado en HTLCs.
- Timelock: Impide el gasto hasta que se alcance una cierta altura de bloque o marca de tiempo.
- Combinación: Múltiples condiciones pueden combinarse usando la lógica del Script de Bitcoin (AND, OR, IF/ELSE).
Modelo de Ejecución de Script
Script de Bloqueo (en UTXO):
OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Script de Desbloqueo (en tx gastadora):
<firma> <pubKey>
Ejecución Combinada:
Pila: [firma, pubKey]
-> OP_DUP -> [firma, pubKey, pubKey]
-> OP_HASH160 -> [firma, pubKey, pubKeyHash]
-> <hash> -> [firma, pubKey, pubKeyHash, hashEsperado]
-> OP_EQUALVERIFY -> [firma, pubKey] (hashes coinciden)
-> OP_CHECKSIG -> [TRUE] (firma válida)
Taproot y Condiciones Avanzadas
Con Taproot, las condiciones de gasto ganaron flexibilidad significativa. Una salida Taproot puede gastarse mediante un gasto por ruta de clave simple (firma Schnorr única) o un gasto por ruta de script que revela una de potencialmente muchas condiciones de gasto alternativas ocultas en un árbol de Merkle. Esto permite que las condiciones complejas permanezcan privadas a menos que se usen realmente.
Casos Límite
- Si una condición de gasto es demasiado compleja, el script puede exceder los límites de tamaño o requerir cómputo excesivo, haciendo el UTXO efectivamente imposible de gastar.
- Las salidas con el opcode
OP_RETURNson comprobablemente no gastables por diseño, utilizadas para incrustar datos en la cadena.