no phone. no account.
your bitcoin address is your inbox.
oc chat is end-to-end-encrypted messaging where your wallet is the only identity. Sign in once with BIP-322; anyone who can verify a signed message from you can already reach you. Messages are sealed to a key only your device holds and gift-wrapped over Nostr, so relays learn nothing. Strangers attach Lightning postage to land in your inbox — you earn the sats, we never touch them — and you can seal a message to open only at a future Bitcoin block height. We are honest about where trust lives.
{
"v": 1,
"kind": "chat",
"id": "b71e0c4a…9f12",
"from": { "address": "bc1qalice…", "alg": "bip322" },
"to": [ { "address": "bc1qbob…" } ],
"alg": "x25519+aes-256-gcm",
"ciphertext": "…", // body + conversation_id + seq
"postage": null, // ← pay-to-reach attaches a preimage here
"seal": null, // ← seal-til-block sets { unlock_block, beacon }
"created_at": "2026-06-05T18:30:00Z",
"sig": { "alg": "bip322", "value": "…" }
}
// transport (what the relay sees): NIP-59 gift-wrap, kind-1059,
// ephemeral key, created_at minute-rounded. not who. not when. not what.three send modes. one Bitcoin-unique property each.
oc chat is a mode of oc lock. The crypto is oc-lock's seal/unseal; the transport is Nostr gift-wrap. Everything new is one of these three modes — each adds exactly one thing only Bitcoin can carry.
- [01]
speak-now
Free, daily, 1:1 end-to-end-encrypted messaging to any Bitcoin address. Threading lives inside the encrypted payload; relays only ever see a gift-wrap.
↳ bitcoin-unique: BIP-322 identity + Bitcoin-address discovery — no phone, no npub you can't prove you own.
- [02]
pay-to-reach
A stranger attaches Lightning postage — a real preimage paying your invoice — to land in your inbox. No valid postage, no inbox. You earn the sats; we never touch them.
↳ bitcoin-unique: A settled-sats bearer proof: sha256(preimage) == payment_hash, verified offline. Sats as signal — attention priced, not filtered.
- [03]
seal-til-block
A message whose content key is escrowed to a named beacon and released only after the Bitcoin chain passes block N. Embargo, future-delivery, dead-man's-switch.
↳ bitcoin-unique: The block-height release predicate. Beacon-enforced, not consensus-enforced — the beacon is a named trust anchor, and we never call v0 "trustless".
Honest about the trade-offs: v0 cedes Signal-grade per-message forward secrecy (a compromised device key reads past messages; coarse 90-day key rotation only). If your threat model needs a double ratchet today, use Signal. We name every trust anchor and ship the spec before the UI.
not a new verb. a mode of oc lock.
oc chat reuses oc lock's battle-tested crypto and the family BIP-322 identity rather than rebuilding them. It is MIT-licensed and vendor-free; the spec and test vectors are the ground truth, and the web client is a convenience over the SDK — never the authoritative implementation. Switch skin and account from the logo dropdown in the header; your identity follows you across every .ochk.io subdomain.
- oc lock ↗the confidentiality verb · seal/unseal envelopes oc chat is built on
- oc-chat-protocol ↗the dependent spec · threading, postage, seal · ≥5 test vectors
- @orangecheck/lock-core ↗seal(), unseal(), canonical envelope — consumed verbatim
- @orangecheck/nostr-core ↗NIP-59 gift-wrap, default relays — the metadata-hiding transport
your address is your inbox.
your wallet is your password.
the chain is your clock.
No phone. No account. No custody. Sign in once with BIP-322 and your Bitcoin address becomes a self-sovereign inbox. We are honest about the trade-offs: v0 cedes Signal-grade per-message forward secrecy until our ratchet ships.
with thanks to bram kanstein — whose work on bitcoin as sovereignty substrate shaped the premise.