{
  "name": "MDOG Puppy Pad",
  "brand": "MDOG",
  "product": "Puppy Pad",
  "description": "A launchpad on Arc where liquidity is locked by a contract with no withdraw function and the 1% fee is split 50/50 with the creator. No API key, no account, no backend. Everything here can be done with eth_call and eth_sendTransaction.",
  "docs": "/agents",
  "status": "testnet only, by design. Arc testnet (5042002). Nothing here is real money and no factory is live on Arc mainnet.",
  "pages": {
    "board": "/",
    "token": "/token?ca={address}&chain={chainId}",
    "launch": "/launch",
    "proof": "/proof",
    "agents": "/agents",
    "share": "/share",
    "contact": "/contact",
    "llms": "/llms.txt"
  },
  "quote": {
    "symbol": "USDC",
    "decimals": 18,
    "address": "0x0000000000000000000000000000000000000000",
    "note": "Gas on Arc is USDC itself, so the quote side is the native currency. The factory refuses a quote asset that does not have 18 decimals."
  },
  "mdogToken": {
    "symbol": "MDOG",
    "address": "0x83fD0BDDdafA9a499582899d49515060C361b9aa",
    "chain": "Arc",
    "chart": "https://dexscreener.com/arc/0x83fd0bdddafa9a499582899d49515060c361b9aa",
    "note": "The MDOG community token, which this pad is built by and named after. It is not the pad, and it is not deployed on Arc testnet, so it cannot be used as a quote asset here yet. Every token on the board is a testnet token."
  },
  "chains": {
    "5042002": {
      "name": "Arc testnet",
      "rpc": "https://rpc.testnet.arc.io",
      "explorer": "https://explorer.testnet.arc.io",
      "factory": "0x732e6Beac348AE1BC77f2C94F1aeF76E90B52811"
    }
  },
  "uniswap": {
    "poolManager": "0x8366a39CC670B4001A1121B8F6A443A643e40951",
    "positionManager": "0x6049c9a0e26405C0985f9E3685C87d0aE917f82B",
    "permit2": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
    "stateView": "0xF3334192D15450CdD385c8B70e03f9A6bD9E673b",
    "quoter": "0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94",
    "universalRouter": "0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1"
  },
  "curves": [
    {
      "id": 0,
      "name": "Standard",
      "sweepUpperBound": "3800 USDC buys at most about 12% of supply",
      "note": "Two tranches. Splitting a buy across wallets or blocks does not help, because every buyer walks the same curve. Market cap at launch is the opening price (1 / 1.0001^initialTick, the token being currency1) multiplied by the supply of the launch, so it is not a constant.",
      "initialTick": 115000,
      "tickSpacing": 200,
      "feeBps": 100
    },
    {
      "id": 1,
      "name": "Flat",
      "sweepUpperBound": null,
      "note": "A single wide range, as most launchpads use. The same money reaches far more of the supply than on Standard. Market cap at launch is the opening price (1 / 1.0001^initialTick, the token being currency1) multiplied by the supply of the launch.",
      "initialTick": 115000,
      "tickSpacing": 200,
      "feeBps": 100
    }
  ],
  "limits": {
    "maxCreatorBps": 1000,
    "feeBps": 100,
    "creatorShareBps": 5000,
    "quoteDecimals": 18
  },
  "quotes": [
    {
      "symbol": "USDC",
      "address": "0x0000000000000000000000000000000000000000",
      "native": true,
      "note": "Gas coin on Arc. Platform half of the fees goes to the treasury."
    },
    {
      "symbol": "MDOG",
      "address": "",
      "native": false,
      "note": "Set burnQuoteFees true for MDOG pairs: the platform half is then burned as MDOG by the contract rather than paid to the treasury. The creator half is unchanged."
    }
  ],
  "enforced": [
    "Liquidity is owned by a locker contract with no withdraw function. Not a timelock, not a promise.",
    "The 1% fee is split 50/50 between creator and treasury, except where burnQuoteFees is set, in which case the platform half is burned.",
    "The creator half stops permanently once the creator no longer holds their launch allocation. It tracks one address.",
    "Creator allocation is capped at 10% of supply, enforced by the factory.",
    "There is no owner, no admin and no upgrade path on the factory, the locker or a launched token.",
    "The quote asset must have 18 decimals; the factory refuses anything else.",
    "The factory retains nothing from a launch. Anyone can send it tokens afterwards, so read its balance rather than assuming."
  ],
  "notVetted": "Anyone can launch anything. Nothing on the board is vetted, endorsed or filtered, names and tickers can be copied, and most tokens go to zero.",
  "sourceNotPublished": "The contract source is not published and the contracts are not verified on the explorer. Nobody outside the project has seen them. Nothing here should be taken on trust: every claim in 'enforced' is meant to be checked from the chain, by behaviour. The locker holds the positions, the calls that would remove liquidity revert because the functions do not exist, owner() reverts on the factory and its EIP-1967 implementation slot is zero, so it is not a proxy.",
  "abi": {
    "launch": "launch((string name,string symbol,uint256 supply,uint256 creatorAllocation,address quote,uint8 curveId,bool burnTokenFees,bool burnQuoteFees))",
    "launchCount": "launchCount() returns (uint256)",
    "launches": "launches(uint256) returns (address token,address locker,address creator,uint8 curveId,(address,address,uint24,int24,address) key,bytes32 poolId)",
    "creatorEligible": "creatorEligible() returns (bool)",
    "creatorMinHold": "creatorMinHold() returns (uint256)",
    "positionCount": "positionCount() returns (uint256)",
    "positions": "positions(uint256) returns (uint256)",
    "collect": "collect()",
    "ownerOf": "ownerOf(uint256) returns (address)",
    "getSlot0": "getSlot0(bytes32 poolId) returns (uint160 sqrtPriceX96,int24 tick,uint24 protocolFee,uint24 lpFee)",
    "quoteExactInputSingle": "quoteExactInputSingle(((address,address,uint24,int24,address) poolKey,bool zeroForOne,uint128 exactAmount,bytes hookData)) returns (uint256 amountOut,uint256 gasEstimate)"
  },
  "selectors": {
    "launch": "0xc7008810",
    "launchCount": "0x27cca59f",
    "launches": "0x7b443a76",
    "creatorEligible": "0xc7485d6b",
    "creatorMinHold": "0x37a0b3f0",
    "positionCount": "0xe7702d05",
    "positions": "0x99fbab88",
    "collect": "0xe5225381",
    "ownerOf": "0x6352211e",
    "getSlot0": "0xc815641c",
    "quoteExactInputSingle": "0xaa9d21cb",
    "execute": "0x3593564c"
  },
  "events": {
    "Launched(address,address,address,uint8,uint256,uint256,bytes32)": "0x75affb636e6fc233dfaee3912bccefe284b416c890c83b5b1db90fc5caa33cc6"
  },
  "faucet": "https://faucet.circle.com"
}
