Tutorial para poder crear una red blockchain Hyperledger Fabric junto con un cliente Angular que se conecta con la red mediante una API Rest.
- HF-Tutorial
Antes de poder comenzar a configurar nuestra red Fabric necesitamos instalar los prerrequisitos en las máquinas que queramos utilizar para el desarrollo de la aplicación. Puedes ver más información sobre los prerrequisitos aquí.
Deber de tener instalado tanto Docker versión 17.06 o mayor como Docker Compose versión 1.14.0 o mayor:
Podemos comprobar que Docker está instalado con el comando:
$ docker --version
Podemos comprobar que Docker-Compose está instalado con el comando:
$ docker-compose --version
Necesitamos tener instalado el lenguaje Go ya que Hyperledger utiliza dicho lenguaje para muchos de sus componentes.
Además debes añadir la variable de entorno GOPATH apuntando al workspace de Go:
$ export GOPATH=$HOME/go
Si vas a desarrollar aplicaciones con Hyperledger Fabric con NodeJS también necesitas instalar NodeJS versión 8.9.X o superior (la versión 9.x aún no tiene soporte) junto con npm.
Normalmente al instalar NodeJS viene incluido NPM, pero es recomendable confirmar la versión de NPM instalada. Puedes actualizar NPM con el siguiente comando:
$ npm install npm@5.6.0 -g
Ahora debes clonar este repositorio donde hay una plantilla con los archivos necesarios para crear una red Fabric.
$ git clone https://github.com/antonioalfa22/HF-Tutorial.git
$ cd HF-Tutorial
El siguiente paso es descargar la última versión de las imágenes Docker de Hyperledger Fabric y añadirles la etiqueta de latest
. Ejecuta el siguiente comando para descargar dichos archivos.
$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.3.0
$ sudo apt install libtool libltdl-dev
$ go get github.com/miekg/pkcs11
Es recomendable que la máquina en uso no tenga otras imágenes de Docker de Hyperledger Fabric ya que puede dar lugar a errores. Puedes borrar todas las imagenes de Docker con los siguientes comandos:
$ docker rm -f $(docker ps -aq) $ docker rmi -f $(docker images -q)
Una vez descargadas las imágenes Docker, tenemos que asegurarnos que estén en su última version (latest
). Si ejecutamos $ docker images
deberíamos de tener una salida parecida a esta:
Si alguna imágen Docker no tiene la etiqueta latest
puedes añadirla con el siguiente comando:
$ docker tag hyperledger/<name_image>:<tag> hyperledger/fabric-tools:latest
Además de las imágenes Docker se ha descargado una carpeta bin que contiene los ejecutables necesarios para instanciar una red Fabric, como cryptogen, configtxgen, configxlator, peer
. Ahora debemos de añadir la carpeta bin a nuestra variable de entorno PATH:
$ cd fabric-samples
$ export PATH=$PWD/bin:$PATH
Una vez hayas completado todo lo anterior sin problemas, vamos a iniciar por primera vez nuestra red Fabric. Para ello nos situamos en la raíz del repositorio y ejecutamos:
$ ./hfNetwork.sh start
Esto genera todos los certificados y llaves (keys) para nuestras diversas entidades de la red Fabric, incluyendo el genesis block que se usa para iniciar el ordering service y las transacciones necesarias para crear un canal.
Una vez generados los certificados vamos a inicia la red:
Si todo ha salido bien deberíamos de tener levantada nuestra red Fabric.
Para "apagar" la red debemos ejecutar:
$ ./hfNetwork.sh clean
Si todo ha salido bien, al hacer docker ps
deberíamos tener una salida parecida a la siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3ad8c954de2 hyperledger/fabric-tools "/bin/bash" 7 seconds ago Up 6 seconds cli
7fa28abb6525 hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 17 seconds ago Up 11 seconds 0.0.0.0:7054->7054/tcp ca_peerMicrosoft
495c1b48f730 hyperledger/fabric-peer "peer node start" 17 seconds ago Up 7 seconds 0.0.0.0:7051-7053->7051-7053/tcp peer0.microsoft.antonio.com
1ba5aade9f72 hyperledger/fabric-peer "peer node start" 17 seconds ago Up 8 seconds peer0.apple.antonio.com
c37a065d00c6 hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 17 seconds ago Up 10 seconds 0.0.0.0:8054->7054/tcp ca_peerApple
1360d36e2ee8 hyperledger/fabric-orderer "orderer" 17 seconds ago Up 9 seconds 0.0.0.0:7050->7050/tcp orderer.antonio.com
Cuando tengamos levantada la red Fabric, procederemos a crear un canal con nombre laptopschannel
y haremos que las dos organizaciones Microsoft
y Apple
se unan a él.
Para ello primero tenemos que ejecutar los siguientes comandos en orden:
./hfNetwork.sh cli
./scripts/01-createchannel.sh //Se crea el canal
./scripts/02-joinApple.sh // Se une la organización Apple al canal
./scripts/03-joinMicrosoft.sh // Se une la organización Microsoft al canal
./script/04-installApple.sh // se instala el chaincode en el peer de Apple
./script/05-installMicrosoft.sh // se instala el chaincode en el peer de Microsoft
./script/06-instanciate.sh // Se instancia el smart contract
./script/07-init.sh
Para registrar un administrador primero necesitamos instalar las dependencias necesarias:
npm install
Una vez hecho esto procedemos a registrar al administrador:
node registerAdmin.js
En caso de que dicho comando nos devuelva un error, puede ser debido a que no encuentra la adminPrivateKey. Para ello editamos dicha variable en
config/ConnectionProfile.yml
y le damos como valor el nombre del archivo situado en:\crypto-config\peerOrganizations\microsoft.antonio.com\users\Admin@microsoft.antonio.com\msp\keystore
Una vez registrado el admin, podemos registrar nuestro primer usuario llamado user1:
node registerUser.js
Ahora solo nos queda levantar el servidor NodeJS con nuestra API Rest:
npm start
Puedes realizar peticiones para interactuar con la red, como peticiones POST, GET y PUT. Las operaciones disponibles son:
- Obtener todos los laptops: GET
/api/laptops
- Obtener un laptop dado su id: GET
/api/laptop/id
- Añadir laptop: POST
/api/laptop
- Body:
- marca
- modelo
- color
- propietario
- Body:
- Editar laptop: PUT
/api/laptop
- Body:
- id
- marca
- modelo
- color
- propietario
- Body:
En caso de que queramos conectarnos con la red Fabric de manera mas visual e interactiva podemos clonar mi repositorio de Agular7_HF_Client y usar el cliente.
git clone https://github.com/antonioalfa22/Angular7_HF_Client
cd Angular7_HF_Client
npm install -g @angular/cli
npm install
npm start