Skip to content
@orangecheck

OrangeCheck

Proof of Bitcoin stake for the open web — a sybil-resistance primitive. No custody, no account, no KYC.

OrangeCheck

Six verbs. One Bitcoin address. The protocol surface of the sovereign web.

Identity, confidentiality, legitimacy, provenance, authority, commitment — six composable protocols on Bitcoin. No custody. No token. No issuer. Every artifact verifies offline, forever.

A small Bitcoin balance, left unspent for a while, is the only credible economic signal on the open internet. OrangeCheck is the family of open protocols that turns that signal into portable, cryptographic, platform-neutral proofs — for sybil resistance, end-to-end encryption, sovereign declarations, stake-weighted polls, scoped agent delegation, and bonded commitments.

No custody. No KYC. No aggregated reputation score. No captured intermediary. Honest users pay nothing but time; attackers pay real Bitcoin opportunity cost — ruinous at scale.

Hosted reference apps · docs · sign-in: ochk.io · docs.ochk.io


The family — six verbs of sovereign sociality

Every protocol shares the same shape: a BIP-322 signature from a Bitcoin address over a canonical, human-readable message. Learn that one shape and the rest of the family pattern-matches.

Verb Protocol Subdomain What it does
am OC Attest attest.ochk.io Sybil resistance via proof of Bitcoin stake. Sign one message; any verifier checks N sats unspent for N days. The base layer.
whisper OC Lock lock.ochk.io End-to-end encryption addressed to a Bitcoin address. X25519 device keys bound via BIP-322. No key server, no account.
decide OC Vote vote.ochk.io Stake-weighted, sybil-resistant polls. Three canonical weight modes. Deterministic, cross-impl-testable tally.
declare OC Stamp stamp.ochk.io Bitcoin-block-anchored signed statements. BIP-322 + OpenTimestamps. Replaces PGP + OTS + C2PA in one envelope.
delegate OC Agent agent.ochk.io Scoped, revocable, BIP-322-bound delegation authority. Every agent action is signed, scoped, non-repudiable.
swear OC Pledge pledge.ochk.io Forward-looking, bond-backed commitments to future-verifiable propositions. Enforcement by exposure, never by custody.

The family is closed at six. OC Attest is the base layer; the other five are peers that may optionally reference an Attest proof as a stake-at-signing signal. Every protocol's specification, threat model, and reference impls live in their own repo. Everything composes — gate predicates, vote-resolved disputes, stamp-published pledges, agent-signed envelopes — but no protocol depends on another at the wire level.


Spec repos

Every protocol ships under the same canonical layout: README.md / PROTOCOL.md / SPEC.md / WHY.md / SECURITY.md / CHANGELOG.md / LICENSE / test-vectors/ /examples/. Specs are CC-BY-4.0; example code is MIT.

Repo Spec for
oc-attest-protocol OC Attest — proof of Bitcoin stake (the base layer)
oc-lock-protocol OC Lock — sealed envelopes addressed to a BTC address
oc-vote-protocol OC Vote — stake-weighted polls + tally
oc-stamp-protocol OC Stamp — BIP-322 + OpenTimestamps envelopes
oc-agent-protocol OC Agent — delegation + scope grammar
oc-pledge-protocol OC Pledge — bonded commitments + resolution

A protocol-level conformance vector in any spec repo is a (input, expected_output) JSON tuple that every reference implementation MUST pass byte-identically. A new implementation joins the family by passing every vector for the protocols it implements.


Reference implementations

Repo Contents
oc-packages Monorepo. 22 published @orangecheck/* packages on npm + the Python SDK.
oc-www Hosted umbrella site + auth host (ochk.io / signin / dashboard / JWKS).
oc-docs Unified docs site (docs.ochk.io). 80 MDX pages — one section per protocol + shared concepts + SDK reference.
oc-attest-web Reference app at attest.ochk.io.
oc-lock-web Reference app at lock.ochk.io.
oc-vote-web Reference app at vote.ochk.io.
oc-stamp-web Reference app at stamp.ochk.io.
oc-agent-web Reference app at agent.ochk.io.
oc-pledge-web Reference app at pledge.ochk.io.

All code is MIT. Specs are CC-BY-4.0. Fork, re-implement, self-host — that's the point.


Published packages

npm · @orangecheck/* (22 packages)

Core (one per protocol):

Package Protocol Role
@orangecheck/sdk Attest TypeScript core — check, verify, createAttestation.
@orangecheck/lock-core Lock Sealed-envelope format + seal() / unseal().
@orangecheck/lock-crypto Lock Narrow crypto primitives (X25519, HKDF, AES-GCM).
@orangecheck/lock-device Lock Device-key management + Nostr kind-30078 directory.
@orangecheck/vote-core Vote Reference impl + the deterministic tally() pure function.
@orangecheck/stamp-core Stamp Canonical message + envelope format + stamp() / verify().
@orangecheck/stamp-ots Stamp OpenTimestamps calendar client + proof helpers.
@orangecheck/agent-core Agent Delegation + action envelopes, scope parser, BIP-322 verifier.
@orangecheck/agent-signer Agent Helpers for signing delegations + actions.
@orangecheck/agent-mcp Agent Model Context Protocol bridge for LLM tool calls.

Integrations + middleware:

Package Use when
@orangecheck/gate Drop-in HTTP middleware (Express / Next / Fastify / Hono / Workers).
@orangecheck/react React components: <OcBadge>, <OcGate>, <OcChallengeButton>.
@orangecheck/vote-react React components for OC Vote poll creation + tally rendering.
@orangecheck/wallet-adapter Normalizes UniSat / Xverse / Leather / Alby behind sign(message).
@orangecheck/auth-client <OcSessionProvider> + useOcSession() for cross-subdomain auth.
@orangecheck/auth-core Crypto-only Ed25519 JWT verify + cookie helpers (consumer side).
@orangecheck/relay-filter Strfry / Nostr-relay plugin — reject events from unbonded npubs.
@orangecheck/airdrop-gate Filter candidate addresses into a sybil-resistant airdrop allowlist.

CLIs:

Package Bin
@orangecheck/cli oc
@orangecheck/stamp-cli stamp · git-stamp
@orangecheck/vote-cli oc-vote
@orangecheck/agent-cli oc-agent

PyPI · orangecheck

pip install orangecheck — sync + async client against the OrangeCheck hosted API, plus offline canonical primitives. Shares conformance vectors with @orangecheck/sdk; a byte-identity drift in either implementation breaks the other's CI.


Quickstart

Sybil-gate a route in five lines:

import { ocGate } from '@orangecheck/gate';

app.post(
    '/post',
    ocGate({ minSats: 100_000, minDays: 30, address: { from: 'header' } }),
    postHandler,
);

Sign in with Bitcoin end-to-end (cross-subdomain auth host):

yarn add @orangecheck/auth-client
import { OcSessionProvider, OcSignInButton, useOcSession } from '@orangecheck/auth-client';

function App() {
    return (
        <OcSessionProvider>
            <Page />
        </OcSessionProvider>
    );
}

function Page() {
    const { status, account } = useOcSession();
    return status === 'authenticated' ? <Dashboard /> : <OcSignInButton />;
}

Per-protocol quickstarts: docs.ochk.io. One-page narrative for any new reader: docs.ochk.io/getting-started/which-protocol.


What OrangeCheck is NOT

Read this list twice. These are visible refusals — design constraints, not omissions.

  • Not custodial. No protocol in the family ever holds sats. Funds never move. Bonds and stake are economic signals, not balances under contract control.
  • Not slashing-based. No actor — protocol, counterparty, voter, oracle — can seize bonded sats. Ever. Teeth come from public records, not lockup.
  • Not aggregated reputation. Every protocol ships raw metrics (sats_bonded, days_unspent, kept_count, broken_count) and refuses to ship a canonical score. Platforms compose policy from raw queries.
  • Not proof of personhood. One address can be one human, ten, or zero. For one-human-one-vote, look at World ID or BrightID.
  • Not legal. Produces evidence admissible in jurisdictions that recognise digital signatures. Does not produce judgements. Does not replace courts.
  • Not a smart-contract platform. No VM, no gas, no on-chain state writes. Everything is off-chain canonical envelopes plus reads of public Bitcoin and Nostr state.

If your design only works on Ed25519 (no economic layer, no non-malleable time, no enumerable identity namespace), it doesn't belong in this family.


Contribute

  • Bug or spec question? Open an issue on the relevant oc-*-protocol repo (specification), the relevant oc-*-web repo (reference app), or oc-packages (publishable code).
  • Writing a new implementation (Rust, Swift, Go, Elixir, anything)? Start from the conformance vectors in the relevant oc-*-protocol repo. If your implementation passes the vectors byte-identically, it agrees with the reference TypeScript and Python implementations exactly.
  • Building something on top? Get in touch — happy to wire up gate predicates, pledge resolution mechanisms, or custom integrations.
  • Licensing. Specs CC-BY-4.0 · Code MIT · No CLA.

Popular repositories Loading

  1. oc-attest-protocol oc-attest-protocol Public

    OrangeCheck Protocol (OCP) — the canonical spec, NIP, registry, and conformance vectors. Proof of Bitcoin stake for the open web.

    JavaScript

  2. oc-lock-protocol oc-lock-protocol Public

    Bitcoin-identity-bound end-to-end encryption — the normative v2 specification. Reference SDK lives in orangecheck/oc-packages.

  3. oc-packages oc-packages Public

    Monorepo for the @orangecheck/* npm packages + the orangecheck Python SDK. SDK, gate middleware, React bindings, wallet adapter, CLI, Strfry relay filter, airdrop-gate.

    TypeScript

  4. .github .github Public

    OrangeCheck organization profile

  5. oc-stamp-protocol oc-stamp-protocol Public

    OC Stamp — Bitcoin-identity-bound content attestation with block-anchored priority. Sub-product of OrangeCheck.

  6. oc-vote-protocol oc-vote-protocol Public

    OC Vote Protocol — sovereign signaling for the open web. Stake-weighted, sybil-resistant, offline-tallyable polls on Bitcoin. v0 spec.

    JavaScript

Repositories

Showing 10 of 13 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…