# 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 host y luego ejecutar los sig comandos ```sh 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: ```sh pip install coverage pip install ipython ``` ### Instalación para desarrollo con docker y pycharm ```sh cd /carpeta/del/proyecto/ docker build -t trazabilidad . docker run --rm --name migrate -v $(pwd):/opt/project -w /opt/project trazabilidad python manage.py migrate ``` En 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 Optativo: ```sh docker-compose up -d ``` 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 host y luego ejecutar los sig comandos ```sh 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 ```sh cd /carpeta/de/aplicacion python manage.py unlock_account ``` Si el smart contract del negocio no está deployado: - Loggear en el admin - 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 - Ahora en consola ```sh cd /carpeta/del/proyecto python manage.py deployar_trazabilidad ``` Opcional: dar el gas a usar cuando el prompt lo pida - 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][Plw3] | | Django-constance | [readthedocs][Pldc] | | Django | [djangoproject][Pldj] | | AIOHTTP | [readthedocs][Plaio] | ### 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!** [//]: # (These are reference links used in the body of this note and get stripped out when the markdown processor does its job. There is no need to format nicely because it shouldn't be seen. Thanks SO - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax) [Plw3]: <https://web3py.readthedocs.io/en/stable/> [Pldc]: <https://django-constance.readthedocs.io/en/latest/> [Pldj]: <https://docs.djangoproject.com/en/2.2/> [Plaio]: <https://aiohttp.readthedocs.io/en/stable/> [PlMe]: <https://github.com/joemccann/dillinger/tree/master/plugins/medium/README.md> [PlGa]: <https://github.com/RahulHP/dillinger/blob/master/plugins/googleanalytics/README.md>