This repository is the canonical public specification for Ðocial (Ð:SOC).
Ðocial is one public social protocol: posts and threads as inscriptions, engage as a single OP_RETURN verb (react + optional DOGE tip to the creator), and follows on L1. Private chat is not this protocol — that is Ðignal (Ð:DIG).
| Wire | OP_RETURN magic UTF-8 Ð:SOC (30-byte binary) |
| JSON | inscription "p": "Ð:SOC" · "v": "1.1" |
| Status | v1.1 consolidated launch draft |
| Chain | Dogecoin |
| License | MIT |
| Source of truth | spec.md |
Tip amount is never in the OP_RETURN. The signal names the target; spendable outputs to pay_to are the money. Quote/repost SHOULD pay the original the same way. Mentions pay only as extra UTXOs, not as JSON.
Jon Heaven — GitHub @jonheaven · X @jontype
If you ship this in a wallet, indexer, or feed, you are implementing this protocol. Keep Ð:SOC bytes and "p": "Ð:SOC" identical so every indexer sees one graph.
| You are… | Read this |
|---|---|
| Human, 2 minutes | this README |
| Wallet / dApp engineer | WALLET.md — post, engage, follow, tip UTXO |
| AI coding agent | AGENTS.md — do / don’t, files, live checks |
| Protocol implementer | spec.md — normative rules |
| Need bytes today | reference/dsocial.mjs + vectors/op-return-vectors.json |
North star (mental model, not extra MUST rules): SOCIAL_LAYER.md. Indexer / product sketch: INTEGRATION.md.
1. Author inscribes JSON p:"Ð:SOC" op:post (content + pay_to).
2. Reader likes: same tx has OP_RETURN Ð:SOC engage + DOGE output ≥ min to pay_to.
3. Quote/repost: inscription + SHOULD also pay the original’s pay_to in the reveal tx.
4. Mentions: extra DOGE outputs to resolved addresses (JSON list is not the payment).
5. Indexer stores the post, sums tips from UTXOs (never from the signal).
6. Follow is a 30-byte signal; last follow/unfollow wins per pair.
payload: c3903a534f430102010100112233445566778899aabbccddeeff01000000
scriptPubKey: 6a1ec3903a534f430102010100112233445566778899aabbccddeeff01000000
6a = OP_RETURN. 1e = 30-byte push. Round-trip with:
node reference/dsocial.mjs parse c3903a534f430102010100112233445566778899aabbccddeeff01000000
GET https://dogex.command.dog/api/social/feed
GET https://dogex.command.dog/api/social/post/:id
GET https://dogex.command.dog/api/social/post/:id/engages
GET https://dogex.command.dog/api/social/user/:address/posts
GET https://dogex.command.dog/api/social/user/:address/timeline
GET https://dogex.command.dog/api/social/user/:address/following
GET https://dogex.command.dog/api/social/user/:address/followers
Routes may still be landing; treat empty as “not indexed yet,” not a second protocol. Generic fallback: GET /api/doginals/protocol/Ð:SOC.
Product UI: dogenals.com feed. Media posts: doge.cam. Notifications only: command.dog — not a like ledger.
import { encodeDsocialSignal, scriptPubKey } from './reference/dsocial.mjs';
const payload = encodeDsocialSignal({
kind: 'engage',
flags: 0x01,
reaction: 'like',
targetHash16: '00112233445566778899aabbccddeeff',
nonce: 1,
});
// 30 bytes — put this in OP_RETURN, plus a DOGE output to the post pay_toFull wallet steps: WALLET.md. Production encoder: @dojak/core dsocial.ts.
- Do not put tip amount in the 30-byte signal. Amount is UTXO to
pay_to. - Do not dual-emit
Ð:P/ ÐEcho / Doge Signals for the same click. - Do not treat encrypted DMs as Ðocial. That is Ðignal.
- Do not invent a second “like” inscription op. Engage is the signal.
- Do not use Bitcoin tapscript
OP_FALSE OP_IF … OP_ENDIFin DogecoinscriptSig. Posts use P2SH commit → reveal.
spec.md normative protocol
SOCIAL_LAYER.md north star (public vs Ðignal)
WALLET.md wallets / dApps
AGENTS.md briefing for coding agents
INTEGRATION.md dogex / command.dog / product sketch
COMPARISON.md vs Pulse / Echo / Nostr
reference/dsocial.mjs encode + parse (MIT, zero deps)
vectors/op-return-vectors.json SOC-OR hex vectors
vectors/conformance.json JSON schema vectors
schemas/ post / signal / engage JSON Schema
examples/ valid JSON bodies
Launch draft v1.1. The 30-byte layout and UTXO tip rule here are what wallets and dogex should implement. No dual-stack “free likes first.”