livemainnet
attestations addrs bindings /status
>_ orangecheck // proof of bitcoin stake

Sats as signal.
No KYC,
no custody.

Sign one Bitcoin message. Any app can verify you’ve kept N sats unspent for N days in one API call. No account. No permission. Honest users pay nothing — attackers pay real opportunity cost.

BIP-322 Nostr kind 30078 offline-verifiable MIT / CC-BY-4.0
bash ⋅ attest.ochk.io/api/check
$
 
cache60srate60/minauthnoneaddr
§ what are you solving?

Pick the path that matches your problem.

Every row points at a real integration that exists today — guide, package, and working code. If none of them match, read how OrangeCheck compares to alternatives and decide from there.

  1. [01]Running a forum or comments section

    Bot spam, drive-by throwaways, and Sybil accounts undermining every thread. Require a small OC attestation before a user can post.

    // @orangecheck/gate · 10 lines
    Gate a route
  2. [02]Running an airdrop or token distribution

    Sybil farms that split one wallet into ten thousand claim addresses. Filter candidate addresses by min_sats × min_days before distribution.

    // @orangecheck/airdrop-gate · bulk CLI
    Filter an airdrop
  3. [03]Operating a Nostr relay

    Unbounded spam from unproofed npubs — impossible to moderate at scale. Accept posts only from npubs with a verified OrangeCheck attestation.

    // @orangecheck/relay-filter · Strfry plugin
    Filter a relay
  4. [04]Building a web app that needs identity

    Passwords, magic links, and email auth — all leak, all scale poorly. Sign in with a Bitcoin message. The address is the account.

    // /api/auth/* · 30-day session
    Sign in with Bitcoin
  5. [05]Running on-chain governance or DAO votes

    Sybil governance attacks where one voter controls many "holders". Weight votes by OC score — log(sats) × days rewards long-term skin.

    // score_v0 · offline-verifiable
    Weight by score
  6. [06]None of the above — you want full control

    No external dependency on ochk.io, your own relays, your own Postgres. Clone the stack, point the SDK at your instance. Same protocol, your infra.

    // 3 env vars · any Postgres 14+
    Self-host the verifier
§ how it works

Three steps. One primitive. Fits on a napkin.

  1. [01]SIGN

    One canonical message. BIP-322 signature from any Bitcoin wallet. No transaction, no spending — funds never leave your control.

    // sha256(msg) → attestation_id
  2. [02]PUBLISH

    Drop the proof on Nostr, embed it on your site, share a short URL. Self-contained JSON that anyone can verify offline, forever.

    // kind 30078 · parameterized replaceable
  3. [03]VERIFY

    One GET returns pass/fail plus raw metrics. No SDK. Or drop in @orangecheck/gate middleware for Express, Next, Fastify, Hono.

    // GET /api/check → 200 · 60s cache
§ integrate

Same decision,
every stack.

Query the hosted API, drop in middleware, or import the SDK. Pick your poison.

curl "https://attest.ochk.io/api/check?addr=bc1q...&min_sats=100000&min_days=30"

{
  "ok": true,
  "sats": 125000,
  "days": 47,
  "score": 30.12,
  "attestation_id": "a3f5b8c2…",
  "identities": [
    { "protocol": "nostr",  "identifier": "npub1alice…" },
    { "protocol": "github", "identifier": "alice" }
  ]
}
§ ecosystem

Every piece open. Every piece optional.

Open-core. Pick the piece that fits your stack — or just curl the hosted API directly.

langpackageinstall
  • node
    @orangecheck/sdk
    Core protocol. check(), verify(), createAttestation()
  • node
    @orangecheck/gate
    HTTP middleware. Express, Next, Fastify, Hono, Workers
  • node
    @orangecheck/react
    <OcBadge>, <OcGate>, <OcChallengeButton>
  • node
    @orangecheck/wallet-adapter
    One sign() API across UniSat, Xverse, Leather, Alby
  • node
    @orangecheck/cli
    `oc` shell. check, verify, discover, challenge
  • node
    @orangecheck/relay-filter
    Sybil filter for Nostr relays. Strfry plugin included
  • node
    @orangecheck/airdrop-gate
    Filter candidates into sybil-resistant allowlists
  • python
    orangecheck
    Python SDK. Django, Flask, FastAPI
8 packages · hover a row to reveal the install command