Trabajando con Smart Contracts en Ethereum - Parte IV

Cómo integrar un Smart Contract con Node.js

Hasta ahora hemos visto cómo montar un entorno de trabajo, cuáles serían los entornos de implementación e incluso como crear un primer Smart Contract e integrarlo en una red local, en nuestra propia máquina.

Ahora vamos a salir un poco del mundo Solidity y vamos a ver cómo podríamos explotar el Smart Contract desde nuestro core en Node.js. ¿Y por qué desde Node.js?

  • Porque casi todos los ejemplos están basados en hacerlo desde la web en formato stateless y usando metamask. Y nosotros intentamos hacer las cosas siempre al revés 😉
  • Porque las apps web con Metamask no son user friendly y creemos que una aplicación tradicional consumiendo desde el backend el Smart Contract amplia las posibilidades.
  • Puedes ver más opciones y posibles uniones de arquitecturas en este artículo de Santiago Palladino, de Zeppelin, como no!

El objetivo de este post no es explicar grandes estructuras de Node.js, así que haremos un sistema básico, montando todo desde el index, que nos permita consumir la clase que será la que tendrá toda la lógica de conexión. Como siempre, el código lo tenéis en Github

Lo primero, montar el entorno básico:

Y dejaríamos el package.json de la siguiente forma:

Notas:

  • Iremos viendo la utilidad de todos los paquetes que hemos instalado más adelante.
  • Instalamos nodemon para hacer las pruebas más fáciles.
  • Al igual que en el proyecto de Solidity, incorporamos el linter. No hay mejor forma de hacer bien el trabajo que si nos fuerzan.
  • Por último, recordar que este proyecto será muy básico y sólo usaremos una clase para ver los procesos, no valdría para producción.

 

Ahora, lo primero que haremos es traernos el documento ABI que ha generado Truffle por nosotros cuando hicimos el compile/migrate. Este documento tiene toda la información relevante del Smart Contract, y lo necesitaremos para, entre otras cosas, saber dónde está almacenado (cuál es su address). Los copiaremos todos al directorio /contracts/

OJO esto debéis usar vuestros propios contratos ABI ya que cada uno genera una huella distinta. Recordar también que, cada vez que cerréis vuestra blockchain local tendréis que volver a compilar y migrar los contratos y pasarlos de nuevo a este directorio.

Después de esto, toca crear una clase que nos permita encapsular todas las llamadas con el entorno de Ethereum. Llamaremos a esta clase ethConnector.js (original, verdad!)

Notas:

  • Seteamos las variables a la hora de hacer una nueva instancia del contrato, lo que nos permite ir cambiando a cualquier entorno de trabajo sin problemas.
  • setWeb3() nos permitirá conectarnos a la red blockchain que le hemos indicado mediante el API de Web3.js
  • generateMnemonic() te permite crear una nueva serie de nombres de forma aleatoria. En nuestro caso lo usamos, pero por simplificar lo cambiamos después por las mnemotécnicas de ganache, para facilitar el proceso.
  • createWallet() cada mnemotécnico genera infinitas address dentro de un wallet. Con este método podremos crear el wallet con todas las direcciones.
  • getAccountAddress() nos dará un address en particular del wallet que hemos generado, podríamos pedir el address 1.234.432 sin ningún problema.
  • loggedAddress() con este método podremos validar para la red blockchain que has indicado y para la address que indiques. A partir de aquí podremos validar las TX con este address.
  • truffleContract() este método nos permitirá trabajar con el Smart Contract pero firmando todas las peticiones con el loggedAddress

Y por último el index.js que usaremos para realizar las pruebas (a modo de test)

Notas:

  • En la primera parte, entre bloques “First: Set environment” seteamos los parámetros y comprobamos que todo funciona correctamente.
  • En el siguiente bloque “Second: tests” hemos repetido los test que hicimos en el post anterior pero directamente desde node.
  • Hay que tener en cuenta los cambios de contexto para indicar que las transferencias se hacen desde los “usuarios logeados”
  • Como supongo que haréis varias pruebas, hemos decidido no comprobar los valores finales, simplemente dejar los debugs como guía

Ahora podréis probarlo ejecutando

Pero OJO! arrancar primero Ganache, mover vuestros propios ABI para que pueda funcionar y hacer las llamadas oportunas!

 

Más al respecto:

 

Foto cortesía de La Huella artworks.
© Todos los derechos reservados.

You may also like

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies