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!