# Certo Documentación General
## Bitacora general de Certo
https://docs.google.com/spreadsheets/d/1LtRqs_kj3zKctQmNoTJr7GxaAZ273uX1fRF_cSkN7Io/edit#gid=0
### Pestañas:
|Nombre| Descripción|
|------|------------|
|Main| Info básica de las técnologias que se utilizan dentro de la solución.|
|Web| Info para realizar el deploy de la página web de CERTO|
|NodeNginx| Info para la configuración de nginx con ssl para un nodo besu |
|Manager| Configuración del docker-compose para la creación de una instancia manager y la configuración de nginx para la misma |
|BlockExplorer| Info para el deploy del blockexplorer |
## Repos de Github
### Organización
https://github.com/certo-digital
|Nombre| Descripción|
|------|------------|
|certo-manager| Aplicacion para gestionar la cuenta y firmar transacciones |
|certo-api | Aplicacion principal, permite interactuar con la blockchain de CERTO|
|certo-website | Website de CERTO|
|certo-blockchain | Contratos inteligentes utilizados en CERTO|
## **Instancias AWS**
Solicitar las llaves para acceder a las instancias al administrador de CERTO que se encuentra en la carpeta `AWS Accesos` en el drive de CERTO.
|Nombre| Descripción| Public IP | Dominio |
|------|------------|------|------------|
|Dev \| API | Pruebas API Certo| 34.231.242.44 |
|Dev \| Manager | Pruebas Certo Manager(ex-signer)| 18.204.243.137 | https://demosigner.certo.digital/|
|Dev \| Node 1 | Nodo de pruebas Besu | 3.234.255.162 | |
|Prod \| Node 1 | Nodo signer 1 blockchain Besu| 3.238.202.119 | https://node.certo.digital |
|Prod \| Node 2 | Nodo signer 2 blockchain Besu| 18.204.243.137 | |
|Prod \| Node 3 | Nodo signer 3 blockchain Besu| 18.204.243.137 | |
|Prod \| API | API proucción de Certo| 34.236.36.72 | https://api.certo.digital|
|Prod \| BlockExplorer | Explorador de bloques | 18.204.243.137 | http://explorer.certo.digital/|
### **Dev | API**
Instancia de pruebas antes de pre-lanzamiento a producción de nuevos cambios del API CERTO.
### **Dev | Manager**
Es el manager de certo en donde se gestiona una cuenta de prueba para poder realizar la firma transacciones necesarias para interactuar con los contratos inteligentes deployados en la blockchain de certo.
Acá se gestiona la cuenta utilizada para el demo de certo https://certo.digital/demo
#### Configuración docker-compose.yml
```
version: '3.8'
services:
certo-signer:
image: certodigital/certo-manager
container_name: certo-manager
ports:
- 3001:3001 # API Rest Services - expose if needed/wanted
environment:
- IPFS_PORT=5001
- IPFS_HOST=18.204.243.137 # IMPORTANT - Change this IP
- IPFS_PROTOCOL=http
ipfs:
image: trugrouptech/colprofede-ipfs
container_name: ipfs
ports:
- '4001:4001' # IPFS swarm - expose if needed/wanted
- '5001:5001' # IPFS api - expose if needed/wanted
- '8080:8080' # IPFS gateway - expose if needed/wanted
```
### **Dev | Node 1**
Nodo de prueba para recrear la interacción con la blockchain de Certo. Cuenta con la misma configuración de un nodo Besu tradicional.
### **Prod | Node 1,2 y 3**
Nodos de producción de blockchain privada de Certo, los nodos estan conectados entre sí. Utiliza el cliente besu (https://besu.hyperledger.org/en/stable/)
#### Configuración de un nodo Besu
https://github.com/bogos/besu-image-creator
Comandos utilizados para interactuar con el nodo Besu, revisar documentación para detalles
https://besu.hyperledger.org/en/stable/Reference/API-Methods/
##### Num Peers
```
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":53}' http://127.0.0.1:8545
```
##### List Peers
```
curl -X POST --data '{"jsonrpc":"2.0","method":"admin_peers","params":[],"id":1}' http://127.0.0.1:8545
```
##### Get Enode
```
curl -X POST --data '{"jsonrpc":"2.0","method":"net_enode","params":[],"id":1}' http://127.0.0.1:8545
```
##### Add Enode
```
curl -X POST --data '{"jsonrpc":"2.0","method":"admin_addPeer","params":["{ENODE_URL}"],"id":1}' http://127.0.0.1:8545
````
### **Prod | API**
Instancia de producción de la solución Certo, cuenta con 2 versiones
- Sincrónico-sin colas (https://api.certo.digital)
#### Configuración docker-compose.yml
```
version: '3.8'
services:
certo-api:
image: trugrouptech/certo-api:demo
container_name: certo-api
ports:
- 3000:3000 # API Rest Services - expose if needed/wanted
environment:
- IPFS_PORT=5001
- IPFS_HOST=34.236.36.72 # IMPORTANT - Change this IP
- IPFS_PROTOCOL=http
- BESU_PORT=8545
- BESU_HOST=3.238.202.119 # IMPORTANT - Change this IP
- BESU_PROTOCOL=http
- GLOBAL_CONTRACT=0x7b4E46a74Be4e9534503bCe144F499554645A3c6
ipfs:
image: proycertificados/colprofede-ipfs
container_name: ipfs
ports:
- '4001:4001' # IPFS swarm - expose if needed/wanted
- '5001:5001' # IPFS api - expose if needed/wanted
- '8080:8080' # IPFS gateway - expose if needed/wanted
```
- Asincrónico-con colas (https://api.certo.digital/v2/)
#### Configuración docker-compose.yml
```
version: '3.8'
services:
certo-api-image:
image: bogos/certo-api-image:queue
container_name: certo-api-image
ports:
- 3002:3002 # API Rest Services - expose if needed/wanted
environment:
- IPFS_PORT=5001
- IPFS_HOST=34.236.36.72 # IMPORTANT - Change this IP
- IPFS_PROTOCOL=http
- BESU_PORT=8545
- BESU_HOST=3.238.202.119 # IMPORTANT - Change this IP
- BESU_PROTOCOL=http
- GLOBAL_CONTRACT=0x7b4E46a74Be4e9534503bCe144F499554645A3c6
- REDIS_HOST=34.236.36.72
- REDIS_PORT=6379
redis:
image: redis:latest
ports:
- 6379:6379
volumes:
- ./config/redis.conf:/redis.conf
command: [ "redis-server", "/redis.conf" ]
```
La primera espera una respuesta de la blockchain a la hora de realizar una transacción. Se necesita esperar una respuesta de la blockchain para seguir interactuando con la aplicación.
La segunda encola las transacciones y las ejecuta en 2do plano. No hay una necesidad de esperar una respuesta de la blockchain para seguir interactuando la aplicación. Se utiliza BULL QUEUE para encolar las transacciones (https://github.com/OptimalBits/bull)
### **Prod \| BlockExplorer**
Instancia que permite visualizar las transacciones realizadas en blockchain de producción.
Se utiliza EPIRUS para la creación del explorador de bloques. (https://github.com/web3labs/epirus-free)