Solidity, el lenguaje de programación de Ethereum

José Maldonado
23 MAY 2020
Solidity, el lenguaje de programación de Ethereum
1.

Introducción

La blockchain de Ethereum y su ecosistema es sin duda uno de los más grandes en el mundo de la blockchain. Un logro que ha sido alcanzado gracias a los avances que Ethereum ha introducido en la tecnología blockchain, especialmente de la Ethereum Virtual Machine y el lenguaje de programación Solidity.

En una entrega anterior, hablamos de que era la Ethereum Virtual Machine (EVM). Pero en esta oportunidad nos centraremos en Solidity, un lenguaje de programación que nos permite utilizar todo el poder de la EVM, en la construcción de poderosos smart contracts.

2.

¿Qué es Solidity?

Como hemos mencionado, Solidity es el nombre de un lenguaje de programación de alto nivel muy parecido al conocido JavaScript usado para la programación Web. Este lenguaje, es usado para programar smart contracts para la blockchain de Ethereum que serán ejecutados por la EVM. Más específicamente, Solidity en un lenguaje de alto nivel que nos permite programar de forma sencilla para EVM y que luego puede ser compilado bytecode para que finalmente se ejecuten en la Máquina Virtual Ethereum.

Al ser un lenguaje de alto nivel, significa que los desarrolladores cuentan con una herramienta sencilla para programar. Evitando así la dificultad de programar usando OP_CODES o códigos de operación, o bytecode de forma directa. Como resultado, la creación de aplicaciones descentralizadas (DApps) resulta una tarea mucho más sencilla de realizar y al alcance de cualquier con conocimiento básicos y previos de programación.

Relacionado: ¿Qué es Ethereum?

3.

Características de Solidity

Para que Solidity pueda hacer realidad todo esto, sus creadores se han encargado de asegurar una serie de características. Características que lo hacen especialmente útil para las tareas para la cuales has sido diseñado, entre ellas:

Sencillo de aprender

Solidity es un lenguaje con un sintaxis y arreglos muy parecidos a JavaScript, lo que lo hace un lenguaje fácil de aprender. Debido a la enorme popularidad de JavaScript, resulta fácil relacionar y aprender Solidity. Gracias a esto, Solidity cuenta con una amplia base de desarrolladores que usan el lenguaje y la adopción no hace más que crecer.

Turing Completo

Una de las características más importantes de Solidity es que es un lenguaje Turing Completo. Esto significa que Solidity es capaz de representar el poder computacional de lo que se denomina una “Máquina de Turing Universal”. En Ethereum, esto es posible a la unión de dos elementos: la Ethereum Virtual Machine y Solidity.

La primera parte, la EVM tiene la capacidad de ejecutar el código que sea escrito por el desarrollador, sin importar su complejidad. Mientras que Solidity es capaz de representar de forma escrita esta programación realizada por el desarrollador. Así, Ethereum con su EVM y Solidity gana la capacidad de tener un lenguaje Turing Completo y todo lo que ello significa.

Por ejemplo, Ethereum tiene la capacidad de crear y usar complejas estructuras de codificación con bucles y de tratamiento de la información de forma selectiva. Algo que lenguajes como Bitcoin Script de Bitcoin no tiene, al ser este un lenguaje sin Turing Completo.

Orientado a Objetos

La Programación Orientada a Objetos (POO) es un paradigma de programación en donde todos los elementos de un programa pueden representarse como objetos reales. Estos objetos tienen una serie de características propias. Características que pueden ser definidas directamente o trasladarse por herencia.

Pero que Solidity sea un lenguaje orientado a objetos le permite simplificar de gran manera determinadas tareas. Por ejemplo, la manipulación de tokens en Solidity se da en el contexto de POO, permitiendo al desarrollador manipular los tokens siguiendo este paradigma.

Capacidad para ensamblaje y desensamblaje

Una de las características más llamativas de Solidity es que cuenta con funciones avanzadas para programación ensamblada. Es decir, Solidity nos permite usar de forma directa OP_CODES o bytecode de Ethereum Virtual Machine en su estructura. Pero la mayor y mejor características es el desensamblaje. Es decir, la capacidad de transformar un bytecode en código Solidity nuevamente.

Esta capacidad permite que la depuración, el análisis y auditoría de los códigos de los smart contracts pueda realizarse sin mayores percances.

Puede ser compilado o interpretado

Solidity tiene la capacidad de ser compilarse o interpretarse. En el primer caso, el resultado es un bytecode que solo puede ser ejecutado por la EVM. En el segundo caso, un intérprete toma las instrucciones del programa y las transforman en OP_CODES y bytecode dentro de un entorno de desarrollo. Esto resulta muy útil para tareas de análisis y mejoras de código.

4.

IDEs para Solidity

Como todo lenguaje de programación podemos hacer uso del mismo haciendo uso de herramientas scratch (puras) o desde un IDE. Un IDE es un Entorno Integrado de Desarrollo (Integrated Development Environment, en inglés). Estos son una serie de herramientas integradas que nos facilitan programar sobre un lenguaje específico.

En este caso, Solidity cuenta con un IDE de desarrollo oficial llamado Remix. Desde el podemos acceder a herramientas como un editor de código fuente. Además de varias herramientas de construcción automáticas y un depurador, usado para probar y eliminar errores. Todo este ambiente facilita la tarea de realizar smart contracts dentro de Ethereum.

https://lh5.googleusercontent.com/YYSkScD8A5wjbTVioqOrtBiSnRgMNEr0DqU2XWKbCdDsGZbQKbEfzzfszGwxMqYRcoQYDxbH9CBMQqW0cVCiecWJIL8oG73HlA8QJBzRdNQA30NyKgeQ_Tc8RmkIZ1m1PKo9aSUK

Adicional a esto, también podemos contar con herramientas como un compilador y un intérprete. El primero, nos permite transformar nuestro código Solidity en bytecode que podemos ejecutar en un entorno de pruebas ejecutando una EVM. Con ello podemos verificar cómo se comportará el código bajo condiciones realistas. El segundo punto, también nos permite ejecutar nuestro código Solidity con un punto a favor: ejecución controlada. Es decir, podemos realizar pausas y cambiar variables de ejecución para probar el código y depurarlo de una forma más eficiente.

Relacionado: ¿Qué son los smart contracts o contratos inteligentes?

Algunos IDE para Solidity

Sin embargo, Remix no es el único IDE con todas estas herramientas. Algunas otras opciones en este caso son:

  1. Ethereum Studio. Este es otro IDE oficial al que podemos acceder vía Web.

    https://lh4.googleusercontent.com/GRMq21knSdKeYeD5F_FntPGnlIf8ieoAyxgCvP4UNhHAccrwNOgoxM5_U8Sb2fhiDpwZDaMQBfCcgpbvgxaY3gueiCY1ie5iQgBbGEUldRNzDzVVDJ_tIlII2jvzow1uqgcgzdcx

     
  2. IntelliJ IDEA. Este es un IDE para múltiples lenguajes de programación, pensado especialmente para programar en Java. Pero gracias a sus extensiones es posible adaptarlo para programar usando Solidity y distintos framework para aprovechar el potencial de Ethreum.

    https://lh6.googleusercontent.com/z6lwhgs2J3Te67MmnlyqpHxZiuOry-ZaayBItQSsEpDNIE2IqmXgVJeYndHD_00rsQ1kOjreARMAaFPv-WY4JNkclTCu3YIw4z08zLHuNnamLpJ5Vezem-058lizb3qKq4ZbSI9r
  3. Atom. Un editor de texto avanzado con grandes capacidades de expansión por medio de extensiones. Esto le permite convertirse en un IDE para varios lenguajes de programación incluido Solidity. Entre estos plugins podemos mencionar etheratom y language-solidity.
  4. Visual Studio Code. Una opción desarrollada por Microsoft que nos permite crear un entorno de desarrollo para Ethereum.
  5. EthFiddle. Una conocida opción que usa la Loom Network para ofrecer un IDE sencillo para probar smart contracts.

    https://lh3.googleusercontent.com/inUCvq83g4sCB8o5gt6eR7mpeEvapUDUB6YrB3NAIF2vYYhxhz9up9LQ2M-sD4rXXkjsAXZGPc6gif-5GC2-Ckdz2gSFs2-z8bgcrN9suPLHHUjW2FvAHqpXA3z-85D7QaWsmw9b

     
  6. Yakindu. Un plugin diseñado para el IDE Eclipse, otra opción desarrolló ampliamente conocida.