# Idea a desarrollar ```mermaid flowchart TD C[Clientes] subgraph Nodos T[Trackers] S[Servidores] DB["Base de datos"] end subgraph Plataformas VT[VirusTotal] MB[MalwareBazaar] end C -.->|Conocen| T T -.->|"Puede ser"| S T -->|validan| S S -->|"¿Tiene hashes?"| DB DB -.->|Sí| C DB -->|No| Plataformas Plataformas -.-> C Plataformas -.->|Registran| DB C -->|"Peticionan a"| S ``` ## F.A.Q. > ¿Cómo conoce los clientes a los servidores? El cliente ha de tener la dirección de un Tracker, y éste ya le responderá cuales son los Trackers y servidores. El origen serían los servidores de 1noro y KyMAN como Trackers. > ¿Cómo se inicia por primera vez un nodo? Se conectará a un Tracker, y éste le devolverá la lista de Trackers existentes. Luego, todos los Tracker tendrán que aceptar su solicitud manualmente por los dueños de los Trackers y cuando todos hallan aceptado dicho Nodo, éste empezará a funcionar. > ¿Puede ser un servidor no ser Tracker? ¿Nos interesa? Sí, porque los Trackers son como los administradores, y los servidores simplemente darían el servicio de gestión de Hashes y cuentas antivirus. > La base de datos... Todos los servidores tendrían que tener una copia de la base de datos y éstos actualizar dicha copia por cada cambio entre ellos. Esto permite validar como si de una cadena de bloques se tratase. Tiene que existir un demonio en cada servidor que verifique que la base de datos esté actualizada. ```mermaid flowchart TD F[Archivo] DB["Base de datos"] M[Memoria] P[Plataformas] R{{Respuesta}} X{Registro} F -->|"¿Está en...?"| DB DB -->|Sí| R DB -->|"No. ¿Está en...?"| M M -->|Sí| R M -->|No| P P --> X X -.-> DB M -.- X X --> R ``` Registro: ```mermaid sequenceDiagram participant Servidor1 participant Servidor2 participant Servidor3 participant ServidorN note over Servidor1: Tiene un nuevo registro en memoria Servidor1 ->> Servidor2: Envía el nuevo registro Servidor1 ->> Servidor3: Envía el nuevo registro Servidor1 ->> ServidorN: Envía el nuevo registro Servidor2 ->> Servidor1: Verifica tener el nuevo registro Servidor3 ->> Servidor1: Verifica tener el nuevo registro ServidorN ->> Servidor1: Verifica tener el nuevo registro Servidor1 ->> Servidor2: Verifica sincronía Servidor1 ->> Servidor3: Verifica sincronía Servidor1 ->> ServidorN: Verifica sincronía note over Servidor1: Escribe registro note over Servidor2: Escribe registro note over Servidor3: Escribe registro note over ServidorN: Escribe registro ``` > Estado de sincronización al arranque. > Formato de versión Mayor-Minor-Patch - **Mayor**: Completamente márketing. Se decide por los miembros del equipo. Sería como una versión final donde 0 es Alpha o Beta, y a partir de ahí son versiones estables. - **Minor**: Número incremental continuo o de cambios. No hay límite. - **Patch**: Arreglos rápidos sobre la *Minor*.