Skip to content

Latest commit

 

History

History
220 lines (150 loc) · 9.97 KB

README.md

File metadata and controls

220 lines (150 loc) · 9.97 KB

Fabric Nano bash

2 ORG + 1 PEER por org + 1 ORDERER

Basado en https://github.com/hyperledger/fabric-samples/test-network-nano-bash

Esta red proporciona un conjunto de scripts bash mínimos para ejecutar una red Fabric en su máquina local. La red es funcionalmente equivalente a la red de prueba basada en Docker, por lo tanto, puede ejecutar todos los tutoriales y muestras que apuntan a la red de prueba con cambios mínimos. Se utilizan los binarios de Fabric en lugar de usar contenedores Docker. Y el chaincode se ejecuta en un contenedor.

Los scripts brindan una configuración mínima para una red Fabric y, al mismo tiempo, ofrecen una red habilitada para TLS de múltiples nodos:

  • 1 nodo-ordenador
  • Configuración mínima para un canal con (1 nodo-ordenador) y 2 organizaciones (con 1 nodo-par por organización)
  • Política de respaldo mínimo para permitir que 1 organización respalde (aprobar y confirmar) un chaincode

Requisitos previos

Instrucciones para iniciar la red

Abra ventanas de terminal para 1 nodo-ordenador, 2 nodos-pares y 2 administradores de pares como se ve en la siguiente configuración de terminal. El primer nodo-par y administrador pertenece a Org1, el último nodo-par y administrador pertenece a Org2. Puede comenzar con una única organización y la administración de su nodo-par. Configuración de terminal

Las siguientes instrucciones le permiten ejecutar scripts bash que establecen variables de entorno para un componente y luego ejecuta el componente. Los scripts contienen solo comandos simples para que sean fáciles de comprender.

  • Entre (comando cd) al directorio test-network-optativo-nanobash en cada ventana de terminal
  • En el terminal del nodo-ordenador, ejecute ./generate_artifacts.sh para generar transacciones de configuración y bloque génesis del canal y del sistema (llamadas a configtxgen). Los artefactos se crearán en los directorios crypto-config y channel-artifacts.
  • Luego en esa misma terminal, ejecute ./orderer1.sh
  • En las dos terminales para nodos-pares, ejecute ./peer1.sh, ./peer2.sh respectivamente. (ojo: si desea tener una unica organización activa, solo debe ejecutar ./peer1.sh)
  • Tenga en cuenta que el nodo-ordenador y los nodo-pares escriben sus datos (incluidos sus ledger) en su propio subdirectorio en el directorio "data".
  • En las terminales para administración de nodos-pares, ejecute source peer1admin.sh, source peer2admin.sh respectivamente. (ojo: si desea tener una unica organización activa, solo debe ejecutar source peer1admin.sh)

Los scripts de administración de nodos-pares se ejecutan con el comando source para cargar las variables de entorno en los respectivos shells. Esto es importante para que las variables de entorno exportadas puedan ser utilizadas por cualquier comando posterior.

El script peer1admin.sh establece las variables de entorno de administración del peer1, también crea el canal de la aplicación mychannel, actualiza la configuración del canal para el anchor-peer de org1 y une el peer1 al canal mychannel. El scripts de administración de el nodo-par restante une el otro nodo-par al canal mychannel.

Instrucciones para levantar una red con una unica Organización (org1)

# clonamos el repositorio
git clone https://github.com/ic-matcom/test-network-optativo-nanobash.git

# entramos al directorio raiz
cd test-network-optativo-nanobash

# generamos bloque génesis (este script solo debe ejecutarse 1 vez, o cuando desee regresar al estado inicial de la red)
./generate_artifacts.sh

# iniciamos el nodo-ordenador
./orderer1.sh

# abrimos otra terminal e iniciamos el nodo-peer1
./peer1.sh

# abrimos otra terminal e unimos el peer1 al canal y cargamos las variables de entorno
source peer1admin.sh

Instrucciones para levantar una red con 2 Organizaciones (org1 y org2)

# clonamos el repositorio
git clone https://github.com/ic-matcom/test-network-optativo-nanobash.git

# entramos al directorio raiz
cd test-network-optativo-nanobash

# generamos bloque génesis (este script solo debe ejecutarse 1 vez, o cuando desee regresar al estado inicial de la red)
./generate_artifacts.sh

# iniciamos el nodo-ordenador
./orderer1.sh

# abrimos una 2da terminal e iniciamos el nodo-par 1
./peer1.sh

# abrimos una 3ra terminal e iniciamos el nodo-par 2
./peer2.sh

# abrimos una 4ta terminal y unimos el nodo-par 1 al canal y cargamos las variables de entorno
source peer1admin.sh

# Luego en esa misma terminal unimos el nodo-par 2 al canal
source peer2admin.sh

Instrucciones para instalar y ejecutar el chaincode "chaincode-go" de ejemplo

Requisitos previos

Antes debe tener las imagenes docker de fabric-ccenv y fabric-baseos:

Pull ccenv

$ docker pull hyperledger/fabric-ccenv:2.2.5
$ docker tag hyperledger/fabric-ccenv:2.2.5 hyperledger/fabric-ccenv:2.2

Pull baseos

$ docker pull hyperledger/fabric-baseos:2.2.5
$ docker tag hyperledger/fabric-baseos:2.2.5 hyperledger/fabric-baseos:2.2

Descargando dependencias del chaincode

// we move to the chaincode directory (ex: cd chaincodes/chaincode-go/)
cd chaincodes/chaincode-go

go mod vendor

Empaquete e instale el chaincode

En la Org 1

Para instalar e invocar el chaincode, puede utilizar el terminal de administración que creó en los pasos anteriores:

source peer1admin.sh

peer lifecycle chaincode package mycc.tar.gz --path ./chaincodes/chaincode-go --lang golang --label mycc

peer lifecycle chaincode install mycc.tar.gz

La instalación del chaincode puede demorar un minuto

Comprobamos la instalación del chaincode y obtener el ID del chaincode CHAINCODE_ID generado, ejecutando el comando:

peer lifecycle chaincode queryinstalled

Copie el ID del paquete de chaincode devuelto en la variable de entorno para usar luego (el ID puede ser diferente):

export CHAINCODE_ID=mycc:faaa38f2fc913c8344986a7d1617d21f6c97bc8d85ee0a489c90020cd57af4a5

Antes de proceder compruebe la variable de entorno:

echo $CHAINCODE_ID

Debe dar como salida el ID de chaincode

En la Org 2

Si tienes una 2.ª organización activa debe instalar el chaincode previamente empaquetado en el peer2.

source peer2admin.sh
peer lifecycle chaincode install mycc.tar.gz

Luego consulte el chaincode instalado para validar la instalación en la Org2

peer lifecycle chaincode queryinstalled

Copie el ID del paquete de chaincode devuelto en la variable de entorno para usar luego (solo si es diferente o si esta operando en otra terminal):

export CHAINCODE_ID=mycc:faaa38f2fc913c8344986a7d1617d21f6c97bc8d85ee0a489c90020cd57af4a5

Aprobar el chaincode en la Org1

source peer1admin.sh

peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID mychannel --name mycc --version 1 --package-id $CHAINCODE_ID --sequence 1 --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

Aprobar el chaincode en la Org2

👀 Este paso es solo si tiene la Org2 activa, de lo contrario debe omitirlo e ir al siguiente

source peer2admin.sh

peer lifecycle chaincode approveformyorg -o 127.0.0.1:7050 --channelID mychannel --name mycc --version 1 --package-id $CHAINCODE_ID --sequence 1 --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

Activar el chaincode (solo es necesario hacerlo una unica vez y en cuando haya sido aprobado por TODAS las Organizaciones en EJECUCION)

peer lifecycle chaincode commit -o 127.0.0.1:7050 --channelID mychannel --name mycc --version 1 --sequence 1 --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

Interactuar con el chaincode

Invoque el chaincode para crear un activo (en esta red solo se requiere que una única Org valide la Tx según la política de respaldo configurada). Luego consulte el activo, actualícelo y vuelva a consultar para ver los cambios de activos resultantes en el ledger. Tenga en cuenta que debe esperar un poco para que se completen las transacciones de invocación.

# Inicializar el ledger con datos de prueba
peer chaincode invoke -o 127.0.0.1:7050 -C mychannel -n mycc -c '{"Args":["InitLedger"]}' --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

# Crear un activo
peer chaincode invoke -o 127.0.0.1:7050 -C mychannel -n mycc -c '{"Args":["CreateAsset","1","blue","35","tom","1000"]}' --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

# Consultar un activo
peer chaincode query -C mychannel -n mycc -c '{"Args":["ReadAsset","1"]}'

# Actualizar un activo
peer chaincode invoke -o 127.0.0.1:7050 -C mychannel -n mycc -c '{"Args":["UpdateAsset","1","blue","35","jerry","1000"]}' --tls --cafile "${PWD}"/crypto-config/organizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

# Consultar el activo actualizado
peer chaincode query -C mychannel -n mycc -c '{"Args":["ReadAsset","1"]}'

¡Felicitaciones, ha implementado una red Fabric mínima! Inspeccione los scripts si desea ver el conjunto mínimo de comandos necesarios para implementar la red.

Utilice Ctrl-C en las ventanas del terminal para eliminar los procesos de los nodos. Puede ejecutar los scripts nuevamente para reiniciar los componentes con sus datos existentes, o ejecutar ./generate_artifacts nuevamente para limpiar los artefactos y datos existentes si desea reiniciar con un entorno limpio.

Si desea probar las Tx usando el SDK de go, ver el README.md en application-go