Opcodes – Script
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.