¿Qué es bitcoin script?

Cuando hablamos de Bitcoin Script nos referimos a un lenguaje que posibilita todas las funciones de Bitcoin. Desde algo tan sencillo como realizar un envío de BTC hasta la creación de cuentas multiusuarios. Por eso hoy te contamos todo sobre qué es bitcoin script.

Bitcoin Script es un lenguaje de programación empleado para procesar todas las transacciones. Este lenguaje se lee de izquierda a derecha y se basa en un conjunto de estructuras lineales llamadas pila o stack. Estas estructuras contienen datos en orden LIFO y sus instrucciones se ejecutan una detrás de la otra de forma consecutiva.

Cabe destacar que este lenguaje no puede resolver cualquier problema como las máquinas Turing, ya que su funcionamiento está limitado a no realizar bucles. Sin embargo, esta limitación es intencionada, ya que en caso de haber algún error este no entraría en un bucle de repeticiones. De otro modo un atacante podría crear muchas operaciones altamente complicadas para consumir el total de la tasa de hash y ralentizar el sistema mediante bucles.

¿Por qué Bitcoin necesita un lenguaje de programación?

Se necesita un lenguaje de programación en una red porque es lo que nos permite escribir otros programas y hacer que los ordenadores los ejecuten. En el caso de Bitcoin para hacer que los ordenadores ejecuten nuestros deseos necesitamos códigos de operación u OP CODES. Estos códigos cumplen funciones como las matemáticas, los bucles, la manipulación de memoria o las llamadas a funciones.

Por esta razón existe Bitcoin Script, para ser un conjunto de instrucciones que registran cada transacción realizada. En estas instrucciones está registrada la descripción de cómo los usuarios pueden acceder a la red Bitcoin y hacer uso de las monedas.

Objetivo de Bitcoin Script

El lenguaje Script se creó en Bitcoin con el objetivo de ofrecer una serie de parámetros flexibles y sencillos que hacen posible una transacción. Cuando se desarrolló Bitcoin Satoshi Nakamoto se encargó de deshabilitar funciones como la multiplicación. Esto hizo que el script de Bitcoin sea simple en la programación.

El script es básicamente lo que determina si una operación está autorizada para la transferencia de los fondos en la red Bitcoin. En resumen, el Bitcoin Script se creó con la intención de otorgar la naturaleza programable de Bitcoin.

Este lenguaje actualmente es quien nos permite enviar una transacción que se valide a sí misma si ciertas condiciones se cumplen. Esta es una de las propiedades que solo podemos encontrar en las criptomonedas. Es algo que obviamente no encontraremos en el dinero de papel y tampoco en el dinero digital actual.

Gracias a todos estos avances el dinero ha evolucionado al punto de actuar de forma descentralizada e independiente sin necesidad de intermediarios, solo con la programación de la propia moneda.

El Script de Bitcoin cumple otras funciones como evitar el uso de transacciones complejas y la creación de los posibles errores en el sistema. Gracias al Script las transacciones son relativamente fáciles de calcular además de, como ya sabemos, evitar los bucles infinitos que necesitan mucha más potencia de cálculo y ralentizan la red.

¿Cómo funciona un Bitcoin Script?

Uno de los Bitcoin Script más usados actualmente es el script P2PKH. A continuación veremos cómo funciona y explicaremos su comportamiento. Los Bitcoin Script son necesarios para realizar cualquier acción en Bitcoin. Cada acción se lleva a cabo por uno específico que dicta lo que se va a realizar.

No puede pasar nada en una operación que no esté dictado por un Bitcoin Script. Por ejemplo, si quisiéramos realizar una transacción, el lenguaje de bitcoin estaría dividido en dos partes, las secciones y el contenido del Bitcoin Script.

Por ejemplo, para realizar una transacción de P2PKH o Pay to Public Key Hash cada sección de la mano de su contenido sería: 

ScriptPubKey-12higDjoCCNXSA95xZMWUdPvXNmkAduhWv

ScriptSig-304502203f004eeed0cef2715643e2f25a27a28f3c578e94c7f0f6a4df104e7d163f7f8f022100b8b248c1cfd8f77a0365107a9511d759b7544d979dd152a955c867afac0ef78601

Este modelo de script es un script estándar que representa la forma más utilizada para enviar BTC. De primeras puede parecer una mezcla de números y letras totalmente difícil de entender, pero no es más que un sistema simple escondido tras mucha complejidad.

Esta transacción se divide en dos partes, la scriptPubKey y scriptSig. En la primera parte encontramos las acciones que se deben realizar en la transacción mientras que en la segunda encontramos la clave pública y la firma que ayudarán a verificar la autenticidad de la misma. De este modo la programación se asegura de que solo el usuario que tiene acceso a los fondos pueda moverlos.

En esta transacción también intervienen los OP Codes. Estos se encargan de crear estructuras avanzadas y programar operaciones dentro de la blockchain. Algunos se encargan de codificar entradas, otros verifican que los datos sean correctos y válidos, y otros duplican elementos. Cada uno tiene su propia función.

¿Cómo se ejecuta un Script?

Durante la ejecución del script primeramente se duplica la clave pública original del dueño de los fondos. Seguidamente esta misma clave pública pasa por un proceso de hashing. En este proceso el hash aplicado es SHA-256 y a la combinación resultante se le aplica el hash RIPEMD-160.

Posteriormente el resultado de los hashes se compara con el mismo hash que se encuentra en la clave pública del scriptPubKey para asegurar que sea la misma clave y esté verificada como válida. En caso de que coincida, el script procede a ejecutarse y se pasa al CHECKSIG donde se verifica la firma con la clave pública.

Con este orden se logra ejecutar todo lo programado en el script de forma ordenada y segura.

Smart Contract de Bitcoin

Es común escuchar afirmaciones de que Bitcoin no es capaz de ejecutar contratos inteligentes, pero esto no es verídico. El Bitcoin Script en sí es un creador de contratos inteligentes. Claramente sus capacidades no se encuentran a la altura de la red de Ethereum, ya que son limitadas, pero sí que puede crearlos y ejecutarlos. A continuación lo entenderemos todo a través de una sencilla explicación.

Como ya hemos mencionado anteriormente, el script de Bitcoin no tiene las capacidades de una máquina de Turing, ya que no exige una gran complejidad para ejecutar sus funciones programadas. Sin embargo, a esto contribuye el no permitir bucles, ya que por ello podemos saber con seguridad cuando acabará un programa y cómo lo hará. Cabe destacar que un programa no puede bloquearse a sí mismo y menos a su ejecutor que en este caso sería Bitcoin.

Tal vez a primera vista parezca una protección innecesaria, no obstante una de las razones de por qué es importante esta medida se encuentra en la imposibilidad de crear un script que se ejecute eternamente. De ser posible, un atacante podría atacar toda la red de Bitcoin mediante un ataque de denegación de servicio o DoS.

Gracias a esto, ningún programa de reproducción continua podrá evitar que Bitcoin se ejecute correctamente. Viéndolo desde este punto de vista, el Bitcoin Script es mucho más seguro que otras redes más complejas como Ethereum.

Características de Bitcoin Script

Este lenguaje cuenta con algunas características que permiten su funcionamiento y seguridad. Entre las principales cualidades que podemos mencionar se encuentran:

  • Simplicidad. Se requiere un nivel de procesamiento mínimo para llevar a cabo las transacciones.
  • Funcionalidad limitada. Aunque parece una desventaja, esta característica aporta una mayor seguridad a la red y la convierte en una de las más seguras.
  • Lenguaje Turing Incompleto. Esto se debe a que no cuenta con bucles y asegura que el programa no se repita una y otra vez hasta colapsar el sistema. De este modo se asegura el sistema y se impide la creación de códigos maliciosos en Bitcoin.
  • Implementación. Gracias a una de las características anteriores, la simplicidad, puede ser implementado en una gran variedad de dispositivos.
  • Toda la información necesaria para ejecutar el bitcoin script está incluida en él.

Lenguaje pequeño. Este lenguaje es relativamente pequeño, ya que solo puede contener 256 instrucciones exactamente. Cada instrucción se expresa en un byte.