Skip to content

tpII/2023-G5-BLOCKCHAIN

Repository files navigation

Proyecto G5 - Sistema de Seguimiento de la Cadena de Suministro utilizando Hyperledger Fabric

El Sistema de Seguimiento de la Cadena de Suministro (SSCS) es una demostración del potencial de la tecnología blockchain para proporcionar visibilidad, transparencia y trazabilidad en cada etapa del proceso logístico. Utilizando la tecnología de Hyperledger Fabric, el proyecto tiene como objetivo la demostración de cómo se puede transformar la cadena de suministro convencional en un modelo eficiente, seguro y confiable.

🌠Características del proyecto
  1. Transparencia total
  2. Utiliza la tecnología blockchain para mantener un registro transparente e inmutable de todas las transacciones en la cadena de suministro.

  3. Trazabilidad garantizada
  4. Proporciona una trazabilidad completa desde la creación de un producto hasta su entrega al cliente final, permitiendo un seguimiento detallado del mismo.

  5. Roles especificos
  6. Define roles específicos como Productor, Transportador y Cliente, cada uno con permisos y accesos adaptados a sus funciones respectivas.

  7. Gestión de assets
  8. Permite a los distintos agentes crear nuevos productos, actualizar información relevante y transferir la propiedad de manera segura a lo largo de la cadena de suministro.

  9. Verificación del cliente
  10. Ofrece al cliente la posibilidad de trazar la procedencia y la calidad de los productos que adquieren.

😃Beneficios
  1. Confianza del consumidor
  2. Incremento de la confianza del cliente al ofrecer información transparente y detallada sobre cada producto.

  3. Eficiencia operativa
  4. Optimización de la cadena de suministro al eliminar redundancias y mejorar la coordinación entre los actores involucrados.

  5. Reducción de fraudes
  6. Minimización de fraudes y prácticas deshonestas mediante la verificación transparente de cada transacción.

  7. Cumplimiento normativo
  8. Cumplimiento efectivo de regulaciones y estándares de la industria mediante la documentación detallada y precisa.

💻Tecnologias utilizadas
  1. Aplicación web
    • Flask: framework de desarrollo web en Python para la construcción del servidor web
    • HTML, CSS y JS: fundamentales para la creación de la interfaz de usuario, ofreciendo una experiencia interactiva y atractiva.
    • Bootstrap: empleado para el diseño responsivo y la mejora estética de la interfaz web.
    • jQuery: facilita la manipulación del DOM y la interactividad en el lado del cliente.
    • Leaflet: biblioteca de JavaScript para mapas interactivos, permitiendo la visualización geográfica de la cadena de suministro.
    • WebSocket: protocolo de comunicación bidireccional que facilita la transmisión de datos en tiempo real entre el servidor y la aplicación web.
    • MQTT: protocolo de mensajería ligero y eficiente, utilizado para la comunicación asincrónica entre la aplicación web y el dispositivo IoT.
  2. Dispositivo IoT ESP8266
    • Biblioteca de WiFi: facilitan la conexión del ESP8266 a la red, permitiendo la comunicación con la aplicación web.
    • Biblioteca de MQTT: protocolo utilizado para la comunicación entre los dispositivos IoT y el servidor, asegurando una transmisión de datos eficiente.
    • Biblioteca de escaner RFID RC522: permite la identificación única de productos a lo largo de la cadena de suministro mediante tecnología de identificación por radiofrecuencia.
    • Biblioteca de DHT11: sensor de temperatura y humedad utilizado para monitorear condiciones ambientales durante la cadena de suministro.
  3. Hyperledger Fabric
    • Test-Network con 3 organizaciones: configuración de una red de prueba con tres organizaciones (una por cada agente), garantizando la simulación de un entorno empresarial diverso.
    • Chaincode en TypeScript: lógica de contrato inteligente implementada en TypeScript, define las reglas y la lógica de negocio en la red blockchain. En esta demostración como asset principal se utilizo al modelo de un vino.
    • API-REST en TypeScript: interfaz de programación de aplicaciones basada en el protocolo REST para facilitar la interacción entre la aplicación web y la red Hyperledger Fabric.
  4. Mosquitto
    • Mosquitto: broker de MQTT de código abierto que facilita la implementación del protocolo MQTT en la arquitectura del proyecto. Actúa como intermediario entre el dispositivo IoT (ESP8266) y la aplicación web, asegurando la entrega eficiente de mensajes en la red.

📖 Tabla de contenidos

Tabla de contenidos
  1. ➤ Prerequisitos-Mosquitto
  2. ➤ Prerequisitos-Hyperledger Fabric
  3. ➤ Prerequisitos-ESP8266
  4. ➤ Prerequisitos-Aplicación Web
  5. ➤ Instalación-Hyperledger Fabric
  6. ➤ Instalación-Aplicación Web
  7. ➤ Roles
  8. ➤ Endpoints API-REST
  9. ➤ Bitácora
  10. ➤ Autores
  11. ➤ Coordinador

🦟 Prerequisitos-Mosquitto

Prerequisitos-Mosquitto

La integración de Mosquitto en el proyecto SSCS añade una capa adicional de eficiencia y confiabilidad en la comunicación entre la aplicación web y el dispositivo IoT. Este broker MQTT gestiona la publicación y suscripción de mensajes, garantizando una transmisión de datos muy rápida.

Para su instalación visitar la pagina web https://mosquitto.org/.


⛓️ Prerequisitos-Hyperledger Fabric

Prerequisitos-Hyperledger Fabric

Hyperledger Fabric es una tecnología blockchain empresarial que proporciona una plataforma robusta y segura para la gestión de assets y transacciones en la cadena de suministro. Gracias a sus características, como la capacidad de definir permisos y roles específicos, así como su enfoque modular, Hyperledger Fabric se convierte en una opción poderosa para garantizar la transparencia y la trazabilidad en proyectos como el SSCS.

Se requieren las tecnologias listadas en https://hyperledger-fabric.readthedocs.io/en/release-2.5/prereqs.html, debe seguir las instrucciones de instalación de los prerequisitos dependiendo el sistema operativo que este utilizando.

Adicionalmente debe tener instalado NPM y NodeJS en su última versión. https://nodejs.org/en.


🌶️ Prerequisitos-ESP8266

Prerequisitos-ESP8266

Se requiere descargar el .ino contenido en TP2-ESCANER-RFID, configurarlo con los parametros de WiFi y broker MQTT correspondientes, configurar los pines de los sensores que se utilizan y finalmente cargar el programa al microcontrolador.


🕸️ Prerequisitos-Aplicación Web

Prerequisitos-Aplicación Web

Se requiere la última versión de python https://www.python.org/.

Se requiere tener instalada la última versión de PostgreSQL https://www.postgresql.org/ configurada con una base de datos llamada supply-chain-platform (de preferencia).


⛓️ Instalación-Hyperledger Fabric

Instalación-Hyperledger Fabric

El directorio principal de Hyperledger Fabric es fabric-supply-chain, estando allí, debe acceder al directorio test-network:

$ cd test-network

Luego debe ejecutar el comando:

$ ./network.sh up createChannel -c mychannel -ca -s couchdb

Esto genera 2 organizaciones, cada una con un peer, un single raft ordering service y crea un canal llamado mychannel, donde une a los peers de las 2 organizaciones. Tambien crea una CA por cada organización.

Para este sistema se requieren 3 organizaciones, por lo tanto:

$ cd addOrg3
$ ./addOrg3.sh up -c mychannel -ca -s couchdb

Volver a la carpeta test-network y hacer el deploy del chaincode:

$ cd ..
$ ./network.sh deployCC -ccn basic -ccp ../chaincode-typescript/ -ccl typescript

Ahora se puede probar el chaincode, se pueden setear las variables para actuar como organización 1:

export PATH=${PWD}/../bin:$PATH          # binarios
export FABRIC_CFG_PATH=$PWD/../config/   # config
# Environment variables for Org1
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

Para inicializar la ledger con assets precargados:

$ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'

Para obtener todos los assets:

$ peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

Para crear un asset:

$ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"Args":["CreateAsset","admin","wine6", "blanco", "Org1MSP", "2500", "52.9393", "42", "Las cabras", "2010", "52.9393", "52.9393"]}'

API REST

Finalizadas las pruebas del chaincode se puede levantar el servidor API REST y el servidor REDIS (que se encarga de la cola de tareas). Ir a la carpeta rest-api-typescript e instalar las dependencias y realizar el build:

$ cd ..
$ cd rest-api-typescript
$ npm install
$ npm run build

NO OLVIDAR EJECUTAR EL SCRIPT generateEnv.sh que está en la carpeta rest-api-typescript/scripts. Este script genera un archivo .env que se debe colocar en la carpeta principal rest-api-typescript.

Luego se debe inicializar el server REDIS, que se encarga de mantener la cola de tareas que le van llegando en cada transacción:

$ export REDIS_PASSWORD=$(uuidgen)
$ npm run start:redis	

Finalmente iniciar el servidor API REST

$ npm run start:dev

Las API-KEYS correspondientes a cada organización estan en el archivo .env y deben ser enviadas en la cabecera de la petición HTTP al servidor REST para que la misma sea autorizada.


🕸️ Instalación-Aplicación Web

Instalación-Aplicación Web

En el directorio raíz, crear el entorno virtual:

$ python -m venv venv

Activar el entorno virtual:

# venv\Scripts\activate # Windows
$ ./venv\Scripts\activate # Linux

Instalar dependencias freezadas:

$ pip install -r requirements-freezed.txt

Tener encendido el servidor de DB.

Configurar el archivo .env con las credenciales correspondientes.

Correr las migraciones para tener el sistema de usuarios:

$ flask db upgrade

Iniciar el servidor de la aplicación web:

$ flask run -h 0.0.0.0 --debug

🧙Roles

Roles
Rol Organización
Productor 1
Transporte 2
Cliente 3

👽Endpoints API-REST

Endpoints API-REST
Endpoint Método Descripción
/assets GET Obtener todos los assets del WS
POST Crear un nuevo asset
/assets/:assetID GET Obtener el asset de ID :assetID
PUT Modificar el asset
PATCH Transferencia de dueño del asset
DELETE Borrar el asset del WS
OPTION Devuelve si existe el asset
/assets/history/:assetID GET Ver el historial de transacciones del asset

📖Bitácora

Se realizó un registro de todos los avances del proyecto en la Bitacora.

✒️ Autores

  • Brian Llamocca Repo

  • Juan Martín Ercoli Repo

  • Joaquín Matto Repo

  • Joaquín Stella Repo

📌 Coordinador

  • Gaston Marón Profesor Taller de Proyecto II Repo

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published