Solidity
Todos los recursos sobre el lenguaje de programación de los smart contracts.
Todos los recursos sobre el lenguaje de programación de los smart contracts.
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.
Pocos 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.
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.
La 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.
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.
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.
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.
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.
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.
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.
Se 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.
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:
Después de aclarar los conceptos básicos y de la explicación sobre Solidity y su mentor, JavaScrtipt, debemos hablar de los IDEs.
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.
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.
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).
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:
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.
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:
“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»
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.
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.
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:
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.
Ahora 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.
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.
Descarga AHORA tu EBOOK GRATUITO
y Descubre las Claves para Triunfar con Bitcoin