Comienzo este post relativo a Hyperledger, y la tecnología que lo rodea, desde la experiencia adquirida en el área que trabajo actualmente, antes de comenzar tengamos claro que Hyperledger Fabric no es una criptomoneda, es un tecnología de código abierto, colaborativa, que intenta promover proyectos bajo la tecnología Blockchain.
Nace en 2015 bajo la tutela de Linux Foundation y ayudado por empresas líderes en diferentes sectores, esto lo explicamos en el siguiente post Que es Hyperledger, la finalidad detrás de Hyperledger es desarrollar estándares y protocolos abiertos, en resumen, que se centre en el desarrollo de tecnología blockchain privada orientado al mundo empresarial.
Fabric está orientada a la creación de redes privadas, el cual permite la creación de canales privados entre organizaciones, esta red permite el despliegue de Smart Contract, o como aquí se llaman, Chaincodes.
Una de sus grandes capacidades es su flexibilidad, permitiéndonos decidir cosas como el consenso que se quiere utilizar en la red, distintos tipos de base de datos como LevelDB o COuchDB, así como permitir el desarrollo de los Chaincodes en múltiples lenguajes como Go, Node y Java
En este post se explicará la forma de básica la manera de implementar una red Blockchain utilizando Hyperledger Fabric versión 1.4.4, utilizando tecnología de contenedores, para el caso docker, donde existirán 03 organizaciones, las cuales son independientes entre si, las cuales para este caso compartirán el mismo canal de comunicaciones.
Diagrama Conceptual
En la siguiente imagen se muestra el diagrama conceptual de la red Blockchain a implementar
Pre-quistos de implementación
- SO Ubuntu 18.04
- Docker 18.x
- docker-compose 1.24.x
- NodeJs 8.11.x
- Go 1.11.x
Instalación Docker
1 2 3 |
wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/containerd.io_1.2.5-1_amd64.deb wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb |
1 2 3 4 5 6 7 8 |
sudo dpkg -i containerd.io_1.2.5-1_amd64.deb sudo dpkg -i docker-ce-cli_18.09.6~3-0~ubuntu-bionic_amd64.deb sudo dpkg -i docker-ce_18.09.6~3-0~ubuntu-bionic_amd64.deb sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker --version && docker-compose --version |
1 2 3 4 5 |
cd /home mkdir $USER/.docker sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod g+rwx "$HOME/.docker" -R sudo chmod 666 /var/run/docker.sock |
Instalacion NodeJs
1 2 3 4 |
curl -sL https://deb.nodesource.com/setup_8.x | sudo bash - sudo apt install nodejs node -v npm -v |
Instalación Go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sudo apt update sudo curl -O https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz sudo tar -xvf go1.11.5.linux-amd64.tar.gz sudo mv go /usr/local echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile source ~/.profile go version cd $HOME mkdir go echo 'export GOPATH=$HOME/go' >> ~/.profile source ~/.profile echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.profile source ~/.profile |
Descarga de imágenes, binarios de Hyperledger Fabric versión 1.4.4, con el siguiente comando
1 |
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.4.4 |
Configuración de variables, como se indicó para la demostración se usará un solo canal, el cual será utilizado por las 03 organizaciones, el nombre del canal será marketplace, se pueden crear mas canales dependiendo de la necesidad y reglas de negocio.
1 2 3 4 5 |
echo 'export PATH=$PATH:$HOME/fabric-samples/bin' >> ~/.profile source ~/.profile export CHANNEL_NAME=marketplace export VERBOSE=false export FABRIC_CFG_PATH=$PWD |
Nodos, Orderer, Certificados, Bloque génesis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
wget https://gist.githubusercontent.com/jorgedison/1db47ed466bfcd918f76113c38d5bb4e/raw/1c31b397e7274ee47f95b4d652cf658d06eca3fc/crypto-config.yaml cryptogen generate --config=./crypto-config.yaml wget https://gist.githubusercontent.com/jorgedison/68224357eaf95c7217e99393e33fab57/raw/e424b97d4c7ffbebde330fc4db8ee3aa038a6f52/configtx.yaml mkdir channel-artifacts configtxgen -profile ThreeOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block configtxgen -profile ThreeOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME configtxgen -profile ThreeOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP configtxgen -profile ThreeOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP configtxgen -profile ThreeOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org3MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org3MSP |
1 2 3 4 5 6 7 8 9 10 11 12 |
mkdir base cd base wget https://gist.githubusercontent.com/jorgedison/e17cde920ded96caef4f1d6b9bde53f4/raw/6ec9aa2f026a36a3443524cdad0e097168b3ebdd/docker-compose.yaml wget https://gist.githubusercontent.com/jorgedison/415e8603d7d27f4136038d0bf2092458/raw/9b70f80c237c8efcdf757b9e6efca02d79025e25/peer-base.yaml cd .. wget https://gist.githubusercontent.com/jorgedison/2ff7784d2e8bea2918c004ca1b734f36/raw/2ac118581af551ed7fd62bacf295a70d9d21ea8f/docker-compose.yml //Inicio Red wger https://raw.githubusercontent.com/jorgedison/Prueba-Hyperledger-Fabric/master/acme-network/start.sh //Detiene Red wget https://raw.githubusercontent.com/jorgedison/Prueba-Hyperledger-Fabric/master/acme-network/stop.sh |
Iniciada la red, se debe validar el levantamiento de los contenedores
Para esta demostración se esta usando la base de datos CouchDB, el cual servirá para ver el estado actual de la red, por lo que se puede validar el acceso utilizando la IP del host utilizando y puerto 5984
Organizacion 1 http://[IP]:5984/_utils
Organizacion 2 http://[IP]:5985/_utils
Organizacion 3 http://[IP]:5986/_utils
Mayor información de CouchDB en el siguiente enlace
Con este procedimiento se tendría implementada una red blockchain usando Hyperledger Fabric utilizando la versión 1.4.4
Las pruebas se hicieron tomando como referencia la documentación oficial de Hyperledger Fabric, por lo que mayor detalle de conceptos podra ser revisando en los siguientes enlance
https://www.hyperledger.org/projects/fabric
https://github.com/hyperledger/fabric#releases
El código fuente de la prueba realizada se encuentra en el siguiente repositorio https://github.com/jorgedison/Prueba-Hyperledger-Fabric/tree/master/acme-network
5 thoughts on “Implementación de red Blockchain con Hyperledger Fabric”