Spore encrypts the message end to end, writes only an opaque pointer on the chain, and parks the ciphertext with a courier until it is read. The value and the message are one atomic object: pay, invoice, or escrow inside the conversation, and neither moves without the other.
X3DH establishes the session; a Double Ratchet encrypts each body. The keys never leave your machine — the courier and the chain both hold ciphertext.
A content-addressed pointer (and optional value) rides DERO, EVM, Solana, Bitcoin, Cosmos or TON. Delivery is a transaction, so it cannot be silently withheld or re-ordered.
The body waits in a TTL-bound, content-addressed store — your own mailbox, a hosted one, or a relay commons — and is deleted after it is collected.
Run the node and the mailbox yourself. No third party sees that a message exists, when it moved, or that anyone was talking at all.
Someone else keeps the courier awake. You hold every key; the operator holds expiring ciphertext and sees traffic patterns. Senders use the relay hop, so they never need your token and your mailbox sees the relay, not their IP.
git clone https://github.com/liqdmetal/spore && cd spore go build ./cmd/spore # one-time: your identity, send keys, ratchet state store spore init -dir ~/.spore # send a forward-private message, value attached to the same transaction printf 'settled, shipping tomorrow\n' | spore msg send -chain dero \ -to <dero1...> -identity ~/.spore/identity.key \ -bundle ./their-bundle.json -pinned-sig <their signing key> \ -store https://mail.sporem3.io/u/<you> -store-token <your token> \ -amount 12.5dero -state-dir ~/.spore/state -state-key ~/.spore/state.key
Full setup, carrier-by-carrier notes and the operator runbook ship in docs/.