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 Type | Minimum Required |
|---|---|
| Genesis NFT | 1 |
| Activity NFT | 20 |
Both requirements must be met simultaneously. Holding only one type is not sufficient.
NFT Contract
| Field | Value |
|---|---|
| Contract Address | 0x9e05C6075f9E890fC515EF86091414C77036f8FA |
| Network | Arc Testnet (Chain ID: 5042002) |
| Standard | ERC-721 |
How It Works
- User connects their wallet.
- The app checks if the address is in the whitelist. If yes, access is granted immediately.
- If not whitelisted, the app calls
getUserGenesisCount(address)andgetUserActivityCount(address)on the NFT contract. - If both counts meet the minimums, access is granted.
- If either count is insufficient, a modal is shown explaining the requirements and linking to the mint page.
- 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:
- Visit unitflow.finance
- Connect your wallet
- Complete Discord verification (join the server)
- Complete X verification (follow @unitflowFinance)
- Mint your Genesis NFT (one per wallet)
- 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
| Function | Description |
|---|---|
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 |