Nostr WoT
Backend-API

WoT Oracle

Hochleistungs-Indexer für den Nostr-Follow-Graphen. Sub-Millisekunden-Abfragen, die beantworten: "Wie viele Hops trennen diese beiden Benutzer?"

Was es macht

WoT Oracle synchronisiert kontinuierlich Follow-Listen (Kind-3-Events) von Nostr-Relays und erstellt einen In-Memory-Graphen des gesamten sozialen Netzwerks. Es stellt dann eine REST-API zur Abfrage der sozialen Distanz zwischen beliebigen pubkeys bereit.

Beispiel: Wenn Alice Bob folgt und Bob Carol folgt, dann beträgt die Distanz von Alice zu Carol 2 Hops.

Leistung

<1msGecachte Abfragelatenz
<50msUngecachte Abfragelatenz
10,000+Abfragen pro Sekunde
O(b^d/2)Bidirektionale BFS

API-Endpunkte

GET /distance

Abfrage der sozialen Distanz zwischen zwei 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

Abfrage der Distanzen von einem pubkey zu mehreren Zielen.

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

Statistiken über den indizierten Graphen abrufen.

json
{
  "total_pubkeys": 1250000,
  "total_follows": 8500000,
  "last_sync": "2024-01-15T10:30:00Z",
  "cache_hit_rate": 0.85
}

GET /health

Health-Check-Endpunkt zur Überwachung.

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

Self-Hosting

Betreiben Sie Ihre eigene WoT Oracle Instanz. Volle Kontrolle über Ihre Vertrauensinfrastruktur.

Docker (Empfohlen)

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

Aus dem Quellcode (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

Konfiguration

Konfiguration über Umgebungsvariablen:

VariableStandardBeschreibung
RELAYSdamus, nos.lol, nostr.bandKommagetrennte Relay-URLs
HTTP_PORT8080Server-Port
DB_PATHwot.dbSQLite-Datenbank-Speicherort
RATE_LIMIT_PER_MINUTE100Abfragedrosselung pro IP
CACHE_SIZE10000LRU-Cache-Einträge
CACHE_TTL_SECS300Cache-Ablaufzeit (5 Min.)

Architektur

Graph-Speicher

In-Memory-Graph für schnelle Traversierung, gesichert durch SQLite für Persistenz. Synchronisiert kontinuierlich von konfigurierten Nostr-Relays.

Pfadfindung

Bidirektionale Breitensuche (BFS) von beiden Endpunkten gleichzeitig, die sich in der Mitte treffen, für O(b^(d/2))-Komplexität.

Caching

LRU-Cache mit konfigurierbarer Grösse und TTL. Die meisten Abfragen treffen den Cache für Sub-Millisekunden-Antwortzeiten.

Rate Limiting

Pro-IP-Rate-Limiting schützt den Dienst vor Missbrauch. Konfigurierbare Limits für verschiedene Einsatzszenarien.

Öffentliche Instanz

Eine öffentliche Instanz ist für Entwicklung und Tests verfügbar:

https://wot-oracle.mappingbitcoin.com

Begrenzt auf 100 Anfragen/Minute pro IP. Für den Produktiveinsatz empfehlen wir Self-Hosting.

Open Source

Geschrieben in Rust. MIT-lizenziert. Hosten Sie es selbst für Ihre Community oder tragen Sie Verbesserungen bei.