Entorno desarrollo blockchain - Remix


¿Estás interesado en el mundo de las aplicaciones descentralizadas y la tecnología blockchain, pero te sientes abrumado por la complejidad del desarrollo de contratos inteligentes?

¡No te preocupes! Hay una herramienta que puede ayudarte a superar esos obstáculos: se llama Remix. Con esta plataforma, crear contratos inteligentes en la cadena de bloques Ethereum nunca ha sido más fácil.

Crear un proyecto desde cero siempre ha sido un dolor de cabeza (sobre todo si lo quieres hacer bien), añadir el prettier y configurarlo, añadir solhint, configurar hardhat, etc. Más aún si solo quieres probar alguna característica que hayas leído o que se te haya ocurrido a lo largo del día.

El objetivo de este post va a ser explicar cual es el flujo de trabajo con Remix, desplegar un smart contract y ejecutar los tests.

File explorer

Icono donde se encuentra el File Explorer

En el File Explorer es donde gestionaremos todos los ficheros del proyecto.

En el lateral izquierdo dentro de la carpeta contracts crearemos un fichero llamado HelloWorld.sol y pegamos el siguiente código.

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.17 <0.9.0;

contract HelloWorld {

 string public _message;

 constructor(string memory message) {
  _message = message;
 }

 function updateMessage(string memory message) public {
  _message = message;	
 }

} 

Solidity Compiler

Una vez echo esto en el menú lateral izquierdo tenemos el Solidity Compile en este apartado podemos configurar todas las opciones de compilación que tiene Solidity.

Icono donde se encuentra el Solidity Compiler

En la parte superior tenemos las distintas versiones del compilador de Solidity, hay que tener en cuenta que en cada versión hay ciertos métodos que dejan de estar disponibles por lo que puede haber incompatibilidades entre smart contracts con distinta compilación.

La opción de Auto compile es muy útil mientras desarrollas, porque te va informando si tienes algo incorrecto, el problema es que si el contrato es grande empieza a irte muy lento.

El botón botón Compile {{nombre contrato}} va a compilar el contrato que tengas seleccionado, es necesario que lo compiles el contrato antes de pasar a la opción Despliegue y lanzar transacciones.

📰

La versión de compilado que usa un smart contract suele encontrarse con el siguiente formato: pragma solidity {{versión de compilado}};

Deploy & Run Transactions

En este apartado es donde podremos interactuar con los smart contracts desarrollados como un usuario y validar si las funciones que hemos añadido funcionan como nosotros esperábamos (de una forma manual).

Icono donde se encuentra la opción Deploy & Run Transactions

  • Environment: Podemos seleccionar los distintos entornos en los que se pueden ejecutar nuestro contrato, desde la blockchain simulada que nos provee Remix hasta poder inyectar la blockchain que tengamos seleccionada en nuestro metamask y firmar con ella.

  • Account: Te muestra las distintas cuentas disponibles con las que puedes interactuar con la blockchain. Si seleccionas el entorno de Remix VM te dará 10 cuentas con 100 ETH simulados para poder jugar con los smart contracts.

  • Gas limit: Algunas transacciones contra un smart contract necesitan una mayor cantidad de gas para poder completar su transacción.

  • Value: La cantidad de ETH (o unidad seleccionada) que se quiere enviar al smart contract.

  • Contract: El contrato que quieres desplegar para poder interactuar con él.

Al lado del botón de Deploy tenemos un campo de texto en el que podemos añadir los distintos valores que queremos introducir en el constructor del contrato. En este caso el mensaje inicial que tendremos en la blockchain.

También tenemos la opción At Address de interactuar con un contrato ya publicado en la red, siempre y cuando corresponda con el contrato compilado previamente.

Una vez desplegado el contrato tendremos las siguiente pantalla en la que podremos interactuar con el contrato desplegado.

Ejemplo de la interfaz de usuario que genera al desplegar un contrato

  • updateMessage: Ejecutará la función del contrato. En este caso no hemos hecho ninguna validación sobre un mensaje vacio, por lo que no es obligatorio rellenar el campo.

  • message: Al haber indicado que la variable _message sea pública esta automáticamente genera un getter del cual poder obtener su valor.

Testing

El smart contract que hemos realizado es muy sencillo y no tiene practicamente lógica, pero aún así lo más aconsejable es tener un 100% de cobertura en los contratos.

Para desarrollar nuestro test suite nos dirigiremos al apartado del File Explorer y en la carpeta tests crearemos un fichero llamado helloWorld.test.js.

// Right click on the script name and hit "Run" to execute
const { expect } = require('chai');
const { ethers } = require('hardhat');

const SCArtifact = 'contracts/HelloWorld.sol:HelloWorld';

describe('Hello World', function () {
 it('test initial value', async function () {
  const HelloWorld = await ethers.getContractFactory(SCArtifact);
  const initialMessage = 'Hello World';
  const helloWorld = await HelloWorld.deploy(initialMessage);
  await helloWorld.deployed();
  sh.log('HelloWorld deployed at:' + helloWorld.address);
  expect(await helloWorld._message()).to.equal(initialMessage);
 });
 it('test update message and retrieving updated message', async function () {
  const HelloWorld = await ethers.getContractFactory(SCArtifact);
  const initialMessage = 'Hello World';
  const newMessage = 'New message';
  const helloWorld = await HelloWorld.deploy(initialMessage);
  await helloWorld.deployed();
  await helloWorld.updateMessage(newMessage);
  expect(await helloWorld._message()).to.equal(newMessage);
 });
});

En la parte superior izquierda de la pantalla veremos un botón de play verde. Al hacer clic ejecutará el test que tenemos seleccionando y en la consola nos aparecerán los resultados de la ejecución de los tests.

Conclusión

En conclusión, Remix es una herramienta que permite el desarrollo de smart contracts de manera sencilla al no tener que configurar Hardhat, Prettier o Solhint. En definitiva, esta herramienta es una gran opción para quienes desean ingresar al mundo del desarrollo de smart contracts o quieren realizar alguna prueba rápida.