v1 · preview·bitcoin-anchored provenance

sign anything with a bitcoin address.
anchor the moment to bitcoin.

OC Stamp binds three things to a single envelope: authorship (BIP-322), priority (OpenTimestamps Bitcoin anchor), and optional stake (OrangeCheck). Verify anywhere, offline, forever. No vendor, no CA, no chain transaction fees.

· anchored viaopentimestamps· no fees· offline-verifiable· bip-322 identity
blogpost.md.stamp · { "v": 1 }
{
  "v": 1,
  "kind": "stamp",
  "id": "f0dd79a5…1485",
  "content": {
    "hash":   "sha256:a4c8…",
    "length": 12843,
    "mime":   "text/markdown",
    "ref":    null
  },
  "signer":    { "address": "bc1qalice…", "alg": "bip322" },
  "signed_at": "2026-04-24T18:30:00Z",
  "stake": {
    "attestation_id": "9e3f…",
    "sats_bonded":    500000,
    "days_unspent":   180
  },
  "ots": {
    "status":       "confirmed",
    "block_height": 890123,
    "block_hash":   "0000…a0b1",
    "proof":        "…"
  },
  "sig": { "alg": "bip322", "value": "…" }
}
§ how it works

five steps. one signing ceremony. no fees.

OC Stamp composes three primitives that already exist: BIP-322 for authorship, OpenTimestamps for the Bitcoin anchor, and the OrangeCheck attestation for optional stake signal. The protocol glue is small; the load-bearing systems are already battle-tested.

  1. [01]

    pick content

    A file, a Markdown post, a PDF, a git tree. Anything with a byte sequence. The client computes sha256(bytes) locally — content never leaves your browser.

  2. [02]

    sign once

    Your wallet signs a 6-line canonical message that binds (address, content_hash, length, mime, signed_at). BIP-322 across UniSat, Xverse, Leather, Sparrow, Electrum.

  3. [03]

    compute the id

    The envelope id is sha256 of that canonical message. It is the content-addressed identifier of the stamp, the input to OpenTimestamps, and the domain of the BIP-322 signature.

  4. [04]

    anchor to bitcoin

    OpenTimestamps batches the id into a Merkle tree and commits the root to a Bitcoin block (~1h later). The proof is a path from your id to a real block header. No fees. No custody.

  5. [05]

    publish anywhere

    A .stamp envelope is a self-contained JSON blob. Drop it next to your content. Paste it in a URL fragment. Email it. Publish it to Nostr kind-30083. Verify offline, forever.

§ why it exists

the web has no durable,
permissionless, identity-bearing
provenance primitive.

Every adjacent system falls short on at least one axis. The combination of BIP-322 authorship + OpenTimestamps Bitcoin anchor + OrangeCheck stake is not substitutable on Ed25519 or on an alternative chain.

systemauthorshippriority (chain)stakeoffline-verifiablepermissionless
PGP~~
OpenTimestamps alone
C2PA / Content Credentialsx509 dep
Nostr kind-1✓ (npub)~
EAS (Ethereum)✓ (ETH)token-gated✗ (RPC)
oc stamp✓ (btc)✓ (btc)✓ (oc)

See WHY.md for the full hypothesis-by-hypothesis design rationale. Each claim is stated, adversarially tested, and either KEPT or RETIRED with a reason.

§ the ecosystem

one spec. two packages.
one hosted reference client.

OC Stamp is MIT-licensed and vendor-free. Re-implement the SPEC in any language — the test vectors are the ground truth. The web client is a convenience over the SDK, never the authoritative implementation.

§ try it

sign anything with your bitcoin address.
anchor the moment to bitcoin.
verify anywhere, forever.

Open the create flow, connect a Bitcoin wallet, pick a file, one BIP-322 signature. The stamp anchors to a Bitcoin block within the hour.