Skip to content
Snippets Groups Projects
README.md 5.11 KiB
Newer Older
adorda's avatar
adorda committed
# 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
adorda's avatar
adorda committed
```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
 
adorda's avatar
adorda committed
```sh
cd /carpeta/del/proyecto/
docker-compose -f docker-compose.yml up -d
adorda's avatar
adorda committed
```
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
adorda's avatar
adorda committed
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
adorda's avatar
adorda committed
```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:
adorda's avatar
adorda committed
 
- Loggear en el admin, en el endpoint /admind
adorda's avatar
adorda committed
- 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
adorda's avatar
adorda committed

- 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

adorda's avatar
adorda committed
- 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>