# Servicios de backend

Esta página ofrece una descripción completa de todos los servicios de backend de Decentraland, sus roles arquitectónicos y cómo interactúan dentro del ecosistema. Para especificaciones detalladas de la API y los endpoints, consulte el [Referencia de API](https://github.com/decentraland/docs/blob/main/apis/README.md) sección.

## Service Architecture

El backend de Decentraland está compuesto por microservicios distribuidos organizados en capas lógicas:

* **Capa Descentralizada** - Red Catalyst e infraestructura de entrega de contenido
* **Capa de Comunicaciones en Tiempo Real** - Descubrimiento de servicios y comunicaciones peer-to-peer
* **Servicios de Funcionalidad** - Funcionalidad orientada al usuario (contenido, economía, gamificación)
* **Servicios Core** - Infraestructura esencial de la plataforma (auth, marketplace, notificaciones)

***

## Capa Descentralizada

### Catalyst

**Propósito**: Red de entrega de contenido descentralizada

La red Catalyst forma la base de la infraestructura de contenido de Decentraland. Cada nodo Catalyst es un servidor completo que proporciona:

* **Content Server** - Almacenamiento y recuperación de entidades (scenes, profiles, wearables)
* **Servicio Lambdas** - Endpoints de utilidad y consultas de contenido
* **Servidor de Comunicaciones** - Transporte de mensajes en tiempo real

**Rol Arquitectónico**: Los nodos Catalyst están distribuidos geográficamente y son permissionless. La red proporciona redundancia y disponibilidad de contenido sin control central.

**Integraciones Clave**:

* Realm Provider - Publica la disponibilidad del nodo
* Asset Bundle Registry - Disparar la optimización de assets en el despliegue
* Archipelago Workers - Proporciona datos de isla/cluster

**Referencia de API**: [Catalyst API](https://github.com/decentraland/docs/blob/main/apis/catalyst/overview/README.md)

### Lamb2

**Propósito**: Utilidades Lambda y funciones serverless

Lamb2 proporciona endpoints de utilidad para el consumo de contenido y consultas que complementan el Content Server:

* Agregación y filtrado de scenes
* Consultas de profiles con mecanismos de respaldo
* Comprobaciones de estado y salud

**Rol Arquitectónico**: Actúa como una capa de conveniencia sobre el acceso bruto a entidades del Content Server, proporcionando patrones de consulta de alto nivel comúnmente requeridos por los clientes.

**Referencia de API**: [Lamb2 API](https://github.com/decentraland/docs/blob/main/apis/lamb2/overview/README.md)

***

## Capa de Comunicaciones en Tiempo Real

### Realm Provider

**Propósito**: Descubrimiento de servicios y selección de realm

El Realm Provider es el punto de entrada para todos los clientes de Decentraland. Implementa la selección inteligente de realm basada en:

* **Optimización geográfica** - Enruta a los usuarios hacia los nodos Catalyst más cercanos
* **Monitoreo de salud** - Filtra nodos no saludables o sobrecargados
* **Seguimiento de capacidad** - Proporciona recuentos de usuarios en tiempo real por realm
* **Agregación de escenas populares** - Identifica ubicaciones populares en todos los realms

**Rol Arquitectónico**: Fuente única de verdad para la infraestructura disponible. Los clientes lo consultan una vez al iniciar para descubrir todos los endpoints de servicio (Catalyst, Comms, BFF).

**Integraciones Clave**:

* Consulta todos los nodos Catalyst periódicamente
* Agrega estadísticas de Archipelago
* Proporciona una vista unificada de la red distribuida

**Referencia de API**: [Realm Provider API](https://github.com/decentraland/docs/blob/main/apis/realm-provider/overview/README.md)

### Comms Gatekeeper

**Propósito**: Control de acceso a voz y video

El Gatekeeper gestiona el acceso a servidores de media LiveKit para chat de voz y video:

* **Generación de tokens** - Crea tokens de acceso con tiempo limitado y permisos específicos
* **Administración de scenes** - Gestiona derechos de administrador de scene y baneos
* **Gestión de streams** - Controla el acceso a transmisiones en vivo y claves RTMP
* **Controles de privacidad** - Aplica permisos de chat de voz privado

**Rol Arquitectónico**: Capa de seguridad entre clientes e infraestructura de media. Evita accesos no autorizados mientras permite modelos de permisos flexibles (basados en scene, privados, comunitarios).

**Integraciones Clave**:

* LiveKit - Emite JWT tokens para acceso al servidor de media
* Worlds API - Valida la propiedad del world para derechos de admin
* Signed Fetch - Autentica todas las solicitudes mediante firmas de wallet

**Referencia de API**: [Comms Gatekeeper API](https://github.com/decentraland/docs/blob/main/apis/comms-gatekeeper/overview/README.md)

### Archipelago Workers

**Propósito**: Agrupamiento de comunicaciones y enrutamiento de mensajes

Archipelago implementa el protocolo de clustering basado en proximidad que agrupa a jugadores cercanos en "islands":

* **Transporte WebSocket** - Mantiene conexiones persistentes con los clientes
* **Seguimiento de posición** - Monitorea las ubicaciones de los jugadores en tiempo real
* **Formación de islands** - Agrupa dinámicamente a los jugadores según la distancia
* **Enrutamiento de mensajes** - Reenvía mensajes solo a los miembros de la island

**Componentes de Arquitectura**:

* **Conector WebSocket** - Maneja conexiones de clientes y autenticación
* **Archipelago Core** - Implementa el algoritmo de clustering y la gestión de islands
* **Servicio de stats** - Proporciona métricas de conexión y recuentos de usuarios
* **Integración con NATS** - Publica actualizaciones de posición y enruta mensajes

**Rol Arquitectónico**: Optimiza las comunicaciones peer-to-peer limitando el fanout de mensajes. En lugar de transmitir a todos los usuarios en un realm, los mensajes solo alcanzan a los jugadores dentro del rango de interacción.

**Integraciones Clave**:

* Broker de mensajes NATS - Enrutamiento de mensajes distribuido
* Realm Provider - Proporciona estadísticas de islands
* Places API - Datos de recuento de usuarios para escenas populares

**Referencia de API**: [Archipelago Workers API](https://github.com/decentraland/docs/blob/main/apis/archipelago-workers/overview/README.md)

***

## Servicios de Funcionalidad

### Worlds

**Propósito**: Alojamiento aislado de scenes fuera de la cuadrícula principal

Worlds permiten a los usuarios desplegar scenes en entornos aislados:

* **Worlds con nombre** - Accesibles mediante URLs personalizadas (p. ej., `world.dclworlds.com`)
* **Worlds privados** - Control de acceso mediante NFT
* **Permisos de Worlds** - Derechos de administrador y despliegue gestionados por el owner

**Rol Arquitectónico**: Extiende el modelo de contenido de Decentraland más allá de la cuadrícula fija de LAND. Cada world es una scene independiente con sus propios canales de comunicación y control de acceso.

**Integraciones Clave**:

* Consulta indexadores de blockchain para verificación de propiedad de NFT
* Publica actualizaciones del world en NATS para sincronización en tiempo real con los clientes
* Se integra con Comms Gatekeeper para salas de chat de voz
* Activa la canalización de procesamiento de assets en el despliegue

**Referencia de API**: [Worlds API](https://github.com/decentraland/docs/blob/main/apis/worlds/overview/README.md)

### Eventos

**Propósito**: Gestión y descubrimiento de eventos in-world

Gestiona el ciclo de vida completo de eventos virtuales:

* **CRUD de eventos** - Creación, actualizaciones y programación
* **Seguimiento de asistentes** - Participación de usuarios y RSVPs
* **Descubrimiento** - Consultas y filtrado por tiempo
* **Notificaciones** - Integración con Events Notifier

**Rol Arquitectónico**: Proporciona contexto temporal al metaverso. Los eventos impulsan el descubrimiento y la participación de usuarios al resaltar experiencias sensibles al tiempo.

**Referencia de API**: [Events API](https://github.com/decentraland/docs/blob/main/apis/events/overview/README.md)

### Places

**Propósito**: Descubrimiento y curación de puntos de interés

Agrega y selecciona ubicaciones interesantes en todo Decentraland:

* **Escenas populares** - Popularidad en tiempo real basada en recuentos de usuarios
* **Lugares destacados** - Ubicaciones seleccionadas editorialmente
* **Búsqueda y filtrado** - Descubrimiento por tags, categorías
* **Metadata de POI** - Descripciones, miniaturas, coordenadas

**Rol Arquitectónico**: Resuelve el problema del descubrimiento en un mundo abierto grande. Agrega datos de múltiples fuentes para ayudar a los usuarios a encontrar contenido atractivo.

**Integraciones Clave**:

* Catalyst - Metadata de scenes e información de despliegue
* Archipelago Stats - Recuentos de usuarios en tiempo real por scene
* Comms Gatekeeper - Disponibilidad y estado de realms

**Referencia de API**: [Places API](https://github.com/decentraland/docs/blob/main/apis/places/overview/README.md)

### Atlas Server

**Propósito**: Datos de mapa y visualización de parcelas

Proporciona datos completos del mapa mundial:

* **Propiedad de parcelas** - Datos de LAND indexados en blockchain
* **Metadata de scenes** - Nombres de scenes desplegadas y coordenadas
* **Tiles de mapa** - Imágenes de tiles prerenderizadas para visualización en UI
* **Consultas espaciales** - Encontrar parcelas por coordenadas u owner

**Rol Arquitectónico**: Proporciona el índice espacial para la cuadrícula de LAND de Decentraland. Esencial para UIs de mapa y navegación espacial.

**Referencia de API**: [Atlas Server API](https://github.com/decentraland/docs/blob/main/apis/atlas-server/overview/README.md)

### Camera Reel

**Propósito**: Gestión de capturas de pantalla generadas por usuarios

Gestiona capturas de pantalla e imágenes de usuarios:

* **Subidas de imágenes** - Almacenamiento autenticado de imágenes
* **Organización de galerías** - Colecciones de capturas de pantalla de usuarios
* **Metadata** - Ubicación de la scene, marca de tiempo, tags

**Rol Arquitectónico**: Habilita el intercambio de contenido y funciones sociales alrededor de la fotografía generada por usuarios.

**Referencia de API**: [Camera Reel API](https://github.com/decentraland/docs/blob/main/apis/camera-reel/overview/README.md)

### Exploration Games

**Propósito**: Gamificación de onboarding y tutoriales

Sistema de misiones interactivas para el onboarding de nuevos usuarios:

* **Seguimiento de misiones** - Progreso a través de misiones tutoriales
* **Finalización de desafíos** - Verificación de tareas
* **Integración de recompensas** - Conexión al sistema de recompensas

**Rol Arquitectónico**: Reduce la fricción para nuevos usuarios proporcionando una introducción estructurada y orientada a objetivos a las funcionalidades de Decentraland.

**Referencia de API**: [Exploration Games API](https://github.com/decentraland/docs/blob/main/apis/exploration-games/overview/README.md)

***

## Servicios Core

### Auth Server

**Propósito**: Autenticación basada en wallet y gestión de sesiones

Implementa el modelo de autenticación wallet-first de Decentraland:

* **Verificación de firmas** - Valida firmas de wallets Ethereum
* **Emisión de tokens JWT** - Genera tokens de sesión
* **Validación de tokens** - Verifica tokens para recursos protegidos
* **Ciclo de vida de la sesión** - Refresco y expiración de tokens

**Rol Arquitectónico**: Proporciona verificación de identidad descentralizada. Los usuarios se autentican mediante firmas de wallet en lugar de contraseñas, alineándose con los principios Web3.

**Flujo de Autenticación**:

1. El cliente solicita un challenge
2. El usuario firma el challenge con la wallet
3. Auth Server verifica la firma y emite un JWT
4. El cliente incluye el JWT en solicitudes API subsecuentes

**Referencia de API**: [Auth Server API](https://github.com/decentraland/docs/blob/main/apis/auth-server/overview/README.md)

### Servicio social

**Propósito**: Gráfica social y gestión comunitaria

Gestiona relaciones sociales y comunidades:

* **Sistema de amigos** - Solicitudes, aprobaciones, listas de amigos
* **Lista de bloqueo** - Bloqueo de usuarios y privacidad
* **Comunidades** - Membresía de grupos y descubrimiento
* **Estado en tiempo real** - Notificaciones de amigos online/offline vía NATS
* **Mensajería privada** - Infraestructura de mensajes directos

**Rol Arquitectónico**: Proporciona la capa social que transforma a Decentraland de un mundo virtual a un metaverso social.

**Integraciones Clave**:

* Catalyst Client - Recupera datos de profile para amigos
* NATS - Publica actualizaciones de estado de amigos
* Archipelago - Consulta estado online y ubicaciones

**Referencia de API**: [Social Service API](https://github.com/decentraland/docs/blob/main/apis/social-service/overview/README.md)

### Marketplace Server

**Propósito**: Integración con marketplace NFT

Backend para el marketplace de wearables y emotes de Decentraland:

* **Consultas de listados** - Navegar y buscar items del marketplace
* **Historial de transacciones** - Registros de compras
* **Datos de precios** - Precios de mercado y tendencias
* **Metadata de colecciones** - Colecciones de wearables y emotes

**Rol Arquitectónico**: Puentea los datos on-chain de NFT con una UI de marketplace amigable para el usuario. Indexa eventos de blockchain para consultas rápidas.

**Referencia de API**: [Marketplace Server API](https://github.com/decentraland/docs/blob/main/apis/marketplace-server/overview/README.md)

***

## Asset Services

### Registro de paquetes de assets

**Propósito**: Gestión optimizada de assets

Registro de bundles de assets optimizados para la plataforma:

* URLs de asset bundles por plataforma
* Versionado
* Distribución CDN

**Referencia de API**: [Asset Bundle Registry API](https://github.com/decentraland/docs/blob/main/contributor/apis/asset-bundle-registry/README.md)

**Componentes del Sistema**:

* **Asset Bundle Converter** - Construye bundles específicos por plataforma
* **Generador de LODs** - Crea variantes de nivel de detalle

**Flujo de Proceso**:

{% @mermaid/diagram content="sequenceDiagram
participant Catalyst
participant Queue as Deployments Queue
participant Converter as AB Converter
participant Registry

```
Catalyst->>Queue: New deployment
Queue->>Converter: Process assets
Converter->>Converter: Build bundles
Converter->>Registry: Register bundles" %}
```

### Camera Reel

**Propósito**: Gestión de capturas de pantalla e imágenes

Gestión de contenido generado por usuarios:

* Almacenamiento de capturas de pantalla
* Subidas de imágenes
* Organización de galerías

**Referencia de API**: [Camera Reel API](https://github.com/decentraland/docs/blob/main/contributor/apis/camera-reel/README.md)

### Credits Server

**Propósito**: Moneda virtual y economía

Gestiona el sistema de créditos virtuales de Decentraland:

* **Seguimiento de saldo** - Saldos de créditos de usuarios
* **Libro mayor de transacciones** - Transferencias y gasto de créditos
* **Integración de compras** - Conversión de fiat a credits
* **Sincronización con blockchain** - Consulta a indexadores para balances on-chain

**Rol Arquitectónico**: Proporciona una alternativa de moneda con menor fricción frente a tokens en blockchain para compras y funcionalidades dentro del mundo.

**Referencia de API**: [Credits Server API](https://github.com/decentraland/docs/blob/main/apis/credits-server/overview/README.md)

### Insignias

**Propósito**: Sistema de logros y gamificación

Premios de insignias impulsados por eventos:

* **Definiciones de insignias** - Logros disponibles
* **Inventario de usuario** - Insignias ganadas por usuario
* **Otorgamiento automático** - Premios de insignias activados por eventos

**Componentes de Arquitectura**:

* **Badges API** - Consultas de insignias e inventarios de usuarios
* **Badges Processor** - Escucha Events Notifier y otorga insignias

**Rol Arquitectónico**: Gamifica la participación del usuario mediante logros. Proporciona visibilidad y reconocimiento por las actividades del usuario.

**Referencia de API**: [Badges API](https://github.com/decentraland/docs/blob/main/apis/badges/overview/README.md)

### API de recompensas

**Propósito**: Distribución de recompensas NFT basada en campañas

Gestiona campañas promocionales de recompensas NFT:

* **Gestión de campañas** - Programas de recompensas por tiempo limitado
* **Verificación de elegibilidad** - Verificar la cualificación del usuario
* **Coordinación de airdrops** - Distribución de NFT a usuarios elegibles
* **Analytics** - Seguimiento de participación en la campaña

**Rol Arquitectónico**: Permite campañas de marketing y adquisición de usuarios a través de recompensas NFT.

**Referencia de API**: [API de recompensas](https://github.com/decentraland/docs/blob/main/apis/rewards/overview/README.md)

### Notifications Workers

**Propósito**: Sistema de entrega de notificaciones a usuarios

Infraestructura de notificaciones multicanal:

* **Notificaciones in-app** - Consultas de bandeja de notificaciones
* **Notificaciones por email** - Integración con SendGrid
* **Push notifications** - Alertas para móvil y escritorio
* **Seguimiento de estado de lectura** - Marcar notificaciones como leídas/no leídas

**Componentes de Arquitectura**:

* **Bandeja de notificaciones** - API para consultar notificaciones de usuario
* **Procesador de notificaciones** - Genera notificaciones a partir de Events Notifier

**Rol Arquitectónico**: Mantiene a los usuarios comprometidos mediante alertas oportunas sobre actividad de amigos, eventos, recompensas y actualizaciones del sistema.

**Referencia de API**: [Notifications Workers API](https://github.com/decentraland/docs/blob/main/apis/notifications-workers/overview/README.md)

### Events Notifier

**Propósito**: Bus de eventos para eventos de la plataforma

Sistema centralizado de publicación de eventos que desencadena acciones aguas abajo:

* **Eventos de usuario** - Login, compras, despliegues
* **Eventos del mundo** - Actualizaciones de scenes, acciones de admin
* **Eventos del sistema** - Mantenimiento, actualizaciones

**Rol Arquitectónico**: Desacopla a los productores de eventos de los consumidores. Los servicios publican eventos sin saber quién los procesa, permitiendo arquitecturas extensibles.

**Integraciones aguas abajo**:

* Procesador de notificaciones - Crea notificaciones de usuario
* Procesador de insignias - Otorga insignias de logro
* Rewards API - Rastrea elegibilidad para campañas

**Referencia de API**: [Events Notifier API](https://github.com/decentraland/docs/blob/main/apis/events-notifier/overview/README.md)

***

## Patrones de Interacción de Servicios

### Patrones Comunes de Integración

#### Catalyst Client Library

Muchos servicios de backend usan la **Catalyst Client** library para interactuar con la red descentralizada Catalyst:

* **Servicio social** - Recupera datos de profile de usuarios
* **Events API** - Consulta metadata de scenes
* **Places** - Agrega información de scenes
* **Registro de paquetes de assets** - Escucha eventos de despliegue

Esta library abstrae la lógica de consulta a múltiples nodos y failover.

#### Broker de Mensajes NATS

Actualizaciones en tiempo real y comunicación asíncrona fluyen a través de NATS:

* **Servicio social** - Publica cambios de estado de amigos
* **Worlds** - Difunde actualizaciones de configuración del world
* **Archipelago** - Enruta actualizaciones de posición entre islands
* **Events Notifier** - Publica eventos de la plataforma

NATS permite que los servicios se comuniquen sin acoplamiento directo.

#### Indexadores de blockchain

Los servicios consultan indexadores (no la blockchain directamente) por rendimiento:

* **Worlds** - Verifica la propiedad de NAME NFT
* **Atlas** - Recupera datos de parcelas LAND
* **Credits Server** - Comprueba balances de tokens
* **API de recompensas** - Verifica condiciones de elegibilidad

Las consultas directas a la blockchain serían demasiado lentas para APIs en tiempo real.

### Canalización de Despliegue de Contenido

Cuando un usuario despliega contenido en Catalyst, múltiples servicios aguas abajo lo procesan:

{% @mermaid/diagram content="flowchart TB
Deploy\[User Deploys Content]
Catalyst\[Catalyst Node]
Queue\[Deployment Queue]

```
subgraph Processing
    AB[Asset Bundle Converter]
    Profile[Profile Image Generator]
    Badges[Badges Processor]
    Events[Events Notifier]
end

Deploy --> Catalyst
Catalyst --> Queue
Queue --> AB
Queue --> Profile
Queue --> Events
Events --> Badges" %}
```

**Pasos de la canalización**:

1. **Catalyst** - Almacena datos de entidad en bruto
2. **Cola de despliegue** - Dispara procesamiento asíncrono
3. **Asset Bundle Converter** - Construye bundles optimizados de Unity
4. **Generador de Imagen de Perfil** - Renderiza miniaturas de avatar (para entidades de profile)
5. **Events Notifier** - Publica evento de despliegue
6. **Badges Processor** - Comprueba insignias por despliegue

### Matriz de Dependencias de Servicios

| Servicio                       | Dependencias Core            | Proporciona Datos A             |
| ------------------------------ | ---------------------------- | ------------------------------- |
| Catalyst                       | Ninguno (descentralizado)    | Todos los servicios             |
| Realm Provider                 | Catalyst, Archipelago Stats  | Todos los clientes              |
| Auth Server                    | Ninguno                      | Todos los servicios protegidos  |
| Archipelago Workers            | NATS, LiveKit                | Realm Provider, Places          |
| Comms Gatekeeper               | LiveKit, Worlds API          | Clientes (generación de tokens) |
| Worlds                         | Catalyst, NATS, Blockchain   | Gatekeeper, Clientes            |
| Servicio social                | Catalyst, NATS, Archipelago  | Clientes                        |
| Places                         | Catalyst, Archipelago, Comms | Clientes                        |
| Events Notifier                | Ninguno                      | Notificaciones, Badges, Rewards |
| Registro de paquetes de assets | Catalyst, Deployment Queue   | Clientes (assets optimizados)   |
| Notifications Workers          | Events Notifier, SendGrid    | Clientes                        |

***

## Documentación Relacionada

### Arquitectura

* [Descripción de la arquitectura](https://docs.decentraland.org/contributor/contributor-es/arquitectura/architecture) - Arquitectura completa del sistema
* [Catalyst Network](https://docs.decentraland.org/contributor/contributor-es/arquitectura/catalyst) - Entrega de contenido descentralizada
* [Infraestructura](https://docs.decentraland.org/contributor/contributor-es/arquitectura/infrastructure) - Sistemas de soporte (NATS, LiveKit, bases de datos)

### Referencias de API

* [Documentación de API](https://github.com/decentraland/docs/blob/main/apis/README.md) - Especificaciones completas de la API
* [Autenticación](https://github.com/decentraland/docs/blob/main/contributor/auth/authchain.md) - Flujos de auth basados en wallet
* [Comunicaciones](https://github.com/decentraland/docs/blob/main/contributor/comms/overview.md) - Protocolos de mensajería en tiempo real

### Desarrollo

* [Guías para contribuidores](https://github.com/decentraland/docs/blob/main/contributor/contributor-guides/overview.md) - Flujos de trabajo de desarrollo
* [Guía de Pruebas](https://github.com/decentraland/docs/blob/main/contributor/practice/testing.md) - Prácticas de pruebas de servicios
