Unipump Protocol Documentation

Unipump is a permissionless launchpad for memecoins on Ethereum, built on Uniswap v4 hooks. This document covers protocol architecture, deployed contracts, fee mechanics, and integration details for developers.

Overview

Every Unipump launch goes through a single Factory transaction that:

  1. Clones an immutable LaunchToken implementation via EIP-1167 minimal proxies
  2. Initializes the clone with a creator-supplied name and symbol
  3. Mints the entire 1,000,000,000 fixed supply
  4. Creates a Uniswap v4 pool for the token paired with ETH
  5. Adds 100% of the supply as single-sided full-range liquidity
  6. Burns the resulting LP NFT to 0x000000000000000000000000000000000000dEaD
  7. Registers the pool with the Unipump FeeHook for perpetual fee collection
  8. Executes the creator's optional starter buy via the Universal Router

All steps happen atomically in one transaction. There is no graduation, no bonding curve, no migration step.

Deployed Contracts

Ethereum Mainnet (chain ID 1)

ContractAddress
LaunchToken implementation0xd5963478a44f7EcFa97C7e78AC2f7907e38611A6
FeeHook0xEDC3A1688b151C69a353F39fb2ba7Ef2D7002044
Factory0x610cA3907d02031d0B584eE9a167Ab922bC67B7E

Platform wallet (immutable, receives platform-side fees): 0x1298975086908FA8eAB165d4e30892e3Df60C9CE

All three contracts are verified on Etherscan. Tokens launched through the Factory are deployed as EIP-1167 clones of the LaunchToken implementation; Etherscan auto-detects them as minimal proxies and displays the implementation source.

Token Parameters

Every token launched on Unipump has identical fundamentals:

  • Total supply: 1,000,000,000 (1 billion), fixed
  • Decimals: 18
  • Mintable: No, the entire supply is minted at launch
  • Burnable: No
  • Pausable: No
  • Upgradeable: No
  • Owner: None — the token has no admin

The only creator-configurable parameters are the name, symbol, and the per-pool fee in basis points (between 50 and 1000, i.e. 0.5% to 10%).

Pool Configuration

ParameterValue
AMMUniswap v4
Pool currenciesETH (currency0) + token (currency1)
Tick spacing60
Initial tick207240
Liquidity rangeFull range
Liquidity providerFactory at launch, then nobody (LP NFT burned)
HookUnipump FeeHook (singleton)
Hook permissions`BEFORE_INITIALIZE

The starting price is determined by the initial tick. With the 1B supply at tick 207240, every fresh launch starts at approximately $2,310 fully-diluted market cap (subject to ETH price).

Fees

Unipump collects two distinct fees.

Launch Fee

A flat 0.002 ETH per launch, paid by the creator at the time of the launch transaction. Routed directly to the platform wallet.

Trading Fee (Hook Fee)

Set per-pool by the creator at launch. Range: 50 to 1000 basis points (0.5% to 10%). Default in the UI: 100 bps (1%).

This fee is collected by the FeeHook during afterSwap from the swap's unspecified output currency. The collected amount is split 60/40 between the creator and the platform.

RecipientShare
Creator60% of the trading fee
Platform40% of the trading fee

The split is constant across all pools and cannot be changed.

Fee Currencies

The fee always comes from the unspecified side of a swap:

  • Buy (exact-input ETH → token): fee is denominated in the token
  • Sell (exact-input token → ETH): fee is denominated in ETH
  • Exact-output swaps: fee is denominated in whichever currency the user did not fix

This means each pool accumulates fees in both currencies over time.

Claiming

Fees accumulate in the FeeHook contract until claimed.

Creators claim via:

function claimCreatorFees(
  bytes32 poolId,
  address currency,
  address recipient
) external

currency = 0x0000...0000 claims the ETH side. Passing the token address claims the token side. recipient = 0x0000...0000 routes payment to the caller (the creator). Only the registered creator can call.

Platform fees are swept via:

function sweepPlatformFees(
  bytes32 poolId,
  address currency
) external

This function is permissionless — anyone can pay the gas — but the destination is hardcoded to the immutable platform wallet, so funds always end up in the right place.

Architecture

Factory

The Factory is the only contract creators interact with directly. It exposes:

function createToken(
  string calldata name,
  string calldata symbol,
  uint16 hookFeeBps,
  uint256 devBuyMinOut
) external payable returns (address token, bytes32 poolId)

msg.value covers the launch fee plus any optional starter buy amount. Emits TokenLaunched(address token, address creator, string name, string symbol, uint16 hookFeeBps, bytes32 poolId, ...).

LaunchToken

A minimal OpenZeppelin ERC-20 with a fixed 1B supply. Deployed as an EIP-1167 clone per launch. The master implementation is locked using a sentinel pattern so it can never be initialized directly.

Name and symbol are stored as overrides because the underlying OpenZeppelin ERC-20 takes them as constructor arguments and clones share constructor state with the implementation.

FeeHook

A singleton Uniswap v4 hook used by every Unipump pool. Responsible for:

  • Validating that the pool is registered (rejects unregistered pools at beforeInitialize)
  • Skimming the trading fee from the unspecified swap output during afterSwap
  • Splitting the fee 60/40 and crediting the per-pool, per-currency mappings
  • Allowing creators to claim their share and the platform to sweep its share

The FeeHook address itself encodes the required hook permission flags in its lowest 14 bits — this is enforced by the Uniswap v4 protocol. Mining the address with the correct flags is part of the deployment script.

Storage Layout

Two key mappings:

mapping(PoolId => mapping(Currency => uint256)) public creatorFees;
mapping(PoolId => mapping(Currency => uint256)) public platformFees;

Both are public and readable. The profile and claim pages query them directly to display pending balances.

Events

For indexers and integrations:

// Factory
event TokenLaunched(
  address indexed token,
  address indexed creator,
  string name,
  string symbol,
  uint16 hookFeeBps,
  bytes32 poolId
);

// FeeHook
event PoolRegistered(
  bytes32 indexed poolId,
  address indexed creator,
  uint16 feeBps
);

event FeesAccrued(
  bytes32 indexed poolId,
  address indexed currency,
  uint256 creatorAmount,
  uint256 platformAmount
);

event CreatorFeesClaimed(
  bytes32 indexed poolId,
  address indexed currency,
  address indexed recipient,
  uint256 amount
);

event PlatformFeesClaimed(
  bytes32 indexed poolId,
  address indexed currency,
  uint256 amount
);

Integration Notes

Trading Unipump Tokens

Any Uniswap v4 interface or aggregator that supports custom hooks can route swaps through Unipump pools. The pool's PoolKey is:

  • currency0: 0x0000000000000000000000000000000000000000 (ETH)
  • currency1: the token address
  • fee: 0x800000 (dynamic / hook-controlled)
  • tickSpacing: 60
  • hooks: the Unipump FeeHook address

The official Uniswap interface at app.uniswap.org supports v4 pools natively.

Reading Fee Balances

To check pending creator fees for a given pool and currency:

uint256 ethClaimable   = feeHook.creatorFees(poolId, address(0));
uint256 tokenClaimable = feeHook.creatorFees(poolId, tokenAddress);

To check pending platform fees: same call against platformFees.

Indexing

The reference indexer is built with Ponder and listens for TokenLaunched from the Factory. Source for the public indexer is open and can be deployed against any RPC.

Compiler and Build Settings

SettingValue
Solidity version0.8.30 (LaunchToken, Factory), 0.8.26 (FeeHook)
EVM versioncancun
Optimizerenabled, 1,000,000 runs
viaIRtrue
Errorscustom errors only (no string reverts)

These settings match what's verified on Etherscan.

Security Posture

  • No admin keys. No contract has an owner, pauser, or upgrader.
  • No proxy upgradeability. The LaunchToken master is the only proxy pattern (EIP-1167 minimal proxies for clones), and minimal proxies are not upgradeable.
  • Immutable parameters. Platform wallet, fee split, and pool configuration are all constructor-immutable.
  • Locked LP. Initial LP NFT is burned to 0xdEaD.
  • Pull-based claims. Funds never auto-push out of the FeeHook — claims are explicit, reducing reentrancy and griefing surface.

A formal third-party audit is in progress before public mainnet announcement.

Links

Disclaimer

Smart contracts carry risk. The Unipump team makes no guarantees about the value, performance, or behavior of any token launched through the protocol. Use at your own risk.