Últimas entradas

hyperledger-fabric

Implementación de red Blockchain con Hyperledger Fabric

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

Diagrama conceptual

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

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *