pledge your word to bitcoin.
bond your stake.
anyone verifies the outcome.
OC Pledge is a Bitcoin-anchored commitment primitive. Swear a testable proposition (resolved at a future block height), bond an OrangeCheck stake, publish on Nostr. Anyone verifies offline. A broken pledge burns the stake on the public ledger — enforcement by exposure, no custody, no court.
{
"v": 1,
"kind": "pledge",
"id": "9f3e7b…1aa2",
"pledger": { "address": "bc1qalice…", "alg": "bip322" },
"claim": {
"text": "I will publish the v1 SPEC by 2026-06-01.",
"resolves": "block_height >= 902400"
},
"stake": {
"attestation_id": "9e3f…",
"sats_bonded": 250000
},
"witnesses": [ "bc1qbob…", "bc1qcarol…" ],
"publication": { "nostr_kind": 30730 },
"pledged_at": "2026-04-24T18:30:00Z",
"resolves_at": { "block_height": 902400 },
"sig": { "alg": "bip322", "value": "…" }
}five steps. one signing ceremony. no custody.
OC Pledge composes three primitives that already exist: BIP-322 for authorship, OrangeCheck for the bonded stake, and Nostr for the public ledger. The protocol glue is small; the resolution rule is a pure function anyone can run.
- [01]
compose
Write the proposition. State the resolution rule (a future block height, an externally observable predicate, or a witness quorum). The canonical envelope is a six-line plaintext object: pledger, claim, stake, witnesses, resolves_at, pledged_at.
- [02]
bond stake
Reference an OrangeCheck attestation. The attested sats are bonded — they are not custodied by us, but a broken pledge marks the attestation public. The stake is the cost of breaking your word.
- [03]
sign once
Your wallet signs the canonical envelope via BIP-322. UniSat, Xverse, Leather, Sparrow, Electrum. The id is sha256 of the canonical bytes — content-addressed, deterministic.
- [04]
publish on nostr
The pledge is broadcast to relays as a kind-30730 event. Witnesses (named in the envelope) co-sign. The pledge is now a public, immutable commitment — anyone reading it knows the stake and the resolution rule.
- [05]
resolve at height
When the resolution block is mined, anyone runs the pure-function check: did the predicate hold? If yes, the pledge is KEPT. If no, it is BROKEN — the stake attestation is publicly marked, and the pledger pays a reputational cost.
the web has no durable,
permissionless, custody-free
commitment primitive.
Existing options either require a custodian (a broker, a court, a smart contract, a platform) or have no skin in the game (a tweet, a verbal promise). OC Pledge binds the pledger's Bitcoin identity to a testable claim, with stake measured in real sats — and no custodian.
| system | authorship | stake | resolution | custody | permissionless |
|---|---|---|---|---|---|
| Twitter / X promise | ✓ (handle) | ✗ | ✗ | platform | ✗ |
| Kalshi / Polymarket | ✗ | ✓ (custodied) | ✓ | broker | ✗ |
| Smart-contract escrow | ✓ (eth addr) | ✓ (locked) | ✓ (oracle) | ✓ (contract) | ✓ |
| Notarised contract | ✓ | ~ (legal) | court | lawyer | ✗ |
| Verbal commitment | ~ | ✗ | ✗ | ✗ | ✓ |
| oc pledge | ✓ (btc) | ✓ (oc) | ✓ (pure fn) | ✗ (none) | ✓ |
research preregistration
> claim:
I commit to the analysis plan in this document; I will publish results before block 902400 regardless of sign of the effect.A scientist locks the analysis plan, bonds 250k sats, names two witnesses. Selective reporting becomes visible: the published paper either matches the pledged plan or the stake is publicly burned.
SLA commitment
> claim:
My API will maintain p99 latency < 200ms over the next 4032 blocks.A vendor pledges service quality. Anyone running the resolution rule (sampling the API at the resolution height) can prove a violation. The bonded stake replaces vague service credits.
open-source delivery
> claim:
I will tag v1.0 of repo X by block 905000.A maintainer publishes a delivery pledge with bonded stake. Sponsors and downstream users have a credible signal — broken pledges are visible on the public ledger.
See WHY.md for the full hypothesis-by-hypothesis design rationale.
one spec. one package.
one hosted reference client.
OC Pledge stands on OrangeCheck attestations (the bonded stake) and integrates with OC Stamp (signing the proposition document). It is MIT-licensed and vendor-free. Re-implement the SPEC in any language — the test vectors are the ground truth.
- oc-pledge-protocol ↗normative spec, test vectors, WHY.md
- @orangecheck/pledge ↗pledge(), resolve(), canonical envelope (coming v0.1.0-beta)
- @orangecheck/auth-client ↗cross-subdomain oc_session, useOcSession() hook
- oc-pledge-web ↗this site — compose, share, verify
identity
Bitcoin-address-bound identity with attested stake. The substrate every other primitive composes against.
provenance
Sign anything with a Bitcoin address; anchor to a block via OpenTimestamps. Authorship + priority.
commitment
Swear a testable proposition; bond an OC stake; resolve at a future block height. Custody-free contracts.
pledge your word to bitcoin.
bond your stake.
anyone verifies the outcome.
Open the create flow, connect a Bitcoin wallet, write your claim, bond your OrangeCheck stake. One BIP-322 signature, one Nostr publish. The pledge is public; the resolution is a pure function anyone can run.
with thanks to bram kanstein — the lineage signal of every orangecheck primitive.