¿Cómo empezar a programar en Solidity?

Como ya 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 o contratos inteligentes para la blockchain de Ethereum, los cuales serán ejecutados por la EVM.

Más específicamente, Solidity es 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, algo que sí ocurre en Bitcoin.

Como resultado, la creación de aplicaciones descentralizadas (DApps) resulta una tarea mucho más sencilla de realizar, revisar y testear, quedando al alcance de cualquier persona con conocimientos básicos de programación.

Herramientas para comenzar a programar en Solidity

Documentación y Libros sobre Solidity

Si tienes experiencia en programación, seguramente sabrás la importancia de contar con una buena documentación oficial sobre las posibilidades del lenguaje de programación que estás usando. Pues bien, esta premisa se cumple a conciencia con Solidity. En primer lugar, la documentación oficial de Solidity es excelente. En su web oficial puedes encontrar toda la información técnica que necesitas sobre las potencialidades y mejoras que presenta este lenguaje con cada nueva versión. Además, el desarrollo y mejora al lenguaje es constante demostrando que la comunidad busca mejorar e implementar nuevas funciones para hacer más sencillo y seguro la programación de DApps.

Si lo que deseas es programar en Solidity y ya tienes conocimientos previos de programación y desarrollo en otros lenguajes, este es el primer lugar al que debes ir. Si por el contrario, no tienes conocimientos en programación y desarrollo, primero deberás conocer las formas y operaciones básicas de los lenguajes de programación para entonces iniciar tu proceso de aprendizaje sobre Solidity.

Por otro lado, dos de los libros más importantes dedicados al desarrollo en Solidity son Solidity Programming Essentials de Ritesh Modi y Ethereum Smart Contract Development de Mayukh Mukhopadhyay. Ambos libros han sido editados por Packt y están pensados para que interesados en el mundo de programación de Solidity pasen de ser principiantes a avanzados programadores en este lenguaje. Si quieres conocer aún más sobre Ethereum entonces puedes complementar tu lectura con Mastering Ethereum escrito por Andreas Antonopoulos y Gavin Wood.

Si unes todos estos elementos de lectura entonces comenzarás a comprender muy bien qué es Ethereum y cómo puedes usar Solidity de forma efectiva para programar tu primera DApp y tal vez, con suerte, cambiar el mundo a mejor.

Herramientas para programación y depuración

Ahora bien, conocer la parte teórica es solo un primer paso para comenzar tu camino a programar en Solidity. Pero es un paso sin valor si no eres capaz de llevar ese conocimiento teórico a lo práctico.

Para hacer posible esto deberás contar con herramientas para programar y depurar lo que escribas en este lenguaje. En ese caso, los IDE o Entorno Integrado de Desarrollo (Integrated Development Environment, en inglés), serán tu herramienta para lograr esto.

Un IDE es un programa que cuenta de forma integrada con una serie de herramientas que harán más sencilla tu labor de programar en un determinado lenguaje. Generalmente estos IDE contienen correctores de sintaxis, integración con librerías, localizadores de errores y modos que te permiten probar tu aplicación antes de desplegarla de forma pública.

En el caso de Ethereum, existen dos grandes IDE soportados oficialmente por la comunidad. El primero de ellos es Remix. Remix es un IDE web que podemos usar desde nuestro navegador y con el cual podremos programar y probar nuestras aplicaciones escritas en Solidity sin necesidad de instalar nada.

Otra herramienta muy usada en el mundo del desarrollo sobre Ethereum y Solidity es Truffle. De hecho, Truffle es por lejos la herramienta mejor integrada del mundo Ethereum para la programación en Solidity. Pero por otro lado, la cantidad de opciones de Truffle lo hace una herramienta compleja de usar, en especial, si estás comenzando a aprender, por lo que solo es recomendable para personas con conocimientos más avanzados.

Del lado contrario está ETHFiddle, una sencilla web que te permite ejecutar código escrito en Solidity y aprender a programar de la forma menos compleja posible. Sin embargo, si lo que deseas es crear tu propio ambiente de programación usando alguna otra herramienta, también puedes hacerlo.

Existen otros IDE y plugins que te permiten hacer esto. Por ejemplo, IntelliJ IDEA es un IDE para múltiples lenguajes de programación, pensado especialmente para programar en Java, pero que también puede ser usado para programar usando Solidity. Otras herramientas de desarrollo como Atom o Visual Studio Code también te permiten instalar plugins que habilitan la programación usando Solidity. En cualquiera de estos casos, contarás con todo lo necesario para poder armar tu código Solidity.

Herramientas de simulación

Otra herramienta vital para la programación es contar con acceso a la testnet de Ethereum. Esto es necesario ya que deberás poder probar tu aplicación en un entorno muy similar al real, pero donde no te cueste dinero ninguna prueba o error.

Para ello puedes instalar un nodo de Ethereum y seguir los pasos de configuración para trabajar sobre alguna de las testnet de Ethereum, o bien acceder a las redes testnet usando un deployer (desplegador) con dicha capacidad para el IDE que estés usando. El uso de una red testnet te permitirá poner tu DApp en un ambiente muy parecido al que podrías encontrar en la red principal de Ethereum, y constatar así que la misma funciona de forma correcta en todo momento.

Sin embargo, una forma más sencilla de lograr esto es Ganache. Ganache es una herramienta que te permite simular un nodo completo de Ethereum sin los costos asociados de tener un nodo que mantiene todo una blockchain en tu computador. Gracias a esto, Ganache es una herramienta mucho más sencilla, rápida de usar y que obtiene los mismos resultados. Además, cuenta con una amplia integración con Truffle y es fácilmente integrable con otros IDE.

Herramientas de análisis de seguridad y monitoreo

Si bien la tecnología blockchain es muy segura, la seguridad es algo que requiere proactividad en todo momento. Por esa razón, la comunidad detrás de Ethereum y Solidity ha creado una serie de herramientas de análisis que ayudan a mejorar enormemente la seguridad del código escrito para nuestros smart contracts evitando con ello que los bugs se nos escapen y terminen ocasionando pérdidas a nuestros usuarios.

Herramientas como MythX, Mythril o Alethio son algunas de las opciones más potentes en este sentido, permitiéndote potentes análisis de seguridad (para los casos de MythX y Mythril) y para la monitorización de tus smart contracts (en el caso de Alethio).

Otros recursos de aprendizaje

Por supuesto, esto es solo una pequeña parte del universo de opciones que existen en la comunidad de Ethereum. En dicho caso, una de las recopilaciones más completas de herramientas y recursos de aprendizaje para Ethereum y Solidity la puedes encontrar en este repositorio de ConsenSys. Acá podrás acceder a distintos recursos de gran relevancia en la comunidad para aprender al máximo como programar en Solidity y sacarle el mayor provecho a tus conocimientos en este lenguaje.

Pero ¿Qué tal si en lugar de solo nombrar herramientas te mostramos el potencial de Solidity en un sencillo ejemplo? Pues bien, si te gusta la idea solo debes continuar leyendo.

Nuestra primera experiencia con Solidity

Para nuestra primera de programación en Solidity usaremos Remix.

Nuestra elección de esta herramienta responde a que permite probar de forma muy sencilla el código que escribimos, así como nos brinda salidas de depuración sencilla y la facilidad de usar distintas versiones de Solidity. En ese caso, lo primero que deberás hacer es ir a esta web y seleccionar el plugin “Solidity” con el fin de tener todas las opciones de programación y depuración para este lenguaje.

Remix Config

Una vez que tengas activo el plugin “Solidity” podrás ver la siguiente sección de información, y podemos proceder a crear nuestro primer programa en Solidity. Para ello debes ir al “File Explorer” y agregar un nuevo archivo al que llamaremos “HolaMundo.sol”.

Copy to Clipboard

Remix código

Muy bien ahora que tenemos nuestro código escrito en Remix, procedemos a compilar y ejecutar el mismo. Eso lo podemos hacer llenado a la sección “Solidity Compiler”. En esta sección solo deberemos estar atentos a la versión de Solidity que usaremos para compilar la cual debe estar entre los parámetros del pragma del smart contract. Es decir, debemos seleccionar cualquier versión de Solidity entre 0.5.0 y 0.7.0.  Hecho esto, nos bastará con presionar el botón “Compile HolaMundo.sol”.

Remix Compiler

Lo siguiente será realizar el despliegue del smart contract, lo que podemos hacer el dirigirnos a la sección “Deploy & Run”, en la cual debemos hacer clic en “Deploy”. Desplegar un contrato tiene un coste en Ethereum, ya que se emite una transacción real con la información. No obstante, al estar en una red de pruebas, esos ether no tendrán coste real.

Remix Deploy

En respuesta obtendremos la siguiente respuesta:

Remix Deploy OK

Finalmente podremos ver que nuestra función get() se encuentra disponible para interactuar con ella. Si hacemos clic sobre ella, interactuamos y obtendremos la salida esperada (nuestro mensaje).

Remix función get

Para ver el mensaje completo, podemos hacer clic en el botón “Debug” y así podremos ver toda la salida. En dicha salida, podemos ver el mensaje que hemos puesto en el contrato.

Remix Debug

Evita programar por programar

Es cierto que la mejor forma de aprender algo es haciéndolo. Y es importante que programes, pero intenta ponerle sentido a lo que haces. Así que busca hacerlo con una idea de proyecto en mente, con ello te encontrarás ante situaciones reales que solventar.

Para encontrar buenas ideas es importante empaparte de la cultura que rodea toda la tecnología blockchain. Una tecnología que ha sido creada para descentralizar todo lo descentralizable. Seguro que, a poco que pienses, encontrarás situaciones donde unos pocos monopolizan el poder, toman decisiones de forma unilateral y todo ello sin transparencia.

Recuerda que la tecnología blockchain se ha creado para hacer un planeta más justo, democrático y transparente. Todo ello sin importar que caiga quien tenga que caer por medio: gobiernos, reyes, religiones, corporaciones,… No tengas miedo a plantar cara a lo que sea que consideres injusto.