# 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)