BTC
ETH
LTC
SOL
BCH
USDC
USDT

Solidity

aprender-solidity
SHARE
ÍNDICE

El mundo de las criptomonedas tuvo sus inicios con la creación de Bitcoin en 2009 y junto a él llegó la tecnología Blockchain: una base de datos distribuida que contenía los registros de todas las transacciones que se realizaban en la red.

solidity-para-crear-contratos-inteligentesPocos años más tarde, gracias a Ethereum, llegó un proyecto mucho más potente y con mayores usos que el de ser un sistema de pago y una moneda digital descentralizada, como en el caso de Bitcoin. La gran baza de Ethereum respecto a éste son los llamados ‘smart contracts’ o contratos inteligentes.

Los contratos inteligentes son programas informáticos que ejecutan acuerdos establecidos entre dos o más partes cuando se da una condición programada con anterioridad. Es decir, son contratos que se ejecutan y se hacen cumplir a sí mismos de manera automática y autónoma.

En palabras de uno de sus fundadores:

“Los smart contracts son una forma para que personas de todo el mundo hagan negocios entre sí, incluso si no hablan el mismo idioma o no utilizan la misma moneda”.

Para que los smart contracts se ejecuten necesitan instrucciones escritas en código.

Al igual que en el mundo real existen multitud de lenguajes en el mundo informático también existen multitud de lenguajes de programación.

En este artículo vamos a hablar de Solidity; pieza clave para el futuro de Ethereum, puesto que cuantas más personas aprendan este lenguaje, más serán capaces de crear contratos inteligentes y de supervisarlos contra posibles fallos en la escritura de su código.

Un lenguaje con tanto presente y futuro como el de su propio proyecto.

ethereum-solidity

Requisitos previos

– “¿Debería ser un experto en criptomonedas antes de estudiar Solidity y crear proyectos en Ethereum?”
Quizá no un experto, pero comprender bien la Blockchain antes de sumergirte en Solidity es una buena idea. La documentación de Bitcoin es, de momento, mejor que la que ha producido la comunidad de Ethereum.

Al estudiar Bitcoin, aprenderás la misma tecnología (cadena de bloques, criptografía, claves públicas/privadas, etc.) con recursos de desarrollo más fáciles de instalar y usar de lo que actualmente está disponible para Ethereum.

masteringbitcoin_portadaLa razón es simple: Bitcoin tiene casi 10 años mientras que Ethereum es mucho más joven. La mayoría de desarrolladores de Ethereum está mejorando el protocolo en vez de hacerlo accesible a un público más amplio.
Así que si realmente te interesa sumergirte en este mundo, la mejor manera de empezar es leyendo el libro Mastering Bitcoin. Es el mejor libro sobre desarrollo en la Blockchain.
Luego, aprendidas ya las bases, puedes pasar a Solidity.

Para hacer el camino más sencillo, es recomendable también tener ciertos conocimientos previos de Javascript.

¿QUÉ ES SOLIDITY Y PARA QUÉ SIRVE?

Solidity es un lenguaje de programación de alto nivel cuya síntesis es similar a otro de los lenguajes de programación más usados hoy en día: Javascript.

Este lenguaje está diseñado y compilado en código de bytes (bytecode) para crear y desarrollar contratos inteligentes que se ejecuten en la Máquina Virtual Ethereum (EVM de sus siglas en inglés).

Mediante Solidity, los desarrolladores pueden escribir aplicaciones descentralizadas que implementen automatizaciones en los negocios a través de los contratos inteligentes, dejando un registro irrefutable y autorizado de las transacciones.

En palabras menos técnicas, Solidity sirve para la creación de ‘smart contracts’ que permitan que muchas de las partes de un negocio funcionen perfectamente por sí solas y además se lleve un registro de las mismas.

Solidity es un lenguaje ‘Turing Complete’

Cuando hemos dicho que Solidity es un lenguaje de programación de alto nivel se refería a que era un lenguaje ‘Turing Complete’.

Este concepto, ideado por Alan Turing, se refiere en informática a aquel lenguaje que tiene un poder computacional equivalente a lo que se denomina una “Máquina de Turing Universal”.

La Ethereum Virtual Machine (EVM) es considerada una Máquina de Turing Universal, término que se refiere al software que es lo suficientemente hábil como para ejecutar cualquier código definido por el desarrollador.
Dicho de otro modo, el término Turing Complete aplicado a la tecnología Blockchain y especialmente a los contratos inteligentes, se refiere a la capacidad que tiene un lenguaje informático para resolver cualquier problema computacional y para añadir reglas complejas como, por ejemplo, los bucles.
Un bucle en informática es una instrucción de repetición que permite que los programas puedan realizar, como su nombre indica, tareas repetitivas por código. Para entenderlo pondremos un ejemplo:

Imagínate que queremos crear un contrato inteligente para preguntar el sueldo a los 50 empleados de una empresa y, a su vez, realizar un incremento salarial del 2% a todos ellos. Las dos variables (el sueldo y el incremento del 2%) se pondrían dentro de un bucle que se ejecute 50 veces (una por cada miembro de la empresa), sin necesidad de escribir el mismo código 50 veces para realizar la misma operación.

Este lenguaje de tipo ‘Turing Complete’ fue una de las razones que motivaron a Vitalik Buterin a crear el proyecto Ethereum, ya que Bitcoin no se diseñó para cumplir con esta propiedad.

Vitalik consideró que el lenguaje bajo el que opera la red Bitcoin llamado ‘Bitcoin Transaction Language’ (BTL) era insuficiente para evolucionar dicha red.

Él propuso incorporar un lenguaje de tipo ‘Turing Complete’ para mejorar el proyecto, pero el hecho de no recibir respuesta alguna por parte de la comunidad de desarrollo de Bitcoin hizo que se empezase a distanciar de esta plataforma y tomase la idea para su futuro proyecto: Ethereum.

curso-solidity

Ethereum: Ventajas y desventajas de ser Turing Complete

Una de las ventajas de Ethereum de trabajar con un lenguaje Turing Complete es esa posibilidad de utilizar estructuras de codificación repetitivas (bucles) que permiten crear aplicaciones más complejas y de una manera más simple y eficiente. Como desventaja esto implica el tener que disponer de un mecanismo como el ‘Gas’ para evitar que el sistema pueda ser colapsado.

El Gas es la forma que tiene Ethereum de calcular el coste de las transacciones y no es ni más ni menos que el gasto computacional de procesar una transacción o contrato inteligente en la red, y las necesidades de su almacenamiento.

Es un método que surge para evitar que se den bucles infinitos y colapsar así el sistema. De no existir el Gas, nada impediría que una aplicación mal programada pudiera dejar el sistema inservible.

Otra ventaja es que, si comparamos un lenguaje de alto nivel como Solidity de Ethereum, con el BTL de Bitcoin, pronto salen a la luz las dificultades que presenta el segundo frente al primero, ya que sus scripts – los pequeños programas que ejecutan las transacciones- no son Turing Complete porque no permiten los mencionados bucles.

SOLIDITY VS JAVASCRIPT

JavaScript fue diseñado con una sintaxis similar al lenguaje informático C, aunque también adopta nombres y convenciones del lenguaje de programación Java.

JavaScript-logoSe suele usar del lado del cliente (client-side), formando parte de un navegador web y mejorando la interfaz del usuario y de páginas web de tipo dinámico.

No obstante, también es utilizado para enviar y recibir información del servidor (Server-side JavaScript o SSJS) junto con ayuda de otras tecnologías .

Todos los navegadores modernos como Google Chome o Internet Explorer interpretan el código JavaScript integrado en las páginas web. Sin embargo su uso en aplicaciones externas a la web es también significativo.

Diferencias entre JavaScript y Solidity

Como ya se mencionó anteriormente, Solidity es un lenguaje de alto nivel para la cadena de bloques pública de Ethereum y todas las aplicaciones basadas en Ethereum están escritas en este lenguaje. Solidity es de una sintaxis muy similar a JavaScript pero con sus diferencias entre sí como podemos ver a continuación:

  • Solidity es un tipo de lenguaje orientado a objetos (OO) como C++ y C#, mientras que Javascript se basa en HTML.
  • Solidity está diseñada específicamente para las aplicaciones Ethereum y se ejecuta sólo en la cadena de bloques Ethereum, mientras que JavaScript es un lenguaje universal para la web y se utiliza en un gran número de aplicaciones.
  • En caso de Solidity, el resultado final está disponible en todos los nodos de la red. A diferencia de esto, en el caso de JavaScript, el resultado sólo está disponible en un único nodo.

Después de aclarar los conceptos básicos y de la explicación sobre Solidity y su mentor, JavaScrtipt, debemos hablar de los IDEs.

El IDE y su máquina virtual (EVM)

Una vez que establecemos un lenguaje de comunicación y unas instrucciones a llevar a cabo, es necesario formar un entorno propicio para realizar esas tareas.

Un IDE (Entorno de Desarrollo Integrado) como ya sabemos es la aplicación informática que proporciona las herramientas adecuadas a los programadores y desarrolladores para desarrollar un programa. Es decir, es el programa que facilita la creación de otros programas.

Suele consistir en un editor de código fuente, varias herramientas de construcción automáticas y un depurador, usado para probar y eliminar errores.

Estos IDEs también pueden añadir un compilador y un intérprete.

  • Un compilador es un programa informático cuya función es traducir lo que se ha escrito en un lenguaje de programación y pasarlo a un lenguaje de máquina (de bajo nivel).
  • Un intérprete es un programa informático capaz de analizar y ejecutar otros programas. Estos se diferencian de los compiladores en que, mientras el compilador traduce la totalidad de lo que se ha escrito, el intérprete solo analiza y traduce lo necesario, es decir, una instrucción concreta, por ejemplo.

Los programas interpretados suelen ser algo más lentos que los programas compilados debido a la necesidad de ir traduciendo el programa mientras se ejecuta.

compilador

Sin embargo, son más flexibles, permitiendo ofrecer al programa interpretado un entorno que no depende de la máquina física donde se ejecute, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).

Esto llevado a Ethereum, haría de la Maquina Virtual Ethereum (EVM) el intérprete de los diferentes IDEs disponibles para el lenguaje de programación Solidity.

En otras palabras, la EVM interpreta tanto los entornos de desarrollo de los contratos inteligentes como el lenguaje en el que se escriben (Solidity).

El IDE oficial de Ethereum: Remix

Remix, anteriormente conocido como Browser Solidity, proporciona un entorno de desarrollo integrado (IDE) que permite escribir contratos inteligentes basados en Solidity.

Es una solución perfecta si lo que buscamos es:

  • Crear contratos inteligentes y depurar su ejecución.
  • Tener acceso al estado y las propiedades de los smart contracts que ya hemos creado previamente.
  • Reducir errores de codificación y aplicar las mejores, previo análisis previo del código.

Se puede utilizar Remix ya sea en nuestro propio ordenador o de manera online. Si queremos descargarlo, es posible encontrar el último paquete desde este enlace.

Descomprimiremos el .zip y cargaremos el archivo “index.html” en el navegador.

Si preferimos trabajar de forma online, podemos visitar remix.ethereum.org.

Para la primera toma de contacto con Remix os dejamos esta guía que os ayudará bastante. Está en inglés, pero si lo preferís en castellano, aquí encontrarás nuestra propia traducción del manual.

Otros IDE’s e integraciones con Solidity

Aunque Remix es el entorno de desarrollo integrado oficial de Ethereum, existen otros IDEs que también guardan compatibilidad con el lenguaje de programación Solidity. A continuación algunos de ellos:

– Ethereum Studio

– Plugin IntelliJ IDEA

  • Plugin de Solidity para IntelliJ IDEA (y el resto de IDEs de la plataforma JetBrains). Antes de descargar el plugin sería necesario descargar el IDE IntelliJ IDEA.Aquí dejamos también una amplia guía sobre este software (en inglés).

– Atom

  • Atom es un editor de texto moderno, accesible y a la vez, hackeable. En otras palabras, es una herramienta editable, que se puede personalizar para hacer cualquier cosa, pero que también se puede utilizar de forma productiva sin necesidad de tocar un archivo de configuración.En la sección de su web “packages” se pueden encontrar paquetes como Etheratom, un paquete hackeable para el IDE Atom que usa la biblioteca web3.js para interactuar con un nodo Ethereum.También hay otras secciones como la de “Documentation” en la que podremos encontrar cualquier tipo de documentación relevante a Atom, incluido por supuesto un manual. Para que no te tengas ni que molestar en buscarlo aquí tienes el manual.

– Extensión de Visual Studio

  • Plugin para Visual Studio que está diseñado para permitir el desarrollo de contratos inteligentes de Solidity en este IDE de Microsoft. Para ello primero hay que adquirir Visual Studio y luego pasar a instalar la extensión.Visual Studio es un entorno rico de programación, integrado para la creación de aplicaciones para Windows, Android y iOS, así como aplicaciones web modernas y servicios en la nube. Su integración con Solidity propone a los desarrolles ir un paso más allá, facilitándoles el poder crear contratos inteligentes como bien apunta Vitalik Buterin:

    “Facilitar a los desarrolladores el crear aplicaciones sobre Ethereum a través de herramientas de desarrollo ha sido siempre uno de nuestros principales focos de atención, y la integración de Solidity en Visual Studio ayudará a llevar Ethereum a una profundidad mayor en la comunidad de desarrolladores. Estoy deseando ver los resultados que aportarán esta colaboración”

RECURSOS

En este apartado añadiremos las webs, los frameworks, los clientes, y en general las herramientas que sean de relevancia a la hora de interactuar con Solidity.

Webs, artículos y cursos para su aprendizaje

  • Solidity.readthedocs.io: Recurso principal para el aprendizaje del lenguaje y desarrollo de Solidity. En esta web encontrarás todo lo que necesitas saber acerca de el lenguaje de programación de los contratos inteligentes. También es posible encontrar su traducción en español.
  • A 101 Noob Intro to Programming Smart Contracts on Ethereum: Tutorial para novatos sobre la programación de los contratos inteligentes de Ethereum.
  • Ethereum Stack Exchange: este portal se abrió para que la familia de desarrolladores de Ethereum lo utilizase como sitio de preguntas y respuestas. No obstante, si no eres desarrollador también puedes participar en él para preguntar otro tipo de dudas sobre el ecosistema Ethereum.
  • Blockchain Development: Un curso corto de Udemy para aprender de forma amena los fundamentos de Solidity y crear Smart Contracts para ÐApps.

Marcos de desarrollo (Frameworks)

  • Truffle: Framework autodenominado “la navaja suiza del ejército” para Ethereum. Un marco de desarrollo muy completo y muy utilizado entre los programadores de contratos inteligentes de Ethereum. Con manuales paso a paso en el apartado “Tutorials” de su web. Ésta es la dirección de su repositorio de Github, desde donde puedes descargarlo.
  • Embark: Junto con Truffle, los marcos de desarrollo más usados y extendidos en la red Ethereum. Ambos frameworks se encargan de compilar, desplegar e interconectar con los contratos inteligentes. Aquí puedes encontrar la guía más completa sobre Embark.
  • Dapp: Es una herramienta de línea de comandos sencilla para el desarrollo de contratos inteligentes. Apoya estos casos de uso común: gestión de paquetes, construcción del código fuente, pruebas de unidad e implementación simple de contratos

Nodos o Clientes Ethereum

  • Mist: La Wallet oficial de Ethereum. Con ella se puede implementar contratos inteligentes, pero además también sirve, entre otras cosas, para almacenar Ether, enviar/recibir transacciones e interactuar con la blockchain, ya sea en la red principal (mainnet) o en las redes de prueba (testnets).
  • Geth: Es una herramienta de línea de comandos multipropósito que ejecuta un cliente Ethereum completo y está implementado en Go, una de las tres implementaciones originales del protocolo Ethereum junto con C++ y Python.
  • Geth puede hacer cualquier cosa que Mist pueda hacer además de ofrecer tres interfaces diferentes: los subcomandos y opciones de la línea de comandos, un servidor JSON-Rpc y una consola interactiva. Aquí puedes encontrar su manual traducido al castellano.
  • Parity: Es otro cliente Ethereum, parecido a Geth, aunque los que lo han usado dicen que es mejor y más fácil de usar que éste, eso sí, más complejo en su instalación. Está creado por uno de los fundadores de Ethereum, Gavin Wood, y está escrito en el lenguaje de programación de bajo nivel Rust.
  • Además, Parity es un entorno perfecto para la creación de ÐApps y contratos inteligentes gracias a su tecnología y su entorno destinado para el desarrollo de Solidity, en el que se puede acceder a través de un navegador web.Si queréis acceder a la gran Biblia de información acerca de Parity no dudéis en pasaros por su portal en Github, donde se explica absolutamente todo sobre esta herramienta.
  • Metamask: Como ellos mismos dicen “Metamask es un puente que te permite visitar la web distribuida y descentralizada del mañana en tu navegador de hoy”. Y es que es una extensión para los navegadores Google Chome, Opera, Firefox y Brave cuya función es la de ejecutar ÐApps basadas en Ethereum desde el navegador, en vez de tener que descargarse un nodo completo (como en el caso de Geth o Parity). Es decir, no es un nodo completo en sí, pero hace sus funciones. Puedes leer aquí nuestra guía sobre Metamask.
  • También hace las funciones de Wallet a la que poder pasar nuestros Ether e interactuar con aplicaciones descentralizadas como la ya famosa CriptoKitties. Además, es una herramienta que permitirá añadir tus smart contracts de Solidity.
  • Ethereum Javascript testrpc: Se trata de un nodo sencillo de Ethereum para testear y desarrollar smart contracts. Escribir código en la Blockchain de Ethereum cuesta Ether, y la idea es construir potentes contratos inteligentes sin tener que gastar mucho Ether. Para ello existe este cliente a modo de testnet, para realizar pruebas gastando Ether de prueba en vez de Ether real.
  • Una vez que hemos testeado y garantizado que el contrato inteligente funciona como debería, podemos publicarlo en la mainnet de Ethereum. A través de este enlace podéis encontrar tips para comenzar con este cliente.

ecosistema-solidity-programadores

Bibliotecas y librerías

  • Web3.js: es una colección de librerías que nos permite interactuar con los clientes Ethereum mencionados anteriormente, ya sea de forma local (teniendo el cliente en nuestro propio ordenador) o de forma remota (estando el cliente instalado en otro ordenador) usando los protocolos Http o Ipc.
  • Web3 nos permite compilar, desplegar e interactuar con nuestros propios contratos inteligentes. En su página del portal readthedocs.io puedes encontrar todo sobre esta herramienta.
  • Zeppelin Solidity: OpenZeppelin es una biblioteca para escribir contratos inteligentes seguros sobre Ethereum. También se puede crear aplicaciones distribuidas (ÐApps) , protocolos y organizaciones (DAOs) escritos en Solidity. Además tiene integración el el IDE Truffle.
  • En su web podrás encontrar articulos que te facilitarán el aprendizaje de esta herramienta y éste es su repositorio de Github.

Otras herramientas (compiladores…)

  • Solidity Compiler, más conocido como Solc.js: es un software que actúa como compilador. Transforma lo que se ha escrito en Solidity a un bytecode de Ethereum.
  • Solium: la función de este software es de analizar el código del contrato inteligente de Solidity para corregir y evitar problemas de seguridad. Como hemos comentado, el crear código en la cadena de bloques no es gratis. Por lo tanto, aunque se utilicen testnets para probarlos antes, también es conveniente utilizar software como Solium, para asegurarte al 100% de que el smart contract que vamos a publicar es 100% seguro, está bien escrito y a prueba de fallos.
  • Strato BlockApps: es un software que ofrece la mejor manera de construir, administrar e implementar aplicaciones para cadenas de bloques específicas y personalizadas, que pueden ser propias o construidas sobre Ethereum. En la sección ‘Developers’ podrás encontrar toda la información para comenzar, empezando desde la instalación ya sea vía local, vía Microsoft Azure o vía Amazon AWS.

Loom Network

Loom Network es una red de herramientas de aplicación específica basadas en Ethereum pero que funcionan de forma paralela a ésta. Su objetivo es el de que los desarrolladores puedan crear y ejecutar sus aplicaciones descentralizadas aumentando su escalabilidad.

Como sabemos Ethereum es una cadena de bloques (blockchain) que permite la creación de otras cadenas de bloques construidas sobre ella. Ese es el caso de Loom Network.

loom-estudiar-solidity

La red principal de Ethereum está construida principalmente para aplicaciones financieras en las que los movimientos de Ether estén presentes. Sin embargo, no soporta ejecutar una aplicación de la magnitud de Twitter o un juego multitudinario online como World of Warcraft.

Por su parte, Loom Network está optimizado para aplicaciones no financieras. Al poder liberarse de transacciones financieras, dejando esa tarea a la red de Ethereum, Loom puede optimizar sus sidechains (cadenas de bloques paralelas a Ethereum) para aplicaciones que requieren altas velocidades y bajos costes.

Vitalik Buterin, creador de Ethereum, está encantado con proyectos como este:

“Sería posible ejectuar [el juego] StarCraft en la cadena de bloques. Esas cosas son posibles. El alto nivel de seguridad y escalabilidad permite que todas estas cosas se puedan construir sobre nuestra plataforma. Ethereum es la capa base que no tiene demasiadas características”.

Loom Network es una red de componentes, herramientas e idiomas que juntos hacen posible pensar en las aplicaciones web tradicionales como aplicaciones descentralizadas.

Algunas de estas herramientas son las siguientes:

  • EthFiddle es el lugar más popular de la comunidad Ethereum para compartir fragmentos de código de Solidity. Funciona a través del navegador web y permite compilar, probar y ejecutar código para ÐApps y smart contracts en un entorno fácil e intuitivo para cualquier desarrollador. Además tiene una total integración con otra de las herramientas de Loom Netwrork: EthDeploy.
  • EthDeploy se podría decir que es como el ‘Amazon Web Services’ de Ethereum. Se trata de una colección de servicios de computación que en su conjunto forman una plataforma en sí y que ayudan a los desarolladores de Ethereum a desplegar y administrar sus ÐApps y a aumentar su escalabilidad.
  • CryptoZombies es una escuela de código interactivo gratuita que te enseña a construir juegos en Ethereum. El curso está diseñado para principiantes en Solidity y las lecciones transcurren de forma interactiva, haciendo del aprendizaje algo divertido y ameno, alejado de los vídeos aburridos o largos textos.
  • La última de las herramientas de Loom Network es un lenguaje de programación compatible 100% con Solidity llamado, valga la redundancia, SolidityX. Es un lenguaje seguro por defecto, que compila de forma actualizada con todas las soluciones de seguridad.

Hacer tanto énfasis en la seguridad es debido a que, hoy en día, grandes cantidades de dinero son depositados en smart contracts basados en Solidity, los cuales tienen vulnerabilidades que los hackers pueden aprovechar para robar los fondos depositados. Con SolidityX se erradican los problemas de seguridad con respecto a las vulnerabilidades ya sufridas.

¿VALE LA PENA ESTUDIAR SOLIDITY?

aprender-solidityAhora mismo hay mucho entusiasmo en torno a proyectos basados en Blockchain dedicados a la inversión, innovación y desarrollo.

La cantidad de capital que está fluyendo hacia la industria (en forma de ICOs) ha puesto a los desarrolladores de contratos inteligentes en un pedestal.
Quizá Solidity no llegue a ser el lenguaje de facto para desarrollar smart contracts (nunca se sabe) pero ha empezado su camino con buen pie y los principios que rigen su escritura servirán para cualquier proyecto, así que vale la pena estudiarlo a fondo.

¿Es difícil su aprendizaje?

No tienes por qué sentirte intimidado antes de aprender a codificar contratos inteligentes. Es solo una nueva forma de pensar y escribir código para ayudar a los seres humanos a interactuar y compartir confianza y valor a través de Internet.

Recomendamos leer este artículo escrito en Medium para hacerte una idea de cómo será tu camino y si debes tomarlo o no.

Como siempre, para tener éxito en este aspecto necesitas determinación por encima de todo. En este momento, el mercado está pidiendo desarrolladores de smart contracts. Si decides abrocharte los cinturones y dedicarle tiempo, sabrás que existe una gran demanda de tus habilidades y recibirás a cambio ofertas con salarios muy interesantes.

Recent Articles

How to Get Your First Job in Crypto