Skip to content

amathxbt/actfun

Repository files navigation

ACTFUN

ACTFUN — Mine to Launch

The first community-mined token launchpad on Arc Network. Mine tokens by writing something funny. 100% onchain. No VCs. No team allocation. Pure community.

Arc Testnet License: MIT Live App Follow on X Docs


What is ACTFUN?

ACTFUN is a Pump.fun-style token launchpad built natively on Arc Network — but with a twist that changes everything.

Instead of buying into a bonding curve, your community earns the token supply by writing funny posts. Every mine is a real on-chain transaction. The mining fee goes directly into a liquidity pool. When 95% of the supply is mined within a 1-hour window, the token automatically graduates and opens for live trading via a built-in constant-product AMM (x*y=k). No external DEX. No migration. No rug.

ACTFUN is what Pump.fun would be if the community actually earned the supply — and got to watch it happen live.


What Makes ACTFUN Different

Pump.fun ACTFUN
Token distribution Bonding curve buy Community mines 95% of supply
Liquidity source Creator provides Mining fees auto-seed the pool
DEX External (Raydium) Built-in AMM — no external DEX
Launch requirement Instant 1-hour community-mined window
Team allocation Often yes Zero — 5% is LP reserve only
Creator tool None Go Live: WebRTC stream + chat
Participation Passive buying Active — write something funny
Backend Centralized servers 100% onchain — pure RPC
Failure mode Creator rugs Refund mechanism if not graduated

The Mine-to-Launch Flow

┌─────────────────────────────────────────────────────────┐
│                                                         │
│  1. CREATE    Anyone deploys a token via LaunchpadFactory │
│               Free on testnet. Set: name, symbol, image, │
│               supply, mine amount, cooldown, daily cap,  │
│               fee per mine.                              │
│                                                         │
│  2. MINE      Community mines 95% of supply by writing   │
│               funny posts on-chain.                      │
│               Each mine = small ARC fee → accumulates.   │
│               Rules enforced on-chain: cooldown,         │
│               daily cap, supply cap.                     │
│               Window: must complete within 1 hour.       │
│                                                         │
│  3. GRADUATE  At 95% mined → contract auto-graduates:   │
│               • Mints 5% LP reserve tokens to itself     │
│               • Opens built-in x*y=k AMM seeded with:   │
│                 5% tokens + all accumulated ARC fees     │
│                                                         │
│  4. TRADE     Buy/sell via built-in DEX on the same page │
│               No migration. No external DEX. Instant.    │
│                                                         │
│  FAIL SAFE    Didn't graduate in 1 hour?                 │
│               → Refund window opens for all miners       │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tokenomics (per launched token)

Total Supply
├── 95%  Mineable by community (via funny posts)
└──  5%  LP reserve (auto-minted to contract on graduation)

Mining Fee  → set by creator (e.g. 0.0001 ARC per mine)
            → 100% flows into contract treasury
            → Becomes initial ARC reserve in the AMM on graduation

On Graduation:
  Initial token reserve = 5% of total supply
  Initial ARC reserve   = all accumulated mining fees
  AMM formula:  tokensOut = arcIn × tokenReserve / (arcReserve + arcIn)

No pre-mine. No team wallet. No VC allocation. The creator gets community glory and a Go Live button.


Features

🏠 Homepage — Token Grid

  • New / Trending / Graduated tabs — live mining progress bars, miner counts
  • Search — find tokens by name or symbol
  • ⛏️ "You mined" badge — your grid highlights every token you've contributed to
  • Auto-hides expired tokens — tokens that didn't graduate within 1 hour disappear automatically

🚀 Create Token

  • Deploy a full ERC-20 + AMM contract pair in one transaction
  • Set name, symbol, image (emoji, URL, or uploaded photo), max supply, mine amount, cooldown, daily cap, fee per mine
  • Platform enforces 1-hour graduation window (hardcoded, creator cannot change)
  • Post-launch share screen — immediately after deployment confirms, the creator sees:
    • Token image, name, symbol
    • "Share on X" — one-click tweet with pre-filled text and the OG share link (X renders the token's image card inline in the tweet)
    • "Copy link" — copies the share URL to clipboard
    • "Share Card" — opens the visual card page
    • "Go to token page" — navigate directly to mining/swap page
    • Arcscan link — verify the contract on-chain
    • No auto-redirect, creator stays on the screen until they're done sharing

⛏️ Mine Page (pre-graduation)

  • Write something funny — your post is recorded permanently on-chain
  • Mining progress bar — live % toward graduation
  • Graduation countdown — urgent red timer in the final 10 minutes
  • Cooldown display — live countdown to next mine
  • Funny post activity feed — see everyone's mining posts in real time
  • Leaderboard — top miners ranked by total tokens mined
  • Graduation alerts — browser notifications at 75% mined and on graduation

💱 Swap Page (post-graduation)

  • Buy tokens — direct ARC → token swap via built-in AMM
  • Sell tokens — two-step approve + sell flow (ERC-20 approve handled automatically)
  • Live price chart — full trade history rendered as a price chart, built from on-chain Swap events
  • Price stats — current price, all-time high, all-time low, total trades
  • Share on X — one-click tweet with card link that renders a rich image preview on X

🃏 Shareable Token Cards

Every token gets a shareable card page and X-optimized image preview.

Share URL: actfun.xyz/api/share/:launcherAddress

When posted on X:

  • X's bot gets proper twitter:card: summary_large_image meta tags
  • A 1200×630 PNG card image is generated on-demand server-side showing:
    • Token image / emoji
    • 🎓 WON (green), 💀 LOST (red), or ⛏️ MINING (blue) status badge
    • Mining progress bar with % and miner count
    • Top 3 community mining posts as a chat thread ("memes")
    • ACTFUN branding

When a real user clicks the link:

  • Redirected to /card/:address — a full visual card page with the same info plus share/copy buttons and a "Trade this token" CTA

The card page is accessible directly at actfun.xyz/card/:address.

🎥 Creator Livestream

  • Go Live button — creator broadcasts directly from the token page (no streaming account needed)
  • WebRTC peer-to-peer — video streams from creator to all viewers in real time
  • Live chat — full chat alongside the stream, works for creator and viewers
  • Viewer count — live count of how many people are watching
  • Auto-detects live status — viewers see a pulsing 🔴 LIVE badge when creator is streaming

🔔 Graduation Alerts

  • Tracks every token you've mined in browser localStorage
  • Background poller checks progress every 45 seconds
  • 🔥 75% milestone — amber toast notification: "Almost there, mine now!"
  • 🎓 Graduation — green toast: "It's trading live!"
  • Each notification fires exactly once, auto-dismisses after 9 seconds, click to navigate

📊 Contract Info Panel

  • Launcher address (Arcscan link)
  • Token contract address
  • Cooldown, daily max, fee per mine, graduation window
  • Creator address

Smart Contracts

contracts/src/
├── LaunchToken.sol        ERC-20 per launched token
│                          Standard OpenZeppelin ERC-20
│
├── TokenLauncher.sol      Per-token miner + AMM in one contract
│                          • mine(post, feePerMine) — write post, pay fee, receive tokens
│                          • Cooldown enforced per wallet
│                          • Daily cap enforced per wallet per day
│                          • Supply cap: reverts if mineableSupply exceeded
│                          • _graduate() — auto-called at 95% mined
│                          • buyTokens(arcIn) — post-graduation AMM buy
│                          • sellTokens(amount) — post-graduation AMM sell
│                          • claimRefund() — if expired without graduating
│                          • getMiningProgress() → (mined, total)
│                          • getLeaderboard() → ranked miner addresses
│
└── LaunchpadFactory.sol   Registry + factory
                           • createToken(...) → deploys (LaunchToken, TokenLauncher) pair
                           • getTokenCount() → total tokens launched
                           • getToken(index) → TokenRecord
                           • getAllTokens() → full registry
                           • creationFee, feeRecipient (owner-controlled)

Deployed on Arc Testnet (Chain ID 5042002)

Contract Address
LaunchpadFactory v3 0x6b383a533DA4AAaec71d85D8e8E5bf5A2E254f2C

Each deployed token pair (LaunchToken + TokenLauncher) is created by the factory and registered on-chain. The factory is the source of truth for all valid ACTFUN tokens.


Repository Structure

actfun/
├── contracts/                      Solidity contracts (Hardhat)
│   ├── src/
│   │   ├── LaunchpadFactory.sol
│   │   ├── TokenLauncher.sol
│   │   └── LaunchToken.sol
│   ├── scripts/
│   │   ├── deploy-launchpad.js     Deploy factory
│   │   └── query-tokens.js         Query deployed tokens
│   └── hardhat.config.js           viaIR: true (required)
│
├── artifacts/actfun/               React + Vite frontend dApp
│   ├── public/
│   │   └── minepad-logo.png
│   └── src/
│       ├── pages/
│       │   ├── HomePage.tsx        Token grid
│       │   ├── CreateTokenPage.tsx Launch form
│       │   └── TokenDetailPage.tsx Mine / swap / stream
│       ├── components/
│       │   ├── MiningPanel.tsx     Mine action UI
│       │   ├── SwapPanel.tsx       Buy/sell UI
│       │   ├── PriceChart.tsx      Live chart
│       │   ├── LiveStream.tsx      WebRTC stream + chat
│       │   ├── TokenCard.tsx       Homepage grid card
│       │   └── GraduationAlerts.tsx Toast notifications
│       ├── pages/
│       │   ├── ...
│       │   └── CardPage.tsx        Shareable token card page
│       ├── context/
│       │   └── MiningTrackerContext.tsx  Mine tracking + alerts
│       ├── hooks/
│       │   ├── useFactory.ts       Token list + create
│       │   ├── useTokenLauncher.ts Mine / swap / events
│       │   ├── usePriceHistory.ts  Chart data
│       │   └── useCountdown.ts     Countdowns
│       └── lib/
│           ├── wagmi.ts            Arc testnet config
│           └── contracts.ts        ABIs + addresses
│
├── artifacts/api-server/           Express 5 API (WebSocket signaling)
│   └── src/
│       ├── lib/
│       │   ├── liveRooms.ts        In-memory WebRTC room state
│       │   └── wsServer.ts         WS upgrade handler
│       └── routes/
│           ├── live.ts             /api/live/:addr WebSocket endpoint
│           └── share.ts            /api/share/:addr OG page + /api/og-image/:addr PNG card
│
├── artifacts/actfun-mobile/        React Native / Expo mobile app
├── artifacts/minepad-video/        Animated promo video artifact
├── lib/                            Shared TypeScript libraries
└── pnpm-workspace.yaml             Monorepo config

Running Locally

Requirements: Node.js 24, pnpm 10, MetaMask

git clone https://github.com/actfun/actfun.git
cd actfun
pnpm install

# Frontend dApp (http://localhost:PORT)
pnpm --filter @workspace/actfun run dev

# API server — needed for livestream feature
pnpm --filter @workspace/api-server run dev

# Typecheck everything
pnpm run typecheck

Add Arc Testnet to MetaMask:

Field Value
Network Name Arc Testnet
RPC URL https://rpc.testnet.arc.network
Chain ID 5042002
Symbol ARC
Explorer https://testnet.arcscan.app

Get testnet ARC from the Arc faucet.


Deploy Contracts

cd contracts
npm install
echo "PRIVATE_KEY=0xyourkey" > .env
CI=true npm run deploy-launchpad
# → Outputs new LaunchpadFactory address
# → Update artifacts/actfun/src/lib/contracts.ts with the new address

Hardhat requires viaIR: true in hardhat.config.js to avoid stack-too-deep errors on LaunchpadFactory.


Tech Stack

Layer Technology
Blockchain Arc Testnet · EVM · Chain ID 5042002
Contracts Solidity 0.8.24 · OpenZeppelin 5.x · Hardhat
Frontend React 18 · Vite · Tailwind CSS · TypeScript
Routing wouter
Web3 wagmi v2 · viem
Wallet Dynamic Labs (injected connector)
Real-time WebSocket (ws) · WebRTC mesh for livestreams
API Express 5
Monorepo pnpm workspaces · Node.js 24

Why Arc Network?

Arc is an EVM-compatible L1 built for speed. Sub-second finality is what makes ACTFUN feel alive:

  • Mining cooldowns feel instant — transaction confirms before you finish reading the success message
  • 1-hour graduation window — tight enough to create real urgency, fast enough to not frustrate
  • Live leaderboard — updates in near real time as mines confirm
  • AMM swaps — settle before you blink
  • Negligible gas — anyone can mine without worrying about fees eating their rewards

ACTFUN is the first launchpad native to Arc testnet, purpose-built to show what happens when you combine EVM speed with zero-backend architecture and community-driven tokenomics.


Architecture Decisions

Why no backend for core flows? Everything that matters — supply, fees, graduation, refunds — lives in Solidity. The API server only handles WebSocket signaling for the optional creator livestream. If the server goes down, the launchpad still works 100%.

Why a 1-hour graduation window? It creates urgency. A token either catches fire in its first hour or it doesn't. This prevents zombie tokens from sitting unfinished for days and gives the homepage a constantly fresh grid.

Why built-in AMM instead of external DEX? On-chain AMM means graduation is fully automatic and atomic. No migration transaction. No external dependency. No way for a creator to pull liquidity before it seeds. The mining fees that went in come out as the initial liquidity — aligned incentives by design.

Why funny posts? Mining requires a string argument. Making it a funny post turns a mechanical fee payment into a social action. The activity feed becomes readable entertainment. The token with the best posts wins cultural mindshare.


Security Model

All economic invariants are enforced in Solidity — not in React:

Invariant Enforcement
Supply cap Contract reverts if mineableSupply exceeded
Cooldown Per-wallet, stored on-chain, enforced in mine()
Daily cap Per-wallet per day, on-chain counter
AMM reserve integrity Miners cannot reclaim fees that seeded liquidity
Graduation Irreversible once triggered, fully automatic
Refund eligibility Only after graduation window expires without graduating
Factory trust Only launchers deployed by LaunchpadFactory should be treated as valid

Roadmap

  • Arc mainnet deployment
  • IPFS image pinning for token metadata
  • Creator revenue share (% of post-graduation AMM fees)
  • Governance: community votes on launchpad parameters
  • Mobile app (Expo / React Native)
  • Multi-chain graduation (graduate to Uniswap on other chains)

Contributing

This repo is fully open source under MIT. PRs welcome.

  1. Fork the repo
  2. Branch off main
  3. Open a PR with a clear description of what you changed and why

Contract changes: Do not modify deployed contract logic. Create a new factory version and update the address in artifacts/actfun/src/lib/contracts.ts.


Links

🌐 Live app https://actfun.xyz
📖 Docs https://actfun.mintlify.app
🐦 X / Twitter https://x.com/Actfunpad
🔍 Arc Explorer https://testnet.arcscan.app
📜 Factory contract 0x6b383a...254f2C

Built on Arc. Mined by community. Graduated by memes. 🤪

ACTFUN is deployed on Arc testnet. Not financial advice. Mine responsibly.

About

ACTFUN — Mine-to-Launch token launchpad on Arc Network. Community mines tokens by writing funny posts. 100% onchain, no VCs, pure community.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors