WoT Oracle
Indexeur haute performance pour le graphe social Nostr. Requêtes en sous-milliseconde répondant à « combien de sauts séparent ces deux utilisateurs ? »
Ce qu'il fait
WoT Oracle synchronise en continu les listes d'abonnements (événements Kind 3) depuis les relais Nostr, construisant un graphe en mémoire de l'ensemble du réseau social. Il fournit ensuite une API REST pour interroger la distance sociale entre deux pubkeys.
Exemple : Si Alice suit Bob, et Bob suit Carol, alors la distance entre Alice et Carol est de 2 sauts.
Performance
Points d'accès API
GET /distance
Interroger la distance sociale entre deux pubkeys.
GET /distance?from=PUBKEY1&to=PUBKEY2{
"from": "PUBKEY1",
"to": "PUBKEY2",
"distance": 2,
"paths": 5,
"mutual": false,
"bridging_nodes": ["PUBKEY3", "PUBKEY4"]
}POST /distance/batch
Interroger les distances d'une pubkey vers plusieurs cibles.
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
Obtenir les statistiques du graphe indexé.
{
"total_pubkeys": 1250000,
"total_follows": 8500000,
"last_sync": "2024-01-15T10:30:00Z",
"cache_hit_rate": 0.85
}GET /health
Point d'accès de vérification de l'état pour la surveillance.
{ "status": "healthy", "uptime": 864000 }Auto-hébergement
Exécutez votre propre instance de WoT Oracle. Contrôle total sur votre infrastructure de confiance.
Docker (recommandé)
Docker Compose
Depuis les sources (Rust 1.75+)
Configuration
Configurer via les variables d'environnement :
| Variable | Par défaut | Description |
|---|---|---|
RELAYS | damus, nos.lol, nostr.band | URLs des relais séparées par des virgules |
HTTP_PORT | 8080 | Port du serveur |
DB_PATH | wot.db | Emplacement de la base de données SQLite |
RATE_LIMIT_PER_MINUTE | 100 | Limitation des requêtes par IP |
CACHE_SIZE | 10000 | Entrées du cache LRU |
CACHE_TTL_SECS | 300 | Expiration du cache (5 min) |
Architecture
Stockage du graphe
Graphe en mémoire pour un parcours rapide, sauvegardé par SQLite pour la persistance. Synchronisation continue depuis les relais Nostr configurés.
Recherche de chemin
Recherche en largeur bidirectionnelle (BFS) depuis les deux extrémités simultanément, se rejoignant au milieu pour une complexité O(b^(d/2)).
Mise en cache
Cache LRU avec taille et TTL configurables. La plupart des requêtes atteignent le cache pour des temps de réponse en sous-milliseconde.
Limitation du débit
La limitation du débit par IP protège le service contre les abus. Limites configurables pour différents scénarios de déploiement.
Instance publique
Une instance publique est disponible pour le développement et les tests :
https://wot-oracle.mappingbitcoin.comLimité à 100 requêtes/minute par IP. Pour une utilisation en production, envisagez l'auto-hébergement.
Open Source
Écrit en Rust. Sous licence MIT. Auto-hébergez pour votre communauté ou contribuez des améliorations.