Nostr WoT
API Backend

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

<1msLatence en cache
<50msLatence hors cache
10,000+Requêtes par seconde
O(b^d/2)BFS bidirectionnel

Points d'accès API

GET /distance

Interroger la distance sociale entre deux 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

Interroger les distances d'une pubkey vers plusieurs cibles.

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

Obtenir les statistiques du graphe indexé.

json
{
  "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.

json
{ "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é)

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

Depuis les sources (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

Configuration

Configurer via les variables d'environnement :

VariablePar défautDescription
RELAYSdamus, nos.lol, nostr.bandURLs des relais séparées par des virgules
HTTP_PORT8080Port du serveur
DB_PATHwot.dbEmplacement de la base de données SQLite
RATE_LIMIT_PER_MINUTE100Limitation des requêtes par IP
CACHE_SIZE10000Entrées du cache LRU
CACHE_TTL_SECS300Expiration 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.com

Limité à 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.