HOW THE MARKETPLACE WORKS — AND WHAT YOU TRUST

Monkedex is non-custodial by construction: your keys stay in your wallet and every custody output carries a maker-side escape hatch — a key-path spend or a timelock — so the platform co-signs settlements but can never move funds alone. Fulfillments are validated server-side and broadcast as transaction packages. Below is the exact trust label of every flow.

Fees: maker 0 bps / taker 0 bps; english auction settlements carry a 1% platform fee. You always pay Bitcoin network fees.

SHARED PRIMITIVES

THE TRADE PATTERN PREPARE → SIGN → CREATE → FULFILL. The server builds unsigned PSBTs, the maker signs in their wallet, the server validates the signed PSBTs against the original parameters and stores them, and later a taker fulfills — the platform co-signs where needed and broadcasts. Maker signatures are never returned raw: the counterparty view strips them.
2-OF-2 TAPROOT LEAF Custody outputs are taproot with a script leaf requiring both the non-platform signer and the platform co-signer ( <scriptKey> OP_CHECKSIGVERIFY <platform> OP_CHECKSIG ). The platform alone can never spend; the maker always keeps a recovery path.
SIGHASH COMMITMENTS SINGLE|ACP — the signer commits to its own input and the output at the same index, pinning the payout while a taker appends payment inputs and change. ALL|ACP — fixed outputs, taker may only add inputs (private listings). ALL / DEFAULT — commits to the whole transaction (offers, key-path spends, platform co-signatures).
TRUC (v3) & 1P1C PACKAGES Version-3 transactions are always replaceable and relay as 1-parent-1-child packages. A zero-fee v3 parent creates an ephemeral 0-sat anchor; the child spends it at index 0 and pays the whole package fee (CPFP). FIFO sat-flow keeps the inscription exactly where a SINGLE signature pins the payout.
SERVER-SIDE BROADCAST Fulfillments are broadcast by the API, which returns the txids — via a mempool.space-compatible endpoint or a Bitcoin Core node.
CANCELLATION AUTH Cancelling a listing or offer requires a BIP-322 signature by the maker's address over Monkedex: cancel <kind> <id>, passed as a ?signature= query parameter. English auctions are the exception — no cancel; the timelocked recovery path resolves them.

FEATURE TRUST LABELS

FLOW MECHANISM TRUST LABEL
PUBLIC LISTING A v3 setup moves the ordinal into a 2-of-2 {lister, platform} leaf; the listing spend is lister-signed SIGHASH_SINGLE|ANYONECANPAY, pinning the payout. The buyer assembles the fulfill; the platform co-signs and broadcasts the [setup, fulfill] package. The listing output's key path is the lister's own key — if an inscription ever gets stuck, the lister key-path spends it back; the platform is never needed for recovery . non-custodial (key-path recovery)
PRIVATE LISTING Sale restricted to an allowlist: the lister key-path signs one SIGHASH_ALL|ANYONECANPAY PSBT per participant over fixed [receive → participant, payout → seller] outputs, so a taker cannot redirect the inscription or shortchange the payout — they may only add funding inputs (a zero-fee v3 parent shapes an exact-value funding utxo and carries a 0-sat platform dust anchor that the platform co-signs at fulfillment; no taker change). Buyers don't see each other. Excluded from floor stats. non-custodial (allowlist consensus-bound)
ITEM OFFER / ACCEPT The bidder signs the complete zero-fee v3 sale ( SIGHASH_ALL/DEFAULT) with the owner's inscription input left open; a 0-sat platform dust anchor rides as output 2. The owner accepts by signing that input plus the mandatory sweep — a platform-co-signed v3 CPFP child spending [payout, anchor] to their final payment address and paying the package fee; [sale, sweep] broadcast as a 1P1C package. If the inscription UTXO moves, the offer dies automatically. non-custodial
COLLECTION OFFER One bid covers every inscription matching an optional attribute filter, backed by a single funding UTXO from confirmed funds: a v2 funding tx (the only wallet signature, held off-chain) creates a proxy utxo whose key path is the bidder's own recovery key, with a 2-of-2 {throwaway, platform} script leaf the throwaway pre-signs per item. All item offers share the proxy, so accepting one voids every other; items whose inscription moved can be refreshed. Settled as [funding, item] package + the mandatory payout sweep. non-custodial (platform co-sign, bidder key-path recovery)
DUTCH AUCTION A descending-price sale as pre-signed steps over one held setup: a throwaway key pre-signs every step SIGHASH_SINGLE|ANYONECANPAY with the step's nLockTime — the price drops every 3 blocks and a cheap step physically cannot confirm early. The platform serves only the current cheapest unlocked step; the first fulfillment consumes the setup and ends the auction. Seller key-path recovery on the setup. consensus-scheduled
ENGLISH AUCTION Non-custodial commitment on both sides. The inscription is timelocked in a seller custody wallet (unspendable NUMS internal key; 2-of-2 leaf + a CLTV seller-recovery leaf that auto-broadcasts if unsold). Bidders commit funds into a reusable deposit wallet with a 30-day CSV recovery, so a committed bid can't be double-spent away before it settles . Bids ride a 1-2-5 rung ladder of timestamp-locked SINGLE|ANYONECANPAY pre-signs — the highest bid unlocks first and RBFs any lower bid. Pending (unconfirmed-deposit) bids get their proof withheld until the deposit confirms; anti-snipe extends the end 5 minutes per late bid, capped at +12h. non-custodial (timelock recovery both sides)
CANCEL BIP-322 signature by the maker's address over Monkedex: cancel <kind> <id>. English auctions have no cancel — the CLTV recovery resolves an unsold auction. maker-authenticated

AT A GLANCE

FLOW TX VERSION(S) MAKER SIGHASH SETTLEMENT CANCEL
PUBLIC LISTING v3 setup + v3 fulfill SINGLE|ACP [setup, fulfill] package BIP-322
PRIVATE LISTING v3 (+ v3 shaping parent) ALL|ACP [parent, fulfill] package BIP-322
ITEM OFFER v3 sale + v3 sweep ALL/DEFAULT (bidder) [sale, sweep] 1P1C package BIP-322
COLLECTION OFFER v2 funding + v2 item + v2 sweep ALL/DEFAULT (funding) [funding, item] pkg, then sweep BIP-322
DUTCH AUCTION v3 setup + v3 steps SINGLE|ACP [setup, fulfill] package BIP-322
ENGLISH AUCTION v2 transfer + v3 rungs + v3 1P1C bid SINGLE|ACP [anchor, bid] package timelock recovery

SOURCES OF TRUTH

Bitcoin is the source of truth for ownership and settlement; the platform holds the orderbook and co-signs fulfillments — it can censor, but every custody construction leaves the maker a unilateral recovery path, so it can never steal.