# ArcPad — developer context (paste this into your AI to build on ArcPad) You are helping me build on **ArcPad**, a permissionless memecoin launchpad on **Arc** (Circle's stablecoin-native Layer-1, chain ID **5042**). ArcPad is just one public contract — anyone can launch a token by calling it, from any app, bot, or script. Launches automatically show up on ArcPad's feed, chart, holders and analytics (its indexer reads the on-chain event). ## Contract - **ArcCurvePad** (Arc mainnet, chain 5042): `0x24196CD6e534cfCE8F480B53E70809b68Ea86F29` - Function: ``` createToken( string name, string symbol, TokenMeta meta, // struct: string imageURI, string website, string twitter, string telegram bytes32 salt // random 32 bytes — prevents pool-init griefing ) payable returns (address) ``` - `msg.value` = the dev buy in native USDC (0 for none). - Set a **generous gas limit (~3,000,000)**: a launch deploys the token, creates the Uniswap V3 pool and mints the locked position. Too low reverts out-of-gas. - Fees: the creator earns **0.5% of buys**, claimable in USDC forever. Liquidity is locked permanently. ## Minimal ABI (JS) ```js const ABI = [ "function createToken(string name, string symbol, (string imageURI, string website, string twitter, string telegram) meta, bytes32 salt) payable returns (address)", ]; ``` ## RPC Use an Arc RPC of your choice (find the official one when it is public). In the examples below, replace `RPC_URL` with your Arc RPC endpoint. The chain ID is `5042`; native gas token is USDC (18 decimals). ## Example — one HTML file (browser, injected wallet) ```html
Wallet: not connected


    
    
    
  

```

## Example — Telegram bot (Node, ethers)

```js
import { Wallet, JsonRpcProvider, Contract, parseEther, hexlify, randomBytes } from "ethers";

const PAD = "0x24196CD6e534cfCE8F480B53E70809b68Ea86F29";
const RPC = process.env.RPC_URL || "RPC_URL"; // <-- your Arc RPC
const ABI = [
  "function createToken(string name, string symbol, (string imageURI, string website, string twitter, string telegram) meta, bytes32 salt) payable returns (address)",
];
const wallet = new Wallet(process.env.PRIVATE_KEY, new JsonRpcProvider(RPC));
const pad = new Contract(PAD, ABI, wallet);

// /launch Name | SYMBOL | imageURL | devBuyUSDC
const tx = await pad.createToken(
  "My Coin", "MYC",
  { imageURI: "https://…", website: "", twitter: "", telegram: "" },
  hexlify(randomBytes(32)),
  { value: parseEther("1"), gasLimit: 3000000n },
);
await tx.wait();
```

## Public API (no key, CORS-open)

- `GET /api/tokens` — paginated launches (limit, after, sort, q).
- `GET /api/token/{address}/meta` — name, symbol, pool, creator, image, price.
- `GET /api/token/{address}/stats?range=` — price/volume stats.
- `GET /api/token/{address}/activity` — recent trades + 24h volume.
- `GET /api/token/{address}/live` — SSE stream of trades/price/candles/holders.
- `GET /api/holders?token=0x…` — holders.
- `GET /api/live?after=` — global buy/sell/launch tape.
- `GET /api/stats` — site-wide analytics.
- `GET /api/leaderboard?range=` — top wallets by points.
- `GET /api/status` — indexer health.

## Claiming

- Creators: `ArcFeeLocker` (`0x69A615DD32B89fE40D87b2e3123baE4162f2d450`):
  `claim(asset)` per asset, or `collectAndClaim(positionId)` (harvest + pay).
- Holders (holder-rewards launches): the token is an `ArcRewardToken`; call
  `claim()`.

## Monetizing on top

You can charge your own fee on top (ArcPad's 1% is fixed on-chain). Simplest: a
flat fee per launch (e.g. 0.25 USDC) collected by your bot/UI, or a small wrapper
contract that takes your fee then calls `createToken`. See arcpad.meme/docs
section "Monetizing your integration".

## What I want you to build

(Describe your idea here — e.g. "a Telegram bot that launches a coin when the
community votes", "a simple web launcher with a flat $0.25 fee", etc.)