Ethereum y Solidity: primer Smart Contract

Primer Contrato Inteligente en Solidity

Antaño ya nos metimos hasta los tobillos en la piscina de Ethereum y Solidity pero aun nos queda zambullirnos bien en ella. Para empaparnos bien no podemos sino empezar a codificar un Contrato Inteligente en Solidity. Nuestro primer Smart Contract hará de una simple cuenta bancaria en la que se almacenará un saldo para ser leído posteriormente.

IDE para Solidity: Remix

Para programar en Solidity se puede usar cualquier editor de texto, pero Remix ofrece muchas herramientas pensadas para crear Smart Contracts en la red Ethereum. Así que para empezar a trastear, no hay mejor elección que el editor Remix.

Primer Contrato Inteligente en Solidity

El Smart Contract que vamos a programar en el IDE Remix simulará una cuenta bancaria en la que se almacenará un saldo de tipo int. El saldo puede ser tanto modificado como leído. El siguiente código es del Smart Contract que vamos a construir, lo explicaré en detalle mas adelante.

Estructura de un Contrato Inteligente

La parte mas destacable del código del Smart Contract y lo mas diferenciador con un código cualquiera programado en JavaScript es la primera linea. “pragma solidity ^0.4.18;”  indica la versión de solidity con la que debe ser compilado el código. Esto asegura que en el caso de que Solidity incluya nuevas características o cambia la sintaxis, todos los contratos escritos con versiones antiguas no van a dejar de funcionar. No dejaran de funcionar ya que el compilador buscará la versión de Solidity en la cabecera y usara el compilador apropiado para interpretar correctamente el código de ese contrato.

Contrato inteligente en Remix

Lo demás del codigo es similar a como defininiriamos una clase en Java, JavaScript o Python. Podemos pensar en los contratos inteligentes que estamos codificando como las clases que, una vez desplegadas en la red Ethereum, se convertirán en instancias.

Otra cosa interesante es la variable “saldo”. Una vez desplegado el Smart Contract esta variable será almacenada en la blockchain, lo que quiere decir que cada vez que la modifiquemos estaremos modificando la cadena de bloques de Ethereum, con su correspondiente coste en forma de gas. Aunque modificarla tiene coste, mostrar el valor de dicha variable no tiene coste alguno.

Declaración de las funciones del Smart Contract

La declaración de las funciones en Solidity es, a grandes rasgos, igual que en cualquier otro lenguaje de programación.

Definicion de una funcion en Solidity

Aunque la estructura de la declaración de una función en Solidity es similar a otros lenguajes de programación, debemos pararnos un poco en los tipos de las mismas, ya que definen lo que pueden y no hacer estas funciones en un Contrato Inteligente.

Tipos funciones solidity

  • La funcion “GetSaldo” solo muestra el valor de la variable “saldo” y no modifica los datos del Smart Contract (tipo view) y puede ser invocada por cualquier persona (tipo public).
  • La función “SetSaldo” permite modificar el “saldo” actual por otro nuevo recibido como parámetro y puede ser invocada por cualquiera (tipo public)
  • La función CuentaBancaria es el constructor que inicializa el valor de la variable “saldo

Probando el Smart Contract con Remix

Una vez tenemos el código del Contrato Inteligente listo, queda probarlo y ver que funciona como nosotros queremos. En condiciones normales deberíamos compilar el código de Solidity que hemos escrito y desplegarlo en la red Ethereum, pero con Remix podemos probarlo de forma rápida y sencilla en el mismo navegador, sin necesidad de entrar en contacto con la red Ethereum.

Despliegue Smart Contract Remix

Para instanciar el contrato en la red de prueba creado en el navegador por Remix, solo debemos seleccionar en “Environment” la opcion “JavaScript VM” para que nuestro Smart Contract sea desplegado en la red virtual Ethereum del navegador.

Instanciar contrato inteligente en Remix

Funcionamiento del Contrato inteligente

una vez dado el valor al constructor del contrato, presionamos el botón “Create” que desplegará dicho contrato en la red virtual del navegador.

Smart Contrat desplegado Remix

Una vez desplegada la instancia de nuestro Smart Contract podemos ver las funciones con las que podemos interactuar con el Contrato Inteligente. El color de las funciones indican su tipo:

  • El color azulado indica que son de tipo “view” o “constant” y que por lo tanto devolverán un valor al ser llamadas.
  • El color rojo indica que la función modificará de algún modo los datos contenidos en el contrato inteligente.

Aunque lo interesante es que, aun habiendo declarado solo las funciones “GetSaldo” y “SetSaldo“, tenemos una mas llamada “saldo“. Esta tercera función no declarada por nosotros es una de las peculiaridades de Solidity

Peculiaridades de Solidity: variables de almacenamiento

Cuando estábamos codificando el Smart Contract, declaramos una variable en la que se almacenaría el saldo de nuestro Contrato Inteligente. Una de las características de Solidity es que por cada variable de almacenamiento como “saldo“, crea una función para acceder y ver el valor de dicha variable, siempre que el tipo de la variable de almacenamiento sea “public“. Por lo tanto, la declaración por nuestra parte de la función “GetSaldo” es totalmente innecesaria y la podemos borrar sin problema, ya que la función “saldo” hace lo mismo y es generada automáticamente.

Conclusión

Una vez borrada la función “GetSaldo” el código estaría completo y sin funciones que realizan el mismo servicio.

Y ¡¡tachán!! ya tenemos listo nuestro primer Contrato Inteligente. Rápido y mucho más sencillo que hacer un pollo a la napolitana. Para dominar del todo los contratos inteligentes solo nos falta entender como funciona la modificación del los datos dentro de un Smart Contract y el rol de las transacciones en la red Ethereum en este mecanismo, pero eso mejor me lo dejo para el próximo post.

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *