Flash Trade V2
FLOW SENTINEL MAINNET vault inflow / outflow limits · every transfer decoded live from the base chain
FLASH6… PUSH — cycle — CONNECTING
ARMING GUARDS… reading live vault flows from the base chain…

Global Flow — Inflow ▲ / Outflow ▼ Across All Vaults (rolling 24h, hourly, UTC)

Inflow ▲Outflow ▼

Every bar is the USD sum of real SPL transfers in/out of every tracked program vault — all custody vaults + TradeVault + RebateVault + staking + swept authority accounts — decoded transaction-by-transaction from pre/post token balances (exact u64) and valued at the on-chain oracle mark observed at capture. Vault→vault internal settlements are excluded (they are not user flows). The meter below is the outflow velocity cap: total outflow across all wallets per rolling hour vs the configured limit.

Trade Side Flow — trader collateral, Inflow ▲ / Outflow ▼ (rolling 24h, hourly, UTC)

Inflow ▲Outflow ▼

Trade side = trader-collateral flows, dominated by TradeVault deposits and withdrawals, plus any custody-pool trade legs that are user-facing (not internal settlements). Each transfer is attributed from its transaction's own instruction names; vault→vault internal settlements are excluded.

Trade side — token breakdown

LP Side Flow — liquidity provision, Inflow ▲ / Outflow ▼ (rolling 24h, hourly, UTC)

Inflow ▲Outflow ▼

LP side = liquidity provision only: add/remove liquidity (incl. compounding sFLP, FLP migration), per pool. Internal vault→vault settlements excluded.

LP side — token breakdown

Every Market Traded On Flash — live collective_position state

All market-sides decoded from the ER every cycle — open interest, collateral liability, open positions, average entry and the live on-chain mark (with synthetic targets like FX / metals / xStocks resolved through their virtual custodies). These values are the program's own Market.collective_position aggregate, decoded with the program's on-chain IDL (this panel displays that aggregate; it does not re-derive it from individual baskets).

Per-Token Flows & Hourly Limits — every custody vault

Active vaults (any flow in 24h) are listed first; quiet vaults are dimmed below. Drawdown 1h = share of the vault drained in the last rolling hour (balance one hour ago is reconstructed from the raw u64 deltas observed in that window). Cap util 1h = this vault's outflow this hour as a share of its per-token cap if one is set, otherwise of the global outflow cap. A · means no flow in that window (hover for detail). Failed txs are also counted, as a supplementary signal.

Governance & Authority Watch — the start of the kill-chain

A drain often begins with a permission change — an upgrade-authority swap, an unexpected redeploy, or a protocol permission flip — before any money moves. Every field below is read live on-chain: the program upgrade authority + last-deploy slot from the BPF loader, and how upgrades are actually executed — this program's upgrades run through the Squads multisig (verified from the latest on-chain upgrade tx), and the global Perpetuals permission flags. A baseline is taken on first read; any change raises a critical alert.

Global protocol permissions

Top Wallets By Outflow — 1h

Drains typically loop through a handful of controlled wallets. Single-wallet concentration against the per-wallet hourly cap.

Oracle Guard — FLASH6 Mark vs Pyth

A manipulated or stale price feed is the classic vault-drain vector. Every custody's on-chain CustomOracle mark (with its on-chain publish_time) is cross-checked against Pyth Lazer — directly (token-gated, via LAZER_ACCESS_TOKEN) or via the Flash V2 API Lazer feed (flashapi.trade/prices, official Lazer ids from /tokens). This compares the value written on-chain against a live read of the Lazer feed, so a mark forged at the on-chain oracle (rather than at Lazer itself) diverges immediately. Paused/closed markets (marketSession + on-chain publish_time) are shown as MARKET IDLE and never alarm. The active source is on the tag.

Active Guard Thresholds

live · protecting the vaults

These are the exact thresholds the sentinel is enforcing right now — cross any one and it alerts instantly. Detection layer: it pages the operator; halting an outflow on-chain needs a program-level circuit breaker.

Live Transfer Feed — every row is a real confirmed mainnet transaction

Alert Log — guard transitions

Flow Conservation Proof — baseline + Σ observed deltas == live vault balance (raw u64)

The dashboard proves it has not missed a transfer: for every vault, the balance at baseline plus the sum of every observed transaction delta must equal the live SPL balance — raw u64, zero tolerance, re-checked every cycle. A transfer landing mid-cycle shows briefly as syncing and must reconcile exactly on the next cycle.