⚠ Local mode — auth is OFF. The dashboard is reachable by anyone who can hit this port. Set [auth].enabled = true + provision ARBX_MASTER_KEY before deploying.
Total Portfolio Value
across all chains
Total USDC
stable inventory
Wallets
monitored on-chain
Last Refresh
live RPC snapshot

Wallet Balances

chainaddressnative balancenative usd usdc wethweth usd govgov balgov usd total usd

By Chain

Wallet Balances

24h window — grey = still warming up
Loading…

CEX Balances

24h window — grey = still warming up
Loading…

Recent Trade Activity — last 1000 records

Loading…

Registered Signers

chainroleaddresslabelusernameext id

Personal Wallets

No personal wallets yet. Pick a chain and click Generate Wallet to create one.

My Transfers

whenchainasset amount fromtorole statustxnote
Loading…

CEX Console

Manual operator controls for exchange-side balancing and intervention. Each exchange has its own section with live balances, WS/feed health, open orders, recent trades, and forms for manual order/withdraw actions.
loading…
Total Top-Up Recommended
across all wallets
Wallets Needing Gas
below target reserve
Critical / Unfunded
cannot trade safely
Last Refresh
live RPC + CoinGecko

Gas Tank Status

Edit a row's txs or reserve % then click Save
chain wallet native bal native $ usdc $ gas (gwei) ~tx cost txs left target txs reserve % target $ top-up $ status

How recommendations work

For each wallet/chain we compute:

typical_tx_cost = gas_price × typical_gas_units
target_native_$ = max(
    target_txs × typical_tx_cost,
    reserve_pct  × wallet_usdc_balance
)
recommended_topup_$ = max(0, target_native_$ - current_native_$)
  • target txs — how many trades the wallet should always be able to pay for (default 50).
  • reserve % — floor: % of the wallet's USDC kept as native gas (default 2%).
  • typical_gas_units — Uniswap-V3-swap-sized; tuned per chain (Arbitrum ≈ 1.5M because of L1 calldata).

Click Top Up to swap USDC → native on that chain via Uniswap V3 and immediately replenish the gas tank.

Top-Up Activity

(no top-ups yet this session)
Global + per-strategyMaster Kill Switch halts all execution. Each rule has off / live / on below (same API as Strategies). Park all sets every rule to off without toggling the kill switch.
full feed also on Opportunity Engine
Mode
execution mode
Kill Switch
global halt
Chains
connected
CEXes
configured

Chain Health

CEX Feeds

venuepair bidbid size askask size midage

DEX opportunities (scored)

chainpairbuy venuesell venue sizegross buy impsell imp frictionnet USD net bpsstateliq reject

Recent opportunities

Recent executions

Chain↔CEX samples

/api/chain_to_cex/samples
loading…

CMDT pre-check samples

/api/cmdt/samples
loading…

All strategies

off = parked · live = observe · on = may execute
kind pair venues / note mode tri-state
loading…

CEX & DEX wallet liquidity

Kraken + Binance (and any other /api/cex venues) plus every on-chain signer from /api/wallet-balances
loading…

Maker strategy ON/OFF

controls all cex_maker_dex_taker rules
| Venue focus:
Live Resting Orders
CMDT legs across configured CEX venues
Resting Notional
sum of price × vol across live orders
Fills (ring window)
hedge outcomes vs fills
Realised P&L
booked on maker fills in the journal
Median Age
time orders have been resting

Live maker orders

loading…
Post-only maker limits currently tracked by the engine. Rows marked adopted were picked up from CEX open-orders on boot; placed were submitted by this engine process.
loading…

CEX account: open orders & recent fills

same /api/cex/*/open_orders + recent_trades as Taker Orders
Kraken and Binance (and any other configured spot adapters) — raw REST snapshot from the exchange API key. This is account-level data and may include orders not shown in the live maker table above.
loading…

Per-Rule Rollup

rule live ask / bid notional ($) fills hedge ok hedge FAIL placed adopted cancelled P&L ($)
loading…

Recent Maker Activity

Lifecycle events from every CMDT rule. Newest first. Fills → green; hedge-failed → red alert. Constant placed/cancelled with no filled rows means the reprice threshold is too tight — widen repost_threshold_bps in config/default.toml so orders get time to actually match.
loading…

Dynamic Spread-Anchored Quoting

detect spread first → short TTL maker quote → verify → hedge / unwind

Current Trades (Active Quotes)

loading…
loading…
Profitability Counter
profitable samples in recent window
Cancelled
recent cancelled quote events
Taken / Filled
recent fill + hedge-dispatched events
Expired
recent TTL-expired quote cancels

Candidates

loading…

Rejected Candidates

loading…

Past Trades

loading…

Recent events

loading…

Taker strategy ON/OFF

controls all chain_to_cex rules
Venues
from /api/cex
Taker fills
filled c2c trades
Taker P&L
realised on c2c fills

CEX & DEX wallet liquidity

Kraken + Binance balances and all monitored signing wallets (every chain)
loading…
Every exchange is rendered in its own section. Each section shows: (1) that exchange's open orders, (2) its recent trades (private API or WS fallback), and (3) opportunities that route through that same exchange only.
loading…
Decisions
considered since boot
Allowed
passed every gate
Aborted
blocked pre-trade
Decision latency
in-process gate cost

Live Risk Config

edits apply on the next decision (no restart)

Reject-Reason Histogram

reasoncount

Recent Decisions

whenverdictkindchain sizenet bps decided inreasons
Ticks
scoring loops since boot
Emits
opportunities published
Liquidity rejects
candidates dropped by gate
Auto-sizer wins
size-vs-profit optima picked
Tick p50 / p99
in-process searcher cost
Pipeline p50
handoff opportunity → fill

Chain Health

CEX Feeds

venue pair bid bid size ask ask size mid age

DEX Opportunities (scored)

double-click a row for the P&L breakdown + fix suggestions
chain pair buy venue sell venue size gross buy imp sell imp friction net USD net bps state liq reject

Recent Opportunities

Recent Executions

Live Opportunity Rules

edit a row and click Save · venues are comma-separated DEX ids
chainpair buy venuessell venues size steps (USD) min profit bps max inv skew % state

Liquidity Gate (per rule)

opportunities whose pools fail any threshold are silently dropped — they never reach risk, the orchestrator, or the trade history.
chainpair enabled max per-leg impact (bps) max round-trip impact (bps) max pool friction (bps) min reference spread (bps)

Auto-Sizer (per rule)

when enabled the engine sweeps a dense geometric grid in [min, max] and emits ONE opportunity per (buy_venue × sell_venue) cycle — at the size with the highest expected net USD profit (after fees, gas, slippage, and observed price impact).
chainpair enabled min USD max USD steps effective grid (USD)

Per-Searcher Latency, Throughput & Liquidity

nanoseconds — sub-µs ticks are the fast path · "liq" cols show the gate's last reading · ★ winner = auto-sizer's choice on most recent tick
chainpairsize ticksemits last gross last net USD last impact (b/s) pool friction liq rej auto-win last reject last tick p50 nsp99 ns last error
Active Chains
searcher running
Disabled
trading paused
Healthy Nodes
WS+HTTP up
Avg Tick Age
last searcher pulse

Chain Status & Toggles

flip a chain off to pause its searcher pool instantly
Nodes In-Sync
WS up + fresh quotes
Syncing / Stalled
connected, no live prices yet
Down / Stopped
connector unhealthy
Cached Quotes
last update

Nodes

click a row to load its prices & logs in the panels below
price source (all chains):
chain id status sync price source endpoint last block head age connects disconnects heads live quotes controls

Prices — (no node selected)

latest quote per (venue, pair, side, size) for the selected node
venue pair side size in size out eff. price mid block age

Logs — (no node selected)

time level target message
Executions
on-chain trade attempts
Filled
tx confirmed on-chain
Reverted / Failed
tx mined but reverted
Realized P&L
sum of filled executions

Executions — loading…

whenchainpurposevenueside amount inamount out txstatuslabelerror
Loading executions…

Considered Opportunities — loading…

whenkindchainroute sizenet bpsnet usd verdictreason / outcome
Loading opportunities…
Considered
Allowed
Aborted
Allowed P&L (est)

Create Ticket

report issues by dashboard page

Ticket Queue

whenpagetitleprioritystatusauthordetails
No tickets yet.
Mode
execution mode
Uptime
since boot
HTTP
admin endpoint
Iris API
CCTP attestation

Fee Engine

applied on next opportunity tick

Runtime

Pipeline Latency (in-process)

execute pipeline only — wire-time latency is bound by RPC + relay
stagecountlast ns mean nsp50 nsp99 nsmax ns
Errors
0
since boot or last reset
Warnings
0
since boot or last reset
Last 5 min
err / warn
Ring
in-memory capacity

Top sources

grouped by tracing target — usually a Rust module path
targetcount

Top messages

numbers + tx hashes collapsed to # so similar errors group
signaturecount

Live feed

0 events shown
time level target message fields file
Tasks Running
live background workers
Total Registered
since boot
Finished / Aborted
terminated tasks
Failed / Panicked
non-zero exit

Registered tasks

every long-lived background task tracked by the central supervisor
name kind status uptime spawned at finished at description

Move USDC via CCTP

From
To
Amount
Modecctp_v2
Est. fees~$2.50 src gas + ~$0.50 attestation

Bridge Routes

Available CCTP corridors (USDC native burn-and-mint).

CCTP Tracker

background service polling Iris every 5s
Last tick
since boot
In flight
0
non-terminal transfers
Burns
0
submitted · failed
Attestations
0
last seen —
Mints
0
settled · failed

Currently in flight

idstatussrc→dst amountburn txattestationmint txage

Rebalance History

idstatussrcdst amountmode burn txattestationmint tx operatorcreated
Total Native USD
across every wallet × chain
Total Wrapped USD
canonical wrapped-native
Recent Wraps
submitted (in journal)
Recent Unwraps
submitted (in journal)

Per-Chain Wrap Status

live RPC: native (snapshot) · wrapped (multicall) · click Wrap to deposit native into the WETH9-clone, Unwrap to withdraw native back
Loading wrap balances…

Wrap / Unwrap Activity

whenchaindirectionwallet wrapped amount statustxerror
Loading activity…
Total Inventory USD
across every chain wallet
Chains in Drift
at least one token off target
Stalled Pairs
rule cannot fire — base or quote ≈ 0
Swap Suggestions
queued for operator click

Auto-Rebalance

when ON, the engine fires one swap per cycle per chain, gated by every guard below — daily caps, gas %, drift %, oscillation, cooldown
Mode
Max swap (USD)
Min swap (USD)
Cooldown (sec)
Min drift %
Max gas % of swap
Daily swap cap
Daily USD cap
Spent today (rolling 24 h)
— swaps · $—
Last action
never
Cycles · Swaps · Errors
— · — · —

Per-Chain Inventory

target = equal split across base/quote of every [[dex_to_dex]] rule on the chain · native reserved as gas
Loading rebalance snapshot…

Cross-Chain Inventory Arb Engine

controls all cross_chain_inventory_arb rules
Routes tracked
configured + observed xarb rule paths
Chains in routes
distinct chain ids across xarb traffic
Live XARB candidates
accepted inventory-arb opportunities
Rejected XARB
near-miss evaluations from sample stream

Live Cross-Chain Inventory Arb Opportunities

actual executable cross_chain_dex_to_dex rows emitted by the strategy bus
timeruleroute size usdgross bps net bpsnet usd
loading…

Executable Cross-Chain Opportunities

net > 5 bps after CCTP fee + 2 swap legs (5 bps each) + 8 bps slippage buffer · execute manually via the Rebalance and CCTP Bridge tabs
asset buy on buy $ sell on sell $ gross bps bridge swap slip net bps staler route
loading…

System Wallet Balances (Cross-Chain Inventory)

every wallet listed here is treated as a system wallet for inventory arbitrage
chainwallet native usdUSDC WETHtotal usd
loading…

Rejected XARB Samples

latest rejected inventory-arb evaluations with gross/net BPS so you can see what blocked each candidate.
pairbuy onsize $ sell onsell $ gross bpsnet bpsnote
loading…

Per-Chain Asset Prices (USD mid)

freshest BuyBase + SellBase quote on a USD-pegged pair. Stale (> 30 s) rows are excluded from the spread search above.
assetchainlocal sym USD mid buysell venueagefresh
loading…

DEX-to-DEX Arbitrage Engine

d2d only (same-chain wallet inventory)
D2D Rules ON
dex-to-dex rules in ON mode
D2D Rules LIVE
observe-only d2d rules
Open D2D opportunities
latest dex-to-dex candidates
Filled trades (recent)
purpose=arbitrage fills
Realized P&L (recent)
USD total over shown fills

Strategy Kind Status

kindrulesonliveoff
loading…

Top Opportunities

latest D2D candidates by estimated net USD
timerulekindsize usdnet bpsnet usd
loading…

Top Candidates (BPS)

highest-bps D2D candidates right now
timerulekindgross bpsnet bpssize usd
loading…

Recent Filled Arbitrage Trades

whenlabelstatusrealized pnlid
loading…

User accounts

Create user

Alchemy

Manages the API key used when a chain's endpoint source is set to Alchemy on the Nodes tab. One key covers every network that has an alchemy_network slug configured — you don't pay per-chain.

loading…
Eligible chains
How Alchemy billing works
Alchemy bills by Compute Units shared across every network in their catalogue. The $49/mo Growth tier gives you one monthly CU pool; you create one app per network on Alchemy's dashboard but they all draw from the same balance. For arbx that means the same key lights up Avalanche, Ethereum, Base, Arbitrum, Optimism, and Polygon pricing feeds as soon as you flip their respective toggles to Alchemy on the Nodes tab.

This instance

Pending enrollments

Approved guests

Guest dashboard

Loading…

Readiness checklist

Loading…

Identity

Authentication

Actions

What's left to do

Relay audit log (last 256)

Approve guest

Bearer token issued

The guest will receive this token automatically on its next status long-poll. If you need to install it manually, copy the value below into the guest's data/relay_token file (raw text, no JSON wrapping). This token will not be shown again.

Change password

Trading Rules
Rules are grouped by strategy kind below. Double-click any row for the full profitability analysis (cost stack + buy/sell legs + coaching). Press ▸ ops to inline the live opportunity feed. Modes: OFF — paused · LIVE — observe only, not fed to the trade engine · ON — fully executing. CMDT rules flagged dry_run in config stay in observe mode regardless of ON.

Operator Doctrine

Reference card for every page in the dashboard. Each section is the same content the per-page help carousel shows, expanded for printing. Use the per-section Print button to send only that card to the printer; the global Print all below sends the entire doctrine.