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
Endpoints de API
GET /distance
Consulta la distancia social entre dos pubkeys.
GET /distance?from=PUBKEY1&to=PUBKEY2{
"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.
POST /distance/batch
Content-Type: application/json
{
"from": "PUBKEY1",
"targets": ["PUBKEY2", "PUBKEY3", "PUBKEY4"]
}{
"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.
{
"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.
{ "status": "healthy", "uptime": 864000 }Auto-Hospedaje
Ejecuta tu propia instancia de WoT Oracle. Control total sobre tu infraestructura de confianza.
Docker (Recomendado)
Docker Compose
Desde Código Fuente (Rust 1.75+)
Configuración
Configura mediante variables de entorno:
| Variable | Predeterminado | Descripción |
|---|---|---|
RELAYS | damus, nos.lol, nostr.band | URLs de relays separados por coma |
HTTP_PORT | 8080 | Puerto del servidor |
DB_PATH | wot.db | Ubicación de base de datos SQLite |
RATE_LIMIT_PER_MINUTE | 100 | Límite de consultas por IP |
CACHE_SIZE | 10000 | Entradas de caché LRU |
CACHE_TTL_SECS | 300 | Expiració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.comLimitado 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.