WoT Oracle
Indicizzatore ad alte prestazioni per il grafo dei follow di Nostr. Query sotto il millisecondo per rispondere a "quanti salti separano questi due utenti?"
Cosa Fa
WoT Oracle sincronizza continuamente le liste dei follow (eventi Kind 3) dai relay Nostr, costruendo un grafo in memoria dell'intera rete sociale. Fornisce poi un'API REST per interrogare la distanza sociale tra due pubkey qualsiasi.
Esempio: Se Alice segue Bob e Bob segue Carol, la distanza da Alice a Carol è di 2 salti.
Prestazioni
Endpoint API
GET /distance
Interroga la distanza sociale tra due pubkey.
GET /distance?from=PUBKEY1&to=PUBKEY2{
"from": "PUBKEY1",
"to": "PUBKEY2",
"distance": 2,
"paths": 5,
"mutual": false,
"bridging_nodes": ["PUBKEY3", "PUBKEY4"]
}POST /distance/batch
Interroga le distanze da una pubkey a più destinazioni.
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
Ottieni statistiche sul grafo indicizzato.
{
"total_pubkeys": 1250000,
"total_follows": 8500000,
"last_sync": "2024-01-15T10:30:00Z",
"cache_hit_rate": 0.85
}GET /health
Endpoint di controllo dello stato per il monitoraggio.
{ "status": "healthy", "uptime": 864000 }Self-Hosting
Esegui la tua istanza di WoT Oracle. Pieno controllo sulla tua infrastruttura di fiducia.
Docker (Consigliato)
Docker Compose
Da Sorgente (Rust 1.75+)
Configurazione
Configura tramite variabili d'ambiente:
| Variabile | Predefinito | Descrizione |
|---|---|---|
RELAYS | damus, nos.lol, nostr.band | URL dei relay separati da virgola |
HTTP_PORT | 8080 | Porta del server |
DB_PATH | wot.db | Posizione del database SQLite |
RATE_LIMIT_PER_MINUTE | 100 | Limite query per IP |
CACHE_SIZE | 10000 | Voci della cache LRU |
CACHE_TTL_SECS | 300 | Scadenza della cache (5 min) |
Architettura
Archiviazione del Grafo
Grafo in memoria per attraversamento veloce, supportato da SQLite per la persistenza. Si sincronizza continuamente dai relay Nostr configurati.
Ricerca del Percorso
Ricerca in ampiezza bidirezionale (BFS) da entrambi gli estremi simultaneamente, incontrandosi al centro per una complessità O(b^(d/2)).
Cache
Cache LRU con dimensione e TTL configurabili. La maggior parte delle query colpisce la cache per tempi di risposta sotto il millisecondo.
Limitazione delle Richieste
Limitazione per IP per proteggere il servizio da abusi. Limiti configurabili per diversi scenari di distribuzione.
Istanza Pubblica
Un'istanza pubblica è disponibile per sviluppo e test:
https://wot-oracle.mappingbitcoin.comLimitata a 100 richieste/minuto per IP. Per uso in produzione, considera il self-hosting.
Open Source
Scritto in Rust. Licenza MIT. Ospita per la tua comunità o contribuisci con miglioramenti.