UnitFlow LogoUnitFlow Docs

NFT Gating

Access to the UnitFlow DEX is restricted to wallets that hold a minimum number of UnitFlow NFTs. This is enforced on wallet connection via the NFTGatingProvidercomponent, which wraps the entire application.

Requirements

NFT TypeMinimum Required
Genesis NFT1
Activity NFT20

Both requirements must be met simultaneously. Holding only one type is not sufficient.

NFT Contract

FieldValue
Contract Address0x9e05C6075f9E890fC515EF86091414C77036f8FA
NetworkArc Testnet (Chain ID: 5042002)
StandardERC-721

How It Works

  1. User connects their wallet.
  2. The app checks if the address is in the whitelist. If yes, access is granted immediately.
  3. If not whitelisted, the app calls getUserGenesisCount(address) and getUserActivityCount(address) on the NFT contract.
  4. If both counts meet the minimums, access is granted.
  5. If either count is insufficient, a modal is shown explaining the requirements and linking to the mint page.
  6. The platform UI is blocked until requirements are met.

Whitelist

Certain addresses bypass the NFT check entirely. The whitelist is configured in the application source at src/config/nftGating.ts. Whitelisted addresses are stored in lowercase.

Obtaining NFTs

NFTs are obtained through the landing page onboarding flow:

  1. Visit unitflow.finance
  2. Connect your wallet
  3. Complete Discord verification (join the server)
  4. Complete X verification (follow @unitflowFinance)
  5. Mint your Genesis NFT (one per wallet)
  6. Post on X mentioning UnitFlow, verify the post, and mint Activity NFTs (one per day)
ℹ️
Activity NFTs can be minted once per day after posting on X. You need 20 Activity NFTs to access the DEX, which requires at least 20 days of activity.

NFT Contract Functions

FunctionDescription
getUserGenesisCount(address)Returns the number of Genesis NFTs held
getUserActivityCount(address)Returns the number of Activity NFTs held
mintGenesis()Mints one Genesis NFT (once per wallet)
mintActivity(string tweetUrl)Mints one Activity NFT (once per day)
hasMinted(address, NFTType)Returns whether a wallet has minted a given type
canMintActivity(address)Returns whether the daily cooldown has elapsed