Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Profile Account Widgets
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Vertical Presets (SSOT)
    Ringization playbook
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Project configuration
    Public environment variables
    Order Lab secrets
    WalletConnect Project ID (Reown Cloud)
    Supported services
    NODUS wiki (project knowledge)
    Configuration playbook
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel Deployment
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Backend Services
    Firebase Integration
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Ring Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    Ring Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    Ring Platform Logo

    Loading documentation...

    Preparing Ring Platform content

    NFT Exhibition Marketplace

    The shipped marketplace is Solana-first with two lanes: verified Ringdom KEYS gate NFTs, and an open member creator lane for on-platform Metaplex Core collections. Both settle in RING (ledger-dev PoC when gateMarketProgramId is empty).

    The NFT Exhibition Marketplace lets members list, browse, buy, and cancel eligible assets. For KEYS gates, a purchase transfers ownership, but ownership alone does not unlock product access — buyers must stake through GateEscrow before GateResolver.hasFeature grants the related feature. For member mints, purchase is ownership + RING only (no stake CTA, no feature unlock).

    SurfaceVerified truth
    Marketplace/nft/market, /nft/market/[listingId], /nft/market/sell
    Member create/nft/create, /nft/create/[collectionId]
    Collections/nft/collections, /nft/collections/[slug]
    SearchSearch redirects land on /nft/market?q=...
    FeeduseCursorFeed with moduleId="nft-market"; optional lane=keys|member
    PaymentRING only
    KEYS symbolKEYS from gate collection metadata
    Member collectionsnft_member_collections + listing lane: 'member'
    Listing storagenft_listings
    Sale ledgernft_market_sales
    Collection cachenft_market_collections
    Migrations031_nft_exhibition_market_schema.sql, 032_nft_member_collections_schema.sql
    Media fieldGenerative Gallery — Upload | Generate on /nft/create (see below)

    Generative Gallery (media)

    Member collection cover and mint media use the shared Generative Gallery field (features/generative-media/): Upload or Generate tabs, Ghost-write prompt enrichment, ImageConductor n=4 variations, WebP strip derivatives, and a hidden genmedia: tool chat (Conversation.type: 'product' + metadata.kind: 'generative_gallery' — not a separate channel; see Messaging). On mint, buildMetaplexMetadataJson + uploadNftMetadataJson produce off-chain Metaplex JSON (image, optional animation_url, properties.files); ownership and listing details can show showcase animation + gallery thumbs.

    Full operator and integrator reference: Generative Gallery.

    Why this matters for your clone

    The marketplace turns tradeable vendor access keys into a visible economy and lets privileged members create their own on-platform collections without opening an external NFT import path.

    KEYS resale liquidity

    Vendor-grade gates can move from one member to another without making membership transferable.

    Member creator lane

    Members create Metaplex Core collections, mint, and list for RING — ownership transfer only, no GateEscrow features.

    Keep KEYS access gated

    A KEYS buyer must stake the gate before features activate. Listing and staking are mutually exclusive.

    Implementation Map

    PathRole
    app/[locale]/nft/market/page.tsxServer page, parses q, collection, slug, lane, sort
    app/[locale]/nft/create/page.tsxMember create/mint/list wizard (requires hasMemberPrivileges)
    app/[locale]/nft/market/sell/page.tsxKEYS seller wizard (excludes member_mint)
    app/_actions/nft-member.tscreateMemberCollectionAction, mintMemberAssetAction, listMemberAssetAction
    features/generative-media/*Gallery SSOT; mint metadata helpers; see Generative Gallery
    features/nft-market/member/*Collection/mint services + assertMemberAssetCanBeListed

    Future On-Chain Work

    Related Documentation

    Generative Gallery

    Upload | Generate field, credits billing, Metaplex metadata, product form reuse.

    Solana NFT Gates

    Primary sale, KEYS collection metadata, GateEscrow staking, and template activation.

    Wallet

    Native RING balance and custodial Solana wallet flows used for marketplace settlement.

    Subscriptions

    How nft_gate fits beside other access providers.

    NFT Exhibition Marketplace

    The shipped marketplace is Solana-first with two lanes: verified Ringdom KEYS gate NFTs, and an open member creator lane for on-platform Metaplex Core collections. Both settle in RING (ledger-dev PoC when gateMarketProgramId is empty).

    The NFT Exhibition Marketplace lets members list, browse, buy, and cancel eligible assets. For KEYS gates, a purchase transfers ownership, but ownership alone does not unlock product access — buyers must stake through GateEscrow before GateResolver.hasFeature grants the related feature. For member mints, purchase is ownership + RING only (no stake CTA, no feature unlock).

    SurfaceVerified truth
    Marketplace/nft/market, /nft/market/[listingId], /nft/market/sell
    Member create/nft/create, /nft/create/[collectionId]
    Collections/nft/collections, /nft/collections/[slug]
    SearchSearch redirects land on /nft/market?q=...
    FeeduseCursorFeed with moduleId="nft-market"; optional lane=keys|member
    PaymentRING only
    KEYS symbolKEYS from gate collection metadata
    Member collectionsnft_member_collections + listing lane: 'member'
    Listing storagenft_listings
    Sale ledgernft_market_sales
    Collection cachenft_market_collections
    Migrations031_nft_exhibition_market_schema.sql, 032_nft_member_collections_schema.sql
    Media fieldGenerative Gallery — Upload | Generate on /nft/create (see below)

    Generative Gallery (media)

    Member collection cover and mint media use the shared Generative Gallery field (features/generative-media/): Upload or Generate tabs, Ghost-write prompt enrichment, ImageConductor n=4 variations, WebP strip derivatives, and a hidden genmedia: tool chat (Conversation.type: 'product' + metadata.kind: 'generative_gallery' — not a separate channel; see Messaging). On mint, buildMetaplexMetadataJson + uploadNftMetadataJson produce off-chain Metaplex JSON (image, optional animation_url, properties.files); ownership and listing details can show showcase animation + gallery thumbs.

    Full operator and integrator reference: Generative Gallery.

    Why this matters for your clone

    The marketplace turns tradeable vendor access keys into a visible economy and lets privileged members create their own on-platform collections without opening an external NFT import path.

    KEYS resale liquidity

    Vendor-grade gates can move from one member to another without making membership transferable.

    Member creator lane

    Members create Metaplex Core collections, mint, and list for RING — ownership transfer only, no GateEscrow features.

    Keep KEYS access gated

    A KEYS buyer must stake the gate before features activate. Listing and staking are mutually exclusive.

    Implementation Map

    PathRole
    app/[locale]/nft/market/page.tsxServer page, parses q, collection, slug, lane, sort
    app/[locale]/nft/create/page.tsxMember create/mint/list wizard (requires hasMemberPrivileges)
    app/[locale]/nft/market/sell/page.tsxKEYS seller wizard (excludes member_mint)
    app/_actions/nft-member.tscreateMemberCollectionAction, mintMemberAssetAction, listMemberAssetAction
    features/generative-media/*Gallery SSOT; mint metadata helpers; see Generative Gallery
    features/nft-market/member/*Collection/mint services + assertMemberAssetCanBeListed

    Future On-Chain Work

    Related Documentation

    Generative Gallery

    Upload | Generate field, credits billing, Metaplex metadata, product form reuse.

    Solana NFT Gates

    Primary sale, KEYS collection metadata, GateEscrow staking, and template activation.

    Wallet

    Native RING balance and custodial Solana wallet flows used for marketplace settlement.

    Subscriptions

    How nft_gate fits beside other access providers.

    NFT Exhibition Marketplace

    The shipped marketplace is Solana-first with two lanes: verified Ringdom KEYS gate NFTs, and an open member creator lane for on-platform Metaplex Core collections. Both settle in RING (ledger-dev PoC when gateMarketProgramId is empty).

    The NFT Exhibition Marketplace lets members list, browse, buy, and cancel eligible assets. For KEYS gates, a purchase transfers ownership, but ownership alone does not unlock product access — buyers must stake through GateEscrow before GateResolver.hasFeature grants the related feature. For member mints, purchase is ownership + RING only (no stake CTA, no feature unlock).

    SurfaceVerified truth
    Marketplace/nft/market, /nft/market/[listingId], /nft/market/sell
    Member create/nft/create, /nft/create/[collectionId]
    Collections/nft/collections, /nft/collections/[slug]
    SearchSearch redirects land on /nft/market?q=...
    FeeduseCursorFeed with moduleId="nft-market"; optional lane=keys|member
    PaymentRING only
    KEYS symbolKEYS from gate collection metadata
    Member collectionsnft_member_collections + listing lane: 'member'
    Listing storagenft_listings
    Sale ledgernft_market_sales
    Collection cachenft_market_collections
    Migrations031_nft_exhibition_market_schema.sql, 032_nft_member_collections_schema.sql
    Media fieldGenerative Gallery — Upload | Generate on /nft/create (see below)

    Generative Gallery (media)

    Member collection cover and mint media use the shared Generative Gallery field (features/generative-media/): Upload or Generate tabs, Ghost-write prompt enrichment, ImageConductor n=4 variations, WebP strip derivatives, and a hidden genmedia: tool chat (Conversation.type: 'product' + metadata.kind: 'generative_gallery' — not a separate channel; see Messaging). On mint, buildMetaplexMetadataJson + uploadNftMetadataJson produce off-chain Metaplex JSON (image, optional animation_url, properties.files); ownership and listing details can show showcase animation + gallery thumbs.

    Full operator and integrator reference: Generative Gallery.

    Why this matters for your clone

    The marketplace turns tradeable vendor access keys into a visible economy and lets privileged members create their own on-platform collections without opening an external NFT import path.

    KEYS resale liquidity

    Vendor-grade gates can move from one member to another without making membership transferable.

    Member creator lane

    Members create Metaplex Core collections, mint, and list for RING — ownership transfer only, no GateEscrow features.

    Keep KEYS access gated

    A KEYS buyer must stake the gate before features activate. Listing and staking are mutually exclusive.

    Implementation Map

    PathRole
    app/[locale]/nft/market/page.tsxServer page, parses q, collection, slug, lane, sort
    app/[locale]/nft/create/page.tsxMember create/mint/list wizard (requires hasMemberPrivileges)
    app/[locale]/nft/market/sell/page.tsxKEYS seller wizard (excludes member_mint)
    app/_actions/nft-member.tscreateMemberCollectionAction, mintMemberAssetAction, listMemberAssetAction
    features/generative-media/*Gallery SSOT; mint metadata helpers; see Generative Gallery
    features/nft-market/member/*Collection/mint services + assertMemberAssetCanBeListed

    Future On-Chain Work

    Related Documentation

    Generative Gallery

    Upload | Generate field, credits billing, Metaplex metadata, product form reuse.

    Solana NFT Gates

    Primary sale, KEYS collection metadata, GateEscrow staking, and template activation.

    Wallet

    Native RING balance and custodial Solana wallet flows used for marketplace settlement.

    Subscriptions

    How nft_gate fits beside other access providers.

    Use RING settlement

    Buyers pay in the clone native token through the custodial Solana wallet path.

    Operator Checklist

    • Enable NFT gates and marketplace config (nft.marketplaceEnabled).
    • Enable member collections PoC with nft.memberCollectionsEnabled and caps (maxCollectionsPerMember, maxMintsPerCollection).
    • Mint or import eligible vendor gates from the KEYS collection for lane K.
    • Confirm KEYS sellers understand that staked gates must be unstaked before listing.
    • Confirm KEYS buyers understand that a bought gate must be staked before benefits activate.
    • Confirm member mints never promise GateEscrow feature unlock.
    • Keep mainnet GateMarket disabled until the Anchor programs pass audit and Squads authority setup.

    Membership NFTs are soulbound and never listable. KEYS lane remains only for vendor-store-deed, vendor-dagi-key, vendor-annual-store-license, and vendor-quarterly-store-license. Member lane assets use source: member_mint and are never GateEscrow feature keys.

    User Journey

    Dual-lane marketplace journey
    features/nft-market/listing-policy.ts
    KEYS tradeable SKU / stake / collection checks (lane K only)
    features/nft-market/services/listing-service.tsDual-lane draft/activate; member vs KEYS policy branch
    features/nft-market/services/solana-market-client.tsLedger-dev list/cancel/buy; Anchor branch blocked until program IDs
    features/wallet/conductor/wallet-conductor.tspurchaseNftListing for both lanes

    Listing and Purchase Sequence

    NFT market list and buy

    Listing Policy

    1. 1

      isNftMarketplaceEnabled() must pass. Member create/mint also requires isMemberCollectionsEnabled().

    2. 2

      Lane K: slug must be one of the four tradeable SKUs. Template/ownership must not be soulbound; asset verifies against KEYS; no active stake.

    3. 3

      Lane M: hasMemberPrivileges, ownership source: member_mint, collection active, not soulbound, no active listing. No GateEscrow stake check for listing.

    4. 4

      An active listing blocks duplicate listings for the same asset. For KEYS: a staked gate blocks listing; an active listing means feature access is not active through staking.

    Configuration Keys

    KeyEffect
    nft.marketplaceEnabledMaster secondary-market switch
    nft.memberCollectionsEnabledEnables member create/mint/list PoC
    nft.maxCollectionsPerMemberCap (default 3)
    nft.maxMintsPerCollectionCap (default 50)
    nft.gateMarketProgramIdEmpty = ledger-dev; non-empty Anchor path throws in this build
    nft.marketplaceFeeRecipientOptional RING fee recipient
    nft.marketplaceFeeBpsFee split basis points, clamped 0–10000

    Persistence

    • 031_nft_exhibition_market_schema.sql — listings, sales, collection cache
    • 032_nft_member_collections_schema.sql — nft_member_collections + listing lane / collectionId indexes + KEYS lane backfill

    SolanaMarketClient.buyGate settles through ledger-dev RING transfers when gateMarketProgramId is empty. Member lane reuses the same purchase path. The Anchor GateMarket CPI path is intentionally not implemented in this build.

    The future program scaffold lives under solana/programs/{gate-escrow,gate-market}. solana/SECURITY.md blocks production or mainnet deployment until Smart Contract Security Auditor review, Squads authorities, pinned deployment records, and invariant tests are complete.

    Security

    Production guardrails before audited on-chain marketplace deployment.

    Use RING settlement

    Buyers pay in the clone native token through the custodial Solana wallet path.

    Operator Checklist

    • Enable NFT gates and marketplace config (nft.marketplaceEnabled).
    • Enable member collections PoC with nft.memberCollectionsEnabled and caps (maxCollectionsPerMember, maxMintsPerCollection).
    • Mint or import eligible vendor gates from the KEYS collection for lane K.
    • Confirm KEYS sellers understand that staked gates must be unstaked before listing.
    • Confirm KEYS buyers understand that a bought gate must be staked before benefits activate.
    • Confirm member mints never promise GateEscrow feature unlock.
    • Keep mainnet GateMarket disabled until the Anchor programs pass audit and Squads authority setup.

    Membership NFTs are soulbound and never listable. KEYS lane remains only for vendor-store-deed, vendor-dagi-key, vendor-annual-store-license, and vendor-quarterly-store-license. Member lane assets use source: member_mint and are never GateEscrow feature keys.

    User Journey

    Dual-lane marketplace journey
    features/nft-market/listing-policy.ts
    KEYS tradeable SKU / stake / collection checks (lane K only)
    features/nft-market/services/listing-service.tsDual-lane draft/activate; member vs KEYS policy branch
    features/nft-market/services/solana-market-client.tsLedger-dev list/cancel/buy; Anchor branch blocked until program IDs
    features/wallet/conductor/wallet-conductor.tspurchaseNftListing for both lanes

    Listing and Purchase Sequence

    NFT market list and buy

    Listing Policy

    1. 1

      isNftMarketplaceEnabled() must pass. Member create/mint also requires isMemberCollectionsEnabled().

    2. 2

      Lane K: slug must be one of the four tradeable SKUs. Template/ownership must not be soulbound; asset verifies against KEYS; no active stake.

    3. 3

      Lane M: hasMemberPrivileges, ownership source: member_mint, collection active, not soulbound, no active listing. No GateEscrow stake check for listing.

    4. 4

      An active listing blocks duplicate listings for the same asset. For KEYS: a staked gate blocks listing; an active listing means feature access is not active through staking.

    Configuration Keys

    KeyEffect
    nft.marketplaceEnabledMaster secondary-market switch
    nft.memberCollectionsEnabledEnables member create/mint/list PoC
    nft.maxCollectionsPerMemberCap (default 3)
    nft.maxMintsPerCollectionCap (default 50)
    nft.gateMarketProgramIdEmpty = ledger-dev; non-empty Anchor path throws in this build
    nft.marketplaceFeeRecipientOptional RING fee recipient
    nft.marketplaceFeeBpsFee split basis points, clamped 0–10000

    Persistence

    • 031_nft_exhibition_market_schema.sql — listings, sales, collection cache
    • 032_nft_member_collections_schema.sql — nft_member_collections + listing lane / collectionId indexes + KEYS lane backfill

    SolanaMarketClient.buyGate settles through ledger-dev RING transfers when gateMarketProgramId is empty. Member lane reuses the same purchase path. The Anchor GateMarket CPI path is intentionally not implemented in this build.

    The future program scaffold lives under solana/programs/{gate-escrow,gate-market}. solana/SECURITY.md blocks production or mainnet deployment until Smart Contract Security Auditor review, Squads authorities, pinned deployment records, and invariant tests are complete.

    Security

    Production guardrails before audited on-chain marketplace deployment.

    Use RING settlement

    Buyers pay in the clone native token through the custodial Solana wallet path.

    Operator Checklist

    • Enable NFT gates and marketplace config (nft.marketplaceEnabled).
    • Enable member collections PoC with nft.memberCollectionsEnabled and caps (maxCollectionsPerMember, maxMintsPerCollection).
    • Mint or import eligible vendor gates from the KEYS collection for lane K.
    • Confirm KEYS sellers understand that staked gates must be unstaked before listing.
    • Confirm KEYS buyers understand that a bought gate must be staked before benefits activate.
    • Confirm member mints never promise GateEscrow feature unlock.
    • Keep mainnet GateMarket disabled until the Anchor programs pass audit and Squads authority setup.

    Membership NFTs are soulbound and never listable. KEYS lane remains only for vendor-store-deed, vendor-dagi-key, vendor-annual-store-license, and vendor-quarterly-store-license. Member lane assets use source: member_mint and are never GateEscrow feature keys.

    User Journey

    Dual-lane marketplace journey
    features/nft-market/listing-policy.ts
    KEYS tradeable SKU / stake / collection checks (lane K only)
    features/nft-market/services/listing-service.tsDual-lane draft/activate; member vs KEYS policy branch
    features/nft-market/services/solana-market-client.tsLedger-dev list/cancel/buy; Anchor branch blocked until program IDs
    features/wallet/conductor/wallet-conductor.tspurchaseNftListing for both lanes

    Listing and Purchase Sequence

    NFT market list and buy

    Listing Policy

    1. 1

      isNftMarketplaceEnabled() must pass. Member create/mint also requires isMemberCollectionsEnabled().

    2. 2

      Lane K: slug must be one of the four tradeable SKUs. Template/ownership must not be soulbound; asset verifies against KEYS; no active stake.

    3. 3

      Lane M: hasMemberPrivileges, ownership source: member_mint, collection active, not soulbound, no active listing. No GateEscrow stake check for listing.

    4. 4

      An active listing blocks duplicate listings for the same asset. For KEYS: a staked gate blocks listing; an active listing means feature access is not active through staking.

    Configuration Keys

    KeyEffect
    nft.marketplaceEnabledMaster secondary-market switch
    nft.memberCollectionsEnabledEnables member create/mint/list PoC
    nft.maxCollectionsPerMemberCap (default 3)
    nft.maxMintsPerCollectionCap (default 50)
    nft.gateMarketProgramIdEmpty = ledger-dev; non-empty Anchor path throws in this build
    nft.marketplaceFeeRecipientOptional RING fee recipient
    nft.marketplaceFeeBpsFee split basis points, clamped 0–10000

    Persistence

    • 031_nft_exhibition_market_schema.sql — listings, sales, collection cache
    • 032_nft_member_collections_schema.sql — nft_member_collections + listing lane / collectionId indexes + KEYS lane backfill

    SolanaMarketClient.buyGate settles through ledger-dev RING transfers when gateMarketProgramId is empty. Member lane reuses the same purchase path. The Anchor GateMarket CPI path is intentionally not implemented in this build.

    The future program scaffold lives under solana/programs/{gate-escrow,gate-market}. solana/SECURITY.md blocks production or mainnet deployment until Smart Contract Security Auditor review, Squads authorities, pinned deployment records, and invariant tests are complete.

    Security

    Production guardrails before audited on-chain marketplace deployment.

    1. Docs
    2. /Features
    3. /NFT Exhibition Marketplace

    Updated Jul 14, 20265 min listen

    1. Docs
    2. /Features
    3. /NFT Exhibition Marketplace

    Updated Jul 14, 20265 min listen

    1. Docs
    2. /Features
    3. /NFT Exhibition Marketplace

    Updated Jul 14, 20265 min listen