# 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