Liquid Protocol deploys ERC-20 tokens on Base with Uniswap V4 pools, locked liquidity, and configurable fee distribution.
Every token deployed through Liquid Protocol gets 100 billion supply (18 decimals), a Uniswap V4 pool, and permanently locked liquidity with configurable reward splits.
The protocol supports two hook types: Dynamic Fee (adaptive fees based on volatility) and Static Fee (fixed fee rate). Both integrate MEV protection via block delay and sniper auction modules.
Extensions allow tokens to include dev buys, vault lockups with linear vesting, and merkle-tree airdrops — all configured at deployment time.
Pools pair with WETH by default or DIEM(an agent-economy payment token) when explicitly requested at deploy. Three deploy paths: this site’s /launch form, the SDK, or the @launchonliquid bot on Farcaster + X.
Mention @launchonliquid on Farcaster or @launchonliquid on X with a $TICKER + name. The bot deploys the token on Base and replies with the contract address.
@launchonliquid launch $MYTKN called My Token
Cast / tweet syntax
$TICKER — required. 1–32 chars, must start with a letter.called X / named X — set the token name (defaults to the ticker).paired in diem — pair the pool with DIEM instead of the default WETH. Also accepts paired with diem / paired $DIEM.to 0xAddress — route tokenAdmin + fee recipient to a specific wallet (override).vault 20% — lock a percentage of supply with linear vesting (max 90%).vault for 30 days — set the lockup duration (min 7 days, default 7).Anti-spam: bot only replies to original posts (not retweets/recasts), enforces per-user daily limits, and uses a launch-intent classifier to ignore narrative posts that happen to contain a $TICKER.
liquid-sdk 1.7.4+ on npm. Single LiquidSDK class, Base only (chain 8453).
Default WETH-paired deploy
npm install liquid-sdk viem
import { LiquidSDK } from "liquid-sdk";
import { createPublicClient, createWalletClient, http } from "viem";
import { base } from "viem/chains";
const publicClient = createPublicClient({ chain: base, transport: http() });
const walletClient = createWalletClient({ chain: base, transport: http(), account });
const sdk = new LiquidSDK({ publicClient, walletClient });
const result = await sdk.deployToken({
name: "My Token",
symbol: "MTK",
tokenAdmin: account.address,
rewardAdmins: [account.address],
rewardRecipients: [account.address],
});
console.log(result.tokenAddress, result.txHash);DIEM-paired deploy
import { LiquidSDK, EXTERNAL, createLiquidPositionsUSD } from "liquid-sdk";
// Anchor the 5-position layout to land at a target starting MC.
// pairedTokenPriceUsd should be the live DIEM/USD price at deploy time.
const positions = createLiquidPositionsUSD(20_000, diemPriceUsd);
await sdk.deployToken({
name: "Agent Token",
symbol: "AGENT",
pairedToken: EXTERNAL.DIEM,
tickIfToken0IsLiquid: positions.tickIfToken0IsLiquid,
tickLower: positions.tickLower,
tickUpper: positions.tickUpper,
positionBps: positions.positionBps,
tokenAdmin: account.address,
rewardAdmins: [account.address],
rewardRecipients: [account.address],
});Full SDK reference on GitHub or via the liquid-sdkpackage’s typed exports.
Migrate a Solana $CLANKER (or other Bags token) to Base. Holders connect their Solana wallet, deposit the old token, and claim the new Liquid-deployed token at a fixed redemption ratio.
The relaunch flow is fully user-signed — no platform custody. Old supply burns to 0xdead; new supply is locked in a Base contract and claimed proportionally as users redeem.
Token detail pages render as Farcaster Mini Apps. When a token URL is embedded in a cast, Farcaster clients display a tappable card with the token’s image, ticker, and name; tapping opens the page inside the Farcaster app.
The page emits both the canonical fc:miniapp meta tag and the legacy fc:frame fallback per the Mini App spec. The domain manifest lives at /.well-known/farcaster.json.
The @launchonliquid bot attaches the token URL on its reply casts so the Mini App card renders inline in the deploy thread.
All contracts on Base (chain ID 8453).
| Liquid (Factory) | 0x04F1a284168743759BE6554f607a10CEBdB77760 |
| LiquidFeeLocker | 0xF7d3BE3FC0de76fA5550C29A8F6fa53667B876FF |
| LiquidPoolExtensionAllowlist | 0xb614167d79aDBaA9BA35d05fE1d5542d7316Ccaa |
| LiquidHookDynamicFeeV2 | 0x80E2F7dC8C2C880BbC4BDF80A5Fb0eB8B1DB68CC |
| LiquidHookStaticFeeV2 | 0x9811f10Cd549c754Fa9E5785989c422A762c28cc |
| LiquidLpLockerFeeConversion | 0x77247fCD1d5e34A3703AcA898A591Dc7422435f3 |
| LiquidAirdropV2 | 0x1423974d48f525462f1c087cBFdCC20BDBc33CdD |
| LiquidVault | 0xdFCCC93257c20519A9005A2281CFBdF84836d50E |
| LiquidUniv4EthDevBuy | 0x5934097864dC487D21A7B4e4EEe201A39ceF728D |
| LiquidUniv3EthDevBuy | 0x376028cfb6b9A120E24Aa14c3FAc4205179c0025 |
| LiquidPresaleEthToCreator | 0x3bca63EcB49d5f917092d10fA879Fdb422740163 |
| LiquidPresaleAllowlist | 0xCBb4ccC4B94E23233c14759f4F9629F7dD01f10B |
| LiquidSniperAuctionV2 | 0x187e8627c02c58F31831953C1268e157d3BfCefd |
| LiquidMevDescendingFees | 0x8D6B080e48756A99F3893491D556B5d6907b6910 |
| LiquidSniperUtilV2 | 0x2B6cd5Be183c388Dd0074d53c52317df1414cd9f |
| Uniswap V4 Pool Manager | 0x498581fF718922c3f8e6A244956aF099B2652b2b |
| WETH | 0x4200000000000000000000000000000000000006 |
| Universal Router | 0x6fF5693b99212Da76ad316178A184AB56D299b43 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
| Fee Denominator | 1,000,000 (Uniswap V4 fee unit) |
| Protocol Fee | 200,000 (20% of LP fees) |
| Max LP Fee | 100,000 (10%) |
| Max MEV Fee | 800,000 (80%) |
| BPS Denominator | 10,000 |
| Token Supply | 100,000,000,000 (100B, 18 decimals) |
| Max Extensions | 10 per token |
| Max Extension BPS | 9,000 (90% of supply) |
Socials