Skip to main content

Documentation Index

Fetch the complete documentation index at: https://actfudoc.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

ACTFUN uses a two-contract system deployed on Arc Testnet (Chain ID 5042002). A single shared LaunchpadFactory acts as a registry and deploys new token pairs on demand. Each token pair consists of a LaunchToken (an ERC-20) and a TokenLauncher (a combined miner and AMM). All supply distribution, trading, and graduation logic lives entirely on-chain — there is no backend, no admin key, and no external DEX dependency.

Contract addresses

ContractAddress
LaunchpadFactory0x6A3Cf53F0df2A418b6731528aD3CFC1B71dc49D4
TokenLauncherDeployed per token by the factory
LaunchTokenDeployed per token by the factory
All contracts are verified on Arcscan. Future token pairs automatically match the verified bytecode.
Arc Testnet RPC: https://rpc.testnet.arc.network · Chain ID: 5042002 · Currency: USDC

The two-phase lifecycle

Every token launched through ACTFUN follows the same two-phase lifecycle. Phase 1 — Mining The community earns tokens by calling mine(funnyPost) on the token’s TokenLauncher contract. Each mine call requires a small USDC fee (set by the token creator) and mints a fixed mineAmount of tokens directly to the caller. A per-wallet cooldown and a 24-hour cap prevent any single address from dominating the supply. Mining continues until 95% of the max supply has been minted. Phase 2 — Trading When the last mine call fills the 95% mineable supply, the TokenLauncher automatically calls _graduate(). This mints the remaining 5% as LP reserve tokens to the contract itself and seeds a constant-product AMM (x * y = k) using those tokens plus all accumulated USDC mine fees as initial liquidity. From that point on, anyone can buy and sell via buyTokens and sellTokens — no external DEX needed.

Contract roles

LaunchpadFactory (0x6A3Cf53F0df2A418b6731528aD3CFC1B71dc49D4)

│  createToken(...) → deploys:

├── LaunchToken (ERC-20)
│     • Standard ERC-20 (OpenZeppelin)
│     • Ownership transferred to TokenLauncher on deploy
│     • Only TokenLauncher can call mint()
│     • Stores: maxSupply, imageUri

└── TokenLauncher (miner + AMM)
      Phase 1 (mining):
        • mine(funnyPost) — mint tokens, collect USDC fees
        • claimRefund()  — return USDC fees before graduation
      Phase 2 (trading, post-graduation):
        • buyTokens(minTokensOut) — send USDC, receive tokens
        • sellTokens(tokenAmount, minArcOut) — send tokens, receive USDC
      Views (always available):
        • getMiningProgress(), getTokenPrice()
        • estimateBuy(), estimateSell()
        • getTimeUntilNextMine(), getRemainingDailyAllowance()

Tokenomics summary

ParameterValue
Mineable supply95% of maxSupply (rounded down to a whole multiple of mineAmount)
LP reserve5% of maxSupply, minted to the launcher on graduation
AMM seedingLP reserve tokens + all USDC mine fees accumulated in Phase 1
AMM formulatokensOut = arcIn * tokenReserve / (arcReserve + arcIn)

Network configuration

Add Arc Testnet to your wallet or viem config:
import { defineChain } from 'viem'

export const arcTestnet = defineChain({
  id: 5042002,
  name: 'Arc Testnet',
  nativeCurrency: { name: 'USD Coin', symbol: 'USDC', decimals: 18 },
  rpcUrls: { default: { http: ['https://rpc.testnet.arc.network'] } },
  blockExplorers: { default: { name: 'Arcscan', url: 'https://testnet.arcscan.app' } },
})

Further reading