El Bitcoin Script es el lenguaje que Bitcoin emplea para hacer todo cuanto puede hacer, desde mandar fondos desde un monedero hasta permitir la creación de cuentas multiusaurios. Todas y cada una estas funcionalidad contenidas en una fácil herramienta extensible y poderosa que vamos a conocer ahora.

Cuando charlamos de Bitcoin Script, charlamos de un lenguaje de programación simple empleado en Bitcoin para el procesamiento de las transacciones que se lee de izquierda a derecha. Este está basado en una serie de estructuras lineales, conocidas como pila (stack), que poseen datos existentes en orden LIFO (Last In – Firt Out). Cada instrucción en este lenguaje se ejecuta sucesivamente una tras la otra.

Este lenguaje no es Turing Completo debido a que su funcionalidad es limitada y no puede efectuar bucles. Con lo que no es capaz de solucionar cualquier género de inconveniente como las máquinas Turing. Sin embargo, esta restricción es intencional en tanto que de esta forma se evita la entrada en un bucle infinito o bien sin fin y la ejecución de fallos. Donde las partes maliciosas del programa pueden tener la libertad de crear operaciones difíciles para consumir la tasa de hash y frenar el sistema de Bitcoin por medio de bucles infinitos.

Un lenguaje de programación es preciso debido a que nos deja redactar programas y que los ordenadores ejecuten nuestros deSeos. En Bitcoin, para dar comunicar nuestros deSeos son precisos los códigos de operación (OP CODES), que sirven para múltiples funciones. Como la manipulación de memoria, matemáticas, bucles, llamadas a funciones, entre otras muchas.

Por ello, Bitcoin Script es en esencia un conjunto de instrucciones programadas que se registran con cada transacción realizada. Estas instrucciones describen de qué manera los usuarios puede conseguir accesos a los bitcoins libres en internet y hacer empleo de ellos.

¿Qué es un OP_CODE o bien Código de Operación?

En informática, un OP_CODE (Operation Code, en inglés) o bien código de operación, es una porción de una instrucción de lenguaje de máquina que detalla la operación a ser efectuada. Su especificación y formato van a ser ciertos por la arquitectura del conjunto de instrucciones (ISA) del componente que procesa la instrucción. Normalmente este procesamiento es efectuado por el hardware de PC (en general un CPU).

Pero asimismo puede ser un software preparado singularmente para imitar el funcionamiento de un CPU y procesar dichas instrucciones. Generalmente una instrucción completa de lenguaje de máquina contiene un OP_CODE y, opcionalmente, la especificación de uno o bien más operandos, sobre los que el código de  operación debe actuar. Ciertas operaciones tienen operandos tácitos, o bien en verdad ninguno.

En Bitcoin y en otras muchas criptomonedas, los OP_CODES son la columna vertebral del sistema que deja programar las instrucciones de las transacciones. Recordemos que Bitcoin (y otras criptomonedas derivadas del mismo) son dinero programable. Y aquí la palabra clave es “programable”, puesto que Bitcoin Script es realmente un lenguaje de programación donde las instrucciones son dadas en OP_CODES que la red Bitcoin ha definido por adelantado para su funcionamiento. En verdad, debido a la estructura como ha sido creada BItcoin, existe la posibilidad de delimitar doscientos cincuenta y seis OP_CODES, diferentes los que comienzan desde el número 0 hasta el doscientos cincuenta y cinco. De estos doscientos cincuenta y seis OP_CODES hoy día se hallan en activo un total de ciento dieciseis.

Estos OP_CODES son los que dejan efectuar las diferentes operaciones en Bitcoin y su programación de transacciones, tal como lo son el control de flujo de datos, manejo de incesantes, manejo del stack o bien pila, manejo lógico, aritmética, bloqueo de tiempo, pseudo-palabras, operaciones criptográficas,  y palabras reservadas. Puedes ver una lista completa y actualizada de los diferentes OP_CODES de manera directa en el código de Bitcoin.

OP_CODES de Bitcoin Script

scritpSig y scriptPubKey, las partes esenciales de todo Bitcoin Script

En la red Bitcoin, cada Bitcoin Script se divide en 2 géneros de scripts, los scriptSig y scriptPubKey. El primero, el scriptSig es el script de desbloqueo, que precisa de una clave pública y una firma digital. En verdad, después de advertir múltiples inconvenientes en las primeras versiones del software de Bitcoin, se incluyeron las verificaciones de las firmas. Con lo que el sistema solo admite efectuar transacciones si las firmas y su verificación cumplen con una serie de reglas establecidas que garantizan un comportamiento conveniente en internet.

El segundo, el scriptPubKey, es el script de bloqueo, que contiene un hash de clave pública, asimismo llamada dirección de Bitcoin. Ciertos script de Bitcoin precisan de multifirmas, o sea, de la autorización de múltiples usuarios para efectuar la transacción. En un caso así, el script es más difícil debido a que se trata de una operación mucho mayor que la estándar entre iguales. En verdad, la programación como tal de las transacciones de Bitcoin es guardada en esta una parte del script.

Objetivo de su creación

El propósito de la creación de un lenguaje script en Bitcoin, es el de suministrar una serie de factor simples y flexibles para poder permitir una transacción. De este modo, cuando Satoshi Nakamoto desarrolló Bitcoin, deshabilitó múltiples funciones, entre ellas la multiplicación. Con lo que el script se sostiene simple en concepto de programación. Entonces, este lenguaje de programación es lo que determina es si una operación puede efectuarse o bien no. Esto es, si dicha operación está autorizada para la trasferencia de fondos.

En pocas palabras, la creación del Bitcoin Script es lo que da la naturaleza programable de Bitcoin. Es lo que nos deja por servirnos de un ejemplo, mandar una transacción que exactamente la misma se valide solo si determinadas condiciones se cumplen. Esta propiedad es algo único de Bitcoin y las criptomonedas, algo que el dinero digital actual no puede lograr, y mucho menos el anticuado dinero físico. Es la evolución del dinero llegado a un punto en que aun este puede actuar de forma independiente y descentralizada atendiendo sencillamente a la programación engastada en exactamente el mismo.

Por otra parte, el script de Bitcoin asimismo evita la creación de fallos en el sistema y el empleo superfluo de transacciones muy complejas. En verdad, el script hace que las transacciones sean parcialmente simples de calcular. Además de esto, los bucles infinitos requieren mucha más potencia de cálculo y ralentizan las redes, como se mentó al comienzo.

Ejemplo de un Bitcoin Script

Ante de proseguir ahondando más en lo que es y los diferentes elementos que forman un Bitcoin Script, veamos un pequeño ejemplo del mismo. Ahora vamos a ver un pequeño Bitcoin Script muy utilizado hoy día para las transacciones en Bitcoin. Vamos a explicar su comportamiento y funcionamiento como las diferentes unas partes del mismo, para entonces ir ahondando en sus propiedades.

Ejemplo de un Bitcoin Script: Transacciones en Bitcoin utilizando el script P2PKH

Los Bitcoin Script están presentes en todas y cada una de las acciones de Bitcoin. Lo cierto es que cada operación en Bitcoin es llevada a cabo por un script concreto que acota lo que se marcha a efectuar. Fuera de lo que afirma dicho script nada puede pasar.

Por ejemplo, si deseamos hacer una transacción un script para esto sería el siguiente:

Ejemplo de un Bitcoin Script

Todo el contenido precedente es una simple transacción en Bitcoin del tipo P2PKH (Pay to Public Key Hash). Esta clase de script es un script estándar y en verdad es la manera más utilizada para mandar bitcoins. A primer aspecto se muestra como algo muy enigmático y bastante difícil de comprender. Lo cierto es que tras tal dificultad, se oculta un fácil sistema que vamos a explicar ahora.

Explicando a fondo la transacción

El precedente Bitcoin Script está acotado en 2 partes: scriptPubKey y scriptSig. En el primero, están las acciones a efectuarse, al tiempo que el segundo contiene la firma y clave pública para contrastar la autenticidad de semejantes acciones. De tal manera se asegura que solo quien tiene acceso a los fondos pueda efectuar alguna operación con exactamente los mismos. Por otra parte, están los OP_CODES que en la operación son los siguientes:

  • OP_DUP: Duplica el factor de la pila superior.
  • OP_HASH160: La entrada se codifica 2 veces: primero con SHA-doscientos cincuenta y seis y después con RIPEMD-ciento sesenta.
  • OP_EQUALVERIFY: Comprueba que los datos introducidos sean adecuados y válidos.
  • OP_CHECKSIG: Las salidas, entradas y el script de toda la transacción se resumen en un hash. La firma usada ha de ser una firma válida para este hash y ha de estar al lado de la clave pública.

Ahora bien, lo que sucede a lo largo de la ejecución del script es lo siguiente:

  1. En primer sitio, la clave pública original del dueño (que está en el scriptSig) de los fondos se duplica.
  2. La clave pública duplicada pasa entonces a un proceso de hashing. En este proceso se le aplica primer un hash SHA-256 y al resultado entonces se le aplica un hash RIPEMD-ciento sesenta.
  3. El resultado de los hash se equipara con el hash de la clave pública que está en el scriptPubKey para cerciorarse de que sea EQUALVERIFY (o sea, sea exactamente la misma clave y sea verificada como válida).
  4. Si coincide, el script prosigue ejecutándose y se efectúa el CHECKSIG para contrastar la firma con la clave pública.

De esta forma se realiza todo lo indicado en el script de manera segura y programada. Si quieres conocer más a fondo como marcha Bitcoin Script, puedes visitar nuestro servicio Bit2Me TV, donde vas a poder ver ciertos vídeos explicando considerablemente más sobre este interesante lenguaje.

Unas partes de un Bitcoin Script

Bitcoin Script, el lenguaje smart contract de Bitcoin

Muchas personas son las que piensan y arguyen que Bitcoin es inútil de ejecutar smart contracts. Lo cierto es que esto no es cierto, pues con Bitcoin Script como tal creas smart contracts. Efectivamente sus capacidades son limitadas en comparación por poner un ejemplo con lo que puede hacer Ethereum, mas eso no quita que Bitcoin Script tenga la capacidad de crear smart contracts. Mas expliquemos esto de una manera más fácil y detallada.

En primer sitio, como hemos dicho, Bitcoin Script no es lenguaje Turing Completo. Esto debido a que no requiere una dificultad mayor para ejecutar sus funciones previstas. Mas, una de las razones primordiales es que al no tener bucles, se puede saber seguramente en qué momento y de qué manera acabará un programa determinado. No hay posibilidad para la ejecución de fallos, lo que le aporta mayor seguridad. Del mismo modo no hay posibilidad de que los programas se bloqueen o bien bloqueen a su ejecutor, que en un caso así se trata de Bitcoin.

Un buenejemplo de la relevancia de estas protecciones sería que con Bitcoin Script es imposible crear scripts que se ejecuten eternamente. En verdad, el peligro de un script que se ejecute eternamente es que abriría las puertas para agredir la red a través de un ataque de denegación de servicio (DoS).

Pero que Bitcoin Script limite esta clase de operaciones resguarda a la red de semejantes ataques. Con lo que no hay posibilidad de que un programa de Script con un bucle progresivo pueda eludir que Bitcoin funcione apropiadamente. En resumen, Bitcoin Script es considerablemente más seguro que sus contrapartes más complejas como las presentadas por Ethereum o bien NEO.

¿Cuánto sabes, criptonauta?

¿La existencia del Bitcoin Script facilita el proceso de actualización y compatibilidad entre las versiones del software Bitcoin?

Evolución de Bitcoin Script

El lenguaje Script está presente en Bitcoin desde su primera versión. Satoshi Nakamoto, el desarrollador de Bitcoin, examinando la estructura de los pagos digitales, determinó que se precisaba un modelo que dejara a la máquina determinar si las transacciones eran efectuadas gastaban las salidas de forma exitosa o bien no. O sea, que se comprobará si las firmas eran adecuadas y si estas coincidían con la clave pública.

Este es uno de los inconvenientes más estudiados en informática, determinar si el gasto tiene éxito o bien descalabro con la meta de eludir el doble gasto. Y la solución a esto era la de emplear una máquina que cumpliese con determinados criterios establecidos. En Bitcoin, esta siempre y en toda circunstancia debe detenerse, por este motivo la implementación de un lenguaje Turing Incomplete basado en un sistema de pila es ideal. De esta manera, el mecanismo que maneja los Scripts en Bitcoin es muy simple y seguro.

En sus comienzos, el Script presentaba múltiples fallos graves y todavía hay algunos de ellos. Un caso es el bug de OP_LSHIFT, el que fue conocido como el bug que podía matar al Bitcoin. O bien el asimismo conocido error de verificación de Script que Gavin Andressen y Satoshi Nakamoto corrigieron en dos mil diez.

La existencia de esta clase de fallos van a llevar a muchos a meditar que Nakamoto no efectuó las pruebas suficientes al Script ya antes del lanzamiento de Bitcoin. En verdad, muchos especulan que el script fue una idea de último instante. Tal vez la idea original de Nakamoto era mandar bitcoins de forma directa a las claves públicas, mas al agregar soporte para las direcciones de Bitcoin, se percató de que un lenguaje de script sería verdaderamente útil para brindar una compatibilidad cara adelante.

Características

El lenguaje Script de Bitcoin tiene múltiples peculiaridades y cualidades, entre aquéllas que podemos mencionar:

  1. Es simple y precisa de un procesamiento mínimo.
  2. Su funcionalidad es limitada, lo que aporta mayor seguridad al sistema.
  3. Al ser un lenguaje Turing Incomplete no tiene bucles, con lo que se asegura que el programa deja de repetirse y acaba. De este modo, se evita la posibilidad de que ocurran fallos y códigos maliciosos a la red Bitcoin.
  4. Su simplicidad le deja ser incorporado en una extensa gama de dispositivos.
  5. No hay un estado precedente o bien siguiente a la ejecución del script. Toda la información precisa para ejecutar el script ha de estar contenida en él.
  6. Está basado en una pila y puede emplear 2 tipos. Una primordial y otra opción alternativa. Donde esta última se emplea para el almacenaje de datos de cálculos de pasos intermedios. De una manera muy semejante a la tecla memoria en las calculadoras.
  7. El lenguaje de script de Bitcoin es bastante pequeño. Solo puede contener doscientos cincuenta y seis instrucciones, puesto que cada instrucción está expresada en un byte.