Skip to content

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

  1. After OP_IF, the first data push MUST be the literal ord (3 bytes) for v1.
  2. Second stack item: OP_1 (version marker = 1).
  3. Third push: content-type (string). Prefer lowercase MIME where sensible; DRC-20 bodies use text/plain;charset=utf-8.
  4. Fourth push: ACTION — must match the registries below exactly (e.g. TRANSFER, not transfer). Exactly one primary ACTION per inscription.
  5. Fifth push: OP_0 (empty separator).
  6. 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_FALSEOP_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_0 when 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