Featured image of post Proyecto Personal Navidad

Proyecto Personal Navidad

Introducción

Para este proyecto he decidido crear una blockchain privada usando la tecnología Hyperledger. El objetivo es crearla usando una máquina virtual Ubuntu Server, y usar Docker para crear diferentes nodos validadores.

Una vez hecho esto comprobaremos que funciona, transfiriendo tokens entre wallets, firmaremos transacciones de una dApp y por último desplegaremos un Smart Contract muy sencillo en nuestra propia red.

¿Qué es Hyperledger?

Hyperledger es un proyecto de código abierto liderado por la Fundación Linux que tiene como objetivo desarrollar tecnologías de registro distribuido (DLT) y aplicaciones descentralizadas para uso empresarial. Es una plataforma de tecnología que permite a las empresas crear y ejecutar aplicaciones descentralizadas de manera segura y confiable.

¿Qué es blockchain?

En resumen, es una base de datos distribuida y descentralizada que se utiliza para registrar y validar transacciones de manera segura y confiable sin la necesidad de una autoridad central.

Es utilizada en una variedad de aplicaciones, la más conocida son las criptomonedas, seguro que hemos oído hablar alguna vez sobre Bitcoin o Ethereum, pero como veremos aquí, tiene multitud de usos como la identidad digital, la contratación de seguros y el registro de propiedad etc…

Preparaciones

Ubuntu Server

Primero, crearemos una nueva máquina virtual Ubuntu Server con 8GB de RAM y 2 procesadores.

Iniciaremos sesión y observaremos la dirección IP para conectarnos mediante SSH.

Nos conectaremos desde nuestro equipo local y actualizaremos los paquetes.

Docker

Ahora instalaremos Docker siguiendo al documentación oficial.

Añadiremos el usuario actual al grupo de Docker

Reiniciaremos el servidor y comprobaremos que se ha instalado correctamente.

Docker Compose

Después, instalaremos Docker Compose, que nos permitirá definir y ejecutar aplicaciones compuestas por múltiples contenedores Docker.

Node.js

Necesitaremos instalar Node.js para poder ejecutar JavaScript en el lado del servidor. En este caso vamos a utilizar nvm para poder administrar diferentes versiones facilmente.

Reiniciaremos de nuevo el servidor, y ahora tendremos disponible el comando nvm para instalar, listar y utilizar diferentes versiones.

Truffle

Una vez hayamos instalado Node.js, usaremos el gestor de paquetes por defecto, npm para instalar Truffle de forma global.

Comprobaremos

Instalación

Para empezar, instalaremos Quorum Dev Quickstart utilizando npx para que descargue el paquete como haría npm y además lo ejecute.

Se iniciará un asistente, en el que seleccionaremos que queremos ejecutar el cliente Hyperledger Besu.

Establecemos que no queremos usar mas herramientas para no sobrecargar el servidor y finalizará la instalación.

Luego, accederemos a la carpeta que se ha creado y ejecutaremos el script run.sh y esperaremos a que se inicie la red.

Después de un buen rato, ya tendremos montada nuestra red con varios endpoints.

Usando el comando docker ps -a, veremos todos los contenedores, y borraremos el hello-world.

Si accedemos a la dirección IP del servidor por el puerto 25000 en el navegador, observaremos el explorador de nuestra red.

También podríamos hacer una consulta usando el comando curl.

En el caso de que hayamos apagado la máquina, podemos volver a iniciarla usando el script resume.sh y volver a consultar todos los endpoints list.sh.

Metamask

Añadir red

Utilizaremos la extensión Metamask como wallet para nuestra red. Una vez hayamos terminado la configuración inicial, expandiremos la vista para las configuraciones.

Aquí, añadiremos una nueva red con los siguientes parámetros.

Si hemos hecho todo bien, ahora podremos cambiar entre redes y aparecerá con un tick verde.

Importar cuenta

Después de añadir la red, importaremos una cuenta nueva a esta wallet.

Pegaremos una clave privada que nos da la documentación oficial.

En esta wallet tendremos 90.000 Ethers, no son los reales (los de la mainnet). Solo son válidos en nuestra red.

Transferir tokens

Desde esta cuenta, podemos transferir tokens a la otra cuenta que tenemos.

Seleccionamos la cuenta 1.

Le vamos a enviar 10 Ethers. También tendremos que darle gas para que se ejecute la transacción.

Confirmaremos la transacción.

En el explorador, veremos que se ha ejecutado en el bloque 607.

En la cuenta 1, ahora tendremos 10 Ethers (en nuestra red privada).

En la cuenta 2, veremos en la actividad se han enviado.

Conectarse al explorador

Otra manera de transferir tokens sería conectándonos al explorador con Metamask. Seleccionaremos la cuenta 2 y continuaremos.

Una vez hayamos conectado la cuenta 2, pegaremos la dirección de la cuenta 1 para enviarle 100 Ethers.

Confirmaremos la transacción desde la extensión.

Aparecerá una ventana emergente, donde veremos el número del bloque donde se ha almacenado la transacción.

Consultaremos de nuevo la cuenta 1, y veremos que ahora tiene 110 Ethers.

Tienda de Mascotas Descentralizada

Desplegar dApp

Ahora, vamos a desplegar una dApp, que será una tienda de mascotas donde podemos donar Ethers.

Accederemos al directorio donde encontraremos el script para iniciar la aplicación.

Esperaremos a que termine de ejecutarse.

Observaremos que comienza la migración de un contrato a nuestra blockchain

Esperaremos a que se termine de construir el contenedor…

Usar dApp

Cuando termine, podremos acceder a la aplicación a través del puerto 3001 y si pulsamos en adoptar, nos aparecerá Metamask y seleccionaremos la cuenta 2.

Confirmaremos la transacción para transferir 70 Ethers.

Despliegue de Smart Contract

Después, usaremos Remix IDE para desplegar un contrato inteligente que almacenará un número en la blockchain y luego lo podremos consultar. Así que lo primero será compilarlo.

Luego, lo desplegaremos en nuestro entorno de la red privada conectándonos con la cuenta 2 en Metamask.

Confirmaremos la transacción para implementar el contrato.

Una vez lo hayamos desplegado, podremos usarlo. En la ventana de la izquierda veremos un registro con la transacción de la implementación verificada.

Para poder almacenar un número, llamaremos a la función del contrato con el número 17. Confirmaremos la transacción (el coste de procesamiento).

Observaremos que se ha registrado el número en la blockchain y luego, llamaremos a la función para consultarlo.

Grafana

Por último, comprobaremos el estado de nuestra red usando Grafana.

Veremos todas las métricas que nos ofrece de manera predeterminada.

Documentación utilizada.

Creado con Hugo
Tema Stack diseñado por Jimmy