# MDOG Puppy Pad > Puppy Pad is the launchpad built by the MDOG community. It runs on Arc testnet (chain id 5042002) and nowhere else, by design: it is a testing ground for the MDOG community and for AI agents, and nothing on it is real money. Liquidity is locked by a contract with no withdraw function and the 1% trading fee is split 50/50 with the creator. No API key, no account, no backend. Everything works over a public RPC with eth_call and eth_sendTransaction. ## Status - Arc testnet only, chain id 5042002. There is no mainnet factory and no way to select one from the site. - RPC: https://rpc.testnet.arc.io Explorer: https://explorer.testnet.arc.io - Factory (LaunchFactory), Arc testnet: 0x732e6Beac348AE1BC77f2C94F1aeF76E90B52811 - Testnet USDC comes from Circle's faucet: https://faucet.circle.com - MDOG, the community token this pad is named after, is on Arc at 0x83fD0BDDdafA9a499582899d49515060C361b9aa. It is not the pad, it is not a testnet token, and it is not yet usable as a quote asset here. ## Pages - [Board](https://mdog.fun/): every launch, read live from the chain, ranked by market cap - [Token](https://mdog.fun/token?ca=0xADDRESS&chain=5042002): one token, its trade panel and its on-chain facts. This is the per-token URL pattern; the pages are noindex because the names on them are written by whoever deployed the token - [Launch](https://mdog.fun/launch): the creator surface - [Proof](https://mdog.fun/proof): the addresses and the exact read-only calls to check every claim - [For agents](https://mdog.fun/agents): the three calls - [Share](https://mdog.fun/share): the contract address, the chart, the faucet, and lines to copy - [Contact](https://mdog.fun/contact): report a bug, send feedback. A message is enough, contact details are optional - [pad.json](https://mdog.fun/pad.json): addresses, selectors, curve parameters and limits in one fetch - [llms-full.txt](https://mdog.fun/llms-full.txt): the full text of the pages ## The calls - launch((string,string,uint256,uint256,address,uint8,bool,bool)) on the factory, selector 0xc7008810. The fields are name, symbol, supply, creatorAllocation, quote, curveId, burnTokenFees, burnQuoteFees - launchCount() 0x27cca59f, then launches(uint256) 0x7b443a76, which returns token, locker, creator, curveId, the pool key and the pool id - creatorEligible() 0xc7485d6b and creatorMinHold() 0x37a0b3f0 on a launch's locker; positionCount() 0xe7702d05 and positions(uint256) 0x99fbab88 for the locked positions; collect() 0xe5225381 is the only path by which value leaves the locker - getSlot0(bytes32) 0xc815641c on Uniswap's StateView for the live price - quoteExactInputSingle(((address,address,uint24,int24,address),bool,uint128,bytes)) 0xaa9d21cb on the v4 Quoter, then execute(bytes,bytes[],uint256) 0x3593564c on the Universal Router to trade - Launched(address,address,address,uint8,uint256,uint256,bytes32) has topic 0x75affb636e6fc233dfaee3912bccefe284b416c890c83b5b1db90fc5caa33cc6 ## What it does - **Discover.** A board of every launch ranked by market cap, read live from the chain, showing whether the liquidity is locked, what the creator kept, whether they still hold it, and how many launches have never traded above their opening price. - **Trade.** Buy and sell through Uniswap's own Universal Router. Lightweight, not a full dex. - **Create.** One transaction deploys a fixed-supply token, opens a pair on Uniswap v4, mints the liquidity and locks it. ## What the contracts enforce - Liquidity goes to a locker contract with no withdraw function. Not a timelock, not a promise. - The 1% fee comes from the pool's own fee tier, so no code of the pad runs inside a trade. Half to the creator, half to the treasury. Where burnQuoteFees is set, the platform half is burned rather than paid to the treasury. - The creator half stops permanently once the creator no longer holds their launch allocation, and buying back does not restore it. It tracks one address, and moving the allocation to another wallet counts as selling, so that trips it permanently too. What it does not cover is a creator who takes a small allocation and buys more from wallets it never sees. - Creator allocation is capped at 10% of supply, enforced by the factory. - The quote asset must have 18 decimals; the factory refuses anything else. - No owner, no admin, no upgrade path, anywhere. - The factory retains nothing from a launch. Anyone can send it tokens afterwards, so read its balance rather than assuming. - Curves are fixed presets: a creator cannot pass their own ticks. On the Standard curve, 3,800 USDC buys at most about 12% of supply, which is an upper bound and not an estimate, and splitting a buy across wallets or blocks does not help, because every buyer walks the same curve. ## What it does not do 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. Locked liquidity means the pool cannot be drained by whoever made it, and nothing more than that. This is testnet, so none of it is real money either way. The contract source is not published and the contracts are not verified on the explorer, so nothing on this site depends on a reader inspecting the code and no claim here should be taken on trust. Every claim above is meant to be checked from the chain, by behaviour: who owns the position, which functions revert because they do not exist, and what the factory holds. Nobody outside the project has seen the contract source. ## Key facts - Gas on Arc is USDC itself, so the quote side of every pair is the native currency (address zero, 18 decimals) - Uniswap v4 on Arc testnet: PoolManager 0x8366a39CC670B4001A1121B8F6A443A643e40951, PositionManager 0x6049c9a0e26405C0985f9E3685C87d0aE917f82B, StateView 0xF3334192D15450CdD385c8B70e03f9A6bD9E673b, Quoter 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94, UniversalRouter 0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1, Permit2 0x000000000022D473030F116dDEE9F6B43aC78BA3 - Source: /app.js, /abi.js, /config.js, /sel.js, /board.js, /token.js, /launch.js, /proof.js, /static.js, /contact.js. No dependencies and no third-party scripts. The content security policy is default-src 'none' with script-src 'self'; the only external host any page contacts is the form service behind /contact, and only when the form is sent - Contracts: LaunchToken, Curves, FeeLocker, LaunchFactory