Introducción

Todos sabemos que Bitcoin es una criptomoneda o moneda digital construida gracias a una red de nodos que funcionan gracias al software de Bitcoin Core. Todo esto funcionando en una estructura descentralizada que le permite brindarnos altos niveles de seguridad, privacidad, resistencia a la censura y mucho más.

Pero ¿Sabías que internamente Bitcoin cuenta con un lenguaje de programación propio? Pues bien, si no lo sabías este lenguaje existe y se llama Bitcoin Script. Este es el responsable de que seamos capaces de realizar las distintas acciones posibles en Bitcoin. Pero ¿Cómo funciona Bitcoin Script? ¿Cuál es el objetivo de crear una moneda con un lenguaje de programación? Pues bien examinaremos estas interrogantes a continuación

Bitcoin Script, el lenguaje de Bitcoin

Bitcoin Script como su nombre lo describe es un lenguaje de scripting que nos permite programar determinadas acciones dentro de esta criptomonedas. Esto significa que sus instrucciones son tomadas, interpretadas y ejecutadas en el momento en el que son activadas por el usuario o los nodos de la red.

En tal sentido, cada acción determinada en un lenguaje script es un evento o suceso. Uno que luego se desencadena en los nodos de la red y queda plasmado de forma inalterable en la blockchain.

En Bitcoin, este lenguaje permite programar las distintas acciones que realizamos con nuestras monedas. Por ejemplo, cuando realizamos un pago, lo que realmente es un script de pago que lleva nuestras monedas a otra cuenta. Este script se encarga de todo, desde usar nuestras claves privadas y públicas, hasta la entrega del control de dichas monedas a esa otra persona. Algo muy útil, teniendo en cuenta que esto ofrece una enorme flexibilidad a Bitcoin.

Sin embargo, Bitcoin Script tiene una serie de particularidades que lo hacen único y eso es lo que conoceremos a continuación.

Relacionado: ¿Qué es la criptografía asimétrica?

Propiedades

Ahora bien, como todo lenguaje de programación, Bitcoin Script tiene una serie de propiedades y características que lo hacen único. Entre ellas podemos mencionar las siguientes:

  1. El procesamiento de instrucción es del tipo stack o de pila. Esto significa que las instrucciones se apilan unas sobre otras.
  2. El orden de lectura es del tipo LIFO (Last In - Last Out). Esto significa que la última instrucción en entrar a la pila, es la primera en salir.
  3. Este lenguaje no es Turing Completo, lo que significa que tiene una funcionalidad limitada.
  4. Los códigos de Bitcoin Script se llaman OP_CODES o códigos de operación. En realidad, tal como está diseñado Bitcoin Script, en este sistema solo podrán existir 256 OP_CODES. Estos códigos nos servirán para crear operaciones de manipulación de memoria, matemáticas, bucles, llamadas a funciones, entre muchas otras.
  5. En lenguaje requiere de muy poca potencia para ejecutar sus instrucciones.

Adicional a estos elementos, hay otros dos elementos que son importantes dentro de los Bitcoin Script. Estos elementos son los scriptSig y scriptPubKey. El primero, el scriptSig es el script de desbloqueo, que requiere de una clave pública y una firma digital.  El segundo, el scriptPubKey, es el script de bloqueo, que contiene un hash de clave pública, también denominada dirección de Bitcoin.

Pero veamos en práctica cada una de estas partes con un sencillo ejemplo, que explicaremos paso a paso.

Ejemplo de un Bitcoin Script

Un ejemplo de Bitcoin Script, sería la siguiente sentencia, conocida como scriptPubKey:

OP_DUP OP_HASH160 f6b137461f8bd00a52357670fd2b175b259937d7 OP_EQUALVERIFY OP_CHECKSIG

Adicionalmente, a estos códigos les acompaña el siguiente scriptSig o script de firmado.

3045022100ff0ce40d6cebf491ef78a5e9a36f4acfec0ba1b3814e6fbbbe184c7823e700470220245c951e7f9456aa9b375c0c795b2c81590d35e141136435ea0d8033657041e001

036e3e5a48123d88a9e325b7692594b18b0692d5ca7f6beff8fb8adaef54dd98fc

A simple vista, la sentencia se muestra difícil de leer. Pero si estudiamos la misma por parte, podremos entender la misma. En primer lugar, veamos el scriptSig. En estos espacios están contenidos dos datos importantes, la clave pública del usuario y su firma digital. Estos datos son los primeros en introducirse en la pila de ejecución del Bitcoin Script. Quedando en primer lugar, la firma y en segundo lugar, la clave pública.

Seguidamente comienza a ejecutarse, el script. La primera operación es el código de operación OP_DUP. Este código ordena que se duplique la cima de pila de instrucciones. Es decir, la clave pública se duplicará quedando su duplicado en tercer lugar. El segundo código de operación es OP_HASH160. Este código ordena que la clave pública duplicada sea convertida usando las funciones SHA-256 y RIPEMD-160.

Esto significa que se tomará la clave pública y se le aplicará un hash SHA-256. Al resultado de esta operación le aplicamos un hash RIPEMD-160. Su resultado final es puesto finalmente en la pila.  Seguidamente, el script nos muestra otro hash RIPEMD-160, que simplemente es copiado en la pila para dar paso a la siguiente operación.

La siguiente operación en el script es OP_EQUALVERIFY. Esta tomará los dos hashes RIPEMD-160 (el que viene de la clave pública del scriptSig y el que viene del Bitcoin Script) y verificará que sean iguales. Si la operación es Verdadera, seguirá la ejecución del script, y en caso contrario, la transacción será marcada como inválida. 

Finalmente, para terminar la operación, nos queda el código OP_CHECKSIG, que nos indica que verifiquemos la firma digital del scriptSig. Si la firma es igualmente verificada de forma correcta, se da como genuina toda la operación y su resultado queda plasmado en la blockchain.

Como podrás ver es un procedimiento muy lineal y sencillo de entender. Por supuestos, los scripts pueden contener una gran diversidad de instrucciones, pero algunas de ellas son estándar. Por ejemplo, este script que hemos examinado recibe el nombre de P2PKH (Pay to Pub Key Hash). Es actualmente la forma más común de crear transacciones entre dos individuos en Bitcoin.

Es decir, cada vez que realizamos una transacción en Bitcoin, nuestros monederos escriben una programación parecida a esta. En conclusión, estos scripts son interpretados por los nodos. Esto sucede cuando los nodos reciben un bloque válido por parte de los mineros. De hecho, este pequeño ejemplo es de una transacción real que puedes verificar acá.

¿Por qué Bitcoin tiene un lenguaje de scripting?

Ahora bien, seguramente te preguntarás ¿Por qué fue necesaria la creación de este lenguaje de programación para Bitcoin? Pues bien, la principal razón es que este sistema permite una mayor flexibilidad y le entrega propiedades programables únicas a cada bitcoin.  De hecho, gracias a Bitcoin Script es posible crear una infinidad de aplicativos avanzados. Creaciones que de otra forma no se pueden desarrollar y mantener de forma correcta.

Por ejemplo, gracias a los Bitcoin Script es posible crear monederos y direcciones multifirma. Estos requieren que las personas que participan en el esquema participen en un determinado margen para poder acceder a los fondos. Tal como si fuera una cuenta bancaria del tipo mancomunada. Además, permite por ejemplo que podamos programar la entrega de monedas de acuerdo a una fecha o evento específico. Esta enorme flexibilidad es posible solo gracias al Bitcoin Script.

Pero más allá de eso, hay otra razón de peso para crear un sistema de este tipo. Y es que es más fácil de mantener. El desarrollo de Bitcoin ha sido muy acelerado. Y durante todo ese tiempo, la compatibilidad en Bitcoin nunca se ha roto. Versiones antiguas de los monederos pueden seguir siendo usadas sin mayores problemas. Y todo ello, porque aún pueden programar transacciones usando Bitcoin Script.

Bitcoin Script, los smart contracts y el futuro de Bitcoin

Uno de los mitos más extendidos del Bitcoin es que este es incapaz de hacer smart contracts. La verdad es que técnicamente, todo en Bitcoin se ejecuta gracias a un smart contract. Pero como ya hemos dicho la capacidad de programación de Bitcoin Script es limitada. Especialmente si las comparamos con otros proyectos como Ethereum, EOS o TRON.

Muchos desarrolladores de Bitcoin no ven esto como un problema, de hecho, lo ven como una característica de seguridad. Explican que el desarrollo de Bitcoin debe ir hacia el punto de alcanzar una capacidad de programación superior, pero esto de debe ser paulatino. De hecho, esto es lo que precisamente está pasando en Bitcoin. Los desarrolladores han incluido en los últimos años, nuevos OP_CODES que ciertas permiten operaciones avanzadas apuntando a desarrollar capacidades avanzadas de smart contracts.

Pero para lograr esto debe mejorarse primero la estructura y la escalabilidad de Bitcoin. De nada vale tener capacidades avanzadas de smart contracts sobre una red poco escalable, porque rápidamente quedará saturada. Una situación que por ejemplo ya vemos en Ethereum y en EOS bajo ciertas condiciones.

Así que para solucionar esto, los desarrolladores de Bitcoin están diseñando protocolos de escalabilidad como Lightning Network para acelerar las transacciones de Bitcoin. Además, están mejorando la capacidad de los OP_CODES y creando un lenguaje de programación de alto nivel que simplifique la creación de smart contracts.  Algo que llevaría a evolucionar sin duda a Bitcoin Script.

Pero también existen otras opciones hechas fuera de casa por la comunidad que hace vida en Bitcoin. Son los casos de RSK y Counterparty, que tienen protocolos de segunda capa capaces de mejorar la capacidad de programación de Bitcoin llegando a construir sistemas capaces de ejecutar smart contracts, y todo ello usando la plataforma de Bitcoin.

Sin embargo, en Bitcoin sus desarrolladores son cautelosos con los avances. Centrándose en mejorar lo actual y hacerlo cada vez más seguro para luego incluir nuevas características bien probadas y pulidas. En tal sentido, seguramente veremos avances en Bitcoin Script y sus OP_CODES, todo apunta a ello. Pero dicho avance será cauteloso y siempre manteniendo la seguridad en mente.

Después de todo hablamos de una criptomonedas que vale más de 100 mil millones de dólares y ocupa el primer lugar del criptomundo con amplia ventaja. Dejar caer todo eso por un error de programación no es opción, y la confianza de millones de usuarios depende de ello.