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
| Feature | MeterCall | GMX | Hyperliquid | dYdX |
|---|---|---|---|---|
| Cross-chain collateral | Native (bridge) | Limited | No (Arb only) | No (L1) |
| Agent-pay (x402) | Yes | No | No | No |
| Front-end fee | 0% | 0.1% | 0.035% | 0.05% |
| Max leverage | 50x | 50x | 50x | 20x |
| Pool-funded | Shared LP | GLP | HLP | Orderbook |
Architecture
- Oracle: prices signed by the MeterCall Oracle service (EIP-712). On-chain verifier enforces staleness <60s.
- Pool: shared liquidity from the main DEX. Perp engine borrows against the pool, pays a share of funding to LPs.
- Positions: on-chain at
MeterCallPerps.sol. Permissionless liquidations with 2% keeper bounty. - Funding: rebalances hourly. Rate is proportional to long/short imbalance, capped at 0.75% per interval.
GET /v1/perps/pairs
Lists all supported 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
{
"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
{
"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
{ "amount": null } // null = close all, number = partial
GET /v1/perps/positions/:user
{ "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
{ "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/leaderboard
MeterCallPerps.sol
Solidity at /contracts/MeterCallPerps.sol. Key methods:
| Method | Purpose |
|---|---|
openPosition | Borrow from pool, open long/short with collateral. |
closePosition | Partial or full close; settles PnL and fees. |
liquidate | Permissionless — pays 2% bounty when equity < maintenance margin. |
addCollateral | Top up margin to avoid liquidation. |
getFundingRate | Derives rate from OI imbalance. |
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
- Max leverage: 50x on majors, 10x on long-tail.
- Pool utilization cap: 80%. Above this, new longs/shorts are gated.
- Insurance fund covers socialized losses only after LP haircut.
- Oracle staleness: 60s window; circuit-breaker on sudden >10% moves.
MeterCall Perps. Built on MeterCall L4. See whitepaper.