PerpGuard
Waiting for the first health reading.

Data status

Overall status
Not available
Network
Not available
Last updated
Not available
Latest indexed block
Not available
Indexing lag
Not available
Historical coverage
Since Feb 11, 2026: every block from the Exchange's deployment (block 54,773,010)

Data sources

Envio HyperIndex
Type
Event indexer (HyperSync)
Network
Not available
Data collected
Every event of the Perpl Exchange proxy: fills, positions, liquidations, funding settlements, deposits and withdrawals, market listings
Sync status
Not available
Last synced
Not available
Monad RPC
Type
JSON-RPC
Network
Not available
Data collected
The chain head (to measure the index's lag), the Exchange's collateral balance, transaction receipts for trade direction, and each market's insurance fund
Sync status
Not available
Last synced
Not available
Perpl API
Type
Public HTTPS API (GET /v1/pub/context)
Network
Not available
Data collected
Markets as traders see them, mark prices, open interest, funding interval and margin parameters
Sync status
Not available
Last synced
Not available
Perpl Exchange contract (direct reads)
Type
Contract calls and log scans over the RPC
Network
Not available
Data collected
The protocol treasury's own deposits and withdrawals (not indexed), used to rebuild the exchange balance, and the reconciliation against the contract's balance
Sync status
Not available
Last synced
Not available
Hyperliquid API
Type
Public HTTPS API
Network
Hyperliquid mainnet
Data collected
Funding rates and prices, for the cross-venue funding comparison only
Sync status
Not available
Last synced
Not available
Binance Futures API
Type
Public HTTPS API
Network
Binance mainnet
Data collected
Funding rates, intervals and prices, for the cross-venue funding comparison only
Sync status
Not available
Last synced
Not available

Data coverage

Coverage start
Block 54,773,010, Feb 11, 2026: the Perpl Exchange's deployment block on Monad mainnet
Coverage end
Not available
Indexed blocks
Not available
Total events
Not available
Missing events
Not availableNo live gap check runs. The index is verified offline against the chain logs (`pnpm verify:logs`), not continuously.
Backfill status
Not available

Metric methodology

Every metric below is described by the same six things: its name, what it means, how it is calculated, where the data comes from, the window it covers and how often it is refreshed. Each names the code that computes it.

Time windows
24H, 7D and 30D are ROLLING: the last 24 hours, 7 days or 30 days up to now. A figure that can only be summed from whole UTC days (trader P&L, round trips, money in and out, fees) says so on its label: "yesterday + today", "last 7 whole days + today". All runs from the index start, Feb 11, 2026.
Currency
Every amount is in AUSD, a dollar stablecoin and the collateral of every Perpl market (6 decimals). "$" on the site means AUSD.
Refresh frequency
Not available
Rounding
Figures are shortened for display ("1.2M"); hover a figure for its exact amount where one is shown.

Trading metrics

Trading volume
Definition
The notional of every fill in the window, each match counted once.
Calculation method
Sum of each fill’s notional (size × fill price, in AUSD). Whole UTC days inside the window come from per-day fill sums, the two partial edges are read fill by fill: the same rows as one scan.
Data source
Indexed fills (Trade) from the Perpl Exchange’s events
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts PostgresAnalytics.protocolMetrics → #windowTotals (WINDOW_TOTALS_SQL, DAY_TOTALS_SQL); windowSplit.ts

Open interest
Definition
Open positions on ONE side of the book at the mark: every long lot is matched by a short lot, so one side is the open interest.
Calculation method
Per market, open size × mark price from Perpl’s market state, summed across markets. The history chart is the index’s cumulative lots at each day’s close × that day’s close mark.
Data source
Perpl API (GET /v1/pub/context); history from the index
Time window
Now: a level, not a window
Refresh frequency
Not available

Code: packages/shared/src/venues/perpl.ts toOpenInterest, PerplVenue.getOpenInterest; apps/web/src/lib/oiHistory.ts

Trades
Definition
The number of fills in the window.
Calculation method
A count of indexed fills, with the same whole-day and edge split as volume.
Data source
Indexed fills (Trade)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts #windowTotals (WINDOW_TOTALS_SQL)

Active traders
Definition
Distinct accounts with at least one fill, as maker or taker. An account trading three markets is one trader.
Calculation method
Whole UTC days from the per-account day rows with a fill, the edges from the fills themselves, de-duplicated across both.
Data source
Indexed fills (Trade) and per-account days (TraderDay)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts ACTIVE_TRADERS_SQL via #windowTotals

Funding ratesModelled
Definition
The rate one side pays the other at each settlement. Positive means longs pay shorts. Perpl settles about every 43 minutes.
Calculation method
Each settlement’s stored rate ÷ 1,000 = percent per settlement. Tables show the mean per settlement over the window and the latest; the heatmap averages per UTC day (per week at All). APR = the current rate × settlements a year, simple, not compounded, assuming the rate holds.
Data source
Indexed funding settlements (FundingEvent); the interval from the Perpl API, else measured
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Modelled: APR is the current rate projected over a year, not a forecast.

Code: packages/shared/src/analytics/pg.ts funding, fundingSeries; map.ts fundingUnitsToPct; apps/web/src/lib/funding.ts aprPct

Trading fees
Definition
Maker plus taker fees paid on Perpl.
Calculation method
The sum of each market’s daily fee total. Taker fees have no finer timestamp than the UTC day, so this is the only exact total. The rolling maker-only part is shown separately as maker fees.
Data source
Indexed per-market days (MarketDay)
Time window
Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts #metricsOver (FEES_SQL), #fees

Trader metrics

Realised PnL
Definition
Profit or loss locked in when a position is reduced or closed. Funding is kept separately.
Calculation method
Summed from the account’s day rows; per round trip from the position. Computed by the indexer from the Exchange’s position events.
Data source
Indexed positions and per-account days (Position, TraderDay)
Time window
Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts traderDays (TRADER_DAYS_SQL), roundTrips

Unrealised PnL
Definition
The profit or loss an open position would realise at the current mark.
Calculation method
side × size × (mark − entry), with side +1 for a long and −1 for a short.
Data source
Open positions (from the index on a public profile; from Perpl’s live account stream in the bot), priced at Perpl’s mark
Time window
Now: a level, not a window
Refresh frequency
Not available

Code: packages/shared/src/risk/liquidation.ts unrealizedPnlCNS; risk/metrics.ts positionMetrics

Net PnL
Definition
Realised PnL plus funding, less trading fees (maker and taker).
Calculation method
realised + funding − fees, one definition in the indexer, summed over the account’s UTC days. Round-trip results, win rate and profit factor are BEFORE fees and are labelled so.
Data source
Indexed per-account days (TraderDay)
Time window
Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
Refresh frequency
Not available

Code: apps/indexer/src/lib/entities.ts netPnl; packages/shared/src/analytics/pg.ts TRADER_SOURCE_WINDOW

Profitable traders
Definition
Accounts with at least one closed round trip whose net PnL (after fees and funding) is above zero.
Calculation method
Counted among accounts with a fill in the window, over whole UTC days, shown as "x of y".
Data source
Indexed per-account days (TraderDay)
Time window
Whole UTC days from the window’s first day through today so far ("last 7 whole days + today"), or All
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts traderSummarySql

Average PnL
Definition
Not availablePerpGuard computes no average PnL. The trader summary computes a median net PnL (withheld under 10 traders), which no page shows today.
Calculation method
Not available
Data source
Not available
Time window
Not available
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts traderSummarySql (median_pnl)

Trader rankings
Definition
Top PnL and Top losses (net PnL, at least 10 round trips), Volume, Liquidated (accounts liquidated in the window) and Flows (largest net money in or out).
Calculation method
Each board is one ordering of the per-account figures. Win rate and profit factor are withheld under 10 round trips. ROI is lifetime net PnL over lifetime deposits, withheld under 100 AUSD deposited.
Data source
Indexed per-account days and liquidations (TraderDay, Liquidation)
Time window
Whole UTC days for P&L and flows; at 24H, volume, trades and liquidations are the rolling 24 hours
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts TRADER_RANKING, tradersSql, TRADER_SOURCE_24H

Liquidation metrics

Total liquidations
Definition
Positions closed by the Exchange’s liquidation, in the window.
Calculation method
A count of indexed liquidations.
Data source
Indexed liquidations (Liquidation)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL via #metricsOver

Liquidation value
Definition
The notional liquidated: each liquidation’s size × its execution price, summed.
Calculation method
Sum of each liquidation’s notional. Margin lost (the drop in the position’s deposit) is shown per row and is not a loss of money: part of it is credited back to the account.
Data source
Indexed liquidations (Liquidation)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL (notional); apps/indexer/src/handlers/liquidations.ts

Preventable liquidationsModelled
Definition
"Rescuable": the trader’s free AUSD at the moment of liquidation would have covered the top-up that kept the position above maintenance margin.
Calculation method
Free balance before ≥ margin to survive > 0, where margin to survive is the collateral that would have kept the position exactly at maintenance at the mark it was liquidated at. A position whose entry price the index never saw cannot be judged and is excluded from the denominator.
Data source
Indexed liquidations and the account’s free balance
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Modelled: A counterfactual: it assumes the trader would have added the margin in time.

Code: apps/indexer/src/handlers/liquidations.ts (wasRescuable); packages/shared/src/risk/liquidation.ts marginToSurviveCNS

Preventable valueModelled
Definition
"Potentially avoidable losses": the realised loss (P&L plus funding) of the rescuable liquidations.
Calculation method
Summed once per event; trading and liquidation fees are left out, so it understates. A top-up keeps the position open; it does not undo the price move.
Data source
Indexed liquidations (Liquidation)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Modelled: A counterfactual over the rescuable set.

Code: packages/shared/src/analytics/pg.ts LIQUIDATION_SQL (rescuable_loss)

Liquidation thresholds
Definition
The mark at which a position is liquidated: where its margin falls to the market’s maintenance requirement. Perpl margin is isolated, per position.
Calculation method
Maintenance = entry price × size ÷ the market’s maintenance leverage; liquidation price = entry + side × (maintenance − deposit − funding) ÷ size.
Data source
Positions (index or Perpl API); maintenance margin per market from the Perpl API
Time window
Now: a level, not a window
Refresh frequency
Not available

Code: packages/shared/src/risk/liquidation.ts maintenanceMarginCNS, liquidationPricePNS

Risk methodology

Long/short exposure
Definition
The long side’s share of the isolated margin open on a market, with the number of positions on each side beside it. Never notional: on an order book open size is equal on both sides by construction.
Calculation method
Long margin ÷ (long + short margin), over the index’s open positions.
Data source
Indexed open positions (Position)
Time window
Now: a level, not a window
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts MARKET_BREAKDOWN_SQL (long_margin, short_margin)

Liquidation ladderModelled
Definition
Every open position re-priced at each step from −50% to +50% of the mark, in 0.5% steps, and counted as liquidated when it is then past maintenance.
Calculation method
The risk engine’s own position maths applied at the shocked mark, once per position per rung. A fall closes longs and a rise closes shorts; no figure adds the two.
Data source
Indexed open positions, priced with Perpl marks and margin parameters; insurance balances from the contract
Time window
Now: a level, not a window
Refresh frequency
Not available

Modelled: A static price shock.

Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot, LADDER_MOVES

Stress testModelled
Definition
The ladder’s ±5% and ±10% rungs: positions, notional and loss beyond collateral each move would liquidate, one direction at a time.
Calculation method
Read off the same ladder. "All markets" assumes every market moves together, the worst case rather than the likely one.
Data source
As the ladder
Time window
Now: a level, not a window
Refresh frequency
Not available

Modelled: A static shock; it does not model the path, funding, keeper timing or the book.

Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot

Positions at risk
Definition
Each open position with the least adverse move that liquidates it; the largest exposed are listed.
Calculation method
The first rung, in the position’s adverse direction, at which it is past maintenance.
Data source
As the ladder
Time window
Now: a level, not a window
Refresh frequency
Not available

Code: packages/shared/src/analytics/exposure.ts buildRiskSnapshot (positions)

Price impact assumptions
Definition
Not availableNot modelled. The index has no order book, so no figure estimates slippage or whether the book could absorb a liquidation; every Risk figure is exposure, not realised loss.
Calculation method
Not available
Data source
Not available
Time window
Not available
Refresh frequency
Not available

Code: packages/shared/src/analytics/exposure.ts RISK_STATEMENTS

Capital flow methodology

Deposits
Definition
AUSD deposited into Perpl accounts in the window.
Calculation method
Sum and count of indexed deposits.
Data source
Indexed collateral flows (CollateralFlow)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts COLLATERAL_FLOW_SQL via #metricsOver

Withdrawals
Definition
AUSD withdrawn from Perpl accounts in the window.
Calculation method
Sum and count of indexed withdrawals.
Data source
Indexed collateral flows (CollateralFlow)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts COLLATERAL_FLOW_SQL

Net capital flow
Definition
Deposits minus withdrawals. Not a change in balance, which also moves on P&L, funding, fees and liquidations.
Calculation method
deposited − withdrawn over the same rows.
Data source
Indexed collateral flows (CollateralFlow)
Time window
Rolling: the last 24 hours, 7 days or 30 days, or All (since Feb 11, 2026)
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts #flowStats

Unique accounts
Definition
Perpl accounts opened since launch.
Calculation method
Accounts counted by the month they were created, summed.
Data source
Indexed accounts (Trader.createdAt)
Time window
All: since Feb 11, 2026
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts HISTORY_ACCOUNTS_SQL via history()

Since-launch totals
Definition
Volume, trades, deposits, withdrawals and liquidations from the Exchange’s deployment to now; and the exchange balance rebuilt forward from launch.
Calculation method
The All window of the same queries. The balance is indexed deposits − withdrawals + the protocol treasury’s own deposits − withdrawals, reconciled against the contract at one block.
Data source
The index, and a scan of the treasury’s own events over the RPC
Time window
All: since Feb 11, 2026
Refresh frequency
Not available

Code: packages/shared/src/analytics/pg.ts protocolMetrics("all"); apps/backend/src/exchangeBalance/treasuryScanner.ts

Data quality

Completeness
Not available
Accuracy
Not available
Known limitations
No order-book depth or intraday candles. Risk shocks are static. Trade results per round trip are before trading fees (fees are recorded per account per day). Funding across traders in AUSD is not computed: it needs each side’s open interest at every settlement.
Missing data
The indexed fill has no taker side; direction is read from the same transaction’s position event, and left blank when it has no single answer. About 6% of fills have no paired taker. Per-position fees are not recorded. The amount a liquidation credits back to the account is emitted but not stored.
Validation checks
Live: the index’s progress is checked against an independent chain head on every read, and the exchange balance is reconciled against the contract every 15 minutes, and open interest against the venue, market by market at recorded blocks, every 5 minutes (table below). Offline: the index is checked against the raw chain logs, and the funding unit, open interest history and skew were measured against the venue.
Open interest check: not available yet. It runs every 5 minutes.

Infrastructure

RPC provider
Not available
Indexer
Not available
Database
Not available
Cache
Not available
API status
Not available
Update frequency
Not available

Disclaimers

Data accuracy
Every figure is derived from public on-chain events and Perpl’s public API, and can lag or be wrong. Each page shows how current its data is; check the source before relying on a number.
Financial disclaimer
Nothing here is financial advice or an offer to trade. Past results do not predict returns. Leveraged perpetuals can lose more than a position’s margin.
Protocol affiliation
Unofficial analytics. Not affiliated with or endorsed by Perpl or the Monad Foundation.
Report an issue
Open an issue at github.com/0xMigzy/PerpGuard/issues