DogeSoft Ecosystem — Inscription Standard (v1)¶
Audience: wallet, indexer, explorer, swap coordinator, inscriber, marketplace integrators.
This file is the only normative copy of the DogeSoft Inscription Standard (v1) in this workspace.
Core format (used everywhere — wrapped)¶
Recommended on-chain framing for maximum compatibility with ord-style tooling:
OP_FALSE
OP_IF
"ord"
OP_1
[content-type]
[ACTION] ← primary action tag (human-readable, ASCII, case-sensitive)
OP_0
[data]
OP_ENDIF
Rules
- After
OP_IF, the first data push MUST be the literalord(3 bytes) for v1. - Second stack item: OP_1 (version marker = 1).
- Third push: content-type (string). Prefer lowercase MIME where sensible; DRC-20 bodies use
text/plain;charset=utf-8. - Fourth push: ACTION — must match the registries below exactly (e.g.
TRANSFER, nottransfer). Exactly one primary ACTION per inscription. - Fifth push: OP_0 (empty separator).
- Sixth push: payload (raw body bytes: JSON, image, PDF, …).
Optional metadata: Between ACTION and OP_0, the indexer accepts zero or more extra data pushes (e.g. a single "RWA" hint for TOKENIZE). Keep extra pushes minimal — only when they improve UX or routing.
Bare Dogecoin stack (no OP_FALSE … OP_ENDIF): the same semantic order may appear at the start of scriptSig as "ord", OP_1, [content-type], [ACTION], optional metadata, OP_0, [data], then signature pushes. New work SHOULD prefer the wrapped form when tooling allows it.
Normalize unknown ACTION values in explorers as the raw tag (and optional hex) until registered.
1. DRC-20 tokens (fungible)¶
Content-type: text/plain;charset=utf-8
The JSON inside [data] follows DRC-20 conventions ("p":"drc-20", lowercase "op" in the body). The envelope ACTION is the uppercase router for indexers and UIs.
| ACTION | Meaning | Example wrapped envelope (conceptual) |
|---|---|---|
TRANSFER |
Fungible transfer | OP_FALSE OP_IF "ord" OP_1 "text/plain;charset=utf-8" "TRANSFER" OP_0 {"p":"drc-20","op":"transfer","tick":"DOGE","amt":"500000"} OP_ENDIF |
SWAP |
Swap / AMM intent (project-defined JSON in [data]) |
… "SWAP" OP_0 {"p":"drc-20","op":"transfer","tick":"DOGE","amt":"500000"} OP_ENDIF |
ADD_LP |
Add liquidity | … "ADD_LP" OP_0 {"p":"drc-20","op":"transfer","tick":"DOGE","amt":"1000000"} OP_ENDIF |
REMOVE_LP |
Remove liquidity | … "REMOVE_LP" OP_0 {"p":"drc-20","op":"transfer","tick":"DOGE","amt":"1000000"} OP_ENDIF |
CLAIM |
Claim rewards / position | … "CLAIM" OP_0 {"p":"drc-20","op":"transfer","tick":"DOGE","amt":"25000"} OP_ENDIF |
For SWAP / ADD_LP / REMOVE_LP / CLAIM, the exact JSON schema beyond standard DRC-20 transfer is defined by DogeSoft swap / AMM product docs; the envelope still carries one ACTION and one payload after OP_0.
2. NFTs and images (Doginals)¶
Content-type examples: image/jpeg, image/png, image/gif, image/webp, video/mp4, etc.
| ACTION | Meaning |
|---|---|
LIST |
Listed for sale / gallery |
CANCEL |
Listing cancelled |
BUY |
Purchase intent |
AUCTION_LIST |
Auction listing |
AUCTION_BID |
Auction bid |
AUCTION_SOLD |
Auction settled (sold) |
AUCTION_CLOSED |
Auction closed without sale |
Example (wrapped, JPEG body abbreviated as [image bytes]):
OP_FALSE OP_IF "ord" OP_1 "image/jpeg" "LIST" OP_0 [image bytes] OP_ENDIF
3. Real-world assets (RWA / tokenization)¶
Content-type: application/pdf
| ACTION | Meaning |
|---|---|
TOKENIZE |
On-chain PDF payload |
Minimal default: … "application/pdf" "TOKENIZE" OP_0 [PDF bytes] OP_ENDIF
Optional metadata (only when needed — one extra push before OP_0):
OP_FALSE
OP_IF
"ord"
OP_1
"application/pdf"
"TOKENIZE"
"RWA"
OP_0
[PDF bytes]
OP_ENDIF
4. Launchpad (DogeSoft app extensions)¶
| ACTION | content-type | payload |
|---|---|---|
LAUNCHPAD_DEPLOY |
application/json |
Collection deploy intent |
LAUNCHPAD_MINT |
application/json |
Mint intent |
Same envelope rules; may appear beside quantum sidecars per wallet / indexer quantum docs.
4b. Bridge (DogeSoft dogesoft_bridge ↔ wDRC-20 on DogeOS)¶
Bridge-related DRC-20 transfers SHOULD include a ds object on the JSON body (OP_RETURN or ord payload) so indexers tag envelope_action without requiring a full ord stack:
{
"p": "drc-20",
"op": "transfer",
"tick": "WOW",
"amt": "1000000000000000000",
"ds": {
"app": "dogesoft_bridge",
"v": 1,
"flow": "bridge_l1_release",
"bridge_event_id": 42,
"l2_burn_tx": "0x…"
}
}
ds.flow (OP_RETURN tagging) |
Indexer envelope_action (derived) |
Meaning |
|---|---|---|
bridge_l1_release |
BRIDGE_L1_RELEASE |
Custodian sent DRC-20 to user after L2 burn |
bridge_l1_deposit |
BRIDGE_L1_DEPOSIT |
Optional: user deposit leg tagging |
bridge_l2_intent |
BRIDGE_L2_INTENT |
Optional: off-chain / future L2 intent marker on L1 |
amm_swap_settlement |
SWAP |
drc20 AMM custodian payout (drc20_swap_amm settlement tx) |
Wrapped ord envelopes may instead use ACTION BRIDGE_L1_RELEASE with the same JSON in [data] when tooling builds full scriptSig stacks.
5. Explorer / indexer display labels¶
Indexers and explorers SHOULD map ACTION to a short human label (examples):
| ACTION | Suggested label |
|---|---|
TRANSFER |
DRC-20 transfer |
SWAP |
Swap |
ADD_LP |
Added liquidity |
REMOVE_LP |
Removed liquidity |
CLAIM |
Claim |
LIST |
Listed NFT |
CANCEL |
Listing cancelled |
BUY |
Purchase |
AUCTION_LIST |
Auction listed |
AUCTION_BID |
Auction bid |
AUCTION_SOLD |
Auction sold |
AUCTION_CLOSED |
Auction closed |
TOKENIZE |
Tokenized asset |
LAUNCHPAD_DEPLOY |
Launchpad deploy |
LAUNCHPAD_MINT |
Launchpad mint |
BRIDGE_L1_RELEASE |
Bridge L1 release |
BRIDGE_L1_DEPOSIT |
Bridge L1 deposit |
BRIDGE_L2_INTENT |
Bridge L2 intent |
Unknown ACTION: show the raw ACTION string.
The DogeSoft indexer persists envelope_action and display_label on utxo_inscriptions when parsed from ord-style inputs and merges them into wallet UTXO inscription JSON as action and display_label.
6. Summary for developers¶
- Always use the same envelope structure across wallet, inscriber, and indexer tests.
- Exactly one primary ACTION per inscription.
- Minimize extra pushes; optional metadata only between ACTION and
OP_0when it genuinely improves UX. - Read ACTION as the push immediately after content-type; payload begins after
OP_0(after any optional metadata pushes).
7. Integration pointers¶
| Component | Responsibility |
|---|---|
| Wallet (Flutter) | The player hub — swap, bridge, collect Doginals, and sign/send DogeSoft v1 inscriptions across the ecosystem |
| Inscriber | Assembles wrapped script when possible |
| dogesoft-indexer | Decodes wrapped + bare; DRC-20 JSON to drc20_; inscription rows + action/label* |
| drc20 / bridge | The DeFi engine — swaps, liquidity, and cross-chain moves; calls the indexer for truth and the inscriber hub to publish DogeSoft v1 actions on-chain |