Launch a leveraged trading market for any Solana token in 60 seconds. Up to 20x. Coin-margined. Fully on-chain.
Pick a token, set your parameters, deploy. Start earning trading fees in under a minute.
Deploy a permissionless perpetual futures market for any SPL token. Configure leverage, seed liquidity, and start earning 8% of all trading fees.
LeviantPerp is a permissionless perpetual futures engine on Solana. Anyone can launch a leveraged trading market for any SPL token — no gatekeepers, no applications, no delays.
Launching a market on LeviantPerp takes three steps:
Choose any SPL token with on-chain liquidity on PumpSwap or Raydium. Paste the token mint address into the Launch Market interface.
Set the maximum leverage (1-20x), base spread (in basis points), and seed liquidity amount. Higher seed liquidity means less slippage for traders.
Sign the transaction with your wallet. The market goes live in ~30 seconds. You earn 8% of every trade fee — forever, with no cap.
LeviantPerp uses a Virtual Automated Market Maker (vAMM) for price discovery and trade execution. Unlike traditional AMMs, the vAMM doesn't hold real tokens in the pool — it uses virtual reserves to track price.
k = base_reserve × quote_reserve // Price calculation mark_price = quote_reserve / base_reserve // Swap output (buying base / going long) new_quote = quote_reserve + input_amount new_base = k / new_quote base_out = base_reserve - new_base
Every trade on LeviantPerp incurs a fee based on the market's base spread. Fees are automatically split between three recipients:
Fees are charged on both opening and closing a position. The base spread is set by the market creator during deployment (default 30 bps = 0.3%).
Traders can open long or short positions with configurable leverage on any active market.
side: Long | Short collateral: Amount of tokens deposited as margin leverage: 1x to max_leverage (set by market) size: collateral × leverage (notional) entry: Calculated from vAMM swap output liq_price: Auto-calculated based on leverage
// Long position pnl = size × (current_price - entry_price) / entry_price // Short position pnl = size × (entry_price - current_price) / entry_price // Payout on close payout = max(0, collateral + pnl) - closing_fee
Positions are liquidated when the remaining margin falls below the maintenance margin requirement.
maintenance_margin = 5% of position size // Position is liquidatable when: collateral + unrealized_pnl ≤ maintenance_margin // Liquidation price (Long): liq_price = entry × (1 - (1 - maintenance) / leverage) // Liquidation price (Short): liq_price = entry × (1 + (1 - maintenance) / leverage)
liquidate on an underwater positionLPs deposit tokens into a market's vault and receive LP shares proportional to their contribution. LPs earn 82% of all trading fees.
// First deposit shares = deposit_amount // Subsequent deposits shares = deposit_amount × total_shares / total_liquidity // vAMM reserves scale proportionally with liquidity // More liquidity = deeper book = less slippage
Each market has a dedicated insurance fund that protects LPs against bad debt from liquidation shortfalls.
If a position's losses exceed its collateral (bad debt), the insurance fund covers the difference to protect LP deposits from socialized losses.
LeviantPerp is built on Solana using the Anchor framework. All logic runs on-chain with no off-chain dependencies.
initialize_protocolcreate_marketadd_liquidityremove_liquidityopen_positionclose_positionliquidateProtocolConfig → seeds: ["protocol"] Market → seeds: ["market", token_mint] TokenVault → seeds: ["vault", market] VaultAuthority → seeds: ["vault_auth", market] Position → seeds: ["position", market, trader, index]
Use the TypeScript SDK to interact with LeviantPerp programmatically.
import { LeviantPerpClient } from '@leviantperp/sdk';
import { Connection } from '@solana/web3.js';
// Connect
const connection = new Connection('https://api.devnet.solana.com');
const client = LeviantPerpClient.fromPhantom(connection);
// Create a market
const { tx, market } = await client.createMarket(
tokenMint, // PublicKey
10, // max leverage
30, // spread bps
1_000_000 // seed liquidity
);
// Open a 5x long
const { tx, position } = await client.openPosition(
tokenMint,
'long',
10_000, // collateral
5 // leverage
);
// Get market stats
const stats = await client.getMarketStats(tokenMint);
console.log(stats.markPrice, stats.creatorFees);
createMarket()addLiquidity()openPosition()closePosition()liquidate()getMarketStats()getAllMarkets()getPositionsByTrader()