Necesito un Smart Contract, ¿cómo lo hago?

Una vez que nos hemos dado cuenta del potencial de las aplicaciones basadas en Smart Contracts, cabe preguntarse: ¿por dónde empiezo? ¿qué tipo de red elijo?

En función de las necesidades de nuestro negocio, y especialmente el caso de uso que vayamos a implementar, tenemos varias opciones. Hoy vamos a profundizar en una de las redes más conocidas, Ethereum.

Ethereum

Ethereum es seguramente la primera opción que nos viene a la cabeza cuando pensamos en Smart Contracts.

Creada por Vitalik Buterin, basándose en el protocolo de Bitcoin, Ethereum nos ofrece su Ethereum Virtual Machine (EVM) para la ejecución de los contratos inteligentes.

Esta máquina virtual de Ethereum, que no dejaría de ser similar a la máquina virtual de Java, interpreta y ejecuta las instrucciones que forman los Smart Contracts, con la salvedad de que esta máquina se encuentra distribuida en la red.

Esto significa que todos los nodos ejecutan las instrucciones, lo que nos trae dos consecuencias inmediatas:

  • Ethereum no es muy eficiente, por lo que no está pensado para realizar complicados cálculos computacionales, tanto por el coste necesario como por el tiempo necesario para confirmar las ejecuciones.
  • Se consigue un consenso descentralizado, que nos da un nivel altísimo de tolerancia ante errores, asegura que la red nunca se caiga y se beneficia de las características de la blockchain, haciendo que la información almacenada sea imposible de modificar y resistente a la censura.

Los contratos que se pueden ejecutar son turing completos, que puede resumirse en que podemos usar un conjunto de operadores e instrucciones que nos permiten ejecutar programas similares a cualquier lenguaje de programación moderno.

El lenguaje de programación que se usa para estos programas en Ethereum es Solidity, un lenguaje parecido a Javascript en la sintaxis, lo que facilita su adopción, pero enriquecido con conceptos de Programación Orientada a Objetos como C++.

Basándonos en los smart contracts desplegados en la red podemos crear aplicaciones conocidas como Distributed Application (DApp). Las DApps están compuestas por smart contract que se ejecutan en la red de nodos de Ethereum (el backend).

A decentralized application (Dapp, dApp or DApp) is an application that is run by many users on a decentralized network with trustless protocols. They are designed to avoid any single point of failure. They typically have tokens to reward users for providing computing power.[1]

Hemos hablado de que la eficiencia no es una de las ventajas de la red de Ethereum. El motivo de esto es que la red se basa en un conjunto ingente de nodos, que ejecutan los contratos y validan los bloques con nueva información.

Para poder mantener estos nodos, es necesario ofrecer algún tipo de recompensa, y por ello surge el concepto de Gas.

Gas y Ether

El Gas en Ethereum es el coste asociado a realizar cada una de las operaciones en la red de Ethereum. En función de la complejidad de nuestro programa o smart contract, tendremos un gasto de Gas mayor o menor.

Cuando hablamos de complejidad, debemos pensar términos de instrucciones computacionales: realizar una comparación, una suma, son instrucciones sencillas pero tienen asociadas un coste.

Lo más fácil sería pensar en instrucciones a nivel “lenguaje ensamblador”, de forma que cada una de ellas tiene un coste de Gas asociado, y analizando nuestro programa, podremos obtener una aproximación de la complejidad.

Pero al igual que pasa con la gasolina de un coche, el gasto no sólo depende de la distancia (complejidad), sino también de la velocidad del Gas que compramos.

Si compramos Gas “muy rápido” nos aseguraremos de que nuestro programa se ejecute en poco tiempo (generalmente en el siguiente bloque), pero si nuestro caso no requiere de tanta rapidez, podemos comprar un Gas con un precio más bajo de forma que nuestro programa tendrá menos prioridad.

El gas es como la gasolina para ejecutar el viaje. En función de la distancia y la velocidad, el gasto será mayor o menor. Es importante comprobar el nivel antes de salir, o podremos quedarnos tirados a mitad del recorrido.

Pese a que podemos pensar en el Gas sólo como un gasto, el Gas aporta una serie de ventajas a la red de Ethereum:

  • Optimiza los contratos: al suponer un gasto, evita que la red se llene de cálculos innecesarios que la harían menos eficiente. También ayuda a que la cadena sea más ligera, ya que no se llena de información no relevante.
  • Impide el mal uso de la red: el uso de Gas hace inviable el uso de la red para realizar Spam.
  • Asegura la red ante programas maliciosos: el uso de Gas finito protege la red ante el uso de programas maliciosos que pudiesen ejecutar ataques a la red mediante el uso de bucles infinitos y exceso de computación.
  • Garantiza el mantenimiento de la red: el Gas se usa para recompensar a los mineros por mantener el nodo y realizar los cálculos necesarios. Esta recompensa es la que hace interesante tener un nodo de la red y garantiza que la red tenga un número de nodos suficiente.

Si realizamos una comparación con la programación en un entorno tradicional, el coste del Gas sería el equivalente al coste de adquisición y mantenimiento de máquinas en caso de optar por un modelo on-premise, o el coste de máquinas/computación en la nube en caso de irnos a un proveedor Cloud.

Para adquirir el Gas necesario para la ejecución de nuestros programas es necesario contar con la moneda propia de Ethereum llamada Ether (ETH).

Es importante resaltar que la cotización del Ether, como cualquier otra moneda, fluctúa; debemos tenerlo en cuenta y realizar una buena planificación para evitar quedarnos sin Ether y vernos con un coste excesivo.

Es necesario advertir también del riesgo que puede suponer ejecutar programas con un Gas insuficiente, ya que en caso de iniciar la ejecución de un programa y quedarnos sin gas en mitad de la ejecución, puede llevarnos a un estado incierto en que, además de haber gastado definitivamente el Gas necesario para la ejecución realizada, perdamos información o dinero en caso de estar en medio de una transacción.

Por estas razones, es necesario contar con unos sólidos conocimientos o asesoramiento experto de cara a evitar problemas que ensombrezcan las apasionantes posibilidades que nos ofrece Ethereum.

Retos y particularidades a tener en cuenta

Pese a ofrecer muchas ventajas, hay ciertos retos o particularidades que deben tenerse en cuenta al embarcarse en un desarrollo en Ethereum.

  • Los programas son inalterables. Una vez desplegados en la red, no se pueden eliminar. Cuando necesitemos modificar un contrato, desplegaremos una nueva versión y haremos que nuestra aplicación invoque este nuevo contrato. Para ello, necesitamos hacer un buen diseño de nuestra aplicación siguiendo buenas prácticas de desarrollo (algunas clásicas y algunas aún en definición a medida que van surgiendo frameworks y nuevas funcionalidades en el universo blockchain).
  • Uno de los principales retos de los contratos inteligentes es la dificultad de unir dos mundos, el tecnológico y el legal. Los contratos inteligentes son escritos por los técnicos y los contratos propiamente dichos, son escritos por los especialistas en leyes. Contar con alguien que domine este nuevo paradigma es esencial para poder aprovechar al máximo todo lo que nos ofrece.
  • Avanzar en legislación y aceptación. El reto no es solo traducir el mundo legal al computacional, sino que es necesario avanzar en validez jurídica de los contratos y la estandarización en los distintos sectores.

Otras opciones

Una de las características de Ethereum es que es una red de carácter público. Cualquiera puede unirse a la red manteniendo un nodo, y la información es pública para todos, por lo que sería una elección adecuada para aquellos contratos de dominio público, y en particular aquellos smart contracts para regular relaciones Business-to-Consumer.

Pero Ethereum no es la única plataforma para el despliegue y la ejecución de los mismos. Como alternativas podemos destacar:

  • Red Ethereum privada. Realmente no es otra alternativa, sino una particularización de Ethereum. Como el código de Ethereum es opensource podemos desplegar una red privada eliminando el problema que puede suponer en determinados casos el carácter público de los datos y los nodos. No es posible añadir nuevos nodos sin informar al resto de la red y que éstos lo validen.
  • Quorum: es un desarrollo realizado por JP Morgan a partir del código de Ethereum, con las siguientes particularidades:
    • El mecanismo de consenso no es por Prueba de Trabajo (Proof of Work), sino que se usan distintos mecanismos basados en voto.
    • El tiempo de escritura y validación de bloque es prácticamente instantánea.
    • Existe privacidad entre bloques.

Quorum soluciona algunos de los posibles problemas de Ethereum, sacrificando la universalidad que ofrece éste al ofrecer distintos tipos de nodos con atribuciones distintas.

  • Hyperledger Fabric: desarrollo esponsorizado por la Linux Foundation e IBM, es una apuesta por las redes de tipo privado. Engloba varios proyectos, todos ellos opensource. Permite entre otras cosas:
    • Algoritmos de consenso intercambiables. En el caso de Fabric es Proof of Stake, que no deja de ser una validación basada en la autoridad de los nodos en base a reputación.
    • Red permisionada, de forma que para registrar un nodo es necesario  
    • Tiempos de escritura de bloque muy rápidos (prácticamente instantáneo, frente a los 16’ de Ethereum).
    • Los smart contracts se desarrollan en Go, aunque en su roadmap figuran también otros lenguajes como Java o Python.
  • Alastria: es una Asociación Multisectorial para el establecimiento de una infraestructura blockchain semipública permisionada en España. Tecnológicamente se sustenta en Quorum.

Conclusiones

Hemos visto las grandes posibilidades que ofrecen las DApps y los contratos inteligentes, tanto para generar nuevas oportunidades de negocio como para buscar nuevas soluciones a problemas sin resolver o cuya solución no era muy óptima.

Sin duda, el desarrollo de aplicaciones en Blockchain va a evolucionar mucho en los próximos meses y años, pero ya contamos con un ecosistema suficiente para aplicarlo en soluciones reales en nuestro negocio y por eso cada día nos llegan noticias de empresas que están empezando a aplicar blockchain en sus soluciones para comprobar los beneficios que ofrece, y nuevas empresas que ofrecen soluciones innovadoras que antes no eran viables.

Nuevo llamado a la acción

Ingeniero Superior en Informática por la UCM. Apasionado por la tecnología y, sobre todo, por ponerla al servicio de las personas. He trabajado en proyectos J2EE / SOA e Integración en numerosos clientes. Actualmente trabajo como Arquitecto IT y Preventa en Paradigma Digital. Intento mantenerme al día de las novedades y aprovecharlas para construir soluciones cada vez más ágiles, robustas y eficientes.

Ver toda la actividad de Borja Gómez

Comentarios

  1. Jose Carlos dice:

    Muy recomendable https://tutoriales.online/curso/solidity

    Esta web contiene un laboratorio de smart contract, un explorador de bloques y transacciones de la blockchain.
    Permite ver los saldos de las cuentas de ethereum.
    Y se pueden editar smart contracts, compilarlos y desplegarlos en la red Ropsten usando Metamask.

Escribe un comentario