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 Trader
s que son dueños de TradingCard
s 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 PeerAdmin
tarjeta. 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.sh
si 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 yo
y generator-hyperledger-composer
los instalamos antes?
yo
nos 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-composer
es 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 Network
y asígnele el nombre cards-trading-network
como 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 TradeCard
y un evento TradeNotification
.
Continúe y abra los archivos generados en un editor de código de su elección. Abre org.example.biznet.cto
cuá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 cardType
propiedad 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 TradingCard
puede tener una cardType
distinta Baseball
, Football
oCricket
Ahora, para especificar nuestro Trader
tipo 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 Trader
y se identifican de forma única por su traderId
s.
Ahora, necesitamos agregar una referencia a nuestra TradingCard
s 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 TradingCard
activo:
--> Trader ow
ner
para que el código se vea así:
Esta es la primera vez que usamos --&
gt; 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 wh
en -> 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 TradeCard
función, necesitamos un archivo de lógica Javascript. Cree un nuevo directorio con el nombre lib
en la carpeta de su proyecto y cree un nuevo archivo logic.js
con 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 Transaction
refiere 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 == true
y actualiza al propietario de la tarjeta en ese caso. Luego, dispara el TradeNotification
evento para esa tarjeta.
4. Definición de permisos y reglas de acceso
Agregue una nueva regla permissions.acl
para 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.json
archivo. 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 PeerAdmin
usuario. 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 networkName
y networkVersion
debe ser el mismo que se especifica en su, de lo package.json
contrario no funcionará.
--file
toma 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-playground
Terminal 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 Trader
entre los participantes, haga clic en Crear nuevo participante cerca de la esquina superior derecha y cree uno nuevo Trader
similar 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 TradingCard
en el menú de la izquierda y presione Crear nuevo activo . Observe cómo el owner
campo es particularmente interesante aquí, luciendo algo como esto:

Esta es una relación. Esto es lo que el --&
gt; 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 TradingCard
algo similar a esto:

Observe cómo los owner
campos apuntan a Trader#1
aka Haardik
para mí. Continúe y haga un par de cartas más, y permita que un par se forTrade
establezca en verdadero.

¿Observa cómo Card#2
tiene mi forTrade == true
?
Ahora, para lo divertido, intentemos intercambiar cartas: D
Haga clic en Enviar transacción a la izquierda y card
señale TradingCard#2
y newOwner
señale Trader#3
así:

Presiona Enviar y echa un vistazo a tu TradingCard
s, verás que Card#2
ahora 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-server
módulo para ayudarnos con eso.
Escriba composer-rest-server
su 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-composer
generador? 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-composer
su 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 install
usted 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 Trader
s 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 transaction
nombre. Si tiene varios correos transaction
electró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
(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