Anonymous threshold trust for Nostr

Use-case atlas.

nostr-veil lets a public circle publish a verifiable NIP-85 trust signal while hiding which circle members contributed. Start with the thing being scored, then open the worked example for the exact implementation path.

nostr-veil ring proof preview
4 NIP-85 subject routes 14 worked use cases v2 kind and subject binding
Choose the subject

The assertion kind follows the thing a verifier will act on.

This is the first design decision. User, event, addressable event, and external identifier assertions all use the same proof layer, but they bind the score to different Nostr subjects. See the NIP-85 trusted assertions spec.

30382

User assertion

Accounts, onboarding candidates, moderators, vendors with a Nostr identity, and pubkey-backed sources.

aggregateContributions

30383

Event assertion

Claims, reports, announcements, grant proposals, credentials, and other single-event artefacts.

aggregateEventContributions

30384

Addressable event assertion

Long-form notes, research artefacts, lists, labeler profiles, moderation feeds, and NIP-33 records.

aggregateAddressableContributions

30385

NIP-73/external identifier assertion

Relays, services, domains, NIP-05 names, packages, releases, maintainers, and marketplace identities.

aggregateIdentifierContributions

Proof contract

The implementation decisions are explicit.

Each worked page shows the concrete subject, helper, metric, verifier checks, and operational controls. This section is the short checklist that keeps those implementations consistent.

1. Canonicalise the subject

Why: proof v2 binds the exact kind and subject hint. If two clients score different strings, they are not scoring the same thing.

  • Use NIP-85 kind 30382 for a user pubkey, 30383 for an event id, 30384 for a NIP-33 address, and 30385 for NIP-73/external identifiers.
  • Define identifier normalisation before signing: domains, relays, packages, releases, vendors, and maintainers all need stable strings.
  • Prefer digest-bound package or release identifiers when the exact artefact matters.

2. Publish verifier policy

Why: the cryptography proves distinct circle members signed. The client still needs to know which circle and threshold are authoritative.

  • State the accepted circle manifest, member admission rules, minimum threshold, and freshness window.
  • Define what rank means for this profile before contributors sign.
  • Choose the evidence or audit process that contributors must complete before adding a score.

3. Verify before action

Why: NIP-85 tags are just event data until the client checks syntax, proof validity, subject binding, and local policy.

  • Run validateAssertionStrict(event) and reject malformed assertions.
  • Run verifyProof(event, { requireProofVersion: 'v2' }) for new subject-bound workflows.
  • Check expected subject, circle, threshold, metric meaning, freshness, and federation scope before applying policy.
Worked examples

Each use case has its own page with the actual build shape.

The individual examples cover subject tags, helper calls, metric meaning, v2 verification, operational requirements, and policy choices. The TypeScript script exercises the same shapes as a runnable cross-check.

Use-case atlas

Pick a workflow, then open the dedicated implementation profile.

Supported-today profiles use the current NIP-85 and proof APIs. Future profiles can use nostr-veil as the proof layer, but need a companion credential or admission protocol before the full workflow is complete.

People and access

Trust signals about accounts and candidates without exposing the contributors behind the score.

Moderation Today

User reputation and abuse reporting

Publish a threshold-backed signal about an account for moderation, trust, or abuse-risk workflows.

NIP-85 kind 30382 / user pubkey Helper: aggregateContributions
Requires evidence workflow, appeals, circle admission, and timing-safe collection.
Onboarding Today

Privacy-preserving onboarding

An existing circle can vouch for a candidate account without naming the members who backed them.

NIP-85 kind 30382 / candidate pubkey Helper: aggregateContributions
Requires admission policy, expiry, revocation, threshold rules, and post-admission moderation.

Content and evidence

Reviewer circles can score sources, claims, articles, and research artefacts while protecting reviewer identity.

Journalism Today

Source corroboration

A trusted circle can corroborate a source or document trail without publishing every person who vouched.

NIP-85 kind 30382 or 30385 Subject: pubkey or source identifier
Requires editorial verification, secure contact handling, identifier hygiene, and operational security.
Fact-checking Today

Event and claim verification

Score a specific note, report, announcement, or claim with a verifiable reviewer threshold.

NIP-85 kind 30383 / event id Helper: aggregateEventContributions
Requires methodology, evidence links, correction events, and supersession rules.
Research Today

Article, research, and long-form review

Let a reviewer circle score an addressable artefact without exposing reviewers to authors or sponsors.

NIP-85 kind 30384 / NIP-33 address Helper: aggregateAddressableContributions
Requires review criteria, conflict rules, revision policy, and optional review notes.

Infrastructure and software

Portable reputation for services, domains, relays, lists, packages, releases, and maintainers.

Relays Today

Relay and service reputation

Score relays, upload services, bots, label APIs, and other endpoints as external identifiers.

NIP-85 kind 30385 / relay or service id Helper: aggregateIdentifierContributions
Requires monitoring, service canonicalisation, expiry, and incident reports.
Identity Today

NIP-05, domain, and service-provider trust

Score identity domains, NIP-05 names, upload providers, payment endpoints, or other service identifiers.

NIP-85 kind 30385 / domain or service id Helper: aggregateIdentifierContributions
Requires DNS, HTTPS, NIP-05 resolution, canonicalisation, expiry, and provider checks.
Curation Today

List, labeler, and moderation-list reputation

Compare lists, labelers, moderation feeds, and filter providers without publishing a reviewer graph.

NIP-85 kind 30384, 30382, or 30385 Helper: match the subject kind
Requires spot checks, list revision policy, freshness, and separate operator scoring.
Software Today

Release, package, and maintainer reputation

Security reviewers can score packages, releases, commits, or maintainers without exposing every reviewer.

NIP-85 kind 30385 / package, release, or maintainer id Helper: aggregateIdentifierContributions
Requires provenance, signatures, SBOMs, reproducible builds, CI, and audit policy.

Markets and counterparties

Trust circles can publish portable signals without revealing every customer, reviewer, or reporter.

Commerce Today

Vendor and marketplace signals

Publish counterparty reputation for sellers, buyers, vendors, and marketplaces.

NIP-85 kind 30382 or 30385 Subject: pubkey or vendor id
Requires dispute handling, refunds, evidence rules, identity checks, and recovery policy.

Governance and coordination

Anonymous review can reduce pressure on individual reviewers while keeping the aggregate verifiable.

Federation Today

Federated moderation

Count distinct contributors across several scoped circles without double-counting overlapping members.

Kind: any supported subject route Helper: verifyFederation
Requires scope governance, overlap-risk review, disagreement policy, and federation membership rules.
Funding Today

Grant, funding, and proposal review

Reviewer circles can score proposals, milestones, or deliverables without exposing individual reviewers.

NIP-85 kind 30383 or 30384 Subject: proposal event or address
Requires reviewer criteria, conflict declarations, appeals, and milestone checks.

Future profiles

These are credible extensions of the proof layer, but the full workflow needs a companion protocol.

Credentials Profile needed

Anonymous credential or attestation co-signing

A circle can score a credential or attestation event today; a full profile needs credential semantics.

Today: NIP-85 kind 30383 or 30384 score Needs: credential event format
Requires holder binding, selective disclosure, presentation, expiry, and revocation.
Access Gate supported

Relay or community admission

A circle can publish a kind 30382 vouch today; the admission helpers add a live challenge and verifier gate.

Today: NIP-85 kind 30382 candidate vouch Live test: kind 30382 plus NIP-78 kind 30078 bundle carrier
Requires replay cache, signed bundle publisher, revocation, rate limits, and session policy.