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
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
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
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
curl -sL https://deb.nodesource.com/setup_8.x | sudo bash -
sudo apt install nodejs
node -v
npm -v
Instalación Go
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
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.
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
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
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