MeterCall Perps

Native perpetual DEX on MeterCall L4

MeterCall Perps is a leveraged perpetual DEX. Up to 50x on 20+ major pairs, funded by the main MeterCall DEX pool. Cross-chain collateral (deposit USDC from any chain), agent-pay (x402), and zero front-end fees.

Why MeterCall Perps

FeatureMeterCallGMXHyperliquiddYdX
Cross-chain collateralNative (bridge)LimitedNo (Arb only)No (L1)
Agent-pay (x402)YesNoNoNo
Front-end fee0%0.1%0.035%0.05%
Max leverage50x50x50x20x
Pool-fundedShared LPGLPHLPOrderbook

Architecture

  1. Oracle: prices signed by the MeterCall Oracle service (EIP-712). On-chain verifier enforces staleness <60s.
  2. Pool: shared liquidity from the main DEX. Perp engine borrows against the pool, pays a share of funding to LPs.
  3. Positions: on-chain at MeterCallPerps.sol. Permissionless liquidations with 2% keeper bounty.
  4. Funding: rebalances hourly. Rate is proportional to long/short imbalance, capped at 0.75% per interval.

GET /v1/perps/pairs

Lists all supported pairs.

GET/v1/perps/pairs
{
  "pairs": [
    { "pair": "ETH-USDC", "base": "ETH", "quote": "USDC", "mark": 3124.52, "change24h": 0.012, "oi": 12500000, "funding": 0.00012, "enabled": true },
    ...
  ]
}

GET /v1/perps/price/:pair

GET/v1/perps/price/ETH-USDC
{
  "pair": "ETH-USDC",
  "mark": 3124.52,
  "index": 3124.41,
  "change24h": 0.012,
  "funding": 0.00012,
  "nextFundingTs": 1745884800,
  "oi": 12500000,
  "candles": [ { "o": 3120, "h": 3130, "l": 3118, "c": 3124, "ts": 1745881200 }, ... ],
  "orderbook": { "bids": [[3124.4, 5.2], ...], "asks": [[3124.6, 3.8], ...] },
  "trades": [ { "side":"buy", "price":3124.6, "size":0.5, "ts": ... }, ... ]
}

POST /v1/perps/open

POST/v1/perps/open
{
  "pair": "ETH-USDC",
  "side": "long",
  "orderType": "market",
  "size": 1.0,
  "collateral": 200,
  "collateralToken": "USDC",
  "collateralChain": "arbitrum",
  "leverage": 10,
  "limitPrice": null,
  "takeProfitBps": 1500,
  "stopLossBps": 500,
  "user": "0xabc..."
}

Response includes positionId and the on-chain tx hash once settled.

POST /v1/perps/close/:id

POST/v1/perps/close/:id
{ "amount": null }    // null = close all, number = partial

GET /v1/perps/positions/:user

GET/v1/perps/positions/0xabc
{ "positions": [ { "id":"p_1", "pair":"ETH-USDC", "side":"long", "size":1, "entry":3100, "mark":3124, "liqPrice":2790, "collateral":200, "pnl":24, "pnlPct":0.12, "fundingPaid":0.14 } ] }

GET /v1/perps/stats

GET/v1/perps/stats
{ "volume24h": 182400000, "openInterest": 54200000, "fundingPaid24h": 18400, "liquidations24h": 42, "activeTraders": 1280, "poolUtilization": 0.36, "poolFundedRatio": 0.72, "insuranceFund": 2400000 }

GET /v1/perps/liquidations

GET/v1/perps/liquidations?limit=50

GET /v1/perps/leaderboard

GET/v1/perps/leaderboard?window=30d

MeterCallPerps.sol

Solidity at /contracts/MeterCallPerps.sol. Key methods:

MethodPurpose
openPositionBorrow from pool, open long/short with collateral.
closePositionPartial or full close; settles PnL and fees.
liquidatePermissionless — pays 2% bounty when equity < maintenance margin.
addCollateralTop up margin to avoid liquidation.
getFundingRateDerives rate from OI imbalance.
Scaffold: the Solidity is a scaffold only. Do not deploy to mainnet before full audit + fuzz + invariant testing.

Funding Rates

Funding rebalances every 1 hour. Formula (simplified):

rate = (OI_long - OI_short) / (OI_long + OI_short) * FUNDING_CAP_BPS
// Capped at 0.75% per interval.
// Longs pay shorts when rate > 0. And vice versa.

Liquidations

A position is liquidatable when equity < maintenance_margin where maintenance_margin = notional * 0.5%. Liquidator receives 2% of notional as bounty. Remaining collateral flows to the insurance fund / LP share.

JS SDK

const { PerpsClient } = require('./sdks/perps');
const c = new PerpsClient({ baseUrl: 'https://metercall.ai' });
const price = await c.price('ETH-USDC');
const order = await c.open({ pair:'ETH-USDC', side:'long', size:1, leverage:10, collateral:200, collateralToken:'USDC', user:'0xabc' });

Agent-Pay (x402)

Bot traders can authorize orders via x402 headers. See /agent-pay. Every endpoint above accepts X-402-Authorization; the agent identity gets attributed to the position for leaderboard + reputation.

Keeper Bot

PERPS_KEEPER_BOT runs every 5 seconds, scans open positions, checks mark price vs maintenance margin, and calls liquidate(id) for underwater positions. Earnings flow to the keeper address. Anyone can run a keeper — competition is a race and the winner takes the bounty.

Risk & Limits

MeterCall Perps. Built on MeterCall L4. See whitepaper.