PerpFun
Connect wallet

Architecture

Four contracts, one chain, no proxies.


Chain

Robinhood Chain, id 4663. The quote asset is USDG, 6 decimals, at 0x5fc5360d0400a0fd4f2af552add042d716f1d168.

Contracts

AddressWhat it does
MemeLauncherV30x78490fe2c9A7Cef1260a5AC7F456F79442ddA0Aelaunches coins, opens their pool, performs the bond
PermanentLockerV30x09420C610cA8C1d782c8a908b33937B14FF5807Fholds every position NFT forever, books and pays fees
NonfungiblePositionManager0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3canonical Uniswap V3
SwapRouter020xCaf681a66D020601342297493863E78C959E5cb2canonical Uniswap V3

None of them is behind a proxy. What is deployed is what runs, and it cannot be swapped out from under you.

The launcher is the registry

allCoins on the launcher contains exactly the coins it created, in order, and nothing else. The site's board reads it directly.

That has two consequences worth having. Coins from older stacks and abandoned experiments cannot appear at all — there is no deny-list to maintain and no way for a stale index to resurrect one. And a coin is listable in the block it launches, with no indexing lag between the transaction and the board.

What is immutable

Total supply1,000,000,000, minted once in the constructor
Fee splitCREATOR_SHARE_BPS, a constant with no setter
Bond thresholdbondBackingUsd, immutable on the launcher
Protocol treasuryimmutable on the locker
Creator of a coinwritten at lock, no setter
The liquidity lockabsence of any withdrawal function

Changing any of these means deploying new contracts at new addresses. There is no admin action that alters them in place, and no upgrade path that could.

What is not

The protocol owner can point the front at a different launcher, and can choose which markets are offered on the launch form. Neither reaches an existing coin: a coin already launched keeps its pool, its lock, its fee split and its creator whatever the site later decides to display.

Reading it yourself

Every number this documentation states is a public call. Where a figure could change with a future deployment — the bond threshold, the fee split — the docs name the getter rather than the value, so a page that goes stale is a page that stopped being useful rather than one that started lying.