¿Qué es un OP_CODE?

Un OP_CODE o bien Código de Operación, es un código o bien instrucción primitiva que nos deja programar operaciones en una blockchain como Bitcoin. En verdad, merced al conjunto de estos códigos es que podemos crear estructuras de programación avanzadas o bien smart contracts que entonces son leídos y ejecutados por los nodos de una red blockchain.

Las instrucciones y también indicaciones que se usan en informática para la programación de equipos de computación y máquinas virtuales son conocidas como OP_CODE (Operation Code) o códigos de operación.

Estos códigos señalan las operaciones o bien funciones que han de ser efectuadas y ejecutadas por el hardware o bien software. En el caso de los hardware, la manera de los OP_CODE va a estar definida conforme el género de arquitectura del conjunto de operaciones (ISA) del PC. Esto es, conforme las instrucciones que tenga el dispositivo para la interpretación y ejecución de los códigos de operación. En el caso de los software, los OP_CODE están creados con un género de ISA, o bien arquitectura de operaciones, desarrollada en especial para ser interpretada por la máquina virtual o bien el interpretador de bytes.

Los códigos de operación dejan que un programa de computación pueda producir una orden al ordenador y que este la intérprete y la ejecute.

¿De qué forma marcha un OP_CODE?

Para que las máquinas, equipos y ordenadores puedan percibir y ejecutar una orden concreta, es preciso producir instrucciones en un lenguaje que puedan comprender. Por esta razón, estas instrucciones son escritas en un lenguaje de programación que contiene códigos de operación o bien es traducido en remata instancia a una serie de códigos de operación.

Estos códigos están escritos en un idioma que normalmente conocemos, como el inglés, y después son traducidos por un programa compilador o bien traductor a fin de que las máquinas lo comprendan en su lenguaje binario. Esto es, las instrucciones mnemónicas escritas en nuestro lenguaje para la interpretación de nosotros los humanos, tienen su equivalente en lenguaje binario a fin de que las máquinas puedan interpretarlas de manera fácil. Y de esta manera poder actuar sobre la instrucción recibida y ejecutarla con corrección.

Ejemplo de un OP_CODE

Un buen ejemplo de OP_CODE lo podemos ver en la próxima imagen:

OP_CODE de los procesadores Intel

En ella podemos ver ciertos OP_CODES pertenecientes a las instrucciones capaces de ejecutar un procesador o bien CPU de computadora (particularmente los x86 de Intel). Como vas a poder ver es algo enigmático de leer y difícilmente se puede programar empleando exactamente el mismo (si bien ciertos desarrollos se hacen en este género de lenguaje debido a su velocidad).

La situación en el planeta cripto, no es muy diferente y en Bitcoin por servirnos de un ejemplo, podemos ver algo como esto:

Programación de una transaccion en Bitcoin

Ciertamente es igualmente enigmático, mas esta fácil sentencia es equivalente a una transacción en Bitcoin. Si deseas saber más de exactamente la misma, puedes leer nuestro artículo dedicado a Bitcoin Script donde explicamos a profundidad que hacen precisamente estas instrucciones.

Tipos de códigos de operación en el script de Bitcoin

Los OP_CODES para el Bitcoin Script pueden clasificarse conforme la función y también indicaciones que vayan a ejecutar en el sistema. Por servirnos de un ejemplo, estos códigos pueden ser empleados para quitar, agregar, desplazar o bien virar elementos en la pila, examinar y efectuar operaciones aritméticas, validar o bien inutilizar transacciones, entre otras más funciones.

A continuación presentaremos un listado de los códigos de operación clasificados conforme su tipo y funciones. Sin embargo es esencial indicar que esta lista no es concluyente ni radical, pues hay muchos códigos de operación en el script de Bitcoin y acá solo se mientan ciertos de ellos.

Códigos de inserción

OP_0 = 0x00 y OP_FALSE = OP_0: los dos códigos empujan o añaden un factor o bien una matriz vacía de bytes a la pila. Ninguno de los 2 ha de ser confundido con NO_OP

OP_PUSHDATA1 = 0x4c, OP_PUSHDATA2 = 0x4d y OP_PUSHDATA4 = 0x4e: En el primer código, el siguiente byte contiene el número de bytes que se introducirán en la pila. En el segundo código los siguientes dos bytes poseen el número de bytes que se introducirán en la pila, al paso que en el tercero son los siguientes cuatro bytes los que poseen el número de bytes que se agregarán a la pila. En estos códigos el proceso de incorporar los bytes se efectuará en formato endian.

OP_NEGATIVE = 0x4f y OP_TRUE = OP_1: En un caso así, el número negativo -1 se empuja a la pila, al paso que en OP_TRUE el número positivo 1 se empuja a la pila.

Códigos de control

OP_NOP = 0x61: este código no ejecuta ninguna operación, mas se emplea en los casos en los que haya que rellenar algún espacio en el programa.

OP_IF = 0x63 y OP_NOTIF = 0x64: los dos códigos se usan para ejecutar las declaraciones. En el primer código, se ejecutan si el valor de la pila superior no es FALSE; en el segundo código, se ejecutan si los valores de la pila superior si es FALSE. De esta manera en los dos casos, el valor de la pila superior se suprime.

OP_ELSE = 0x67: se usa para aseverar o bien negar las declaraciones. En el caso de haberse ejecutado los 2 códigos precedentes (OP_IF y OP_NOTIF) las declaraciones se niegan. En el caso de no haberse ejecutado, las declaraciones se aseveran.

OP_ENDIF = 0x68: se emplea para finalizar un bloque, puesto que sin esto, las transacciones no serían válidas. Un código OP_ENDIF sin un código OP_IF precedente tampoco va a ser válido.

OP_RETURN = 0x6a: se usa para marcar una salida de transacción como no válida.

Códigos de aplicaciones y operaciones de pila

OP_TOALTSTACK = 0x6b y OP_FROMALTSTACK = 0x6c: el primer código se emplea para desplazar la entrada en la parte superior de la pila opción alternativa y suprimirla de la pila primordial. El segundo código ejecuta el proceso contrario; mueve la entrada cara la parte superior de la pila primordial y la suprime de la pila opción alternativa.

OP_DROP = 0x75 y OP_DUP = 0x76: se emplean para eliminar un elemento de la pila superior y para duplicar un elemento de la pila superior, respectivamente.

Códigos de operaciones de empalmes

OP_SIZE = 0x82: este código empuja la longitud de la cadena del elemento superior de la pila, sin reventarlo.

Los códigos OP_SUBSTR = 0x7f, OP_LEFT = 0X80 y OP_RIGHT = 0x81 han sido deshabilitados. Se usaban para:

  • Devolver una sección en una cadena.
  • Mantener sólo los caracteres sobrantes de un punto concreto en una cadena, y
  • Mantener sólo los caracteres sobrantes al lado derecho de un punto concreto en una cadena, respectivamente.

Códigos para operaciones numéricas

OP_1ADD = 0x8b y OP_1SUB = 0x8c: se emplean para incorporar (sumar) o bien quitar (restar) 1 a la entrada respectivamente.

OP_2MUL = 0x8d y OP_1DIV = 0x8e: se empleaban para multiplicar o dividir por dos la entrada respectivamente, mas los dos fueron deshabilitados.

OP_ABS = 0x90 y OP_NEGATE = 0x8f: se usan para invertir el signo de la entrada, o sea, para hacer positiva o bien negativa la entrada respectivamente.

OP_MIN = 0xa3 y OP_MAX = 0xa4: estos códigos se usan para devolver el menor valor de a y b, o bien en su caso para devolver el mayor valor de a y b respectivamente.

Códigos para codificación y encriptación

OP_RIPEMD160 = 0xa6: se emplea para codificar la entrada con el algoritmo RIPEMD-ciento sesenta, con el propósito de conseguir hash más cortos mas del mismo modo seguros para la creación de direcciones.

OP_SHA1 = 0xa7: se emplea para codificar la entrada con el algoritmo SHA-1, el que se usa para calcular y conseguir un valor de comprobación única para todas y cada una de las entradas no mayor a doscientos sesenta y cuatro – 1 bit.

OP_SHA256 = 0xa8: se emplea para codificar la entrada con el algoritmo SHA-256.

OP_HASH160 = 0xa9: se emplea para codificar la entrada dos veces. La primera codificación a través del algoritmo SHA-doscientos cincuenta y seis y la segunda con el algoritmo RIPEMD-160

OP_HASH256 = 0xaa: se emplea para codificar la entrada dos veces a través del algoritmo SHA-doscientos cincuenta y seis.

OP_CHECKMULTISIG = 0xae: se emplea para efectuar una comparación entre la primera firma con cada clave pública hasta localizar una coincidencia ECDSA. Entonces repite el proceso con la segunda firma y las claves públicas siguientes y de esta manera consecutivamente hasta el momento en que todas y cada una de las firmas hayan sido verificadas.

Códigos para bloqueo de tiempo

OP_CHECKLOCKTIMEVERIFY = 0xb1: este código marca como no válida la entrada si el factor superior de la pila es mayor que el campo establecido como nLockTime, que representa la condición que se debe cumplir. En la aplicación de este código hay múltiples implicaciones que asimismo hacen que la entrada sea inválida. Por poner un ejemplo, si la pila está vacía o bien su elemento superior es negativo, entre otros muchos.

OP_CHECKSEQUENCEVERIFY = 0xb2: asimismo se emplea para marcar la entrada como no válida si el tiempo de bloqueo es diferente o bien mayor al valor del elemento superior de la pila.

Cada uno de estos OP_CODE efectúa una función bien definida, y el arreglo conjunto de estos OP_CODE es lo que deja al Bitcoin marcha tal y como lo hace. No obstante, los OP_CODE no son únicos de Bitcoin. Ethereum por poner un ejemplo, asimismo tiene su registro de OP_CODE que le deja introducir instrucciones a su Ethereum Virtual Machine, y de allá efectuar todas y cada una de las operaciones de esta blockchain. Eso va desde las transacciones más simples hasta operaciones complejas de smart contracts de esa plataforma. Lo mismo pasa con el resto de criptomonedas que tienen asimismo sus OP_CODES o bien herramientas equivalentes para su funcionamiento.

De allá la relevancia de exactamente los mismos, no solo conocerlos sino más bien desarrollarlos para ampliar las funcionalidades de las criptomonedas y los ecosistemas que estas poseen.

¿Cuánto sabes, criptonauta?

¿Todas y cada una de las criptomonedas usan OP_CODES para su programación?

OP_CODES en otras blockchain

Cuando escuchamos que las criptomonedas tienen la capacidad de ser programadas, la verdad decimos que las blockchain y sus tokens pueden ser manipuladas merced a los OP_CODES. Efectivamente, lo primero se escucha considerablemente más fácil, mas la realidad técnica es esa: los OP_CODES está en todas y cada una de las blockchain y son los que nos dejan programar las transacciones y demás funcionalidades de exactamente las mismas.

Pero ¿Qué tan grandes y avanzados pueden ser estos OP_CODES en otras blockchain concon respecto a Bitcoin? La contestación a esto es sencilla: no hay limites, solo la imaginación de los desarrolladores.

Para ponernos un buen y claro ejemplo, veamos a Ethereum. En Ethreum vemos una blockchain formada por 3 elementos, el token Ether, el término de Gas o bien costo de operación, y la Ethereum Virtual Machine. Vistos de forma individual pareciesen no guardar relación, mas lo cierto es que están íntimamente integrados, y dicha integración depende de la relación creada por los OP_CODES en Ethereum.

Así toda vez que efectuamos una transacción en Ethereum, lo que hacemos es programar con OP_CODES la operación. Esta operación nos dejará manejar Ether y el pago de la operación lo vamos a hacer con GAS, mas toda esta programación es leída y ejecutada por la Ethereum Virtual Machine. De este modo tenemos claro de qué manera estos 3 elementos se comunican y de qué forma los OP_CODES juegan un papel esencial en el funcionamiento de la red.

Lo mismo podemos observar en redes como Litecoin (que utiliza un equivalente a Bitcoin Script), Dash, EOS, Bitcoin Cash (emplea asimismo un equivalente si bien modificadado de Bitcoin Script) y lo mismo podemos ver con el resto de criptomonedas. En suma, los OP_CODES no solo están en Bitcoin, son parte esencial de las criptomonedas y las blockchain donde estás hacen vida.

bitcoin
Bitcoin (BTC) $ 60,991.00
ethereum
Ethereum (ETH) $ 4,082.25
binance-coin
Binance Coin (BNB) $ 477.01
tether
Tether (USDT) $ 1.00
cardano
Cardano (ADA) $ 2.12
solana
Solana (SOL) $ 203.70
xrp
XRP (XRP) $ 1.08
polkadot
Polkadot (DOT) $ 42.57
dogecoin
Dogecoin (DOGE) $ 0.268952
usd-coin
USD Coin (USDC) $ 1.00