Creando aplicaciones en la Blockchain de Ethereum usando Java y Web3j

Hola amigos, hoy les quiero hablar de la librería Web3j en la cual he hecho varias pruebas y me parece genial ya que es muy ligera y contiene todo lo necesario para crear aplicación y contratos inteligentes en la blockchain de ethereum.

¿Que es Web3j?

Es una biblioteca ligera escrita en Java 8, esta en una capa superior ya que necesita integrarse con un cliente o nodo de la red Ethereum, en mi entrada anterior Instalar un nodo testnet de ethereum rinkeby esta todo lo necesario para crear tu propio nodo y obtener monedas testnet para comenzar las pruebas.

Características principales:

  1. Interacción con los clientes Ethereum usando el  API JSON-RPC dando soporte a todos los tipos de métodos disponibles
  2. Soporta todos los  nodos Geth y Parity para administrar cuentas y firmar transacciones
  3. Envío de solicitudes de clientes de forma asíncrona y sincrónica
  4. Generación automática de wrappers de función de contrato inteligente Java de archivos Solidity ABI

Enlaces de interés:

Si necesitas más información acerca de este proyecto te dejo unos enlaces de la documentación oficial:

Creando una cuenta Ethereum en Java usando Web3j

Lo primero que vamos a hacer es crear una cuenta ethereum para recibir nuestro ether, para ello vamos a utilizar el api de web3j

En la sentencia anterior podemos destacar la siguiente linea: WalletUtils.generateFullNewWalletFile(password, file); Como podemos ver hemos usando la clase WalletUtils y hemos creado una cuenta ethereum de una forma muy simple.

Invocamos nuestro método de la forma siguiente:

El arreglo generado contiene las siguientes cadenas:

1.- Nombre del monedero:

2.- JSON con los datos del monedero:

Las cuentas en ethereum son ficheros JSON encriptados con una contraseña. Este fichero debe guardarse con mucho cuidado y en un lugar seguro ya que podrias perder tus ether.

Abrir una cuenta Ethereum en Java usando Web3j

Ahora queremos comenzar a utilizar nuestra cuenta ethereum para ello vamos a ver el siguiente método:

Hemos usado nuevamente la clase WalletUtils, esta vez el método loadCredentials que necesita el nombre de la cuenta ethereum y la contraseña. Este nos retorna un objeto Credencial el cual nos da acceso a administrar nuestros ether de ese monedero.

Este seria un ejemplo para utilizar el método anterior:

Crear una instancia del objecto Web3j

Para comenzar a usar los métodos de webj3 necesitamos conectarnos al nodo que tenemos en ejecución, recordando mi post anterior hemos colocado el socket IPC en la siguiente ruta “/opt/apps/geth.ipc”, ahora bien si queremos conectarnos directamente al socket y tener los eventos de la blockchain en tiempo real usaremos:

O bien si no queremos usar Socket podemos usar HTTP con las siguiente sentencia:

Ver el balance o saldo de una cuenta Ethereum en Java usando Web3j

Ahora si a todos se nos viene la primera pregunta y ¿Como vemos el saldo de nuestro monedero? Vamos a crear el siguiente método que nos retorna el saldo del monedero.

Ya estamos utilizando el objecto web3j en esta caso hemos usado web3j .ethGetBalance el cual en realidad hace un llamado al Api de Ethereum como se ve a continuación:

Vamos a ver un ejemplo del uso del método que hemos creado:

Recibiendo ether en nuestra cuenta Ethereum usando Web3j:

Para recibir ether tenemos los métodos Observable que implementa Java RX para el manejo de eventos, vamos a crear el siguiente método:

Creamos el objecto Subscription para ver los eventos de web3j con:

Ahora si recarguemos nuestro monedero en nuestro caso he enviado 0.03 ether desde la linea de comando de geth, en la cual tenemos saldo:

y lo hemos recibido en nuestro monedero :

Enviar ether desde nuestra cuenta Ethereum usando Web3j:

Ahora ya que ya tenemos balance en nuestra cuenta podemos enviar ethers usando el siguiente método:

Ahora vamos a enviar ether usando el método creado

Y vemos como se dispara el evento en nuestra billetera.

Ver transacciones de mi monedero usando ETHERSCAN

Ahora quiero listar todas las entradas y salidas de mi cuenta, de momento no he podido hacerlo con el api de web3j  y al parecer es un poco mas complejo ya que tendríamos que desarrollar un script en la consola de geth. Por ahora vamos a usar el API de ETHERSCAN

Probamos el método con la siguiente sentencia de código:

He creado un pequeño monedero muy básico en ethereum con webj3 si quieres puedes hacer un fork del código desde Github o si quieres colaborar eres bienvenido.

Si te gusta lo que publico puedes seguirme en las redes sociales y unos wei o satoshis son bienvenidos!

 

 

Comments are closed.