Web3 Development · 5 min read ·
A practical guide to NFT marketplace architecture: custody, listings, royalties, scaling, indexing, and security decisions that impact cost, UX, and compliance.
Building an NFT marketplace is less about “can we list JPEGs?” and more about a series of architecture decisions that lock in your costs, user experience, and risk profile. Teams tend to optimize the front end first and discover later that indexing, listing mechanics, and custody are what actually define the product.
Below are the core choices we see determine whether a marketplace ships fast and survives contact with real volume.
An NFT marketplace always spans both worlds:
The key decision is: what do you want users to be able to verify independently?
A common, robust approach:
This is the “Seaport-style” pattern used widely because it avoids paying gas to create/cancel listings while still allowing anyone to settle a valid order.
There are three typical models:
If you want a credible Web3 marketplace, signed orders with on-chain settlement is the practical default.
Custody is a business decision masquerading as a technical one.
Non-custodial: users keep NFTs in their wallet; marketplace uses approvals/permits.
Custodial: you hold NFTs and/or funds.
Hybrid models exist (e.g., custodial fiat on-ramp + non-custodial NFTs), but be explicit: every custodial component needs serious operational maturity.
Royalties are politically loaded and technically inconsistent across ecosystems.
Architecture choices:
Marketplace-enforced royalties (pay royalties in settlement contract)
On-chain enforced royalties (transfer hooks / operator filters)
No enforcement; display-only
Opinionated guidance: support royalties in settlement when feasible, but design for optionality. Make royalty recipients and rates discoverable (EIP-2981 where possible), but don’t assume universal enforcement. Also plan for per-collection policy, because “one rule for everything” rarely survives.
Decide early what currencies you’ll support:
Settlement contracts need to handle:
If you plan to route trades via aggregators (or be aggregated), stick to well-known interfaces and avoid bespoke settlement logic that can’t be composed.
Your chain choice is architecture.
Practical pattern: launch on one chain where your users already are, but build the platform as multi-chain from day one at the data and contract-interface layer. “We’ll add more chains later” often becomes a rewrite because token standards, finality assumptions, and indexers differ.
Most marketplace downtime is indexing downtime.
You need a pipeline for:
Options:
A strong approach is hybrid: managed NFT data for speed, plus a small custom indexer for marketplace-specific events (fills, fees, nonce invalidations) and for reconciliation.
Security decisions are architecture decisions.
Key points:
Also consider MEV and frontrunning: signed orders can be taken by anyone unless you add constraints (private order, restricted taker, or allowlist). For high-value drops, private order flow or commit-reveal can be warranted.
Even if you’re non-custodial, you’ll face:
Architecture supports this via:
A common compromise: UI-level blocking for most cases, and contract-level restrictions only when required, because on-chain restrictions are hard to undo and can create collateral damage.
An NFT marketplace isn’t a single smart contract—it’s custody policy, settlement design, indexing reliability, and security posture bundled into one product. If you’re building for real users, default to non-custodial custody, off-chain signed orders with on-chain settlement, a multi-chain-ready data model, and an indexing stack you can monitor and reconcile.
The “best” architecture is the one you can operate safely at 10× volume, with clear failure modes and minimal trust assumptions. Optimize for that, and the UI becomes the easy part.