Nostr WoT
API Backend

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

<1msLatenza query in cache
<50msLatenza query senza cache
10,000+Query al secondo
O(b^d/2)BFS bidirezionale

Endpoint API

GET /distance

Interroga la distanza sociale tra due pubkey.

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

Interroga le distanze da una pubkey a più destinazioni.

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

Ottieni statistiche sul grafo indicizzato.

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

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

Self-Hosting

Esegui la tua istanza di WoT Oracle. Pieno controllo sulla tua infrastruttura di fiducia.

Docker (Consigliato)

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

Da Sorgente (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

Configurazione

Configura tramite variabili d'ambiente:

VariabilePredefinitoDescrizione
RELAYSdamus, nos.lol, nostr.bandURL dei relay separati da virgola
HTTP_PORT8080Porta del server
DB_PATHwot.dbPosizione del database SQLite
RATE_LIMIT_PER_MINUTE100Limite query per IP
CACHE_SIZE10000Voci della cache LRU
CACHE_TTL_SECS300Scadenza 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.com

Limitata 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.