Smart Contracts
All contracts are deployed on Arc Testnet (Chain ID: 5042002). The explorer is at testnet.arcscan.app.
V2.5 Protocol
| Contract | Address | Role |
|---|
| Factory | 0xd67F63A4F26a497b364d1C82e6747Aec8B5743a5 | Creates and tracks all V2.5 pairs |
| Liquidity Router | 0x0ef57CC428c851e9a9b7cD97190EF3D3EFe4B631 | Handles add/remove liquidity |
| Swap Router | 0x4AA8c7Ac458479d9A4FA5c1481e03061ac76824A | Executes token swaps |
| WUSDC | 0x911b4000D3422F482F4062a913885f7b035382Df | Wrapped native USDC for AMM compatibility |
V3 Protocol
| Contract | Address |
|---|
| Factory | 0xAb6A8AAb7d490007634ef59d424b5d89688a1971 |
| Router | 0xB0Ba24f9C49D933523219e92528E7e5db93e9AFc |
| Position Manager | 0x0553682bc188b850acd31CBd3500Dcd0aa35372B |
| Quoter | 0x121aeB6DEf00F6F67665008CaC1C19805886ed1a |
| Migrator | 0x4122f9B4ee7C18CC6b6b71180B438477D17034AB |
| Tick Lens | 0x621d5704C2B3470D21BaC7Bb47B1b933116551fA |
V4 Protocol
| Contract | Address |
|---|
| Pool Manager | 0x33C02bfb9e39AAAe30F8bE86b850f8ce53d20C0b |
| Position Manager | 0xA464d4e7614546a127773CedBDDd64FB81421723 |
| Quoter | 0xf9d5Ae3c08602390ea15A3968f2D25cc3c3A7ced |
| State View | 0xEAea934839E8A7CfBfd85336380F77d72e090bBe |
| Permit2 | 0x4ce562F687d0Ced27b79Ba51d79B63BD978F7F48 |
| Position Descriptor | 0x212f6Ded16644cB2858Aa9Cc7Df5150D0356C2C7 |
NFT Contract
| Field | Value |
|---|
| Name | unitflowNFT |
| Address (DEX gating) | 0x9e05C6075f9E890fC515EF86091414C77036f8FA |
| Address (landing page) | 0xA39a5F24D454E166CF4ee35892Cb456e6c00Cd87 |
| Standard | ERC-721 |
| Token Name | UnitFlow NFT |
| Token Symbol | ARCNFT |
NFT Contract Interface
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract unitflowNFT is ERC721, Ownable {
enum NFTType { GENESIS, ACTIVITY }
// Mint Genesis NFT (once per wallet)
function mintGenesis() external;
// Mint Activity NFT (once per day, requires prior Genesis mint)
function mintActivity(string calldata tweetUrl) external;
// Read functions
function getUserGenesisCount(address user) external view returns (uint256);
function getUserActivityCount(address user) external view returns (uint256);
function hasMinted(address user, NFTType nftType) external view returns (bool);
function canMintActivity(address user) external view returns (bool);
function getTimeUntilNextActivityMint(address user) external view returns (uint256);
function isUserVerified(address user) external view returns (bool);
function userPoints(address user) external view returns (uint256);
function totalGenesisSupply() external view returns (uint256);
function totalActivitySupply() external view returns (uint256);
}UniversalRouter
The UniversalRouter is a single entry-point contract for routing swaps across V2.5, V3, and V4 using a command-based execution model. See the UniversalRouter page for full usage details.
| Contract | Address | Role |
|---|
| UniversalRouter | 0xEaF3195bE51861632cd32850973C9515DA48e76F | Routes swaps across V2.5, V3, and V4 via command encoding |
| Permit2 | 0x4ce562F687d0Ced27b79Ba51d79B63BD978F7F48 | Shared token approval contract (V3, V4, UniversalRouter) |
CCTP Contracts (Arc Testnet)
| Contract | Address |
|---|
| TokenMessenger | 0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA |
| MessageTransmitter | 0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275 |
| Native USDC | 0x3600000000000000000000000000000000000000 |
Predict Protocol
Binary prediction markets. All four contracts use OpenZeppelin's TransparentUpgradeableProxy. See the Predict documentation for full details.
| Contract | Address | Role |
|---|
| PredictMarketFactory | 0x7Ec112983011db79f907285daBc759643A9D8304 | Deploys and registers all prediction markets |
| PredictMarketFactory (impl) | 0x2EA73225038E9D8b9767B722425c1d69dB8EB748 | Implementation |
| PredictOracle | 0xc40E6653D3a76FAA8F3F68060f1D09AEB5153A15 | Proposes and finalizes market outcomes (24h dispute window) |
| PredictOracle (impl) | 0xbdB7FD8E6FB1a0F3976E46B49C2c92BC532450F1 | Implementation |
| FeeDistributor | 0x0d0425413284ebB4023913ef78Eb207241d3b2eC | Splits protocol fees: 60% buyback / 20% LP / 20% treasury |
| FeeDistributor (impl) | 0x7b528bC0AF9Cd45F3C37982987E99ADD43B9a49E | Implementation |
| MockUnitFlowRouter | 0x285562e96B281791270090Ead5239b9747fe9197 | Stub router for FeeDistributor (pre-UNIT launch) |
Contract Source
The unitflowNFT contract source is in the landing page repository at contracts/ArcFlowNFT.sol. It extends OpenZeppelin's ERC-721 and Ownable.
The V2.5 core and periphery contracts are in the DEX repository under contracts/core/ and contracts/periphery/.
The Predict contracts are in the predict-smart-contract repository under contracts/predict/. All contracts are verified on ArcScan.