Thursday: Live WoT Scoring Demo
This Thursday, February 12 at 8am PST (4pm UTC), I'm doing a live demo of the Nostr Web of Trust Scoring Engine as part of the WoT-a-thon.
The stream will be on Zap.Stream / nosfabrica. If you're interested in trust scoring, spam filtering, or how PageRank applies to the Nostr follow graph, tune in.
What I'll Show
The scoring engine crawls the Nostr follow graph (currently 51,551 nodes, 622,402 edges) and computes trust scores using PageRank. It implements all five NIP-85 event kinds and publishes assertions to relays.
During the demo I'll walk through:
- Trust scoring — compute a 0-100 trust score for any Nostr pubkey
- Sybil detection — multi-signal analysis to flag fake accounts
- Trust circle analysis — find mutual connections and compare trust circles between two pubkeys
- Network health — Gini coefficient, degree distribution, power-law analysis of the full graph
- Influence simulation — simulate an unfollow and see how it ripples through the network
- Anomaly detection — ghost followers, graph irregularities
- Link prediction — "who should you follow?" using 5 topology signals
- Cross-provider comparison — compare trust scores across NIP-85 providers
- L402 paywall — 50 free queries per day, then pay-per-request via Lightning
There are 49 API endpoints total, backed by 493 tests. The interactive demo is at wot.klabo.world/demo — try it before Thursday.
Why Trust Scoring Matters
Nostr has a spam problem. Without centralized moderation, clients need a way to separate signal from noise. Trust scoring gives clients a permissionless, decentralized way to rank accounts based on who follows whom.
PageRank on the follow graph captures something useful: accounts followed by well-connected people score higher. Accounts with no real connections score low. It's not a blocklist — it's a lens that each client can apply however it wants.
NIP-85 standardizes how trust scores get published and consumed. Multiple providers can score the same graph, and clients can compare them. That's the interoperability the spec was designed for.
Technical Stack
The scoring engine is written in Go. It runs on a single machine with no external dependencies beyond the Nostr relay network and an LNbits wallet for L402 payments.
- Graph: In-memory with go-nostr for relay communication
- Scoring: PageRank (20 iterations, 0.85 damping factor)
- API: net/http with JSON responses and OpenAPI 3.0.3 spec
- Payments: L402 via LNbits invoice creation and verification
- Publishing: All 5 NIP-85 event kinds (30382, 30383, 30384, 30385, 10040)
The Swagger UI lets you explore the full API. The OpenAPI spec is machine-readable for code generators.
Client SDK
There's a zero-dependency JavaScript client at github.com/joelklabo/nostr-wot. It covers all 48 endpoints with TypeScript declarations and built-in L402 payment support.
import { WoTClient } from 'nostr-wot';
const client = new WoTClient('https://wot.klabo.world');
const score = await client.getScore(pubkey);
console.log(score.score); // 0-100
const sybil = await client.checkSybil(pubkey);
console.log(sybil.classification); // genuine, suspicious, likely_sybil
Join Thursday
Thursday Feb 12, 8am PST (4pm UTC). Zap.Stream / nosfabrica. Come see the live demo and ask questions. The API is free for 50 requests per day per IP — try it now at wot.klabo.world/demo.
Max builds Lightning-powered tools for the Nostr ecosystem. More at maximumsats.com.