Workshop Hyperledger Fabric – Despliegue de una red Fabric para Universidades

logo blockchaincon

 

¡Hola curiosos del Hyperledger Fabric!

El post que vamos a ver a continuación está referenciado a un workshop que se produjo el pasado 20 de septiembre en la BlockchainCon. Este workshop corrió de mi cuenta (Sergio Torres, me presento) y en él vimos una breve introducción sobre el proyecto Hyperledger. Después de esta introducción, se explicó de una manera más exhaustiva el funcionamiento de una arquitectura de Hyperledger Fabric en un proyecto blockchain. Se vieron diversos aspectos también como por ejemplo los nuevos roles de trabajadores alrededor de un proyecto blockchain.

La última parte del workshop (y más interesante para los desarrolladores) fue totalmente práctica y es la que vamos a tratar en este post. Se desplegó un entorno ideal entre universidades españolas. En concreto, las universidades “Autónoma” y “Complutense”. Aprovechando la charla de la mañana de José Manuel de la Chica en la que hablaba sobre la tecnología blockchain y las universidades, el despliegue estuvo basado en esta idea. Lo que se pretende es dar un ejemplo sobre compartir información entre universidades. Esta información serán los activos principales de la red, los alumnos. Los alumnos serán la información que compartan las universidades con lo que los participantes (las universidades) intercambiarán estudiantes. Podría representar el típico flujo de traslado de expediente de un alumno al cambiarse de universidad.

 

¡Comencemos!

Construiremos nuestra primera red de Hyperledger Fabric en el servidor que tengamos disponible para trastear con Hyperledger Fabric (también nos vale nuestro Ubuntu 16.04 instalado en nuestro PC como es en mi caso).

Para ello, deberemos instalar los pre-requisitos que se encuentran en esta página. Descargarnos un repositorio del GitHub de Hyperledger ya que haremos la instalación mediante la configuración que nos facilitan.

IMPORTANTE: La versión que vamos a usar de Hyperledger Fabric es la 1.1 con lo que habrá que tener muy en cuenta la versión de los repositorios o de las herramientas de encriptación que nos descargamos. Han de estar acorde con la versión de Fabric.

El repositorio que nos bajemos, debe de estar siempre por debajo de la instalación de GO, en la carpeta “src”, se ejecutarán ficheros en GO y por ello debe de estar bajo su directorio. En mi caso el directorio está dentro de la carpeta home de mi usuario “sergio”. Este directorio de GO lo he llamado “work” -> “home/sergio/work/src”

cd work/src
git clone -b master https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout v1.1.0
curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0

Si queremos arrancar un ejemplo de una red Fabric, podemos hacerlo mediante un scrip que nos facilita toda la generación de una red de ejemplo de dos organizaciones. Este script se encuentra dentro de la carpte “first-network”.

El primer paso será generar los “artefactos” del proyecto, esto se traduce a que generaremos todos los ficheros de configuración de canales y material criptográfico del proyecto.

./byfn.sh -m generate

El segundo paso sería arrancar la red. Esto desplegará la configuración por defecto e inmediatamente conectará todos los componentes que ha creado y ejecutará unas transacciones de ejemplo entre las organizaciones de ejemplo.

./byfn.sh -m up

Veremos toda la salida del log por pantalla y si nos fijamos, podemos ver lo que hace paso por paso hasta que finalmente, ejecuta estas transacciones de ejemplo.

Pero bien, este no es nuestro foco del workshop con lo que pararemos el ejemplo ya que las imágenes de Docker aún siguen corriendo por debajo (haced un “docker ps” por terminal). Para parar el ejemplo ejecutar lo siguiente.

./byfn.sh -m down

 

Universidades – Fabric

Crearemos una carpeta para el proyecto, la podremos llamar “proyectouniversidades”.

mkdir proyectouniversidades

Crear el archivo de configuración “crypto-config.yaml” (se puede copiar de nuestro repo aquí). Tendría un aspecto parecido al siguiente:

cryptoconfigyaml

 

Si nos resulta más fácil, podemos copiar el archivo crypto-config.yaml de la carpeta “first-network” y editarlo con nuestra configuración.

Con el mismo procedimiento, pasaremos a crear el fichero “configtx.yaml“. Tendrá este aspecto:

configtx1 configtx2

 

Ahora procederemos a crear nuestro fichero Docker Compose el cual arrancará todas las imágenes de Docker que estarán corriendo en nuestro PC. Estas imágenes corresponderán a los peers de la Universidad Autónoma, los peers de la Universidad Complutense y un orderer. Este archivo lo he llamado “docker-compose-cli.yaml“.

docker1 docker2

 

Como queremos hacer búsquedas enriquecidas por algún campo en concreto, lo cual el LevelDB que viene por defecto instalado, no nos deja. Instalaremos un CouchDB en cada Peer, en este caso, dos para los dos peers de la Autónoma y dos peers para los dos de la Complutense. Crearemos el fichero “docker-compose-couch.yaml“.

Como último paso en la configuración de Docker, crearemos una carpeta dentro del directorio “proyectouniversidades” llamada “base”.

mkdir base

Estos dos ficheros serán unos ficheros de los que dependerán las imágenes de Docker que arranquemos:

 

¡Bien! Ya tenemos todos los ficheros necesarios para poder empezar a desplegar la arquitectura. El primer paso es generar todo el material crypto del proyecto:

mkdir channel-artifacts
../bin/cryptogen generate --config=./crypto-config.yaml
export FABRIC_CFG_PATH=$PWD
../bin/configtxgen -profile UniversidadesOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
export CHANNEL_NAME=universidadeschannel && ../bin/configtxgen -profile UniversidadesChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
../bin/configtxgen -profile UniversidadesChannel -outputAnchorPeersUpdate ./channel-artifacts/AutonomaMSPanchors.tx -channelID $CHANNEL_NAME -asOrg AutonomaMSP
../bin/configtxgen -profile UniversidadesChannel -outputAnchorPeersUpdate ./channel-artifacts/ComplutenseMSPanchors.tx -channelID $CHANNEL_NAME -asOrg ComplutenseMSP

Hasta aquí, todo el material crypto generado. Podremos verlo en las carpetas “channel-artifacts” y “crypto-config” que hemos creado y hemos ido generando material dentro de ellas. Nos habrá salido por pantalla algo parecido a lo siguiente:

cryptoimage

 

Y ya por fin… ¡Arrancar todo!

docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d

Comprobaremos haciendo un “docker ps” las imágenes Docker que se han arrancado:

dockerps

 

Ahora vamos a conectar los peers entre ellos ya que estos peers están levantados pero sin la configuración pertinente que les dice con quién tienen que “hablar”. Para ello nos conectaremos a la imagen de Docker “cli”:

docker exec -it cli bash
export CHANNEL_NAME=universidadeschannel
peer channel create -o orderer.universidades.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/universidades.com/orderers/orderer.universidades.com/msp/tlscacerts/tlsca.universidades.com-cert.pem
peer channel join -b universidadeschannel.block
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/complutense.universidades.com/users/Admin@complutense.universidades.com/msp CORE_PEER_ADDRESS=peer0.complutense.universidades.com:7051 CORE_PEER_LOCALMSPID="ComplutenseMSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/complutense.universidades.com/peers/peer0.complutense.universidades.com/tls/ca.crt peer channel join -b universidadeschannel.block
peer channel update -o orderer.universidades.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/AutonomaMSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/universidades.com/orderers/orderer.universidades.com/msp/tlscacerts/tlsca.universidades.com-cert.pem
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/complutense.universidades.com/users/Admin@complutense.universidades.com/msp CORE_PEER_ADDRESS=peer0.complutense.universidades.com:7051 CORE_PEER_LOCALMSPID="ComplutenseMSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/complutense.universidades.com/peers/peer0.complutense.universidades.com/tls/ca.crt peer channel update -o orderer.universidades.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/ComplutenseMSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/universidades.com/orderers/orderer.universidades.com/msp/tlscacerts/tlsca.universidades.com-cert.pem

 

Ahora procederemos a instalar e instanciar el chaincode (el chaincode podéis obtenerlo de los ejemplos del github de Hyperledger Fabric y editarlo. El ejemplo de marbles se puede editar de una manera bastante sencilla):

peer chaincode install -n univcc -v 1.0 -p github.com/chaincode/universidades/go/
peer chaincode instantiate -o orderer.universidades.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/universidades.com/orderers/orderer.universidades.com/msp/tlscacerts/tlsca.universidades.com-cert.pem -C $CHANNEL_NAME -n univcc -v 1.0 -c '{"Args":["initLedger"]}' -P "OR ('AutonomaMSP.peer','ComplutenseMSP.peer')"
peer chaincode invoke -o orderer.universidades.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/universidades.com/orderers/orderer.universidades.com/msp/tlscacerts/tlsca.universidades.com-cert.pem -C $CHANNEL_NAME -n univcc -c '{"Args":["initLedger"]}'
peer chaincode query -C $CHANNEL_NAME -n univcc -c '{"Args":["queryAllAlumnos"]}'

 

console

 

Y ya tendríamos nuestra arquitectura para las universidades funcionando. Esto es una idea originaria de Blocknitive desde nuestro departamente de I+D en el que pensamos que uno de los grandes beneficiados de la tecnología blockchain sería el ámbito académico. Espero que os haya servido como ejemplo de despliegue de una red de Hyperledger Fabric, en internet tenéis infinidad de repositorios y de artículos desplegando redes de Hyperledger Fabric, nosotros solo queríamos dejar nuestro granito de arena centrado en las universidades. Os animamos a seguir desplegando redes y a avanzar por vuestra cuenta en el mundo Hyperledger.

 

FDO: Sergio Torres Palomino.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *