# Red Catalyst

La red Catalyst es la infraestructura descentralizada de distribución de contenido de Decentraland. Varios operadores independientes ejecutan nodos Catalyst que almacenan y sirven contenido.

## Resumen

La red Catalyst funciona como un sistema distribuido completamente mallado donde los nodos se comunican directamente entre sí para sincronizar contenido y mantener la salud de la red.

![Topología de la red Catalyst](/files/abf94530fc74481e0843172b35be0fb8f0f04d46)

## Componentes de Catalyst

Cada nodo Catalyst consta de:

### Servidor de contenido

**Propósito**: almacenamiento y recuperación de activos

Almacena y sirve:

* Definiciones de escenas
* Modelos 3D y texturas
* Archivos de audio
* Scripts
* Avatares y wearables

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

### Lambdas

**Propósito**: funciones de consulta serverless

Proporciona endpoints consultables:

* Búsquedas de entidades
* Consultas de perfil
* Metadatos de contenido
* Historial de despliegues

Las Lambdas se ejecutan como servicios separados que consultan la base de datos del Servidor de contenido.

### Nginx

**Propósito**: proxy inverso y balanceo de carga

Dirige las requests a los servicios adecuados:

* Servidor de contenido para cargas
* Lambdas para consultas
* Servicio de activos estáticos

***

## Despliegue de contenido

### Flujo de despliegue

```mermaid
sequenceDiagram
    participant CLI
    participant Content as Servidor de contenido
    participant Queue as Cola de despliegues
    participant Services as Servicios de backend
    
    CLI->>Content: POST /entities
    Content->>Content: Validar y almacenar
    Content-->>CLI: Despliegue aceptado
    Content->>Queue: Nuevo evento de despliegue
    Queue->>Services: Activar procesamiento
```

### Pasos del despliegue

1. **Compilar**: CLI empaqueta la escena usando build-ecs
2. **Firmar**: El creador firma el despliegue con su wallet
3. **Cargar**: CLI carga en cualquier nodo Catalyst
4. **Validar**: Catalyst valida firmas y contenido
5. **Almacenar**: El contenido se guarda en el almacenamiento
6. **Propagar**: El evento se publica en la cola de despliegues
7. **Procesar**: Los servicios de backend procesan el nuevo contenido

### Validación de contenido

Catalyst valida:

* Firmas digitales (prueba de propiedad)
* Hashes de contenido (integridad)
* Permisos de Parcel (propiedad de LAND)
* Límites de tamaño de archivo
* Cumplimiento de la política de contenido

***

## Pipeline de despliegues

Cuando se despliega contenido, múltiples sistemas reaccionan:

### Procesamiento de activos

```mermaid
flowchart LR
    Deploy[New Deployment]
    Queue[Deployments to SQS]
    AB[Asset Bundle Converter]
    Profile[Profile Images]
    Badges[Badges]
    
    Deploy --> Queue
    Queue -->|activos 3D| AB
    Queue -->|cambios de Avatar| Profile
    Queue -->|comprobación de logros| Badges
```

**Servicios activados**:

* **Asset Bundle Converter** - Crea bundles optimizados
* **Profile Images Producer** - Genera miniaturas de avatar
* **Badges Processor** - Comprueba los logros de despliegue

### Servicios de escucha

Servicios que supervisan los despliegues:

* **Worlds** - Para despliegues de Worlds
* **Comms Gatekeeper** - Para la configuración de voz de Worlds
* **Atlas Server** - Para actualizaciones del mapa

***

## Replicación de contenido

Los nodos Catalyst replican contenido para garantizar la disponibilidad:

### Estrategia de replicación

* **Sincronización activa**: Los nodos sincronizan activamente los nuevos despliegues
* **Basado en pull**: Los nodos obtienen contenido faltante bajo demanda
* **Protocolo Gossip**: Las announcements de despliegue se propagan

### Direccionamiento de contenido

Todo el contenido está direccionado por contenido:

* Archivos identificados por IPFS CID (Content Identifier)
* Inmutable una vez desplegado
* Desduplicación automática

***

## Archipelago Workers (Comms)

La infraestructura de comunicaciones funciona junto con Catalyst:

### Componentes

#### Conector WebSocket

* Mantiene las conexiones de cliente
* Manejo del protocolo
* Autenticación de conexiones

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

#### Archipelago Core

* **Formación de islas** - Agrupa a los jugadores cercanos
* **Límites de peers** - Aplica el máximo de peers por isla (normalmente 100)
* **Actualizaciones de posición** - Emite las posiciones de los jugadores
* **Enrutamiento de mensajes** - Dirige el chat y los emotes

#### Servicio de estadísticas

* Cantidad de usuarios activos por escena
* Estadísticas de conexión
* Métricas de rendimiento

***

## Integración con blockchain

### Indexador de subgraph

Catalyst usa un indexador dedicado:

```mermaid
flowchart LR
    Blockchain[Ethereum/Polygon]
    Subgraph[Indexer]
    Catalyst[Catalyst]
    
    Blockchain -->|Eventos| Subgraph    
    Catalyst -->|Consultas| Subgraph
```

El **Indexer** indexa:

* Propiedad de LAND (NFTs de LAND)
* Colecciones de Wearables y Emotes
* Registros de nombres
* Transferencias de NFTs

***

## Próximos pasos

* Revisar [Servicios de backend](/contributor/contributor-es/arquitectura/services.md) para los detalles del servicio
* Ver [Infraestructura](/contributor/contributor-es/arquitectura/infrastructure.md) para los sistemas de soporte
* Consultar [Resumen de arquitectura](/contributor/contributor-es/arquitectura/architecture.md) para la vista completa


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.decentraland.org/contributor/contributor-es/arquitectura/catalyst.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
