Reference
Contracts
Every deployed address on X Layer, what each one does, and the parameters they are running today.
Every address below is on X Layer, chain 196, and every one is verified on OKLink. The source is what's deployed, so you can read it instead of taking this page's word for anything.
Launchpad#
| Contract | Address on X Layer |
|---|---|
| LaunchFactory Creates every coin and its curve, holds the launch terms, and runs graduation. This is the contract you call to launch. |
0xfdfCaaF9e744D2C43365a710628469bCAf365491
|
| LaunchAndBuy Creates a coin and buys its curve in a single transaction, so there is no window between the two for anyone to trade against. |
0x24274B859C2B99358A7c9ed1da33EbAb832CadB4
|
| FeeEscrow Holds every recipient's claimable balance. Pays whoever calls claim(), so there is no recipient argument to get wrong. |
0x401100747741364AD16a96D6Ba5724Bf817Cc25F
|
| MemeHook The Uniswap v4 hook every graduated pool shares. Charges the same 1% on swaps and splits it the same way the curve did. |
0x48AB5124B299c4C437eE6B3A03325FF3B9b56044
|
| LaunchLocker Holds the graduated liquidity position. No withdrawal function of any kind. |
0x2de052028A272f77763906A68c5a5372000f4eD9
|
| BuybackVault Holds bought-back supply on a five-year vest, for creators who opt into buyback-and-lock. |
0x9e4ddfC7c772c1C8E055233C08a9E4dBeC31F873
|
| GraduationExecutor Mints the full-range v4 position at graduation and sends the NFT to the locker. |
0xdc306AcBbD096c9266DB712f8737a78596341Bc9
|
| LaunchDeployer Deploys the token and curve pair at their CREATE2 addresses on the factory's behalf. |
0x1aaD1c0363E3D84d1Ad96a8F5A91df353cFC6C1E
|
| GraduationGuard Blocks liquidity being added to a graduated pool outside the launchpad's own position. |
0xC0C31995B318eDA8B5776Cc94192932B39E0cD6f
|
The two you'll actually call are LaunchFactory to launch, and each
coin's own bonding curve to trade. Curves are per coin — find one with
getLaunchedToken(token) on the factory.
Seeded launcher#
The second launcher, and a separate deployment rather than a mode of the first. It opens a coin directly into a Uniswap v3 pool and locks the position — see two ways to launch. It shares the escrow above, so a creator's earnings from both arrive in one balance.
| Contract | Address on X Layer |
|---|---|
| V3LaunchFactory Creates a coin, opens its Uniswap v3 pool, puts the whole supply into it and locks the position, in one transaction. This is the contract you call to launch a seeded coin. |
0x3038604B92fb5ef8FfbdDDae5A5730CA4CAdAf62
|
| V3LaunchLocker Holds every seeded launch's position forever. No withdrawal function of any kind; collectFees() is the only way anything leaves, and it pays the escrow. |
0x1CA8bfe2E20E17cD14518501a203A001a21ecd3c
|
One launch config per quote asset, read with
getLaunchConfig(id) and passed back to launchToken by id.
getLaunchedToken(token) answers for a seeded coin the way the curve
factory's does for a curve coin — the pool, the position id and the quote asset.
Per-coin contracts#
Two contracts are created for every launch, at addresses derived from the creator's account and their chosen salt:
| Contract | What it is |
|---|---|
| SizeLauncherToken | The coin. Fixed-supply ERC-20 with no owner, no mint, no pause and no transfer tax. Carries the logo, description and socials as read-only metadata. |
| SizeBondingCurve | Holds the whole supply and prices every trade until graduation. Where
buy and sell live. |
A seeded launch creates one contract instead of two — there is no curve, because the pool is the market from the first block:
| Contract | What it is |
|---|---|
| SizeV3LauncherToken | The coin. Same fixed-supply, ownerless ERC-20 with the same read-only metadata, plus the launch-window rules: no pool buys at all in the launch block bar the creator's own, and a 5% wallet cap for two blocks after. Both expire and neither can be re-enabled. |
Uniswap v4#
The canonical X Layer deployment. Graduated pools live inside it.
| Contract | Address on X Layer |
|---|---|
| PoolManager Uniswap v4 singleton. Every graduated pool lives inside it. |
0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32
|
| PositionManager Mints the full-range position graduation seeds. |
0xcF1EAFC6928dC385A342E7C6491d371d2871458b
|
| Permit2 Canonical Permit2, used by the position manager. |
0x000000000022D473030F116dDEE9F6B43aC78BA3
|
Uniswap v3#
Also the canonical X Layer deployment. Seeded pools are created here, which is the whole point of them — a pool on this factory is one every v3 indexer already watches.
| Contract | Address on X Layer |
|---|---|
| Factory Canonical Uniswap v3 factory on X Layer. Seeded pools are created here, which is why every v3 indexer sees them without being told. |
0x4B2ab38DBF28D31D467aA8993f6c2585981D6804
|
| PositionManager Mints the one-sided position a seeded launch opens with. |
0x315e413A11AB0df498eF83873012430ca36638Ae
|
| SwapRouter02 What buys and sells a seeded coin. Wraps and unwraps OKB in the same transaction, so a trader never touches WOKB. |
0x4f0C28f5926AFDA16bf2506D5D9e57Ea190f9bcA
|
| QuoterV2 Prices a fill before it is sent, price impact included. |
0xD1b797D92d87B688193A2B976eFc8D577D204343
|
| WrappedNative WOKB. A v3 pool cannot hold native OKB, so an OKB-quoted seeded pool is really a WOKB pool. |
0xe538905cf8410324e03A5A23C1c177a474D59b2b
|
ABIs#
Every ABI as JSON, cut from the compiler output that produced the deployed bytecode. Fetch these rather than pasting a copy into your own repo, where it goes stale without telling you.
All fourteen in one object, keyed by the names used on this page:
/abi/size.json. Or one at a time:
| File | Solidity contract |
|---|---|
/abi/LaunchFactory.json |
SizeLaunchFactory |
/abi/LaunchAndBuy.json |
SizeLaunchAndBuy |
/abi/BondingCurve.json |
SizeBondingCurve — one per coin |
/abi/LauncherToken.json |
SizeLauncherToken — one per coin |
/abi/FeeEscrow.json |
SizeFeeEscrow |
/abi/MemeHook.json |
SizeMemeHook |
/abi/LaunchLocker.json |
SizeLaunchLocker |
/abi/BuybackVault.json |
SizeBuybackVault |
/abi/GraduationExecutor.json |
SizeGraduationExecutor |
/abi/LaunchDeployer.json |
SizeLaunchDeployer |
/abi/GraduationGuard.json |
SizeGraduationGuard |
/abi/V3LaunchFactory.json |
SizeV3LaunchFactory |
/abi/V3LaunchLocker.json |
SizeV3LaunchLocker |
/abi/V3LauncherToken.json |
SizeV3LauncherToken — one per seeded coin |
OKLink carries the same ABI on each verified contract's page, so these files only save you the click. The Uniswap v3 and v4 contracts are canonical deployments — take their ABIs from Uniswap.
Events to index#
Canonical names, exactly as the contracts declare them. A coin's life happens in two places and an indexer has to follow it across both:
- Before graduation, trades are logged by the coin's own bonding
curve. Those addresses are not known ahead of time — they arrive in
TokenLaunched, which is why that is the one event you subscribe to first and everything else follows from it. - After graduation, trades are Uniswap v4 swaps, logged by the
PoolManager singleton and keyed by pool id rather than by token
address.
PoolRegisteredon the hook is what maps a pool id back to a coin. - A seeded coin has neither phase. Its
TokenLaunchedcomes from the V3LaunchFactory and carries the pool address, and every trade after that is that pool's ownSwap— the standard Uniswap v3 event, which is why nothing bespoke is needed to follow one.
Lifecycle and trades#
| Event | Emitted by | What it marks |
|---|---|---|
TokenLaunched | LaunchFactory | A coin exists. Carries its token address, its curve address and its creator. |
CurveBuy | the coin's curve | A buy on the curve — OKB in, tokens out, with the base fee and the creator tax reported separately. |
CurveSell | the coin's curve | A sell on the curve — tokens in, OKB out, same breakdown. |
SnipeTaxCharged | the coin's curve | The launch-window penalty was charged on that trade. Separate from
CurveBuy so a snipe is distinguishable from an ordinary fee. |
CurveCompleted | the coin's curve | The curve took its last trade and closed for good. |
PoolGraduated | LaunchFactory | The Uniswap v4 pool is seeded and its position is locked. From here on, trades are swaps. |
PoolRegistered | MemeHook | Maps the v4 pool id to the coin, its quote token and its creator. |
Swap | Uniswap v4 PoolManager | Every post-graduation trade. Filter by the pool id from
PoolRegistered. |
Transfer | the coin | Standard ERC-20. Holders and balances. |
Fees and earnings#
| Event | Emitted by | What it marks |
|---|---|---|
FeesSwept | the coin's curve | Curve fees pushed out, split protocol / buyback / creator. |
HookFeeCollected | MemeHook | The base fee and the creator tax taken on a graduated swap. |
PoolFeesSwept | MemeHook | Graduated fees pushed out, split the same three ways, plus whatever was locked. |
Credited | FeeEscrow | A recipient's claimable balance went up. |
Claimed | FeeEscrow | A recipient withdrew. |
Locked | BuybackVault | Bought-back supply went under the five-year vest. |
Released | BuybackVault | Vested supply came out. |
The escrow's CreditedToken and ClaimedToken carry the same
thing for a coin quoted in an ERC-20 rather than in native OKB.
Signatures and topics#
Declarations as written in the source, each under its topic0. The hook's
PoolId is a value type over bytes32, which is what it is in the
ABI and what it hashes as.
// ---- SizeLaunchFactory ----------------------------------------------------
// 0x8d4aad4953d0ca700d468f3753aa14432d1b35b43ec6409f051fb6aa43a89607
event TokenLaunched(
address indexed token,
address indexed curve,
address indexed deployer,
address pairToken,
uint256 launchConfigId,
uint256 graduationThreshold
);
// 0x0a44ef75df69c534f43cd6c1aa3ef8983065fe5fe79ef9e79f6494e6f258c259
event PoolGraduated(address indexed token, uint256 positionId, uint256 tokenAmount, uint256 pairTokenAmount);
// ---- SizeBondingCurve, one per coin ---------------------------------------
// 0xec36bf571f136799e8dc0b0b8bea4b04d8bd3d43de838aab0d5fc21d4cbfc455
event CurveBuy(
address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax
);
// 0x8113d738abdcb6b38357e9d53a54a7157861a09031b453651f0fe7fe151f59df
event CurveSell(
address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax
);
// 0x3bc39a5562b28f5fe8f36cecabfbaa12bb969acf05717994709225fc412a9934
event SnipeTaxCharged(address indexed recipient, uint256 amount);
// 0xf8d37a90738ae063b8b8058b66f5880cf3cf7ab0c5d4fa78219696591dfbfb67
event CurveCompleted(address recipient, uint256 quoteOut, uint256 tokenOut);
// 0x9f4cd7c4ed99d08a797804560c9c5d71d2cf7e101f2e3b5e7d1ca8a24c370e4f
event FeesSwept(uint256 protocolAmount, uint256 buybackAmount, uint256 creatorAmount);
// ---- SizeLauncherToken, one per coin --------------------------------------
// 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
event Transfer(address indexed from, address indexed to, uint256 value);
// ---- SizeMemeHook ---------------------------------------------------------
// 0x01bf263a1db1652580721573296e1a1fa70b3d4c87f61d02a69c4e1109d2d573
event PoolRegistered(PoolId indexed poolId, address memecoin, address quoteToken, address creator);
// 0xc532c43b3423e14ef72748f1c8291238829ca0af8ba9b67975ad1483485a4b4d
event HookFeeCollected(PoolId indexed poolId, address currency, uint256 feeAmount, uint256 taxAmount);
// 0x2f3c43579b9064b6f28edcf41608f3815792d274a56afe024359703cb4ea9b30
event PoolFeesSwept(
PoolId indexed poolId,
uint256 protocolAmount,
uint256 buybackAmount,
uint256 creatorAmount,
uint256 tokensLocked
);
// ---- SizeFeeEscrow --------------------------------------------------------
// 0x4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d5
event Credited(address indexed recipient, address indexed depositor, uint256 amount);
// 0xd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a
event Claimed(address indexed recipient, uint256 amount);
// ---- SizeBuybackVault -----------------------------------------------------
// 0x967ad762aa9070ada8db64577288e214771e89667066ae38e8750cb8a86c5429
event Locked(address indexed token, address indexed depositor, uint256 amount, uint256 newVestingStart);
// 0x82e416ba72d10e709b5de7ac16f5f49ff1d94f22d55bf582d353d3c313a1e8dd
event Released(address indexed token, uint256 creatorAmount, uint256 protocolAmount);
// ---- Uniswap v4 PoolManager -----------------------------------------------
// 0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f
event Swap(
PoolId indexed id,
address indexed sender,
int128 amount0,
int128 amount1,
uint160 sqrtPriceX96,
uint128 liquidity,
int24 tick,
uint24 fee
);
Live parameters#
What the factory is set to today. These are protocol settings and can change for future launches — a coin freezes the terms it launched under, so a change never reaches back to one already trading.
| Parameter | Value | What it is |
|---|---|---|
| Chain | X Layer (chain 196) | Where every contract lives. |
| Quote asset | OKB | Native OKB. Coins trade against it from the first second. |
| Supply | 1,000,000,000 | Fixed at launch. Nothing is minted afterwards and nothing is reserved for a team. |
| Launch fee | 0.01 OKB | Paid once, when the coin is created. |
| Base trade fee | 1% | Charged on every buy and sell, before and after graduation. |
| Phantom reserve | 30 OKB | The virtual OKB that sets the opening price. Nobody deposits it. |
| Graduation threshold | 75 OKB | Real OKB the curve takes in before it closes. |
| Pool tick spacing | 200 | The graduated Uniswap v4 pool. |
| Fee term | Value |
|---|---|
| Protocol share of the base fee | 30% |
| Creator share of the base fee | 70% |
| Buyback share, when enabled | 50% of the creator's share |
| Maximum creator tax | 10% |
| Hard cap, base fee + creator tax | 20% |
| Snipe tax, opening rate | 99% |
| Snipe tax window | 15 seconds |
| Buyback vest | 5 years |
Network#
Where this came from#
These contracts are a port of Pons v2, which is MIT licensed and verified on Robinhood Chain. The mechanics are the original's. What changed is the denomination — repriced from ETH to OKB, keeping the ratio that gives the curve its shape — and the name.
Read this before you size a position
These contracts are not audited. They're verified, and the source is a port of a deployed and reviewed original, but neither of those is an audit. The launchpad's mechanics are what these docs describe. The coins launched on it are vetted by nobody, and most of them will go to zero.