Architecture
A handful of contracts of ours, one chain, one perpetuals venue, no proxies.
Chain
Arc mainnet, chain id 5042 — Circle's layer-1. Blocks come about every half second and are final in under a second (there are no reorgs to wait out). Timestamps have one-second resolution, so several blocks can share one.
The quote asset is USDC, Circle's dollar, at 0x3600000000000000000000000000000000000000 with 6 decimals. On Arc USDC is also the gas token: a wallet's native balance (shown with 18 decimals) and its USDC token balance (6 decimals) are the same dollars. There is no second coin to hold for gas and no wrapped native token: Uniswap's periphery contracts on Arc point theirs at a stub that reverts, and nothing in this stack uses one. Verified sources are on Arc's explorer, a Blockscout instance.
Contracts
Not deployed on Arc yet. This table is filled in, with the deployment block, when the contracts go live; until then, treat any address presented as Arc Perp's as unverified.
| Address | What it does | |
|---|---|---|
MemeLauncherV3 | published at deployment | launches coins (launch), opens their pool, performs the bond |
PermanentLockerV3 | published at deployment | holds every position NFT forever, books and pays fees |
LTFactory | published at deployment | lists the markets, deploys one vault + one NAV oracle per tracker, routes each to its edgeX market and hedge wallet |
LtUsdcLiquidityManager | published at deployment | keeps each tracker's USDC reference pool centred on NAV |
NavBatchRelay | published at deployment | posts the keeper's signed NAVs to every tracker's oracle in one transaction |
Each tracker is an LTVault (the ERC-20 itself, holding its USDC) with its own NAVOracle, both created by the factory. None of these is behind a proxy. What is deployed is what runs, and it cannot be swapped out from under you.
Canonical Uniswap on Arc
| Address | |
|---|---|
UniswapV3Factory | 0xf0db7b58379503491d857db50ac9ece64c653918 |
NonfungiblePositionManager | 0x39654a85a4c05127f5fd6ed22caec077a0fb1377 |
SwapRouter02 | 0x53bf6b0684ec7ef91e1387da3d1a1769bc5a6f77 |
QuoterV2 | 0x7dfd4f31be6814d2906bde155c3e1b146eac1468 |
V4 PoolManager (platform token only) | 0x8366a39cc670b4001a1121b8f6a443a643e40951 |
Fee tiers enabled on the V3 factory: 0.01%, 0.05%, 0.3% and 1%. A coin's pool uses the 1% tier (spacing 200); a tracker's USDC reference pool uses 0.05% (spacing 10). Everything is paid and received in USDC; there is no second leg through another asset.
The venue
The position behind a tracker lives on edgeX (V2), an order-book perpetuals exchange whose matching and accounts run on its own chain, EDGE Chain. Its markets are quoted and margined in USDC. A smart contract cannot own an edgeX account, so a tracker's position sits in an edgeX account of its own, held by the protocol's hedge wallet — a plain wallet whose address the vault stores as its hedgeFunder, the only address the vault can send hedge money to.
On Arc the venue is reached through one contract, EdgexBridge at 0x61A7EBc69A34e72005a195B42b5d5577C20032aD: the hedge wallet deposits through it, and it pays withdrawals out — to the tracker's vault, never to the wallet. The bridge belongs to edgeX and is controlled by edgeX's 3-of-5 multisig, which can pause it, upgrade it and move its funds. The exchange itself is not on Arc, so nothing about a position can be read from Arc's state. See The hedge book.
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 supply | 1,000,000,000, minted once in the constructor |
| Fee split | CREATOR_SHARE_BPS = 7000, a constant with no setter |
| Pool fee | POOL_FEE = 10000 (1%), a constant on the launcher |
| Bond threshold | bondBackingUsd = 15,000 USDC, immutable on the launcher |
| Seed floor | minSeedUsdc = 1 USDC, immutable on the launcher |
| Reference-pool floor | minRefPoolUsdc = 500 USDC, immutable on the launcher |
| Leverage ceiling | MAX_LEVERAGE = 5, a constant on the factory |
| Protocol treasury | immutable on the locker |
| Creator of a coin | written at lock, no setter |
| The liquidity lock | absence 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, list or delist the markets the launch form offers (LTFactory.setUnderlying, with the edgeX market id and the leverage a position can hold there), and, on a tracker's vault, change its hedge wallet or cut it off (setHedgeFunder, where address(0) stops every outflow), pause it, and adjust its oracle, its risk parameters and its fees within on-chain caps — the full list is in Risks & security. None of these reaches an existing coin's pool: a coin already launched keeps its pool, its lock, its fee split and its creator whatever the site later decides to display or whatever happens to the keeper.
Reading it yourself
Every number this documentation states about our contracts is a public call. Where a figure could change with a future deployment — the bond threshold, the seed floor, the fee split — the docs name the getter alongside the value, so you can check the live contract rather than a page that may have gone stale. The edgeX side is read from edgeX's own public API and account pages, not from Arc.