Cómo construir una red blockchain usando Hyperledger Fabric y Composer

Un tutorial para nuevos desarrolladores de blockchain

Antes de comenzar, Hyperledger Fabric solo se ejecuta en sistemas operativos basados ​​en Unix. Como resultado, no podrá ejecutarse en Windows y tendrá restricciones sobre lo que puede hacer. Sugiero configurar una máquina virtual si está ejecutando Windows antes de continuar.

Este artículo asume cierto conocimiento de Javascript. No es un tutorial dirigido a programadores principiantes, sino a programadores que son principiantes en el espacio blockchain.

¿Qué estamos construyendo?

Entonces, ¿quieres crear una aplicación blockchain pero no tienes idea de por dónde empezar? No se preocupe. A través de este tutorial, configuraremos una red de tarjetas comerciales. Diferentes Traders que son dueños de TradingCards de béisbol, fútbol y jugadores de cricket, serán capaces de tarjetas de comercio entre ellos.

También configuraremos un servidor API REST para permitir que el software del lado del cliente interactúe con nuestra red comercial. Finalmente, también generaremos una aplicación Angular 4 que usa la API REST para interactuar con nuestra red.

Puede encontrar el código final completo de lo que estamos a punto de construir en este repositorio de Github

¿Estas listo para empezar?

Tabla de contenido

  • Introducción a Hyperledger Fabric y aplicaciones relacionadas
  • Instalación de los requisitos previos, las herramientas y un tiempo de ejecución de Fabric
  • Creación e implementación de nuestra red empresarial
  • Probando nuestra red empresarial
  • Generando un servidor API REST
  • Generando una aplicación angular que usa la API REST

Introducción a Hyperledger Fabric y aplicaciones relacionadas

Hyperledger Fabric es un marco de código abierto para crear redes comerciales de blockchain privadas (autorizadas), donde las identidades y roles de los miembros son conocidas por otros miembros. La red construida en fabric sirve como back-end, con un front-end de aplicación del lado del cliente. Los SDK están disponibles para Nodejs y Java para crear aplicaciones cliente, y próximamente se ofrecerá soporte para Python y Golang.

Hyperledger Composer es un conjunto de herramientas y scripts basados ​​en Javascript que simplifican la creación de redes Hyperledger Fabric. Con estas herramientas, podemos generar un archivo de red empresarial (BNA) para nuestra red. Composer cubre ampliamente estos componentes:

  • Archivo de la red empresarial (BNA)
  • Patio de juegos del compositor
  • Servidor REST de Composer

Business Network Archive : Composer nos permite empaquetar algunos archivos diferentes y generar un archivo que luego se puede implementar en una red Fabric. Para generar este archivo, necesitamos:

  • Modelo de red : una definición de los recursos presentes en la red. Estos recursos incluyen activos, participantes y transacciones. Volveremos a esto más tarde.
  • Lógica empresarial : lógica para las funciones de transacción
  • Limitaciones de control de acceso: contiene varias reglas que definen los derechos de los diferentes participantes en la red. Esto incluye, pero no se limita a, definir qué Activos pueden controlar los Participantes.
  • Archivo de consulta (opcional): un conjunto de consultas que se pueden ejecutar en la red. Se pueden considerar similares a las consultas SQL. Puede leer más sobre consultas aquí.

Composer Playground es una interfaz de usuario basada en web que podemos utilizar para modelar y probar nuestra red empresarial. Playground es bueno para modelar pruebas de concepto simples, ya que utiliza el almacenamiento local del navegador para simular la red blockchain. Sin embargo, si estamos ejecutando un tiempo de ejecución de Fabric local y le hemos implementado una red, también podemos acceder a él mediante Playground. En este caso, Playground no está simulando la red, se está comunicando directamente con el tiempo de ejecución de Fabric local.

Composer REST Server es una herramienta que nos permite generar un servidor API REST basado en nuestra definición de red empresarial. Esta API puede ser utilizada por aplicaciones cliente y nos permite integrar aplicaciones que no son blockchain en la red.

Instalación de los requisitos previos, las herramientas y un tiempo de ejecución de Fabric

1. Instalación de requisitos previos

Ahora que tenemos un conocimiento de alto nivel de lo que se necesita para construir estas redes, podemos comenzar a desarrollarnos. Sin embargo, antes de hacer eso, debemos asegurarnos de tener los requisitos previos instalados en nuestro sistema. Puede encontrar una lista actualizada aquí.

  • Docker Engine y Docker Compose
  • Nodejs y NPM
  • Git
  • Python 2.7.x

Para los usuarios de Ubuntu, Hyperledger tiene un script bash disponible para hacer este proceso extremadamente fácil. Ejecute los siguientes comandos en su terminal:

Desafortunadamente, los usuarios de Mac tienen que instalar manualmente las herramientas antes mencionadas y asegurarse de que tienen todos los requisitos previos en su sistema. Esta página se mantiene actualizada con las instrucciones de instalación.

2. Instalación de herramientas para facilitar el desarrollo

Ejecute los siguientes comandos en su Terminal y asegúrese de NO usar sudo cuando ejecute comandos npm.

composer-cli es el único paquete esencial. El resto no son componentes básicos, pero resultarán extremadamente útiles con el tiempo. Aprenderemos más sobre lo que hace cada uno de estos a medida que los encontremos.

3. Instalación de un tiempo de ejecución de Hyperledger Fabric local

Repasemos los comandos y veamos qué significan. Primero, creamos e ingresamos un nuevo directorio. Luego, descargamos y extraemos las herramientas necesarias para instalar Hyperledger Fabric.

Luego especificamos la versión de Fabric que queremos, en el momento de escribir este artículo necesitamos 1.2, por lo tanto, hlfv12 . Luego, descargamos el tiempo de ejecución de la tela y lo iniciamos.

Finalmente, generamos una PeerAdmintarjeta. Los participantes en una red Fabric pueden tener tarjetas de red de negocios, análogas a las tarjetas de negocios de la vida real. Como mencionamos antes, Fabric es una capa base sobre la que se pueden construir blockchains privados. El titular de la tarjeta de presentación PeerAdmin tiene la autoridad para implementar, eliminar y administrar redes comerciales en este tiempo de ejecución de Fabric (¡también conocido como USTED!)

Si todo salió bien, debería ver un resultado como este:

Además, si escribe ls, verá esto:

Básicamente, lo que hicimos aquí fue descargar e iniciar una red de Fabric local. Podemos dejar de usar ./stopFabric.shsi queremos. Al final de nuestra sesión de desarrollo, deberíamos ejecutar./teardownFabric.sh

NOTA: Este tiempo de ejecución local está diseñado para iniciarse, detenerse y desmontarse con frecuencia para su uso en desarrollo. Para un tiempo de ejecución con un estado más persistente, querrá implementar la red fuera del entorno de desarrollo. Puede hacer esto ejecutando la red en Kubernetes o en plataformas administradas como IBM Blockchain. Aún así, primero debes seguir este tutorial para tener una idea.

Creación e implementación de nuestra red empresarial

¿Recuerdas los paquetes yoy generator-hyperledger-composerlos instalamos antes?

yonos proporciona un ecosistema generador donde los generadores son complementos que se pueden ejecutar con el comando yo. Se utiliza para configurar aplicaciones de muestra estándar para varios proyectos. generator-hyperledger-composeres el generador de Yo que usaremos ya que contiene especificaciones para generar redes comerciales estándar, entre otras cosas.

1. Generación de una red empresarial

Abra el terminal en un directorio de su elección y escriba yo hyperledger-composer

Serás recibido con algo similar a lo anterior. Selecciónelo Business Networky asígnele el nombre cards-trading-networkcomo se muestra a continuación:

2. Modelando nuestra red empresarial

El primer paso y el más importante para crear una red empresarial es identificar los recursos presentes. Tenemos cuatro tipos de recursos en el lenguaje de modelado:

  • Bienes
  • Participantes
  • Actas
  • Eventos

Para nuestro cards-trading-network, definiremos un tipo de activo TradingCard, un tipo de participante Trader, una transacción TradeCardy un evento TradeNotification.

Continúe y abra los archivos generados en un editor de código de su elección. Abre org.example.biznet.ctocuál es el archivo de modelado. Elimine todo el código presente en él, ya que lo reescribiremos (excepto la declaración del espacio de nombres).

Contiene la especificación de nuestro activo TradingCard. Todos los activos y participantes deben tener un identificador único para ellos que especificamos en el código, y en nuestro caso, escardId

Además, nuestro activo tiene una GameType cardTypepropiedad que se basa en el enumerador definido a continuación. Las enumeraciones se utilizan para especificar un tipo que puede tener hasta N valores posibles, pero nada más. En nuestro ejemplo, no TradingCardpuede tener una cardTypedistinta Baseball, FootballoCricket

Ahora, para especificar nuestro Tradertipo de recurso participante, agregue el siguiente código en el archivo de modelado

Esto es relativamente más simple y bastante fácil de entender. Tenemos un tipo de participante Tradery se identifican de forma única por su traderIds.

Ahora, necesitamos agregar una referencia a nuestra TradingCards para tener una referencia que apunte a su propietario para que sepamos a quién pertenece la tarjeta. Para hacer esto, agregue la siguiente línea dentro de su TradingCardactivo:

--> Trader owner

para que el código se vea así:

Esta es la primera vez que usamos --> y debes estar preguntándote qué es esto. Este es un punto de relación r. oa nd -> son cómo diferenciamos entre las propiedades propias de un recurso frente a una relación con otro tipo de recurso. Dado que el is a comerciante propietario es un participante en la red, queremos una referencia al that comerciante directamente, y eso es exactamente when -> sí.

Finalmente, continúe y agregue este código en el archivo de modelado que especifica qué parámetros serán necesarios para realizar una transacción y emitir un evento.

3. Añadiendo lógica a nuestras transacciones

Para agregar lógica detrás de la TradeCardfunción, necesitamos un archivo de lógica Javascript. Cree un nuevo directorio con el nombre liben la carpeta de su proyecto y cree un nuevo archivo logic.jscon el siguiente código:

NOTA: El decorador en los comentarios sobre la función es muy importante. Sin el @param {org.example.biznet.TradingCard} trade, la función no tiene idea de a qué se Transactionrefiere el código del lenguaje de modelado. Además, asegúrese de que el nombre del parámetro que se está pasando (es decir trade) sea el que está pasando en la definición de función inmediatamente después.

Este código básicamente verifica si la tarjeta especificada tiene forTrade == truey actualiza al propietario de la tarjeta en ese caso. Luego, dispara el TradeNotificationevento para esa tarjeta.

4. Definición de permisos y reglas de acceso

Agregue una nueva regla permissions.aclpara que los participantes accedan a sus recursos. En producción, querrá ser más estricto con estas reglas de acceso. Puedes leer más sobre ellos aquí.

5. Generación de un archivo de red empresarial (BNA)

Ahora que toda la codificación está hecha, es hora de crear un archivo de almacenamiento para nuestra red empresarial para que podamos implementarlo en nuestro tiempo de ejecución de Fabric local. Para hacer esto, abra Terminal en el directorio de su proyecto y escriba esto:

composer archive create --sourceType dir --sourceName .

Este comando le dice a Hyperledger Composer que queremos construir un BNA desde un directorio que es nuestra carpeta raíz actual.

NOTA: El nombre y la versión de BNA provienen del package.jsonarchivo. Cuando agrega más código, debe cambiar el número de versión allí para implementar archivos únicos capaces de actualizar las redes comerciales existentes.

6. Instale e implemente el archivo BNA

Podemos instalar e implementar la red en nuestro tiempo de ejecución de Fabric local usando el PeerAdminusuario. Para instalar la red empresarial, escriba

composer network install --archiveFile [email protected] --card [email protected]

Para implementar la red empresarial, escriba

composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card [email protected] --file cards-trading-admin.card

El networkNamey networkVersiondebe ser el mismo que se especifica en su, de lo package.jsoncontrario no funcionará.

--filetoma el nombre del archivo que se creará para la tarjeta de presentación de ESTA red. Luego, esta tarjeta debe importarse para que se pueda usar escribiendo

composer card import --file cards-trading-admin.card

Asombroso. Ahora podemos confirmar que nuestra red está en funcionamiento escribiendo

composer network ping --card [email protected]

--card esta vez toma la tarjeta de administrador de la red a la que queremos hacer ping.

Si todo salió bien, debería ver algo similar a esto:

Probando nuestra red empresarial

Ahora que nuestra red está funcionando en Fabric, podemos iniciar Composer Playground para interactuar con ella. Para hacer esto, escriba composer-playgroundTerminal y abra //localhost:8080/en su navegador y debería ver algo similar a esto:

Presione Conectar ahora para [email protected]y será recibido con esta pantalla:

La página Definir es donde podemos realizar cambios en nuestro código, implementar esos cambios para actualizar nuestra red y exportar archivos de la red empresarial.

Dirígete a la página Prueba desde el menú superior y verás esto:

Seleccione Traderentre los participantes, haga clic en Crear nuevo participante cerca de la esquina superior derecha y cree uno nuevo Tradersimilar a esto:

Adelante, haz un par más Trader. Así son mis tres comerciantes con los nombres Haardik, John y Tyrone.

Ahora, hagamos algunos activos. Haga clic en TradingCarden el menú de la izquierda y presione Crear nuevo activo . Observe cómo el ownercampo es particularmente interesante aquí, luciendo algo como esto:

Esta es una relación. Esto es lo que el --> medio. Especificamos el tipo de recurso exacto seguido de su identificador único y listo, tenemos un indicador de relación.

Continúe y termine de hacer TradingCardalgo similar a esto:

Observe cómo los ownercampos apuntan a Trader#1aka Haardikpara mí. Continúe y haga un par de cartas más, y permita que un par se forTradeestablezca en verdadero.

¿Observa cómo Card#2tiene mi forTrade == true?

Ahora, para lo divertido, intentemos intercambiar cartas: D

Haga clic en Enviar transacción a la izquierda y cardseñale TradingCard#2y newOwnerseñale Trader#3así:

Presiona Enviar y echa un vistazo a tu TradingCards, verás que Card#2ahora tiene propietario Trader#3: D

Generando un servidor API REST

Hacer transacciones con Playground es bueno, pero no óptimo. Tenemos que crear software del lado del cliente para que los usuarios les brinden una experiencia perfecta, ni siquiera tienen que conocer necesariamente la tecnología blockchain subyacente. Para hacerlo, necesitamos una mejor forma de interactuar con nuestra red empresarial. Afortunadamente, tenemos el composer-rest-servermódulo para ayudarnos con eso.

Escriba composer-rest-serversu terminal, especifique [email protected], seleccione nunca usar espacios de nombres y continúe con las opciones predeterminadas para el resto de la siguiente manera:

Abra //localhost:3000/explorer/y será recibido con una versión documentada de una API REST generada automáticamente: D

Generando una aplicación angular que usa la API REST

¿Recuerdas el yo hyperledger-composergenerador? Puede hacer más que generar una red empresarial. También puede crear una aplicación Angular 4 que se ejecute en la API REST que creamos anteriormente.

Para crear la aplicación web Angular, escriba yo hyperledger-composersu Terminal, seleccione Angular, elija conectarse a una red comercial existente con la tarjeta [email protected]y conéctese también a una API REST existente. ( Editar: las versiones más recientes del software pueden solicitar el archivo de la tarjeta en lugar de solo el nombre de la tarjeta)

Esto continuará ejecutándose npm install, dale un minuto y, una vez que esté listo, podrás cargar //localhost:4200/y recibir una página similar a esta:

Editar: las versiones más nuevas del software pueden requerir que las ejecute npm installusted mismo y luego ejecutenpm start

Ahora puede jugar con su red desde esta aplicación directamente, que se comunica con la red a través del servidor REST que se ejecuta en el puerto 3000.

¡Felicidades! Acaba de configurar su primera red empresarial blockchain utilizando Hyperledger Fabric y Hyperledger Composer: D

Puede agregar más funciones a la red de comercio de tarjetas, estableciendo precios en las tarjetas y dando un saldo a todos Trader. También puede tener más transacciones que permitan a los Traders alternar el valor de forTrade. Puede integrar esto con aplicaciones que no sean de cadena de bloques y permitir a los usuarios comprar nuevas tarjetas que se agregan a su cuenta, que luego pueden comerciar en la red.

Las posibilidades son infinitas, ¿qué harás con ellas? Házmelo saber en los comentarios: D

ERROR CONOCIDO: ¿Su aplicación web Angular no maneja las transacciones correctamente?

En el momento de escribir este artículo, el generador angular tiene un problema en el que el botón Invocar púrpura en la página Transacciones no hace nada. Para solucionar este problema, debemos realizar algunos cambios en la aplicación angular generada.

1. Obtenga un modal para abrir cuando presione el botón

El primer cambio que debemos hacer es que el botón abra la ventana modal. El código ya contiene la ventana modal requerida, al botón solo le faltan los atributos (click)y data-target.

Para resolver esto, abre /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

El nombre del archivo puede variar según su transactionnombre. Si tiene varios correos transactionelectrónicos en su red comercial, deberá realizar este cambio en todos los archivos HTML del tipo de recurso de transacción.

Desplácese hacia abajo hasta el final y verá un on> tag. Go ahead and add these two attributes to that tag:

(click)="resetForm();" data-target="#addTransactionModal"

so the line looks like this:

Invoke<;/button>

The (click) attribute calls resetForm(); which sets all the input fields to empty, and data-target specifies the modal window to be opened upon click.

Save the file, open your browser, and try pressing the invoke button. It should open this modal:

Original text


2. Removing unnecessary fields

Just getting the modal to open isn’t enough. We can see it requests transactionId and timestamp from us even though we didn’t add those fields in our modeling file. Our network stores these values which are intrinsic to all transactions. So, it should be able to figure out these values on it’s own. And as it turns out, it actually does. These are spare fields and we can just comment them out, the REST API will handle the rest for us.

In the same file, scroll up to find the input fields and comment out the divs responsible for those input fields inside addTransactionModal

Save your file, open your browser, and press Invoke. You should see this:

You can now create transactions here by passing data in these fields. Since card and newOwner are relationships to other resources, we can do a transaction like this:

Press Confirm, go back to the Assets page, and you will see that TradingCard#2 now belongs to Trader#1:

Congratulations! You have successfully built and deployed a blockchain business network on Hyperledger Fabric. You also generated a REST API server for that network and learnt how to make web apps which interact with that API.

If you have any questions or doubts, drop it in the comments and I will get back to you.

Email: [email protected]

LinkedIn: //www.linkedin.com/in/haardikkk