Llegamos al último post de nuestra serie sobre Blockchain y desarrollo de Blockchain. En el artículo de hoy miraremos un ejemplo de un contrato inteligente simple de Ethereum desarrollado con Solidity.

Para ello utilizaremos el Remix IDE de Ethereum, y aprovecharemos el código para repasar algunas de las propiedades y características que hemos estado mirando estas semanas.

Antes de seguir, te recomiendo leer los artículos anteriores relacionados con Blockchain.

Nuevo Contrato Inteligente con Remix

Dashboard de Remix

Si entras por primera vez en Remix, verás que la plataforma carga de forma predefinida algunos ejemplos de contratos y scripts. Dentro de la carpeta de “contracts” puedes editar uno de los ficheros “.sol”. “.sol” es la extensión predefinida para ficheros de Solidity.

Puedes cambiarle el nombre, por buenas prácticas, eliminar todo el código del fichero y empezar a escribir el tuyo, o añadir el código de nuestro ejemplo:

Smart contrato para “un saludo”

¿Qué hace el código anterior?

No entraré demasiado en detalles, porque ya sabemos cómo es un fichero fuente de Solidity pero comentaremos qué hace este código y lo compilaremos para ver la interacción.

Si vienes del mundo de JavaScript te habrás dado cuenta que el código se parece, a nivel de estilo y sintaxis.

Nuestro contrato del ejemplo es un simple contrato de entrada/salida. Lo que hará será crear y retornar un saludo.

Pragma

Declaración de pragma

Como bien recuerdas, después de declarar la licencia del contrato, Solidity requiere que se declare la versión (o versiones) en las que se ejecutará el contrato, utilizando pragma.

Variables de estado

Declaración de variables de estado

La segunda cosa que hacemos es crear variables de estado. Estas variables se almacenan en la cadena de bloques.

Como puedes ver, por el código, Solidity es un lenguaje fuertemente tipado, por eso hemos tenido que declarar el tipo de la(s) variable(s). En este caso string. También declaramos el modificador de acceso como public. Si hubiéramos declarado private seguiría siendo visible en la cadena de bloques.

Memory

Declaración de setters, getters y opciones de almacenamiento

En el constructor, además del tipo string, declaramos memory. Resulta que en Solidity, las variables se pueden almacenar de diferentes formas. Las tres opciones para almacenar variables son “storage”, “memory” y “calldata”. Puedes aprender más sobre ellas aquí.

Verás que “memory” es un tipo de variable que está en la memoria temporal y se elimina cuando se sale de la función. Es suficiente para las variables de nuestro ejemplo.

View en getGreeting()

En la función getGreeting() también declaramos view. Si recuerdas el artículo de la semana pasada, sobre los modificadores de funciones, view y pure son dos de los modificadores más usados. En este caso view quiere decir que esta función no cambiará ningún dato en la cadena de bloques.

Abi.encodePacked()

En Solidity no podemos concatenar las variables de, forma fácil, como en JavaScript o en PHP con “+” o “.”, respectivamente. Por eso, para obtener el saludo “Hello Chiyana”, para concatenar, utilizamos abi.encodePacked(greetingPrefix, name)) como función auxiliar.

Compilar y desplegar con Remix

Compilar en Remix

Solidity es un lenguaje compilado como Java o C y Remix nos permite compilarlo. Puedes hacerlo clicando en el botón “Compile 3_Greeting.sol”.

Luego, en la barra lateral, acceder a “Deploy & run transactions”. En este caso no desplegamos en una cadena de bloques real, sino en un entorno de test (sandbox).

Desplegar en Remix

Selecciona el entorno “Remix VM (London)”, que anteriormente se llamaba JavaScript VM. En este caso no tendremos ninguna tarifa de gas involucrada, por eso también puedes seleccionar la cuenta (Account) que quieras.

Antes de clicar en “Deploy” puedes añadir un “initialName”, ya que el constructor recibe un initialName.

'Chiyana' como initialName

Luego clicas en Deploy y verás el resultado en la consola del Remix.

Consola de Remix

Deployed contracts

Sección de contratos desplegados

En Deployed contracts podrás ver tu contrato acabado de desplegar. Verás también todas las funciones del contrato. Además Remix te proporciona getters para los estados declarados.

Y si clicas en “name”, por ejemplo, verás el resultado que has introducido antes de clicar en “Deploy”.

Resultado función name: Chiyana

Si clicas en “getGreeting”, recibirás el saludo esperado:

Resultado función getGreeting: Hello Chiyana

Establecer un nuevo nombre

Si añades un nuevo nombre, por ejemplo “Sergio”

Resultado función name: Hello Sergio

y clicas nuevamente en getGreeting verás que el nombre de la persona saludada se ha cambiado.

Conclusión

Como has podido ver, todo ha funcionado correctamente. Evidentemente este era un ejemplo sencillo, simple, muy básico, pero creo que te permitirá aprender e iniciarte, y familiarizarte con la estructura de un contrato inteligente, además de animarte en la creación de contratos inteligentes. En la vida real serán mucho más complejos y robustos.

Te animo a jugar con Remix y explorar todas las posibilidades de Solidity, sin olvidar de consultar la documentación oficial.

Compartir es construir