Descripción General
Un opcode (código de operación) es una instrucción única en el Bitcoin Script, el lenguaje de programación basado en pila utilizado para definir las condiciones de gasto de bitcoin. Cada opcode realiza una operación específica, como empujar datos a la pila, realizar aritmética, verificar firmas criptográficas o controlar el flujo del programa. Los opcodes son los bloques de construcción fundamentales de toda la lógica de transacciones de Bitcoin.
Categorías de Opcodes
┌──────────────────┬──────────────────────────────┐
│ Categoría │ Ejemplos │
├──────────────────┼──────────────────────────────┤
│ Constantes │ OP_0, OP_1, OP_PUSHDATA │
│ Control de flujo │ OP_IF, OP_ELSE, OP_ENDIF │
│ Pila │ OP_DUP, OP_DROP, OP_SWAP │
│ Aritmética │ OP_ADD, OP_SUB, OP_EQUAL │
│ Criptografía │ OP_HASH160, OP_CHECKSIG │
│ Tiempo de bloqueo│ OP_CHECKLOCKTIMEVERIFY │
│ Especiales │ OP_RETURN, OP_NOP │
│ Deshabilitados │ OP_CAT, OP_MUL (seguridad) │
└──────────────────┴──────────────────────────────┘
Cómo Se Ejecutan los Opcodes
Bitcoin Script es un lenguaje basado en pila. Los datos se empujan a una pila, y los opcodes extraen valores de la pila, realizan operaciones y empujan los resultados de vuelta.
Ejemplo: Verificar una firma (P2PKH simplificado)
Pila: Script:
<sig> <pubKey> OP_DUP OP_HASH160
<pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Paso 1: Empujar <sig> Pila: [sig]
Paso 2: Empujar <pubKey> Pila: [sig, pubKey]
Paso 3: OP_DUP Pila: [sig, pubKey, pubKey]
Paso 4: OP_HASH160 Pila: [sig, pubKey, hash]
Paso 5: Empujar <pubKeyHash> Pila: [sig, pubKey, hash, pubKeyHash]
Paso 6: OP_EQUALVERIFY Pila: [sig, pubKey] (hashes coinciden)
Paso 7: OP_CHECKSIG Pila: [VERDADERO] ← ¡Gasto válido!
Opcodes Deshabilitados
Varios opcodes fueron deshabilitados en los primeros días de Bitcoin por Satoshi Nakamoto debido a preocupaciones de seguridad, incluyendo OP_CAT (concatenar), OP_MUL (multiplicar) y OP_LSHIFT. Algunos de estos son objeto de propuestas de re-habilitación en curso en la comunidad de desarrollo de Bitcoin.
Conceptos Erróneos Comunes
Bitcoin Script es intencionalmente no Turing-completo — carece de bucles y cómputo sin límites. Esta es una característica de seguridad, no una limitación. Garantiza que la validación del script siempre termine y tenga un uso predecible de recursos, previniendo ataques de denegación de servicio contra los nodos.