live · mainnetoc · docs
specs · api · guides
docs / quickstart

Quickstart

Goal: go from a file on your disk to a published, verifiable stamp in under a minute.

You will need:

  • A Bitcoin wallet that supports BIP-322 (UniSat, Xverse, Leather, Sparrow, Electrum, OKX, Phantom all qualify).
  • A browser.

No account. No server. No fees.

Option A — use the hosted web client

  1. Open stamp.ochk.io/create.
  2. Drop the file you want to stamp. Your browser hashes it in-place; the bytes never leave your tab.
  3. Connect your wallet. Your Bitcoin address auto-fills.
  4. Click sign. Your wallet pops up with a short canonical message (six lines, starting with oc-stamp:v1). Approve.
  5. The client submits the envelope id to two OpenTimestamps calendars. You get a pending proof immediately, and a confirmed anchor within about an hour.
  6. Download the .stamp file. Ship it alongside your content, or copy the share link.

Later, anyone can drop that .stamp into stamp.ochk.io/verify and re-derive all three guarantees — authorship, priority, stake — offline.

Option B — use the SDK

npm i @orangecheck/stamp-core @orangecheck/stamp-ots
import { stamp } from '@orangecheck/stamp-core';
import { submitToCalendars, toStampOts } from '@orangecheck/stamp-ots';

// 1. Build a signed stamp envelope.
const env = await stamp({
    content: new TextEncoder().encode('hello stamp'),
    mime: 'text/plain',
    signer: {
        address: 'bc1q…',
        signMessage: async (msg) => walletSignBIP322(msg),
    },
});

// 2. Anchor to Bitcoin (pending proof).
const proof = await submitToCalendars(env.id);
const anchored = { ...env, ots: toStampOts(proof) };

// 3. Share — the envelope is self-contained JSON.
console.log(JSON.stringify(anchored, null, 2));

Verify

import { verify } from '@orangecheck/stamp-core';

const result = await verify({
    envelope: anchored,
    content: new TextEncoder().encode('hello stamp'), // optional; checks bytes match
    verifyBip322: async (msg, sig, addr) => {
        /* your BIP-322 verifier */
    },
});

if (!result.ok) throw new Error(`${result.code}: ${result.message}`);
console.log('authorship + priority + content: ✓');

See the envelope format for the wire schema and the full verification algorithm for the seven check steps.

What's next

  • Why OC Stamp? — the design rationale and the hypothesis stress tests.
  • The spec — normative rules if you're implementing in another language.
  • Security model — what OC Stamp proves, what it doesn't, and the trust assumptions.