Skip to content
Snippets Groups Projects
user avatar
authored

Trazabilidad

dApp y SCs trazabilidad. API REST que provee los servicios para hacer trazabilidad de algún objeto cualquiera

Instalación

Requerimientos

Python 3.5>= ó docker

Instalación para desarrollo con virtual host

Crear virtual env (venv) y luego ejecutar los sig comandos

cd /carpeta/del/proyecto
pip install -r requirements.txt
pip install django-discover-runner
python manage.py migrate

En la carpeta trazabilidad/ hacer un local_settings.py que puede ser copia o link simbólico de los que vienen de ejemplo Optativo:

pip install coverage
pip install ipython

Instalación para desarrollo con docker

cd /carpeta/del/proyecto/
docker-compose -f docker-compose.yml up -d

Este docker-compose.yml hace los siguientes pasos:

  • crea la carpeta logs/ y crea el archivo trazabilidad/local_settings.py a partir de trazabilidad/local_settings_dev.py
  • levanta una blockchain mock de Ganache
  • inicia las migraciones de django, sólo deberían ser las básicas, y usando SQLite
  • crea un usuario de django con permisos de superadmin con nombre "admin" y con contraseña "Clave123!"
  • levanta la aplicación

Opciones

Si se está usando PyCharm

Ir a Settings-> Project Interpreter y elegir Remote Python 3.5 Docker Esperar a que se carguen los skeletons En Run/Debug Configurations agregar configuracion de django server con el intérprete de docker del proyecto, y en Host poner 0.0.0.0 y en Port 8000 En la carpeta trazabilidad/ hacer un local_settings.py que puede ser copia o link simbólico de los que vienen de ejemplo

Los tests de la aplicación dapp son de integración y la idea es que corran sobre ganache para que ejecuten más rápido, ganache viene en el docker-compose, pero no hace falta para correr la aplicación

Instalación productiva

Crear virtual env (venv) y luego ejecutar los sig comandos

cd /carpeta/del/proyecto
pip install -r requirements.txt
python manage.py migrate

Instalar la aplicación como una aplicación productiva sobre apache y el módulo WSGI tradicional

Configurando la aplicación

  • Crear un super user de django
  • Loggear en el admin
  • Ir a Config Constance En la sección Node Info cargar
    • url del nodo
    • account que la aplicación va a usar
    • tildar la opción de POA si es el caso de la red, como probablemente sea la BFA entonces tildar
    • escribir la passphrase de la cuenta
  • En consola
cd /carpeta/de/aplicacion
python manage.py unlock_account

Si el smart contract del negocio no está deployado:

  • Loggear en el admin, en el endpoint /admind

  • Ir a Config Constance En la sección Contract Info cargar

    • bytecode del contrato
    • ABI del contrato

    Estos se pueden conseguir compilando el contrato con el código que está en la carpeta smart_contract/ La aplicación no tiene funcionalidad para compilar código de solidity, pero se puede usar la IDE online Remix para compilar el código, y así obtener el ABI y el ByteCode.

    También en la carpeta smart_contract/ dentro del directorio del proyecto están el archivo abi.json y bytecode, que tienen respectivamente el ABI y el código del compilado de la versión de trazabilidadFactory.sol que está en la misma carpeta

Ahora se pueden hacer 2 cosas para deployar el smart contract

  • Ahora en consola
cd /carpeta/del/proyecto
python manage.py deployar_trazabilidad

Opcional: dar el gas a usar cuando el prompt lo pida

Opcional: si se tiene docker instalado, se puede correr el siguiente comando

cd /carpeta/del/proyecto
docker-compose -f deploy-smart-contract-docker-compose.yml up -d 
docker-compose -f deploy-smart-contract-docker-compose.yml logs --tail 2

El log que menciona Contract address: 0xalgunaddress

  • De nuevo en el admin, en Config Constance En la sección Contract Info cargar
    • contract address con el output del comando deployar_trazabilidad
    • optativo: poner en from block el número de bloque donde se deployó, para hacer búsquedas más rápidas

Plugins

La aplicación usa principalmente los siguientes plugins

Plugin Docs
Web3py readthedocs
Django-constance readthedocs
Django djangoproject
AIOHTTP readthedocs

Todos

  • Completar la cobertura de tests
  • Completar el método OPTIONS para autodiscovery para los clientes
  • Desacoplar la aplicación gateway en un plugin reutilizable de pip

Free Software, Hell Yeah!