Newer
Older
# 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
```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
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
#### 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
```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, 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
```sh
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
```sh
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
- 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>