Opcodes – Script 

« Back to Glossary Index

Opcodes utilizados en el script de Bitcoin

Esta es una lista de todas las palabras del Script, también conocidas como códigos de operación, comandos o funciones.

OP_NOP1-OP_NOP10 se reservaron originalmente para usarse cuando HASH y otras funciones de seguridad se vuelven inseguras debido a las mejoras en la informática.

False es cero o cero negativo (usando cualquier número de bytes) o una matriz vacía, y True es cualquier otra cosa.

Constantes

Cuando se habla de guiones, estas palabras que impulsan el valor generalmente se omiten.

Palabra Opcode Maleficio Entrada Salida Descripción
OP_0, OP_FALSE 0 0 0x00 Nada. (valor vacío) Se empuja una matriz vacía de bytes a la pila. (Esto no es un no-op: se agrega un elemento a la pila).
Pushdata Bytelength 1-75 0x01-0x4b (especial) datos Los siguientes bytes de código de operación son datos que se deben insertar en la pila
OP_PUSHDATA1 76 0x4c (especial) datos El siguiente byte contiene el número de bytes que se insertarán en la pila.
OP_PUSHDATA2 77 0x4d (especial) datos Los siguientes dos bytes contienen el número de bytes que se insertarán en la pila en un pequeño orden endian.
OP_PUSHDATA4 78 0x4e (especial) datos Los siguientes cuatro bytes contienen el número de bytes que se insertarán en la pila en un pequeño orden endian.
OP_1NEGATE 79 0x4f Nada. -1 El número -1 se empuja a la pila.
OP_1, OP_TRUE 81 0x51 Nada. 1 El número 1 es empujado a la pila.
OP_2-OP_16 82-96 0x52-0x60 Nada. 2-16 El número en el nombre de la palabra (2-16) se inserta en la pila.

Control de flujo

Palabra Opcode Maleficio Entrada Salida Descripción
OP_NOP 97 0x61 Nada Nada No hace nada.
OP_VER DESACTIVADO 98 0x62 Nada Versión del protocolo Pone la versión del protocolo bajo el cual se evaluará esta transacción en la pila
OP_IF 99 0x63 <expresión> if [declaraciones] [else [declaraciones]] * endif Si el valor de la pila superior no es False, se ejecutan las declaraciones. El valor de la pila superior se elimina.
OP_NOTIF 100 0x64 <expresión> notif [sentencias] [más [sentencias]] * endif Si el valor de la pila superior es False, las declaraciones se ejecutan. El valor de la pila superior se elimina.
OP_VERIF DESACTIVADO 101 0x65 Versión <versión> verif [sentencias] [más [sentencias]] * endif Si el valor de la pila superior es IGUAL a la versión del protocolo bajo el cual se evaluará esta transacción, se ejecutan las declaraciones. El valor de la pila superior se elimina.
OP_VERNOTIF DESACTIVADO 102 0x66 Versión <versión> vernotif [sentencias] [más [sentencias]] * endif Si el valor de la pila superior NO ES IGUAL a la versión del protocolo bajo el cual se evaluará esta transacción, se ejecutan las declaraciones. El valor de la pila superior se elimina.
OP_ELSE 103 0x67 <expresión> if [declaraciones] [else [declaraciones]] * endif Si no se ejecutó el OP_IF u OP_NOTIF u OP_ELSE anterior, entonces estas declaraciones sí lo son y si se ejecutaron los OP_IF u OP_NOTIF u OP_ELSE anteriores, entonces estas declaraciones no lo son.
OP_ENDIF 104 0x68 <expresión> if [declaraciones] [else [declaraciones]] * endif Finaliza un bloque if / else. Todos los bloques deben finalizar o la transacción no es válida . Un OP_ENDIF sin un OP_IF u OP_NOTIF coincidente previamente tampoco es válido .
OP_VERIFY 105 0x69 Verdadero Falso Nada / falla Marca la transacción como no válida si el valor de la pila superior no es verdadero. El valor de la pila superior se elimina.
OP_RETURN 106 0x6a Nada Finaliza el script con el valor superior en la pila como resultado final OP_RETURN también se puede utilizar para crear salidas de «Falso retorno» con un scriptPubKey que consta de OP_FALSE OP_RETURN seguido de datos. Tales salidas son demostrablemente indestructibles y se les debe dar un valor de cero Satoshis. Estas salidas se pueden eliminar del almacenamiento en el conjunto UTXO, reduciendo su tamaño. Actualmente, la red BitcoinSV admite múltiples salidas de RETORNO FALSO en una transacción dada con cada una capaz de almacenar hasta 100kB de datos. Después de la actualización de Genesis en 2020, los mineros serán libres de extraer transacciones que contengan salidas de FALSO RETORNO de cualquier tamaño.

Apilar

Palabra Opcode Maleficio Entrada Salida Descripción
OP_TOALTSTACK 107 0x6b x1 (alt) x1 Pone la entrada en la parte superior de la pila alternativa. Lo elimina de la pila principal.
OP_FROMALTSTACK 108 0x6c (alt) x1 x1 Pone la entrada en la parte superior de la pila principal. Lo elimina de la pila alternativa.
OP_2DROP 109 0x6d x1 x2 Nada Elimina los dos elementos superiores de la pila.
OP_2DUP 110 0x6e x1 x2 x1 x2 x1 x2 Duplica los dos elementos superiores de la pila.
OP_3DUP 111 0x6f x1 x2 x3 x1 x2 x3 x1 x2 x3 Duplica los tres elementos principales de la pila.
OP_2OVER 112 0x70 x1 x2 x3 x4 x1 x2 x3 x4 x1 x2 Copia el par de elementos dos espacios atrás en la pila al frente.
OP_2ROT 113 0x71 x1 x2 x3 x4 x5 x6 x3 x4 x5 x6 x1 x2 Los elementos quinto y sexto de vuelta se mueven a la parte superior de la pila.
OP_2SWAP 114 0x72 x1 x2 x3 x4 x3 x4 x1 x2 Intercambia los dos primeros pares de elementos.
OP_IFDUP 115 0x73 X x / xx Si el valor de la pila superior no es 0, duplíquelo.
OP_DEPTH 116 0x74 Nada <Tamaño de pila> Cuenta el número de elementos de la pila en la pila y coloca el valor en la parte superior
OP_DROP 117 0x75 X Nada Elimina el elemento de la pila superior.
OP_DUP 118 0x76 X xx Duplica el elemento de la pila superior.
OP_NIP 119 0x77 x1 x2 x2 Elimina el segundo elemento de la pila superior.
OP_OVER 120 0x78 x1 x2 x1 x2 x1 Copia el elemento de la pila del segundo al superior en la parte superior.
OP_PICK 121 0x79 xn … x2 x1 x0 <n> xn … x2 x1 x0 xn El elemento n de nuevo en la pila se copia en la parte superior.
OP_ROLL 122 0x7a xn … x2 x1 x0 <n> … x2 x1 x0 xn El elemento n de nuevo en la pila se mueve a la parte superior.
OP_ROT 123 0x7b x1 x2 x3 x2 x3 x1 Los tres primeros elementos de la pila se giran hacia la izquierda.
OP_SWAP 124 0x7c x1 x2 x2 x1 Los dos primeros elementos de la pila se intercambian.
OP_TUCK 125 0x7d x1 x2 x2 x1 x2 El elemento en la parte superior de la pila se copia e inserta antes del segundo elemento superior.
Palabra Opcode Maleficio Entrada Salida Descripción
OP_CAT 126 0x7e x1 x2 fuera Concatena dos cuerdas.
OP_SPLIT 127 0x7f xn x1 x2 Divide la secuencia de bytes x en la posición n.
OP_NUM2BIN 128 0x80 ab fuera Convierte el valor numérico a en una secuencia de bytes de longitud b.
OP_BIN2NUM 129 129 0x81 X fuera Convierte la secuencia de bytes x en un valor numérico.
OP_SIZE 130 0x82 en en tamaño Empuja la longitud de la cadena del elemento superior de la pila (sin reventarlo).

Lógica bit a bit

Palabra Opcode Maleficio Entrada Salida Descripción
OP_INVERT 131 0x83 en fuera Voltea todos los bits en la entrada.
OP_AND 132 0x84 x1 x2 fuera Booleano y entre cada bit en las entradas.
OP_OR 133 0x85 x1 x2 fuera Booleano o entre cada bit en las entradas.
OP_XOR 134 0x86 x1 x2 fuera Exclusivo booleano o entre cada bit en las entradas.
OP_EQUAL 135 0x87 x1 x2 Verdadero Falso Devuelve 1 si las entradas son exactamente iguales, 0 de lo contrario.
OP_EQUALVERIFY 136 0x88 x1 x2 Nada / falla Igual que OP_EQUAL, pero ejecuta OP_VERIFY después.

Aritmética

Nota: Las entradas aritméticas están limitadas a enteros con signo de 32 bits, pero pueden desbordar su salida.

Si algún valor de entrada para cualquiera de estos comandos es mayor a 4 bytes, el script debe abortar y fallar.

Palabra Opcode Maleficio Entrada Salida Descripción
OP_1ADD 139 0x8b en fuera 1 se agrega a la entrada.
OP_1SUB 140 0x8c en fuera 1 se resta de la entrada.
OP_2MUL DESHABILITADO 141 0x8d en fuera La entrada se multiplica por 2.
OP_2DIV DESACTIVADO 142 0x8e en fuera La entrada se divide por 2.
OP_NEGATE 143 0x8f en fuera Se invierte el signo de la entrada.
OP_ABS 144 0x90 en fuera La entrada se hace positiva.
OP_NOT 145 0x91 en fuera Si la entrada es 0 o 1, se invierte. De lo contrario, la salida será 0.
OP_0NOTEQUAL 146 0x92 en fuera Devuelve 0 si la entrada es 0. 1 de lo contrario.
OP_ADD 147 0x93 ab fuera a se agrega a b.
OP_SUB 148 0x94 ab fuera b se resta de a.
OP_MUL 149 0x95 ab fuera a se multiplica por b.
OP_DIV 150 0x96 ab fuera a se divide por b.
OP_MOD 151 0x97 ab fuera Devuelve el resto después de dividir a por b.
OP_LSHIFT 152 0x98 ab fuera Desplaza a la izquierda b bits, conservando el signo.
OP_RSHIFT 153 0x99 ab fuera Desplaza a la derecha b bits, conservando el signo.
OP_BOOLAND 154 0x9a ab fuera Si tanto a como b no son 0, la salida es 1. De lo contrario, 0.
OP_BOOLOR 155 0x9b ab fuera Si aob no es 0, la salida es 1. De lo contrario, 0.
OP_NUMEQUAL 156 0x9c ab fuera Devuelve 1 si los números son iguales, 0 en caso contrario.
OP_NUMEQUALVERIFY 157 0x9d ab Nada / falla Igual que OP_NUMEQUAL, pero ejecuta OP_VERIFY después.
OP_NUMNOTEQUAL 158 0x9e ab fuera Devuelve 1 si los números no son iguales, 0 en caso contrario.
OP_LESSTHAN 159 0x9f ab fuera Devuelve 1 si a es menor que b, 0 en caso contrario.
OP_GREATERTHAN 160 0xa0 ab fuera Devuelve 1 si a es mayor que b, 0 de lo contrario.
OP_LESSTHANOREQUAL 161 0xa1 ab fuera Devuelve 1 si a es menor o igual que b, 0 en caso contrario.
OP_GREATERTHANOREQUAL 162 0xa2 ab fuera Devuelve 1 si a es mayor o igual que b, 0 en caso contrario.
OP_MIN 163 0xa3 ab fuera Devuelve el menor de a y b.
OP_MAX 164 0xa4 ab fuera Devuelve el mayor de a y b.
OP_WITHIN 165 0xa5 x min max fuera Devuelve 1 si x está dentro del rango especificado (inclusivo a la izquierda), 0 en caso contrario.

Criptografía

Palabra Opcode Maleficio Entrada Salida Descripción
OP_RIPEMD160 166 0xa6 en picadillo La entrada se codifica con RIPEMD-160.
OP_SHA1 167 0xa7 en picadillo La entrada se codifica con SHA-1.
OP_SHA256 168 0xa8 en picadillo La entrada se codifica con SHA-256.
OP_HASH160 169 0xa9 en picadillo La entrada se codifica dos veces: primero con SHA-256 y luego con RIPEMD-160.
OP_HASH256 170 0xaa en picadillo La entrada se codifica dos veces con SHA-256.
OP_CODESEPARATOR 171 0xab Nada Nada Todas las palabras de verificación de firma solo coincidirán con las firmas de los datos después del OP_CODESEPARATOR ejecutado más recientemente.
OP_CHECKSIG 172 0xac sig pubkey Verdadero Falso Las salidas, entradas y script de toda la transacción (desde el OP_CODESEPARATOR ejecutado más recientemente hasta el final) se resumen en hash. La firma utilizada por OP_CHECKSIG debe ser una firma válida para este hash y clave pública. Si es así, se devuelve 1, 0 en caso contrario.
OP_CHECKSIGVERIFY 173 0xad sig pubkey Nada / falla Igual que OP_CHECKSIG, pero OP_VERIFY se ejecuta después.
OP_CHECKMULTISIG 174 0xae x sig1 sig2 … <número de firmas> pub1 pub2 <número de claves públicas> Verdadero Falso Compara la primera firma con cada clave pública hasta que encuentra una coincidencia ECDSA. Comenzando con la clave pública posterior, compara la segunda firma con cada clave pública restante hasta que encuentra una coincidencia ECDSA. El proceso se repite hasta que se hayan verificado todas las firmas o no queden suficientes claves públicas para producir un resultado exitoso. Todas las firmas deben coincidir con una clave pública. Debido a que las claves públicas no se vuelven a verificar si fallan en la comparación de firmas, las firmas deben colocarse en el scriptSig usando el mismo orden en que se colocaron sus claves públicas correspondientes en el scriptPubKey o redeemScript. Si todas las firmas son válidas, se devuelve 1, 0 en caso contrario. Debido a un error, un valor adicional no utilizado se elimina de la pila.
OP_CHECKMULTISIGVERIFY 175 0xaf x sig1 sig2 … <número de firmas> pub1 pub2 … <número de claves públicas> Nada / falla Igual que OP_CHECKMULTISIG, pero OP_VERIFY se ejecuta después.

Tiempo de bloqueo

Palabra Opcode Maleficio Entrada Salida Descripción
OP_CHECKLOCKTIMEVERIFY (anteriormente OP_NOP2) 177 0xb1 X x / falla Marca la transacción como no válida si el elemento de la pila superior es mayor que el campo nLockTime de la transacción; de lo contrario, la evaluación del script continúa como si se hubiera ejecutado un OP_NOP. La transacción también es inválida si 1. la pila está vacía; o 2. el elemento de la pila superior es negativo; o 3. el elemento de la pila superior es mayor o igual que 500000000 mientras que el campo nLockTime de la transacción es menor que 500000000, o viceversa; o 4. el campo nSequence de la entrada es igual a 0xffffffff. La semántica precisa se describe en BIP 0065 . Este código de operación quedará obsoleto después de la activación de la actualización de Genesis. Cualquier UTXO que lo incorpore a su script de bloqueo seguirá siendo gastable, sin embargo, si aparece en nuevas transacciones, se tratará como OP_NOP2
OP_CHECKSEQUENCEVERIFY (anteriormente OP_NOP3) 178 0xb2 X x / falla Marca la transacción como no válida si el tiempo de bloqueo relativo de la entrada (impuesto por BIP 0068 con nSequence) no es igual o mayor que el valor del elemento de la pila superior. La semántica precisa se describe en BIP 0112 . Este código de operación quedará obsoleto después de la activación de la actualización de Genesis. Cualquier UTXO que lo incorpore a su script de bloqueo seguirá siendo gastable, sin embargo, si aparece en nuevas transacciones, se tratará como OP_NOP3

Pseudo-palabras

Estas palabras se usan internamente para ayudar con la coincidencia de transacciones. No son válidos si se usan en scripts reales.

Palabra Opcode Maleficio Descripción
OP_PUBKEYHASH 253 0xfd Representa una clave pública cifrada con OP_HASH160.
OP_PUBKEY 254 0xfe Representa una clave pública compatible con OP_CHECKSIG.
OP_INVALIDOPCODE 255 0xff Coincide con cualquier código de operación que aún no está asignado.

Palabras reservadas

Cualquier código de operación no asignado también está reservado. El uso de un código de operación no asignado invalida la transacción.

Palabra Opcode Maleficio Cuando se utiliza…
OP_RESERVADO 80 0x50 La transacción no es válida a menos que ocurra en una rama OP_IF no ejecutada
OP_RESERVED1 137 0x89 La transacción no es válida a menos que ocurra en una rama OP_IF no ejecutada
OP_RESERVED2 138 0x8a La transacción no es válida a menos que ocurra en una rama OP_IF no ejecutada
OP_NOP1, OP_NOP4-OP_NOP10 176, 179-185 0xb0, 0xb3-0xb9 La palabra es ignorada. No marca la transacción como no válida.

Ejemplos

Para ver ejemplos de scripts de transacciones comunes de Bitcoin, consulte Transacciones de Bitcoin

Atribución

Este contenido se basa en el contenido de https://en.bitcoin.it/wiki/Script bajo Creative Commons Attribution 3.0 . Aunque puede haber sido ampliamente revisado y actualizado, reconocemos a los autores originales.

« Back to Glossary Index