{
  "note": "Arcade contract addresses on Arc testnet, kept in sync with the Vercel NEXT_PUBLIC_* env block. Update both files after every redeploy.",
  "chain": {
    "name": "Arc Testnet",
    "chainId": 5042002,
    "rpcUrl": "https://rpc.testnet.arc.network",
    "explorer": "https://testnet.arcscan.app",
    "nativeGasToken": "USDC"
  },
  "addresses": {
    "USDC": "0x3600000000000000000000000000000000000000",
    "WETH": "0x9570EBA9eE39Aa4933f64d6add280faAB289a847",
    "treasury": "0x3a0Dd90212838f32a953Acd4B32596b62859324A",
    "v2Factory": "0x31113CC1f34d732503C28ad686964af2AFe84554",
    "v2Router": "0x0aa0491132E8972F578A45A4bB7705835ed52889",
    "v2Zap": "0x0E2c8491Ea358273bf1fD14769D99AeE1B0D75C4",
    "launchpad": "0x7337789D6F0f731BCBE6CE6a44334F548Bba56b9",
    "multiSwap": "0x3B5c0bECe016FC95bC475051c31C6B4179330C70",
    "v3Factory": "0x1acc719F43AaB36b29Df6F9B8ecd02D8704c4D29",
    "v3Locker": "0x8434cAeC1e6074aE6d98d5744b485C7F5f19F6A7",
    "v3Router": "0xB6a722667D1a61170B15A3d82ece155D3516db19",
    "v3Quoter": "0xD428D8975804ffE2AFD82E8Ff02273d6a3E89f6B",
    "v3Zap": "0x629da8bAD9DE632990c70Ad907cbfa65bc214187",
    "v3PositionManager": "0xB3FDAEE3c1Bc3e08D4b4B9e5bBC3708c1b99AabD",
    "tokenVault": "0x1208b205cAF3d0f1FEbCe13bAB840a7260AcC600",
    "autoCompounder": "0x12D2362859A7AF1177491C6314bdD516a0B25Fa1",
    "identityIssuer": "0x912a31937e292006b65c0CE6ffEC01b00682cf5a",
    "identityRegistry": "0x8004A818BFB912233c491871b3d84c89A494BD9e",
    "arcadeHook": "0x90b7D816862f9ca2E2Fa8B8Dde2BF855E623BecE",
    "lockedVault": "0xC7D1481364b18Ddb8fa55d93C454e681b791202E",
    "v4PoolManager": "0x71CCed1c397EC974E74C350eBA6DBa98DE8e8e25",
    "v4StateView": "0x57b226172FfE139f0878E291982E70CD64645FeF",
    "v4Quoter": "0x51Da2cA6a663dFE704A11Bdbb107df0E4365c5F8",
    "v4Router": "0x1Ac821216edcbA5da28DA6e2096ce490a962fc41",
    "seedETH": "0xcA34959A856c82214Bb3b2b7777342dE30459F83",
    "twitterEscrow": "0xfD1c54B13C30AE50a7e5642D7d7040AF6CB23bd8",
    "twitterEscrowSigner": "0x3a0Dd90212838f32a953Acd4B32596b62859324A",
    "twitterEscrowOwner": "0x3a0Dd90212838f32a953Acd4B32596b62859324A"
  },
  "notes": {
    "generation": "Synced 2026-06-21 to the live Vercel NEXT_PUBLIC_* set. The core DEX + launchpad stack (v2/v3 factories, routers, launchpad, multiSwap, locker, quoter, zaps, NPM, tokenVault) had advanced a full generation past the prior gen-5 listing; all addresses above now match what the live frontend uses.",
    "auditStatus": "All 3 mainnet-critical audit findings and the V3-stack HIGH findings are LIVE at these addresses — verified on-chain: the deployed runtime bytecode of v3Locker / v3Router / v3Zap is byte-identical to contracts/v3src source (differs only at address-immutable slots).",
    "recovered": "autoCompounder (0x12D2…), identityIssuer (0x912a…) and twitterEscrow (0xfD1c…) were all recovered + verified on-chain (deposit/mint txs; the live locker 0x8434…'s twitterEscrow() getter), since the local .env.local copy has no entry for them. The new escrow's LOCKER() points to the current locker, and on testnet its trustedSigner is the deployer EOA (mainnet uses a dedicated backend signer).",
    "v3PositionDescriptor": "Internal NFT-metadata renderer for the V3 position manager (private immutable, no on-chain getter). Cosmetic only — no integrator needs it — so it is not listed here.",
    "identityRegistry": "ERC-8004 Identity Registry is an Arc primitive (not Arcade-deployed). Identities are minted via register(string uri) from the holder's own wallet; the gated mint(address,string) reverts.",
    "externalIntegrations": "Orbs dTWAP (limit orders), Synthra, UnitFlow and Xylo are external protocols the aggregator/limit-order UI integrates with — their addresses live in lib/constants.ts, not here, as this file lists Arcade-deployed contracts only.",
    "seedETH": "Standalone testnet ERC20 ('Ether (Seed)', symbol 'ETH', 18 decimals, 1,000,000 supply). May live on an older V2 factory's pair scope; recreate the pair via /positions if it isn't visible on the current factory.",
    "v3Npm": "If the V3 NPM is redeployed: the upstream v3-periphery PoolAddress.POOL_INIT_CODE_HASH does NOT match the bytecode hash our Forge profile produces for UniswapV3Pool. Without patching it the NPM computes a ghost CREATE2 pool address and every mint reverts with 'call to non-contract address'. The patch lives in contracts/scripts/patch-v3-periphery.sh and must be re-applied after any forge install."
  },
  "constants": {
    "tokenDecimals": 18,
    "usdcDecimals": 6,
    "totalSupply": "1000000000",
    "creationFeeUsdc": "3000000",
    "v3FeeTiers": [10000, 20000, 30000],
    "poolTypes": {
      "standard": { "id": 0, "paired": "USDC", "startMcapUsdc": "35000000000", "positions": 3 },
      "legacy": { "id": 1, "paired": "USDC", "startMcapRange": ["1000000", "1000000000000"], "positions": 1 },
      "deep": { "id": 2, "paired": "USDC", "startMcapUsdc": "50000000000", "positions": 3 },
      "weth": { "id": 3, "paired": "WETH", "startMcapWeth": "10000000000000000000", "positions": 3 }
    }
  }
}
