Nostr WoT
API Backend

WoT Oracle

Indexador de alto rendimiento para el grafo de seguimientos de Nostr. Consultas en sub-milisegundos respondiendo "¿cuántos saltos separan a estos dos usuarios?"

Qué Hace

WoT Oracle sincroniza continuamente listas de seguimiento (eventos Kind 3) de relays de Nostr, construyendo un grafo en memoria de toda la red social. Luego proporciona una API REST para consultar distancia social entre cualquier par de pubkeys.

Ejemplo: Si Alice sigue a Bob, y Bob sigue a Carol, entonces la distancia de Alice a Carol es 2 saltos.

Rendimiento

<1msLatencia de consulta en caché
<50msLatencia de consulta sin caché
10,000+Consultas por segundo
O(b^d/2)BFS Bidireccional

Endpoints de API

GET /distance

Consulta la distancia social entre dos pubkeys.

http
GET /distance?from=PUBKEY1&to=PUBKEY2
json
{
  "from": "PUBKEY1",
  "to": "PUBKEY2",
  "distance": 2,
  "paths": 5,
  "mutual": false,
  "bridging_nodes": ["PUBKEY3", "PUBKEY4"]
}

POST /distance/batch

Consulta distancias de una pubkey a múltiples objetivos.

http
POST /distance/batch
Content-Type: application/json

{
  "from": "PUBKEY1",
  "targets": ["PUBKEY2", "PUBKEY3", "PUBKEY4"]
}
json
{
  "from": "PUBKEY1",
  "results": [
    { "to": "PUBKEY2", "distance": 1 },
    { "to": "PUBKEY3", "distance": 2 },
    { "to": "PUBKEY4", "distance": null }
  ]
}

GET /stats

Obtén estadísticas sobre el grafo indexado.

json
{
  "total_pubkeys": 1250000,
  "total_follows": 8500000,
  "last_sync": "2024-01-15T10:30:00Z",
  "cache_hit_rate": 0.85
}

GET /health

Endpoint de verificación de salud para monitoreo.

json
{ "status": "healthy", "uptime": 864000 }

Auto-Hospedaje

Ejecuta tu propia instancia de WoT Oracle. Control total sobre tu infraestructura de confianza.

Docker (Recomendado)

terminal
# Pull and run the image
$docker pull ghcr.io/nostr-wot/nostr-wot-oracle:v1.0.0
$
$docker run -d \
$ -p 8080:8080 \
$ -v wot-data:/app/data \
$ ghcr.io/nostr-wot/nostr-wot-oracle:v1.0.0

Docker Compose

terminal
$git clone https://github.com/nostr-wot/nostr-wot-oracle.git
$cd wot-oracle
$docker-compose up -d

Desde Código Fuente (Rust 1.75+)

terminal
$git clone https://github.com/nostr-wot/nostr-wot-oracle.git
$cd wot-oracle
$cargo build --release
$./target/release/nostr-wot-oracle

Configuración

Configura mediante variables de entorno:

VariablePredeterminadoDescripción
RELAYSdamus, nos.lol, nostr.bandURLs de relays separados por coma
HTTP_PORT8080Puerto del servidor
DB_PATHwot.dbUbicación de base de datos SQLite
RATE_LIMIT_PER_MINUTE100Límite de consultas por IP
CACHE_SIZE10000Entradas de caché LRU
CACHE_TTL_SECS300Expiración de caché (5 min)

Arquitectura

Almacenamiento de Grafo

Grafo en memoria para traversal rápido, respaldado por SQLite para persistencia. Sincroniza continuamente desde los relays Nostr configurados.

Búsqueda de Caminos

Búsqueda en anchura bidireccional (BFS) desde ambos extremos simultáneamente, encontrándose en el medio para complejidad O(b^(d/2)).

Caché

Caché LRU con tamaño y TTL configurables. La mayoría de las consultas obtienen caché para tiempos de respuesta en sub-milisegundos.

Limitación de Tasa

Limitación de tasa por IP protege el servicio de abuso. Límites configurables para diferentes escenarios de despliegue.

Instancia Pública

Una instancia pública está disponible para desarrollo y pruebas:

https://wot-oracle.mappingbitcoin.com

Limitado a 100 solicitudes/minuto por IP. Para uso en producción, considera auto-hospedaje.

Código Abierto

Escrito en Rust. Licencia MIT. Auto-hospeda para tu comunidad o contribuye mejoras.