Ecosystem — shared concepts
Every sibling protocol in the OrangeCheck family (Attest, Lock, Stamp, Vote, Agent) inherits the same plumbing. Learning it once saves re-learning it five times. This section is the shared layer.
What's in here
- The canonical message — every sibling protocol produces a signed "canonical message" in the same shape (header line + field lines + ack line, LF line endings, lexicographically sorted extensions). Byte-identical across implementations, which is how we can ship a TS SDK and a Python SDK that produce the same attestation IDs.
- BIP-322 signing — every protocol signs the canonical
message via BIP-322. Why not legacy
signmessage. What wallets support it. The one-line answer to "which signing scheme do I use?" is always "BIP-322, unless you're on a pre-SegWit P2PKH address." - Nostr kind-30078 — NIP-78
parameterized-replaceable addressable events are how every sibling publishes
its artifacts (attestations, device records, stamps, ballots). The
dtag convention is per-protocol; the event shape is shared. - Conformance vectors — every sibling ships
normative test vectors in its
oc-*-protocolrepo. Reference impls are required to pass them on every CI run. This is how we catch implementation drift before it reaches npm. - Security model — the shared threat model across every sibling. What Bitcoin stake proofs DO protect against (sybil at-scale, bot spam, anonymous cheap identity farming). What they DON'T (proof of personhood, privacy-preserving claims, chain-analysis resistance). Read this before shipping anything.
Why a shared section
Writing the canonical-message format five times (once per protocol) would
produce five slightly-different descriptions and, over time, actual drift in the
impls. By specifying it once and linking from every protocol's pages, we keep
the docs in sync with the reality — which is that all five protocols literally
use the same builder in @orangecheck/sdk (TS) or orangecheck (Python).
When a protocol extends a shared concept — like Vote's secret-mode commitment, or Lock's envelope canonicalization rule — the protocol's own pages cover only the delta, and link back here for the baseline.
Reading order
If you're new:
- Skim canonical message — 5 minutes.
- Read BIP-322 if you're not already comfortable with it — 5 minutes.
- Skim security before shipping anything — 10 minutes, high-value.
- Dive into the protocol you picked in the decision tree.
Kind-30078 and conformance vectors are reference sections — no need to read them linearly. Come back when an SDK surprises you.