Archemist Docs
Back to App
v2.0 • Built on Arc Network™

Introduction

ArchemistV2 is a fixed-supply launch protocol on Arc. Every launch creates the token, opens its TOKEN/USDC Uniswap V3 market, mints the launch liquidity position, and transfers that position to the Archemist Locker in one transaction.

Immediate Liquidity

Tokens trade directly against system USDC as soon as the launch transaction confirms.

Creator-Locked LP

The launch position is held by the Archemist Locker and cannot be withdrawn by the token creator.


How ArchemistV2 Works

ArchemistV2 uses one fixed launch configuration. Creators choose the token metadata, fee administration wallets, and optional initial buy; the supply, starting market value, V3 fee tier, and launch liquidity policy are enforced by the Factory.

Launch Configuration

STARTING FDV
≈ $4,995.43
TOKEN SUPPLY
1,000,000,000
V3 FEE TIER
1%
LP FEE SPLIT
50 / 50
  • Direct market: Trading begins immediately in the canonical TOKEN/USDC V3 pool.
  • Fixed price policy: Creators cannot configure a different starting market value.
  • Fee allocation: Collected LP fees are credited 50% to protocol and 50% to the creator recipient.
  • Canonical identity: Duplicate names and symbols are valid; integrations must use token and pool addresses.
USDC units on Arc

Native USDC uses 18 decimals for gas and payable launch value. System ERC20 USDC uses 6 decimals at 0x3600000000000000000000000000000000000000 for V3 approvals, swaps, pool accounting, and fee claims.


Launch a Token

Launches use the Factory's single public entry point: createToken(CreateParams). The deployment fee is 0.1 native USDC, plus any optional initial buy.

Launch Parameters

name / symbol

ERC20 display metadata. It does not need to be globally unique.

salt

Creator-scoped CREATE2 salt used to derive the token address.

minTokensForCreatorBuy

Minimum token output for the optional initial buy.

creatorFeeAdmin

Wallet authorized to update future creator fee roles.

creatorFeeRecipient

Wallet credited with newly collected creator LP fees.

The transaction sender, fee admin, and fee recipient may be different addresses. Updating the recipient affects future collections only; previously credited balances remain with the old recipient.

Launch Example

Convert the six-decimal creator buy to native eighteen-decimal units, add the deployment fee, and send the combined value with createToken.

launch-v2.ts
import { parseEther, parseUnits } from "viem";

const creatorBuyUsdc6 = parseUnits("100", 6);
const nativeValue = parseEther("0.1") + creatorBuyUsdc6 * 10n ** 12n;

const hash = await walletClient.writeContract({
  address: ARCHEMIST_V2_FACTORY,
  abi: factoryAbi,
  functionName: "createToken",
  args: [{
    name: "Example Token",
    symbol: "EXAMPLE",
    salt,
    minTokensForCreatorBuy,
    creatorFeeAdmin: account,
    creatorFeeRecipient: feeReceiver,
  }],
  value: nativeValue,
});

// Decode TokenCreated from the confirmed receipt.
// token, pool and positionId are the canonical identifiers.

Receipt Mapping

Decode TokenCreated from the confirmed receipt. Store the emitted token, pool, and position ID as the canonical launch identifiers.

TokenCreated.sol
event TokenCreated(
  address indexed token,
  address indexed creator,
  address indexed pool,
  uint256 positionId,
  address creatorFeeRecipient,
  uint24 poolFee,
  int24 normalizedTick,
  int24 actualPoolTick,
  uint160 initialSqrtPriceX96,
  uint256 tokensInPosition,
  uint256 creatorBuyNative,
  uint256 creatorBuyTokens
);

Fees & Custody

The Locker holds each launch position and accounts for LP fees without giving creators control over the NFT itself.

Creator Roles

Fee Admin

Controls future updates to the creator fee administrator and creator fee recipient.

Fee Recipient

Receives the creator's 50% share when new LP fees are collected and credited.

Collect & Claim

collectFees(token)

Collects fees from the launch position and credits protocol and creator balances 50:50.

claimable(account, asset)

Returns an account's credited balance for either launch token or system USDC.

claim(asset, to)

Transfers only the caller's credited balance to the requested recipient.

LP Custody

Launch position

The Uniswap V3 NFPM position created at launch remains in Archemist Locker custody. Token creators cannot remove the launch liquidity or transfer its NFT.


Protocol Reference

Canonical Arc deployments and the minimal interfaces needed for launches, V3 market discovery, swaps, and fee claims.

Network & Contracts

LIVE

The launch Factory and Locker are ArchemistV2 contracts. V3 infrastructure uses the canonical Arc deployments listed below.

Arc Mainnet · Chain 5042
ArchemistV2 Factory0x926629E3b2069fF50773400C6f54Cc11B47Ee0F4
ArchemistV2 Locker0x621ea0c825936329B5EB57e6aF0E1BF596F69f9F
System USDC (ERC20 · 6 decimals)0x3600000000000000000000000000000000000000
Uniswap V3 Factory0xf0db7b58379503491d857dB50AC9ece64c653918
Nonfungible Position Manager0x39654a85a4c05127f5fd6ed22caec077a0fb1377
SwapRouter020x53bf6b0684ec7ef91e1387da3d1a1769bc5a6f77
QuoterV20x7dfd4f31be6814d2906bde155c3e1b146eac1468
Arc Testnet · Chain 5042002
ArchemistV2 Factory0xfc07569be3FF9405F4065ea3ddf839c8246C9bc6
ArchemistV2 Locker0x488bAa0EDE8782dBf450edB081e2e9704DAf8f30
System USDC (ERC20 · 6 decimals)0x3600000000000000000000000000000000000000
Uniswap V3 Factory0x32440A432500cB49ffAAF8AB18749D0048fc6aA2
Nonfungible Position Manager0xf506Eeb2dD5eBDc64e615607c0e5668698A17dFF
SwapRouter020x0df09F620FcBF56F60265C21170DD84438d51867
QuoterV20xDD119dd34376BDFfE733fe87471Aa9aB159D8F1a

Contract Interfaces

Integrations launch and discover markets through the Factory, then use the Locker for creator role management and fee accounting.

Factory

Creates tokens and exposes the canonical pool, LP position, fee tier, ticks, and token ordering.

createTokenlaunchInfoForToken

Locker

Holds launch positions, splits collected fees, exposes claimable balances, and manages creator roles.

collectFeesclaimupdateCreatorFeeRecipient
Factory ABIView code
ArchemistV2USDCFactory.json
[
  {
    "type": "function",
    "name": "createToken",
    "stateMutability": "payable",
    "inputs": [{ "name": "p", "type": "tuple", "components": [
      { "name": "name", "type": "string" },
      { "name": "symbol", "type": "string" },
      { "name": "salt", "type": "bytes32" },
      { "name": "minTokensForCreatorBuy", "type": "uint256" },
      { "name": "creatorFeeAdmin", "type": "address" },
      { "name": "creatorFeeRecipient", "type": "address" }
    ]}],
    "outputs": [
      { "name": "tokenAddress", "type": "address" },
      { "name": "pool", "type": "address" },
      { "name": "positionId", "type": "uint256" }
    ]
  },
  {
    "type": "function",
    "name": "launchInfoForToken",
    "stateMutability": "view",
    "inputs": [{ "name": "token", "type": "address" }],
    "outputs": [
      { "name": "creator", "type": "address" },
      { "name": "pool", "type": "address" },
      { "name": "positionId", "type": "uint256" },
      { "name": "poolFee", "type": "uint24" },
      { "name": "normalizedTick", "type": "int24" },
      { "name": "actualPoolTick", "type": "int24" },
      { "name": "initialSqrtPriceX96", "type": "uint160" },
      { "name": "tokenIsToken0", "type": "bool" }
    ]
  }
]
Locker ABIView code
ArchemistV2USDCLocker.json
[
  "function claimable(address account,address asset) view returns (uint256)",
  "function collectFees(address token) returns (uint256 amount0,uint256 amount1)",
  "function claim(address asset,address to) returns (uint256 amount)",
  "function updateCreatorFeeRecipient(address token,address newRecipient)",
  "function updateCreatorFeeAdmin(address token,address newAdmin)"
]

DEX Routing

Token-page trading reads launchInfoForToken(token).poolFee. Current Archemist launch pools use fee tier 10000. Approve Router02 against the six-decimal system USDC interface and do not send native value to Router02.

trade-launch-pool.ts
const amountIn = parseUnits("100", 6); // linked ERC20 USDC

await approve(SYSTEM_USDC, SWAP_ROUTER_02, amountIn);
await router.exactInputSingle({
  tokenIn: SYSTEM_USDC,
  tokenOut: launchToken,
  fee: launchInfo.poolFee, // current launch tier: 10000 (1%)
  recipient: account,
  amountIn,
  amountOutMinimum,
  sqrtPriceLimitX96: 0n,
});

// Do not send native value to Router02.
Generic routing

The generic swap page compares fee tiers 100, 500, 3000, and 10000. It also evaluates two-hop routes through system USDC when neither endpoint is USDC.

Route discovery outlineView code
find-best-v3-route.ts
const feeTiers = [100, 500, 3000, 10000];

// Compare every viable direct path.
// If neither endpoint is system USDC, also compare:
// tokenIn -> systemUSDC -> tokenOut
// using QuoterV2.quoteExactInput(encodedPath, amountIn).
// Submit the best encoded path with Router02.exactInput.

Generic V3 Liquidity

Generic liquidity positions are normal user-owned NFPM NFTs. Users select their fee tier and tick range, then manage those positions through the standard V3 position manager. They are separate from Archemist launch positions held by the Locker.

Arc is a trademark of Circle Internet Group, Inc. and/or its affiliates.