Compilación y despliegue de contratos inteligentes con Truffle y Ganache

0
1533

Índice

  1. Introducción
  2. Instalando Visual Studio Code y diversos plugins
  3. Iniciando el contrato
  4. Conectando el contrato con Ganache
  5. Interactuando con el contrato desde Truffle
  6. Conclusión

Introducción

En tutoriales anteriores ya hemos visto un montón de cosas sobre criptomonedas: comprar (Binance), guardarlas en un monedero (MetaMask), crear una red de pruebas (Ganache), construir un contrato inteligente (con Solidity), desplegarlo en Remix, etc. 

Os invito a repasar los tutoriales anteriores antes de continuar:

Cómo comprar e invertir criptomonedas en Binance: https://www.adictosaltrabajo.com/2022/01/14/como-comprar-e-invertir-criptomonedas-en-binance/

Entendiendo las criptomonedas: https://www.adictosaltrabajo.com/2022/01/24/entendiendo-las-criptomonedas/

Votación con contratos inteligentes en Remix: https://www.adictosaltrabajo.com/2022/01/31/votacion-con-contratos-inteligentes-en-remix/

Usando la wallet MetaMask y la red local Ganache: https://www.adictosaltrabajo.com/2022/02/09/usando-la-wallet-metamask-y-la-red-local-ganache/

Creando tokens Ethereum: https://www.adictosaltrabajo.com/2022/03/14/creando-tokens-ethereum/

Ahora vamos a ver cómo utilizar Visual Studio Code para editar un contrato (y no depender de una plataforma Web como Remix), compilar el contrato en Truffle en local, enganchar el contrato con Ganache e interactuar con el contrato desde la consola de desarrollo de Truffle.

Instalando Visual Studio Code y diversos plugins

Podemos descargar e instalar MS Visual Studio Code desde: https://code.visualstudio.com.

Captura de pantalla de la página de descarga de Visual Studio Code.

Una vez instalado y abierto vamos a la zona de plugins e instalamos: Blockchain Development kit for Ethereum.

Captura del plugin Blockchain Development kit for Ethereum.

Ahora vamos a la paleta de comandos y empezamos a escribir Blockchain. Aparecerán las opciones y seleccionaremos New Solidity Project.

Captura de pantalla de la paleta de comando con la selección de un proyecto Solidity.

Ahora elegimos la opción de crear un nuevo proyecto básico.

Captura de pantalla de la paleta de comando con la selección proyecto básico.

El plugin nos genera una estructura de ficheros mínima con un ejemplo de proyecto Solidity. 

Captura de pantalla visualizando los ficheros creados por el plugin.

Podemos pulsar la opción de construir contrato y nos dirá que es necesario instalar algunas aplicaciones requeridas: Node, Git, npm, Truffle y Ganache.

Captura de pantalla con la opción de compilar en MS Visual Studio Code y el error de las dependencias.

Pulsamos secuencialmente la opción de node, git y npm.

No vamos a utilizar las opciones de Truffle o Ganache porque en Mac me han dado problemas con la última versión y lo vamos a hacer a mano.

Captura de pantalla de las dependencias necesarias.

Ahora abrimos un terminal en MS Visual Studio Code y tratamos de instalar la última versión de Truffle. A mí no me ha funcionado pero es posible que funcione cuando leas el tutorial.

Vamos a demostrar cómo no funciona y los pasos para conseguir que funcione.

Usamos el comando estándar de instalación con la última versión.

npm install -g truffle

Nos dice que no tenemos permisos para instalar. Aquí ya empezamos con que “la abuela fuma” instalando con privilegios de administrador (no os creáis que me acaba de convencer), poniendo delante sudo.

Captura de pantalla al instalar con el comando estándar de Truffle.

Vamos a instalar como administrador con sudo. 

sudo npm install -g truffle

Tampoco el resultado es satisfactorio. La última versión disponible parece que da errores. 

Captura de pantalla de la instalación de Truffle como administrador, con errores.

Vamos a buscar versiones anteriores a ver si tenemos más suerte con la instalación. Revisamos las versiones disponibles en https://www.npmjs.com/package/truffle.

Captura de pantalla de https://www.npmjs.com/package/truffle donde vemos las versiones disponibles de Truffle.

Probamos con alguna versión anterior. 

sudo npm install –g truffle@5.4.29

Esta sí parece funcionar. También es algo preocupante que dice que los paquetes instalados tienen 89 vulnerabilidades. Si ejecutas sudo ppm Audit fix —force es posible que te las corrija (dependerá de la versión).

Captura de pantalla de las vulnerabilidades en paquetes.

Una de las primeras cosas que tendríamos que hacer es ejecutar “truffle version” para ver las versiones de Solidity que podemos utilizar dentro del código. En este caso la versión 0.5.16.

Captura de pantalla de la salida del comando truffle version.

Esto es ya un problema, porque si revisamos el tutorial de votaciones (ballot) desde https://www.adictosaltrabajo.com/2022/01/31/votacion-con-contratos-inteligentes-en-remix/ nos dice que funcionará para versiones de la 0.7 a la 0.9.

Al tratar de compilar el contrato inteligente ballot me ha dado errores en el constructor. Mas adelante podemos arreglarlo y adaptarlo a la versión del compilador (con convertirlo en un método normal nos valdría, obligando a inicializar de otro modo).

De todos modos ahora no nos importa demasiado porque vamos a utilizar en ejemplo más sencillo porque para el caso es lo mismo.

 Esta es la directiva que indica las versiones de compilación de Solidity (la versión más reciente es 0.8.1).

Captura de pantalla del código de ballot.

Iniciando el contrato

Una vez instalado Truffle ejecutamos el comando truffle init. Esto inicializará el proyecto para trabajar con Truffle y nos preguntará si queremos reescribir los ficheros. 

Sobre la estructura creada vamos a crear un nuevo fichero llamado ejemplo y copiamos sobre este el contenido del ejemplo básico tomado de Remix. 

En él disponemos simplemente de un número y dos funciones: store y retrieve.

Podemos ver aquí como queda.

Captura de pantallas de MS Visual Studio Code con el aspecto del proyecto básico.

Para conocer los siguientes pasos os recomiendo visitar el Truffle Quickstart en https://trufflesuite.com/docs/truffle/quickstart

Ahora tenemos que asegurarnos que los ficheros truffle-config.js y el de deploy son los correctos.

En el fichero truffe-config.js activamos la parte de redes de desarrollo (networks: { development: )

He reciclado el fichero con la carpeta de migraciones para decir que despliegue el contrato “ejemplo”.

Con esta estructura, ejecutamos “truffle compile” y comprobamos que funciona. Os recomiendo que si os falla algo, hagáis un cambio en el fichero del contrato “.sol” y guardéis y compiléis.

Conectando el contrato con Ganache

Ahora vamos tratar de conectar el contrato que hemos compilado con truffle para que se despliegue en Ganache.

Aunque ya contamos cómo se instalaba en el tutorial anterior, repetimos para tener la secuencia completa.

Vamos a la página de Truffle Suite y descargamos e instalamos.

Arrastramos Ganache a la carpeta de aplicaciones.

Captura de pantalla de la instalación de Ganache.

Ejecutamos Quickstart y comprobamos las cuentas y la dirección del servidor. Verificamos que se encuentra en http://localhost:7545 y coincide con los datos de truffle-config.js

Captura de pantalla de creación de la creación del espacio de trabajo.
Captura de la pantalla principal de Ganache.

Ahora vamos a la sección de contratos de Ganache. Pulsamos el botón de enlazar al proyecto Truffle.

Captura de pantalla de contratos en Ganache.

Ahora hay que pulsar la opción de Add Projects. Introducimos el trayecto del fichero truffle-config.js que hemos previamente editado activando el servidor local.

Captura de pantalla con el fichero truffle-config.js seleccionado.

Podemos a ver los contratos que maneja truffle.

Captura de pantalla de los contratos disponibles.

Ahora volvemos al terminal y ejecutamos truffle deploy que desplegará nuestro ejemplo (migración).

Captura de pantalla del resultado de ejecutar en la consola truffle deploy.

Y veremos que ya está disponible nuestro ejemplo desplegado (no hagáis caso al de Migrations porque invoqué el deploy sin modificar previamente el fichero de la carpeta Migrations).

Captura de pantalla de Ganache con el contrato ejemplo desplegado.

Interactuando con el contrato desde Truffle

Ahora, si queremos interactuar con el contrato desde truffle podemos seguir las instrucciones de https://trufflesuite.com/guides/debugging-an-example-smart-contract/index.html.

Ojo que no es exactamente igual el código pero nos vale para hacernos una idea del proceso.

Ejecutamos el comando truffle develop y aparecerá la consola de desarrollo de Truffle.

Ahora escribimos en el terminal el nombre del contrato “ejemplo” y nos aparecerá la estructura de almacenamiento con un montón de información relevante.

Captura de pantalla del entorno de desarrollo de truffle.

Obtenemos la siguiente respuesta:

Ahora, desde el entorno de desarrollo, vamos a interactuar con el contrato ejecutando código Java Script: ejemplo.deployed().then(function (instance) { return instance.store(4); });

Conclusión

Con ello ya hemos completado el círculo. Editar en MS Visual Studio Code, compilar con Truffle, desplegar en Ganache e interactuar con el contrato desde la consola de desarrollo de Truffle.

La gracia es que entendidos estos conceptos, ya solamente tenemos que elegir los productos que más nos interesen para hacer el desarrollo de aplicaciones distribuidas (DApp) y contratos inteligentes (smart contracts).

No acabo de estar muy contento porque hay desajustes de versiones entre la versión más moderna de Solidity y la que podemos usar en Truffle, por lo que podemos usar Remix para aprender las novedades del lenguaje, hacer algunos tutoriales y ver otras pilas de productos.

Dejar respuesta

Please enter your comment!
Please enter your name here