NFT Marketplace for Bicrypto
Run a real on-chain NFT marketplace under your brand — collections, minting, auctions and escrowed offers.
- Real ERC-721 and ERC-1155 collection contracts, deployed per chain
- Mints are signed by the creator's wallet and verified from the chain receipt
- Fixed-price listings, bundles and timed auctions from one seller screen
- Anti-snipe extends an auction when a late bid lands, so a snipe can't win unopposed
- Escrowed offers hold the buyer's balance until the transfer is confirmed
- Royalties paid at settlement, clamped to the ceiling you set
- Two fee percentages: the settings slider prices offers, the contract prices on-chain sales
- A chain appears to users only once you deploy a marketplace contract on it
- Collections arrive PENDING — nothing mints until you approve them
- A dispute desk: seven types, four priorities, assignment, threaded messages
- Refund resolutions credit the buyer's wallet in the same transaction
- An admin home that shows five work queues instead of a scoreboard
- Three scheduled jobs expire offers, settle auctions and back up chain state
Inside NFT Marketplace
A real on-chain marketplace, under your brand
Collections, contract deployment, creator-signed minting, fixed-price sales, bundles, timed auctions and escrowed offers — with a moderation desk and a dispute queue behind them, on your own server.
In detail
A branded NFT venue on your own server. Creators register a collection, deploy a real ERC-721 or ERC-1155 contract to a chain you have opened, mint from their own wallet, and sell at a fixed price, as a bundle, as a timed auction, or by accepting an offer. Buyers browse a storefront with search, category and collection filters, price bounds and five sort orders, and a live market feed keeps auctions, bids and activity current without a refresh.
How it works
Nothing here is simulated in a database. A creator's browser wallet signs the mint and broadcasts it; the backend then pulls the transaction receipt, checks the sender, checks the artwork is not already in that collection, and only then writes a token row. A fixed-price purchase has the same shape — the buyer signs and pays, the platform verifies the hash and claims the listing with a single atomic update, so two people can never buy the same token. Auctions run in their own per-listing contract with an anti-snipe extension, and a scheduled job settles them.
What you can run
| Mechanism | Where the money sits | Settled by |
|---|---|---|
| Fixed price | On chain, buyer-signed | The purchase call, immediately |
| Bundle | On chain, buyer-signed | The purchase call, immediately |
| Auction | The per-listing auction contract | The settlement job, every 10 minutes |
| Offer | The buyer's spot wallet, on hold | The confirm call, in one transaction |
What operators control
- Which chains exist at all — a chain appears only once you deploy a marketplace contract on it
- Collection approval: every user-created collection is written PENDING until you turn it on
- Two fee percentages, not one: the settings slider prices escrowed offers, while an on-chain sale charges the fee compiled into the marketplace contract when you deployed it
- A royalty ceiling every collection is clamped to, and a flat listing fee
- Auction minimum and maximum duration, the minimum bid step as a percent, and the anti-snipe window
- Six KYC gates, a high-value purchase threshold, and per-row moderation across every table
- A dispute desk with seven types, four priorities, staff assignment and a message thread
Three licences: Bicrypto core, Ecosystem and Wallet Connect. Ecosystem signs every contract deployment and every auction settlement from its master wallet; Wallet Connect is what links a customer's address to their account, and without a linked address nobody can buy, bid or confirm a transfer. Four honest limits worth knowing before launch. Media is not hosted for you — creators pin their own IPFS artwork and paste the URL. The fee on the settings screen governs escrowed offers only; an on-chain sale charges whatever was compiled into the marketplace contract at deployment, and moving one does not move the other. Those on-chain fees accumulate inside that contract until you withdraw them deliberately, and nothing reminds you. And the admin dispute board does not draw its rows in this build — the queues, the counts and the resolve-with-refund route all work, but you reach a case over the API until that fix ships.
Creators mint from their own wallet — you never hold a key
There is no custodial signer in this product, and that is the point. The creator's browser wallet signs and broadcasts the mint; the backend then pulls the transaction receipt, confirms the sender is the creator, and refuses the artwork if it is already in that collection. Only then is a token row written, so a failed transaction leaves nothing behind and nothing on your platform can mint on somebody else's behalf. Both standards ship compiled — ERC-721 and ERC-1155.
Two honest limits. Creators pay their own gas and pin their own artwork — there is no upload-to-IPFS pipeline, only a validator that checks the URL you paste. And linking a customer's wallet address to their account is the Wallet Connect addon's job, which is a separate licence.
Three ways to sell, and only one touches your platform's money
A fixed-price purchase and an auction settle on chain: the buyer signs and pays, the contract splits the payment, and no wallet balance on your platform moves. An offer is the exception and the only custodial path — the offer amount plus your fee is held out of the buyer's spot balance the moment it is made, acceptance moves nothing, and confirmation credits the seller, the creator's royalty and your platform fee in one database transaction.
An accepted offer whose transfer is never confirmed is unwound after the window you set — 24 hours by default — and the escrow goes back. Your fee also lives in two places, and they do not sync: the percentage on the settings screen prices offers, while an on-chain sale charges whatever was compiled into the marketplace contract at deployment. That on-chain cut is paid straight out to the address the contract carries as its fee recipient, in the sale transaction, so it never reaches a platform balance at all.
The admin home is a work queue, not a scoreboard
Five queues, each backed by a real row state somebody wrote: collections waiting for approval, open disputes, auctions that ended with a winner but no escrow, flagged escrow where a buyer's money is locked, and catalogue defects that cannot support a sale. Every count is a database aggregate, not a page summed in the browser, and every queue links straight to the registry that owns it. Behind them sits a dispute record with seven types, four priorities, assignment and a message thread, and a REFUND resolution credits the buyer's spot wallet inside the same transaction as the decision.
One limit, stated plainly: the dispute board at /admin/nft/dispute does not draw its rows in this build — it hands the list envelope straight to the renderer. The queues, the counts and the resolve-with-refund route all work; you reach an individual case over the API until that fix ships. Two of the seven resolutions move money (REFUND and PARTIAL_REFUND); the other five record the outcome and nothing else.
A collection is a real contract, and your master wallet signs it
Every collection is deployed as its own contract on the chain the creator picks, as ERC-721 or ERC-1155, and both artifacts ship compiled — you compile nothing. The chain list a creator sees is derived from your own deployments: a chain appears in the create form only once its marketplace contract is active, so opening a network is your decision and not theirs. The deployment is signed and paid from the Ecosystem master wallet for that chain, and the collection's royalty goes into the contract in basis points. A contract that was deployed outside the platform can be attached to a collection instead of redeployed.
The sequencing, said plainly: a user-created collection is written PENDING, but it is the contract landing that flips it to ACTIVE and makes it mintable, and the Deploy button sits on the creator's own collection page. Treat PENDING as a review state you can set back from the admin console, not as a gate before a drop — if you need approval first, keep the chain closed. Gas is yours on every deployment and nothing bills it back to the creator.
Timed auctions run on a clock you set, and close without you
An auction carries a reserve price, a minimum bid increment and an optional buy-now price, all three set per listing. The increment cannot be smaller than the share of the starting price you allow — five per cent by default — and a bid placed inside the closing window resets the clock to that whole window, so the last second cannot be sniped. A settlement pass runs every ten minutes: it claims the auction before touching the chain, ends it so the contract pays the seller out of the escrowed bid, records the winner as the new owner and writes the sale with its fee, royalty and net. An auction that ends with no bids, or whose reserve was never met, closes EXPIRED and the token comes back unlisted.
Two things to size before you open auctions. Each auction gets its own contract deployed from your master wallet, and the bid itself is sent to that contract from the same wallet — a bidder's balance is checked, never debited — so an auction-heavy marketplace is a funding decision, not a gas bill. And the ten-minute pass ends the auction and records the new owner but does not send the token transfer; settling the auction by hand does, so a marketplace running on the pass alone still has that step to make. An auction that ends with a winner but no contract holding the funds is flagged for manual review rather than moving anything.
Your fee lands in two different places, and only one is on your books
Every on-chain sale writes a row carrying the price, the marketplace fee, the creator royalty, the total fee and what the seller nets; a settled offer takes the other path and moves cash through your wallet ledger instead. That is the fork. An offer credits your platform wallet as a platform-profit row, so your cut is money you can already move. A fixed-price purchase splits inside the marketplace contract, which pays your cut to the fee recipient compiled into it at deployment — your Ecosystem master wallet unless you named another address — in the same transaction as the sale. One side is a spot balance on your platform; the other is an EVM address you hold the key to, and nothing on the platform can spend it.
Two things to size before launch. Nothing accumulates in the contract waiting to be collected — the fee leaves it with the sale — so the Revenue Withdrawal tab sweeps a residual balance rather than your earnings, and on a working marketplace that balance is zero. It answers 404 before it gets that far anyway: the withdrawal route, along with changing the contract's fee or recipient, whitelisting a collection, and pausing or unpausing trading, resolves the contract through a per-chain settings key that deployment never writes. And the per-chain fee total is returned by the balance endpoint but drawn on no screen; the ledger sum you can actually read is Marketplace Revenue on the Sales page.
- API routes
- 121
- database tables
- 21
- admin screens
- 15
- settings you control
- 17
Everything included
122 capabilities, in 9 areas
Every item below exists in the source you receive. Nothing here is a roadmap.
Collections and contracts
Where a drop starts, and the real contract behind it.
- Creator-registered collections with logo, banner and description
- ERC-721 or ERC-1155, chosen per collection, both artifacts shipped compiled
- A real contract deployed per collection, signed from the master wallet
- Attach a contract that was deployed outside the platform
- Five collection states: DRAFT, PENDING, ACTIVE, INACTIVE, SUSPENDED
- Every user-created collection arrives PENDING; deploying its contract sets it ACTIVE
- A status toggle on every collection, so you can put one back
- Symbols unique across the whole marketplace, 1–10 uppercase characters
- Max supply, mint price and mint currency set per collection
- Per-collection royalty percentage, refused above your ceiling at creation
- Verified badge on a collection
- Live collection stats: volume traded, total sales, floor price
- Collection metadata editable by its creator, and separately by an admin
- A chain appears in the create form only once you deploy a contract on it
Minting
The creator signs; the platform verifies before it writes a row.
- Six-step wizard: collection, wallet, artwork, details, properties, mint
- The creator's own browser wallet signs and broadcasts — no custodial signer
- Receipt checks: the transaction exists, succeeded, and went to that contract
- Replay refused — a transaction hash already in the activity feed is rejected
- Duplicate-artwork check on both the image URL and the metadata URI
- IPFS URL validation before the wallet is ever asked to sign
- ERC-721 metadata generated for creators who supply no metadata JSON
- A public metadata endpoint you can point a contract's base URI at
- Traits and attributes, five rarity tiers and a computed rarity score
- Unlockable content and an explicit-content flag per token
- Per-token royalty, validated against the platform ceiling at mint time
- Batch preparation of up to 50 draft tokens in one call
- Network-mismatch guard that blocks before signing, not after
- Gas estimates per chain and per named operation
- Marketplace-approval check for one token or a whole bundle
Selling
Three listing shapes and the settlement each one needs.
- Fixed-price listings
- Bundle listings — several tokens sold together as one
- Timed auctions, each in its own on-chain auction contract
- Batch listing creation
- Six listing currencies: ETH, BNB, MATIC, USDT, USDC, BUSD
- Reserve price and optional buy-now price on an auction
- Minimum bid step enforced as a percentage of the starting price
- Anti-snipe: a late bid resets the clock to the whole window you set
- Minimum and maximum auction duration, both yours to set
- Four listing states: ACTIVE, SOLD, CANCELLED, EXPIRED
- A seller quote at listing time: fee, royalty, listing fee, net proceeds
- An atomic listing claim, so two buyers can never take the same token
- Buyer-signed purchases verified on chain for sender, amount and recipient
- Automatic auction settlement every ten minutes, plus a manual settle
- A reserve that is not met closes the auction and returns the token
- Transfer a token to another user outside any sale
Bids, offers and escrow
The only part of the product that moves a platform balance.
- Bids executed on chain when the auction contract is deployed
- Six bid states: ACTIVE, OUTBID, ACCEPTED, REJECTED, EXPIRED, CANCELLED
- Offers on a single token, or open to any token in a collection
- The offer amount plus your fee held out of the buyer's spot wallet
- Two-step settlement: acceptance moves nothing, confirmation settles all of it
- Competing offers rejected and the live listing cancelled on acceptance
- Cancel or reject an offer, releasing the hold
- Five offer states: ACTIVE, ACCEPTED, REJECTED, EXPIRED, CANCELLED
- An expiry sweep every five minutes that returns held funds
- Accepted-but-unconfirmed offers unwound after a grace window you set
- Escrow that cannot be released is flagged and raises a dispute by itself
- Idempotency on every escrow leg, so a retried confirmation cannot double-pay
Fees, royalties and revenue
Two money paths, and where each one leaves its percentage.
- A marketplace fee percentage governing custodial offer settlements
- A contract fee in basis points, compiled at deployment
- Fee percentage and fee recipient changed on the deployed contract
- A flat listing fee
- A royalty ceiling every payout the platform computes is clamped to
- Creator royalties paid in cash at settlement, routed to a real account
- Custodial platform fees credited to the Super Admin wallet as a platform-profit row
- A fee-recipient address the contract pays out to in the sale transaction
- Per-chain contract balance with a fiat conversion
- A contract-balance sweep — whole balance or an amount, to any address, with a reason
- A sale ledger carrying price, marketplace fee, royalty, total fee and net
- Price history per sale, typed DIRECT, AUCTION or OFFER
The storefront
What a customer actually browses.
- Landing page with live stats, collections and recent sales
- Marketplace grid with search across NFTs, collections and creators
- Filters by category, by collection and by price bounds
- Type tabs: everything, fixed price, auction, bundle
- Five sort orders, including ending-soon and most-viewed
- Rarity filter across five tiers
- Token page with Details, Offers and Activity tabs
- Favourites, per token
- View counters on tokens and on listings
- Trending collections over 24 hours, 7 days or 30 days
- Top creators
- A most-viewed strip of listed tokens, filterable by category
- Categories you create, each with an image and a slug
- A live market feed over WebSocket: auctions, bids, tokens, collections, activity
- Chain names and icons built in for nine EVM chains
- Search-engine structured data on the landing page
Creators and collectors
- A creator hub with Overview, Collections, NFTs and Profile tabs
- Creator profiles created automatically on a first creator action
- Display name, bio and banner, edited by the creator
- Public creator pages
- Follow a creator, with a follow-status check
- Four verification tiers: BRONZE, SILVER, GOLD, PLATINUM
- Creator dashboard, overview, headline stats and time-series analytics
- Collector dashboard: owned NFTs, favourites, recent activity, earnings
- A public-profile switch on every creator
The moderation desk
Five queues, and the record behind each decision.
- An admin home built as work queues, every count a database aggregate
- Collections awaiting approval, with the age of the oldest
- Open disputes, with HIGH/CRITICAL and unassigned called out separately
- Blocked auction settlements — a winner exists and nothing can move
- Flagged escrow, with the amount currently frozen
- Catalogue defects: blank listed tokens, mints with no chain id, stale drafts
- Dispute inflow against resolutions over 24 hours, 7 days or 30 days
- Seven dispute types, six states and four priorities
- Dispute assignment to a named admin
- A threaded dispute conversation with internal-only notes and system entries
- Evidence attached to a dispute record
- Seven resolutions; refund and partial refund credit the buyer's spot wallet
- Status toggles on collections, tokens, listings, offers, auctions, creators
- Review moderation over the API: PENDING, APPROVED, REJECTED, HIDDEN
- An activity ledger of eleven event types, searchable by transaction hash
Console and operations
What you need to run it on a Tuesday afternoon.
- Fifteen admin screens across Content, Trading, Community and System
- One marketplace screen per chain: deploy, configure, pause, withdraw, analyse
- One marketplace contract per chain; a forced redeploy deprecates the old row
- Pause and unpause trading per chain, with a recorded reason
- Collection whitelisting on the contract
- Analytics over 7d, 30d, 90d or 1y: volume, revenue, top collections and creators
- A four-phase launch checklist read from live data, not a to-do list
- Seventeen settings across five tabs
- Twenty-six permission keys, each gating a screen or an action
- Three scheduled jobs, visible on the platform's cron console
- Per-chain snapshot schedules: hourly to monthly, full or incremental
- Optional AES-256-GCM encryption on snapshot files, 30 kept per chain
- Categories — the one NFT table an admin creates and deletes rows in
- Licence
- Addon licence, activated in the admin panel against your purchase code. Full source, one production domain.
- Requires
- Bicrypto core, the Ecosystem addon and the Wallet Connect addon — three licences, each bought separately. Ecosystem signs every deployment, transfer and auction settlement from its master wallet and supplies the RPC provider and contract artifacts; Wallet Connect is what puts an address on a customer's account, and a buyer without one cannot purchase, bid or confirm a transfer.
- Runs on
- Your own server, inside the Bicrypto tree. No separate installer, no service of its own, no hosted tier.
- Data stores
- MySQL only — 21 tables, shipped in the core schema. It never touches ScyllaDB, so installing Ecosystem purely to run this does not oblige you to run a Scylla cluster.
- On chain
- An Ecosystem master wallet with native currency, and a reachable RPC endpoint, per chain you open. NFTMarketplace, NFTAuction, ERC721NFT and ERC1155NFT ship compiled — you compile nothing.
- Processes
- None of its own. Three jobs register on the platform cron: offers expire every 5 minutes, auctions settle every 10, chain snapshots run every 15.
- Surface
- 15 admin screens, 17 customer screens, 121 REST endpoints and 1 WebSocket channel
- Access control
- 26 permission keys gate the admin routes, and no seeded role holds any of them — a fresh install grants NFT access deliberately or not at all
- Settings
- 17 keys over five tabs: trading, fees, verification, content, integrations
- Chains
- Nine EVM chains carry built-in names and icons — Ethereum, BNB Smart Chain, Polygon, Arbitrum, Optimism, Avalanche, Base, Fantom, Cronos. A chain exists for users once its marketplace contract is deployed.
- Listing currencies
- Six, fixed in the source: ETH, BNB, MATIC, USDT, USDC, BUSD
- Integrates with
- Ecosystem's provider, master wallet and contract loader; the core spot wallet ledger for offer escrow and refunds; five core KYC feature gates (create, list, buy, transfer, deploy); the platform revenue ledger, where custodial fees land as NFT_SALE rows
- Media is not hosted
- There is no upload-to-IPFS pipeline. Creators pin their own artwork and paste the URL; the platform validates the URL and nothing more.
- Gas is yours, and it recurs
- Every collection contract and every auction contract is a deployment paid from your master wallet, and nothing bills it back to the creator. Two paths send the money as well as the gas: a marketplace-contract purchase and a bid on an on-chain auction both go out from that wallet. An auction-heavy marketplace is a funding decision, not a gas bill.
- Batch minting prepares, it does not mint
- A batch writes up to 50 draft rows and refuses to go on chain, because each mint needs its own signature from the creator's wallet. Drafts older than 72 hours then count as a catalogue defect.
- The fee exists twice and they do not sync
- The settings slider prices custodial offer settlements. An on-chain sale charges whatever was compiled into the marketplace contract at deployment, and only a transaction changes that. Nothing on any screen compares the two.
- On-chain revenue never enters your platform ledger
- A marketplace-contract sale pays your fee to the recipient address compiled into the contract — the Ecosystem master wallet unless you named another — in the same transaction as the sale. No platform wallet balance changes, nothing accumulates for you to collect later, and the only record on your side is the sale row. Budget for that money living outside the platform's books.
- The dispute board does not draw its rows in this build
- The queues, the counts, the message thread and the resolve-with-refund route all work; the list screen hands the response envelope straight to the renderer, so you reach an individual case over the API until that fix ships.
- Five contract controls need a key the deploy step does not write
- Sweeping the contract's balance, changing its fee or recipient, whitelisting a collection, and pausing or unpausing trading all resolve the contract through a per-chain settings key that deployment never creates, and every one of them answers 404 until you write that row by hand. Reading is unaffected — the contract, its live configuration and its balance are all on the admin screen. The same key is what the launch checklist counts, so it reports zero chains deployed until you add it.
- Two analytics decorations are not measurements
- On the Analytics screen the fourteen-point sparklines are derived from the current total and the category split falls back to a fixed quartet when the real grouping is empty. The totals are real aggregates; the moderation dashboard deliberately uses neither shape.
- Chain snapshots are not a restore path
- The scheduled backup writes a compressed extract of NFT rows and settings to local disk on three chains — ETH, BSC and POLYGON. It is not off-site, it excludes sales, offers, bids and every core table, and no route restores it. Your database backup is still the disaster-recovery story.
Loved by customers
Reviews
No reviews yet. Own it? Share your experience.
Own this product? Sign in to leave a review.
Better together
Bundles containing this product
Get NFT Marketplace for Bicrypto for less as part of a bundle.
Keep exploring