Cómo preparar el entorno de desarrollo para crear Smart Contracts en la blockchain WAX desde Windows

Marcos DK
eosbarcelona
Published in
7 min readOct 9, 2020

Linux es el sistema operativo de la blockchain debido a su diseño robusto como servidor. Sin embargo, es posible desarrollar dapps e incluso hacer correr un nodo productor de bloques en Windows, si bien esta última opción no es muy recomendable.

Gracias a Docker podemos ejecutar un contenedor que, como si de una máquina virtual se tratase, proporcione el entorno idóneo para el desarrollo de nuestras aplicaciones para la blockchain ya sea desde Windows, desde una distribución Linux o en un entorno Mac. De hecho, en el caso de WAX, se recomienda la puesta en funcionamiento de los nodos de producción desde contenedores de Docker previamente configurados por el propio equipo de WAX en lugar de compilar el código fuente por parte del usuario.

Instalación de Docker en Windows.

El primer paso será descargar e instalar Docker desde la web oficial:

Docker instala un servicio en Windows que permitirá que se cargue automáticamente cada vez que iniciemos nuestro PC y lo mantendrá constantemente en ejecución. Podremos comprobar si Docker está iniciado gracias al icono que se nos mostrará en la zona de notificaciones de la barra de tareas de Windows. Si la ventana de Docker Desktop no está abierta, podremos abrirla haciendo click sobre el icono de notificación. Es importante comprobar que en la parte inferior de la ventana de Docker Desktop indique que el servicio está iniciado:

Una vez instalado tendremos que continuar desde una ventana del intérprete de comandos de Windows por lo que haremos click en el botón de Inicio de Windows y en el buscador escribiremos “cmd” o “símbolo del sistema” y haremos click sobre la aplicación mostrada

Con lo que se nos abrirá el intérprete de comandos de Windows:

Descargar e instalar el contenedor de WAX para desarrollo

El equipo de WAX ha dejado preparados para su descarga varios contenedores con todas las herramientas necesarias para cada función.

Antes de descargar la imagen del contenedor hay que crear una carpeta en la unidad C: con el nombre de wax. Esa carpeta estará compartida tanto por el contenedor de WAX como por nuestro sistema Windows por lo que resultará muy útil para almacenar en ella el código fuente de nuestros proyectos de desarrollo.

En la línea de comandos escribimos el siguiente comando para iniciar el contenedor de wax específicamente preparado para el desarrollo de dapps sobre blockchain WAX:

docker run -it  --name waxdev -v c:\wax:/wax waxteam/dev bash

Al ejecutar este comando por primera vez nos informará de que no existe el contenedor solicitado por lo que lo descargará para poder instalarlo.

Si hubiera algún problema, podemos descargar el contenedor por nuestra cuenta escribiendo el comando:

docker pull waxteam/dev

y después repetir el comando anterior.

Si la instalación ha salido bien podremos ver que el interprete de comandos se muestra ahora de un modo similar a esto:

root@23cba65b3115:/#

y en Docker Desktop podremos ver el contenedor “waxdev” activado (Running)

Para comprobar si nuestro contenedor WAX está funcionando correctamente podemos hacer una petición de información a la blockchain con el comando cleos y accediendo a través de algún API (por ejemplo a través de los APIs de nuestro guild 3DK Render):

cleos -u https://testnet-wax.3dkrender.com get info (para testnet)
cleos -u https://apiwax.3dkrender.com get info (para mainnet)

lo que debería mostrarnos algo como esto:

El contenedor que hemos instalado, llamado waxdev, incluye el WAX Contract Development Toolkit (WAX-CDT) con las herramientas necesarias para compilar nuestras dapps.

Inicializar nuestro primer Smart contract para la blockchain WAX

Para el desarrollo de nuestros proyectos utilizaremos la carpeta anteriormente creada por lo que nuestro siguiente paso será cambiarnos a esa carpeta que en Linux será con el comando:

cd /wax

Nuestro primer proyecto se llamará “holawax” y crearemos su estructura básica ayudándonos de la herramienta eosio-init:

eosio-init -project holawax

gracias a lo cual nos habrá creado todos los archivos y carpetas necesarias para comenzar nuestro proyecto:

Ahora podemos volver a Windows y comenzar con el trabajo de desarrollo.

Edición del código fuente del Smart Contract

Para editar el código fuente del Smart Contract podemos utilizar cualquier editor de nuestro agrado. Para el ejemplo he utilizado el editor gratuito de Microsoft “Visual Studio Code” que puede descargarse desde

https://code.visualstudio.com/download

Si utilizamos éste editor de código, para empezar a trabajar en nuestro Smart Contract podemos abrir un navegador de archivos y localizar la carpeta “holawax” que hemos creado en el paso anterior. En el menú contextual que se nos muestra al hacer click con el botón derecho sobre el nombre de la carpeta, seleccionamos “Abrir con Code” y se cargará el proyecto en el editor de código.

Trabajar con Docker desde nuestro editor de código

Hemos iniciado una sesión en nuestro contenedor “waxdev” desde una ventana del intérprete de comandos de Windows pero, a partir de ahora, trabajaremos sin salirnos del editor de código.

En la ventana del terminal podremos escribir todos los comandos que necesitaremos para gestionar el contenedor de Docker así como las instrucciones para compilar el Smart Contract, gestionar nuestra Wallet, publicar y hasta probar el Smart Contract.

Para volver a conectarnos con el contenedor “waxdev” cada vez que vayamos a trabajar con el desarrollo de Smart Contracts nos aseguraremos, desde Docker Desktop, de que el contenedor “waxdev” esté iniciado (si no está iniciado, lo iniciamos) y en el terminal escribimos la orden:

docker attach waxdev

Con lo que ya estamos con la sesión iniciada en el contenedor “waxdev

Creación de la cuenta de pruebas

Vamos a trabajar en la testnet WAX antes de publicar nuestro Smart Contract en la blockchain principal. Para ello, necesitamos al menos una cuenta nueva dentro de la blockchain testnet. El gild WAXSweden nos proporciona en su web una herramienta para facilitarnos el trabajo

Introducimos un nombre válido que no esté ya adjudicado y creamos la cuenta. En la ventana que se muestra a continuación están las claves, públicas y privadas, de esa cuenta. Es importante guardarlas si queremos hacer uso de la cuenta.

Gracias al segundo cuadro de la herramienta de WAXSweden podemos enviar WAX a la cuenta que hemos creado para que podamos comprar RAM y hacer pruebas de todo tipo. Cada vez que introduzcamos el nombre y pulsemos sobre “Tokens!” se enviarán 100 WAX a la cuenta. Recordemos que la blockchain testnet es para hacer pruebas y que tanto las cuentas creadas aquí como el WAX que podamos tener en el inventario no tienen ningún valor real.

Creación del Wallet en la blockchain testnet y cómo importar las claves

Para poder publicar nuestro Smart Contract en la blockchain necesitamos tener configurado un wallet que contenga la clave privada de nuestra cuenta. De lo contrario, sería imposible poder firmar la transacción y no podríamos enviar ninguna petición a la blockchain.

Para comunicarnos con la blockchain utilizaremos la aplicación “cleos” que ya está instalada en el contenedor “waxdev”.

cleos wallet create --to-console

Esto creará la wallet llamada “default” y tendrá asignada una contraseña que deberemos copiar para poder desbloquear la wallet más adelante.

Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
“PW5KRXKVx25yjL3FvxxY9YxYxxYY9Yxx99yyXTRH8DjppKpD9tKtVz”

Por defecto las wallets están cerradas así que deberemos abrirla:

cleos wallet open

Y, a continuación, deberemos desbloquearla con la contraseña que nos mostró al crear la wallet.

cleos wallet unlock — password PW5KRXKVx25yjL3FvxxY9YxYxxYY9Yxx99yyXTRH8DjppKpD9tKtVz

La wallet permanecerá desbloqueada mientras estemos comunicándonos con la blockchain. Pasados unos pocos minutos de inactividad, esta se bloqueará y deberemos repetir la orden anterior para volver a desbloquearla.

Por último, debemos importar la clave privada de la cuenta que hemos creado gracias a la herramienta WAXSweden y cuyas claves apuntamos en el paso anterior:

cleos wallet import --private-key 5Ji3az96Zgip97J6kTje5bHDKj9otLvFZ8zFeE4tMxEL1eSNMw3

Con la opción --private-key importamos la clave activa privada. Será suficiente con esta clave para nuestras intenciones.

Otorgar permisos a nuestra cuenta de pruebas para operar en la testnet

Con los pasos dados hasta ahora con la creación de wallet e importación de claves podemos comunicarnos con la blockchain para hacer transacciones, pero si queremos publicar un Smart Contract debemos activar permisos especiales a nuestra cuenta:

cleos -u https://waxtestnet.greymass.com set account permission arpegiator21 active — add-code

con el parámetro -u https://waxtestnet.greymass.com le estamos indicando que debe comunicarse con el nodo que Greymass tiene disponible como testnet. Si no incluímos el parámetro -u la comunicación será siempre con el nodo local (nuestro contenedor). Existen más nodos a través de los cuales podemos conectarnos con la testnet. En esta dirección podemos consultar más opciones:

https://validate.eosnation.io/waxtest/reports/endpoints.html

¡Ya tenemos todo listo para comenzar con el desarrollo de nuestro Smart Contract!

--

--

Marcos DK
eosbarcelona

Programador y creador de contenidos digitales. Profesor de informática, game dev y líder de 3DK Render, WAX Guild.