# Singular EVM done right
Problem: marketplaces have tremendous problems switching contexts from EVM chain to EVM chain because most add monorepo style functionality that binds them to a specific infra. In doing this, they surrender one of the key advantages blockchain-based standardized infra provides: cross-platform compatibility.
By relying on centralized infrastructure that is bound tightly to a blockchain back end, the whole exercise is fake - you neither get the advantage of blockchains nor the advantages of centralized infra.
Solution: separation of concerns.
## How search should work: CTLG (catalogue)
There should be a separate server which crawls the chain (any chain) for NFTs in whitelisted collection (no need to index every piece of garbage people mint tbh - we can make it RMRK-reclaim to submit your collection for indexing, or make it a premium feature), indexes them and categorizes properly for fast results, and exposes these sets through queries via API keys.
This Algolia-like search API but for NFTs on a variety of platforms (even Ethereum?) would:
- provide excellent UX
- be SaaS-able to others at hefty prices
## How Singular should work with CTLG
On page load, Singular should fire off a ping to CTLG to check availability. If available, Singular replaces the search field's callback with the one that provides information provided by CTLG based on a search string.
The search string should support the following arguments:
- key:value for attributes
- hasKoda: true
- color: blue
- key:range for attributes
- strength: 10-100
- chain filter
- enum: kusama, ethereum, moonriver...
- collection filter
- by contract or by collection ID
- price min - max with currency, or USD value
- price: 30-300,ksm
- price: 10-30,xcrmrk
- price: 400-666 (no currency = estimated USD value)
- collection name (regex supported)
- kanaria
- NFT name (regex supported)
- pendant
- royalty range
- 1-3
- flags:
- owned by minter
- tainted yes/no
- on dutch auction
- fixed price
- regular auction
- ...
If CTLG is not available, Singular should just show NFTs by address of collection or owner - whatever is readable from chain, from our Market contract on each of these chains. We can come up with a Marketplace contract which would respect royalties and do sales (even auctions) and this can be reused on every chain. This contract can have:
- seller
- price
- auction (if any)
- royalty
- chain
So these 5 values are always usable in the search filter. But if CTLG is available, we use the options above.
ALWAYS operate with the assumption that CTLG is DOWN.
## Examples in production
- gem.xyz
- genie.xyz