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.