Wallet Balances
| chain | address | native | balance | native usd | usdc | usdt | weth | weth usd | gov | gov bal | gov usd | total usd |
|---|
By Chain
Recent Trade Activity — last 1000 records
Personal Wallets
My Transfers
| when | chain | asset | amount | from | to | role | status | tx | note |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Registered Signers
| chain | role | address | label | username | ext id | private key |
|---|
Wallet Balances
CEX Balances
My Crypto.com API
per signed-in user · encrypted at rest
Each logged-in user stores their own Crypto.com Exchange API key + secret
(AES-256-GCM sealed with the engine master key). Keys are never shown after save —
only a short fingerprint. Use Test to call private/user-balance.
These keys are yours alone; they are not shared with other users and are not yet
wired into the global trading adapters (Kraken / Binance).
P&L balances
Holdings by wallet and chain, with settled P&L charts and a 7-day forward projection from the trade pace.
Route priority
Every settled route, best profit first. Double-click a row for every fill on that route, with the running total. The move plan grows Kraken JOE and Kraken Pharaoh AVAX from the books that lost. USDG stays parked.
Route funding
Every live ask and bid vs the available balance on that side. Fed = posting at that balance. Thin = posting under it. Blocked = under the route minimum or not posting. A profitable side sizes to the balance it can hedge. Refreshes every 5 seconds.
Gas Tank Status
| 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)
Chain Health
CEX Feeds
| venue | pair | bid | bid size | ask | ask size | mid | age |
|---|
Opportunities
double-click a row for the P&L breakdown + fix suggestions| chain | pair | buy venue | sell venue | size | gross | buy imp | sell imp | friction | diverge 1h | net USD | net bps | state | liq reject |
|---|
Fair-value monitors
observe-only · deep WAVAX-quoted pools vs live reference| rule | pool | reference | fair | pool buy | pool sell | buy disc | sell prem | round trip | ≥ alert 1h | verdict |
|---|---|---|---|---|---|---|---|---|---|---|
| loading… | ||||||||||
Recent Opportunities
—
Recent Executions
—
CEX-Maker / DEX-Hedge (DSA)
—Staleness (DEX→CEX)
—Venue-wide sandwich defaults
Bulk fill-rate / min-net for every live sandwich on this venue. Each pair card below also has its own Sandwich window (ASK+BID share that card’s knobs). The gold mark is the profit floor (fees + reserves + min net) — tighter than that loses money. Drag left for more fills (tighter, still profitable); right for fewer, fatter fills (wider cushion). This tab only lists and patches this venue’s rules (Kraken’s 40 bp maker needs a wider quote than Binance.US — each Maker tab keeps its own floor). Scope Kraken onlyat profit floor +20 +40 +80 · fewer trades
fatter each fill
Edge reality
recorded posted edge · settled net · the edge this rule is posting nowLive Maker Orders on Kraken
loading…Per-Rule Rollup
—| rule | live | ask / bid | notional ($) | fills | hedge ok | hedge FAIL | placed | adopted | cancelled |
|---|---|---|---|---|---|---|---|---|---|
| loading… | |||||||||
Recent Maker Activity
—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.
CEX-first → Avalanche Inventory Arbitrage
loading…Per-Strategy Rollup
last 2 000 arb records| strategy | trades | filled | realised P&L ($) |
|---|---|---|---|
| loading… | |||
Binance.US staleness beta
Binance.US staleness report beta
Kraken staleness beta
Kraken staleness report beta
Binance Global staleness beta
Binance Global staleness report beta
Inventory Arb Trade
Live Risk Config
edits apply on the next decision (no restart)Reject-Reason Histogram
| reason | count |
|---|
Recent Decisions
| when | verdict | kind | chain | size | net bps | decided in | reasons |
|---|
Live Scoring Board
one glance per pair · state = what the last tick actually said · net USD is "—" when the quote oracle can't price notional (gross still valid)| state | chain | pair | route | size | gross | net USD | impact b/s | friction | age | emits | last reject |
|---|
Live Opportunity Rules edit venues / sizes / floors · Save hot-swaps the running searcher
| chain | pair | buy venues | sell venues | size steps (USD) | min profit bps | max inv skew % | searching | config |
|---|
Liquidity Gate thin pools dropped before risk / history
| chain | pair | enabled | max per-leg impact (bps) | max round-trip impact (bps) | max pool friction (bps) | min reference spread (bps) |
|---|
Auto-Sizer geometric grid → one best size per venue cycle
| chain | pair | enabled | min USD | max USD | steps | effective grid (USD) |
|---|
Diagnostics tick latency · auto-sizer wins · pipeline handoff
Chain Status & Toggles
flip a chain off to pause its searcher pool instantlyAvalanche Local Node
— source: —Nodes
click a row to load its prices & logs in the panels below| 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 |
|---|
Maker flow → atomic DEX
Every CMDT hedge is one local-node swap txSellBase.
ASK fill (CEX sold base) → DEX BuyBase.
Public RPC hedges are refused.
Manual atomic swap
same build_swap path as maker hedges—
Speed & health
Live atomic sells / buys
CMDT hedges · manual · token moves — newest first| When | Src | Side | Pair / Venue | In | L1 ms | L2 ms | Status | Tx |
|---|---|---|---|---|---|---|---|---|
| waiting for hedges… | ||||||||
Token Route
opportunities the market offered that this engine did not trade| route | pair | venues | kind | last bps | last | missed + | avg miss | best miss | other | top reason | acted | seen | last seen |
|---|
Currencies
Drag a coin onto Sell or Buy. Each tag is that balance’s full USDC value.Swap
drop a coin on each sideSwap in from Kraken
One process per network. Buy is a Kraken market. Withdraw is done on Kraken. Maker orders are not posted.| # | network | RWA | wallet | Kraken | |
|---|---|---|---|---|---|
| Loading… | |||||
Kraken sandwich ranking
Quoted 8 Oct 2026 00:14 UTC. Live pre-check used 22 bp maker. Dollars are one fill, if the hedge matches the quote. Not a daily total.| # | pair | side | hedge | net | clip | per fill | settled history | run |
|---|---|---|---|---|---|---|---|---|
| 1 | ETH / USDC | ask | Pharaoh WETH.e / WAVAX | 24 bp | $178 | $0.43 | No settled asks. The two Kraken buys lost $0.94. | Yes. Ask is the money side. The bid needs USDC and chain WETH. |
| 2 | JOE | ask only | LFJ JOE / USDC | 62 bp | $62 | $0.38 | 10 sells, +$1.66, average $0.17. Best proven route we can run. | Yes. Sell JOE, receive USD, buy JOE back with USDC. No bid. |
| 3 | BTC / USDC | ask | Pharaoh BTC.b / WAVAX | 5 bp | $118 | $0.06 | No settled fills. | Yes, at the 5 bp floor. Tightening this edge would pull the ask. |
| 4 | AVAX / USDC | ask | Pharaoh WAVAX / USDC | 18 bp | $68 | $0.12 | 4 Pharaoh sells, net −$0.60. UniV3 stays off after later losses. | Yes, thin. Kraken USDC is too low to bid. |
| 5 | BTC / USDC | bid | Pharaoh BTC.b / WAVAX | 26 bp | $17 | $0.04 | No settled fills. | Yes, small. Spends USDC, not USD. Gas is most of a clip this size. |
| 6 | LINK / USDC | — | LFJ LINK.e / WAVAX | — | — | — | Book exists. The chain coin is bridged LINK.e, not Kraken LINK. | No. Basis can eat the edge. |
| 7 | AAVE | — | LFJ AAVE / WAVAX | — | — | — | Kraken lists AAVE/USD only. No AAVE/USDC. | No. That book spends or receives USD. |
| 8 | QI | — | LFJ QI / WAVAX | — | — | — | QI/USD only, and Kraken blocks orders on this account. | No. |
| 9 | COQ | — | LFJ COQ / WAVAX | — | — | — | COQ/USD only. The book is too wide to clear the fee. | No. |
| 10 | GMX, STG, UNI, SUSHI, COMP, SNX, CRV, GRT, YFI | — | thin C-chain pools | — | — | — | Kraken lists these as USD, not USDC. Pools are too thin to hedge a clip. | No. |
SOL, XRP, ADA, DOT, LTC, ATOM, and BCH have Kraken USDC books and no Avalanche hedge in this engine, so they are not a sandwich. A fill is uncommon: the last settled JOE sell was 20 Sep 2026. Do not turn these per-fill dollars into a daily figure. Live Kraken fee is 22 bp maker / 38 bp taker. The config seed stays 40/80 until TradeVolume reports; quotes use the live 22.
Fund these
Read 8 Oct 2026 00:14 UTC. Leave the $20,000 USD park where it is. Deposit USDC, not USD.| route | already posting | blocked side | send | why |
|---|---|---|---|---|
| AVAX / USDC Pharaoh bid |
Ask, ~6.1 AVAX | Bid | $200 USDC on Kraken | Free USDC is $0.28. The bid floor is about $43. Avalanche already holds ~19 AVAX, so the hedge can sell it. |
| BTC / USDC Pharaoh bid |
Ask, ~0.0014 BTC | Bid | Same $200 USDC | The bid is live at about $17, under the $43 size where gas stops eating the edge. Avalanche holds ~0.00078 BTC.b, enough for one minimum hedge. |
| ETH / USDC Pharaoh bid |
Ask, ~0.069 ETH. Highest dollars per fill. | Bid | $200 USDC on Kraken and 0.02 WETH.e on Avalanche | Chain WETH.e is 0.00024 ETH. A bid hedge has nothing to sell. The ask is already funded. |
| JOE LFJ ask |
Ask | Bid stays off | Nothing | A bid would spend USD. Do not fund it, and do not move the $20,000. |
| AAVE Binance LFJ |
Neither side | Both | Nothing | The bid’s modeled net is about 40 bp, but the executable hedge is about −170 bp. Sending coins would post a losing trade. |
Token / Pair
Enable / disable a currency — fans out to every CMDT / d2d / sniper rule with that base| on | currency | category | on-chain | CEX | venues | rules | notes |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Triple-listed (Kraken + Binance.US + Avalanche DEX) big caps are limited to assets with real C-Chain liquidity: AVAX, BTC.b, WETH.e, LINK.e, AAVE.e. JOE trades Kraken + LFJ (not Binance.US). PHAR is Pharaoh’s own token (PHAR/WAVAX) and is not listed on either CEX — toggle keeps fair-value / DEX inventory rules in the catalog. Disable prompts you to rotate remaining wallet inventory into USDC/AVAX. Single-click a row to expand every trading route for that currency (toggle each On/Off + per-route edge bp). Double-click opens Token Route — edge sliders, Liquidity, and BPS math (full fee waterfall for Kraken & Binance makers).
Tokens
Avalanche depth + CEX marks — click for full brief| token | category | price | 24h | liq $ | top dex |
|---|---|---|---|---|---|
| Loading… | |||||
Select a token
summary · liquidity · strategy fit · 30d pricePick a token on the left. You will see what it is, why we care for CMDT/d2d, live Avalanche pool liquidity, and ~30 days of USD price history.
Staleness Strategy beta
- Live vs On
Live= score + Trade History only.On= live DEX→CEX execution. Configdry_runalso forces observe.- History
- Fires, near-misses and verdict changes land in Trade History as
kind=staleness; every evaluation is in the page's gap sparkline. Hedge fills also appear under Kraken → Trade History. - Cooldown / inventory
- After the DEX leg is dispatched the pair cools for
cooldown_ms(a rejected fire burns no cooldown). Size is clipped to spendable chain AVAX/USDC (after other strategies' reservations and the exchange allocation slider) and Kraken free balance.
What is RTT?
add_order / cancel_order until Kraken’s ack arrives. That is the same path the trade engine uses for maker posts.
- Typical (median)
- Most recent order acks over ~15 minutes. Resistant to rare reconnect spikes that used to pull a plain average to ~20 ms.
- VIP TCP
- Network floor only (~0.2 ms on colo). Connect time to the Beeks VIP — not a full order ack.
- Why ~1–3 ms, not sub-ms?
- Order RTT includes Kraken’s matching/ack processing on top of the wire. Sub-millisecond is the TCP path; order ack is wire + exchange.
Kraken Latency
| venue | trading | adapter | ws feed | ws fills (private) | order RTT (WS measured) | orders sampled | anticipated execution |
|---|---|---|---|---|---|---|---|
| Open this tab or click Refresh — numbers come from live WS order posts, not public REST ping. | |||||||
Kraken WS Order RTT history
Kraken account
signed balances · open orders · fills| asset | free | locked | total |
|---|---|---|---|
| loading… | |||
| pair | side | price | qty | status |
|---|---|---|---|---|
| loading… | ||||
| time | pair | side | qty | price | quote | fee | maker | Settled P&L | System | Order ID | Trade ID |
|---|---|---|---|---|---|---|---|---|---|---|---|
| loading… | |||||||||||
How these latency numbers are derived
Colo vs public. With the Beeks↔Kraken cross-connect live, private WS rides VIP 100.64.33.x (~0.2 ms TCP). Order ack is typically 1–3 ms because matching/ack time sits on top of the wire. Public Cloudflare REST is not used for live order entry while the private socket is up.
Fill detection is push, not poll. The "ws fills (private)" column shows the authenticated executions stream: the moment one of our maker orders fills, Kraken pushes the event down this socket and the strategy dispatches the DEX hedge immediately — it does not wait for a polling tick.
Staleness Strategy beta
bookTicker jumps ahead of the Avalanche DEX quote-at-size, we sell AVAX on-chain first, wait for confirmation, then buy AVAX on Binance.US (one trade id). Near-zero US taker (~2 bp) makes thin gaps viable.
- Live vs On
Live= observe + history.On= live execution. Configdry_runforces observe even when On.- History
- Scored ticks → main Trade History (
kind=staleness). CEX hedge fills → Binance.US → Trade History. - Cooldown / inventory
- Pair cools after each fire. Clips respect chain AVAX and Binance.US USDT free balance; can run alongside CMDT.
Binance.US reconcile
Binance.US latency
| venue | trading | adapter | min | avg | max | samples (ms) | anticipated execution |
|---|---|---|---|---|---|---|---|
| Open this tab — live REST ping from the engine host. | |||||||
Live bookTicker (WebSocket)
| pair | bid | bid size | ask | ask size | mid | age |
|---|---|---|---|---|---|---|
| waiting for first WS frame… | ||||||
Binance.US account binance-spot
| asset | free | locked | total |
|---|---|---|---|
| loading… | |||
| pair | side | price | qty | status |
|---|---|---|---|---|
| loading… | ||||
| time | pair | side | qty | price | quote | fee | maker | Settled P&L | System | Order ID | Trade ID |
|---|---|---|---|---|---|---|---|---|---|---|---|
| loading… | |||||||||||
How this dashboard is sourced
Staleness Strategy beta
- Live vs On
Live= observe + history.On= live DEX→Global hedge. Enable the venue kill switch and fund USDT/AVAX first.- History
- Scored ticks → main Trade History (
kind=staleness). Hedge fills → Binance Global → Trade History. - Cooldown / inventory
- Cooldown after fire. Size clipped to chain AVAX and Global USDT free balance; runs alongside Global CMDT rules.
Binance Global latency
| venue | trading | adapter | min | avg | max | samples (ms) | anticipated execution |
|---|---|---|---|---|---|---|---|
| Open this tab — live REST ping from the engine host. | |||||||
Live bookTicker (WebSocket)
| pair | bid | bid size | ask | ask size | mid | age |
|---|---|---|---|---|---|---|
| waiting for first WS frame… | ||||||
Binance Global account binance-global
| asset | free | locked | total |
|---|---|---|---|
| loading… | |||
| pair | side | price | qty | status |
|---|---|---|---|---|
| loading… | ||||
| time | pair | side | qty | price | quote | fee | maker | Settled P&L | System | Order ID | Trade ID |
|---|---|---|---|---|---|---|---|---|---|---|---|
| loading… | |||||||||||
How this dashboard is sourced
Active routes · funding
| Route | Exchange | Token side | USDC side | Min clip | Sell on exchange | Buy on exchange |
|---|---|---|---|---|---|---|
| Loading live routes… | ||||||
Exchange Balances
| Asset | Free | Locked | Total | Source | As of |
|---|---|---|---|---|---|
| Choose an exchange’s Balances page. | |||||
Kraken fee ladder
Loading…
How a Kraken fill stays hedged
A Kraken maker is post-only. The moment it fills, the private WebSocket execution listener dispatches the Avalanche hedge. That path is measured in milliseconds. The slower REST poll is only the backup if the socket drops an event.
Three checks stop a fill from sitting with no hedge:
- DEX down. Two ticks in a row where the on-chain hedge cannot be quoted cancel every resting maker on that rule. The reason recorded is that the DEX leg is unavailable, so a fill can never rest unhedged. A Kraken or Binance rate-limit is not treated as a DEX outage — those orders stay up.
- Gate closed. Turning the rule off, losing the local Avalanche node, flipping the venue kill switch, or turning this asset Off on Balances closes the gate. The next tick pulls the resting makers. A live maker is not left up while the orchestrator would refuse the hedge.
- Failed hedge is not profit. If the Kraken leg fills and the DEX leg never gets a transaction, the execution is marked failed. It is excluded from settled profit and listed below. The janitor does not sell that leftover on its own. The Balances page is the control that sells an asset and spreads the dollars across the assets left On.
Rows here are Kraken only. The profit report still lists every venue.
Unhedged Kraken fills
Loading…
Exchange Wallet Allocation
Shared Avalanche Wallet Envelope
Deployable Capacity by Strategy
Active Allocation Breakdown
Current Trades
live quotes — hover a label to see what it meansExecutions — loading…
| when | chain | purpose | venue | side | market | amount in | amount out (actual / floor) | tx | status | label | error |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading executions… | |||||||||||
Exchange Fill Record
| Time | Pair | Side | Quantity | Price | Quote Amount | Fee | Liquidity | Settled P&L | Order ID | Trade ID |
|---|---|---|---|---|---|---|---|---|---|---|
| Choose an exchange’s Trade History page. | ||||||||||
Flowchart
Current Trades
live quotes — hover a label to see what it meansExecutions — loading…
| when | chain | purpose | venue | side | market | amount in | amount out (actual / floor) | tx | status | label | error |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading executions… | |||||||||||
Exchange Fill Record
— fills · every Kraken + Binance.US private fill · click a row for the fee waterfall| Time | Exchange | Pair | Side | Quantity | Price | Quote Amount | Fee | Liquidity | Settled P&L | Order ID | Trade ID |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading exchange fills… | |||||||||||
Considered Opportunities — loading…
| when | kind | chain | route | size | net bps | floor bps | net usd | avail bal | verdict | reason / outcome |
|---|---|---|---|---|---|---|---|---|---|---|
| Loading opportunities… | ||||||||||
Fee Engine
applied on next opportunity tickRuntime
—
Pipeline Latency (in-process)
execute pipeline only — wire-time latency is bound by RPC + relay| stage | count | last ns | mean ns | p50 ns | p99 ns | max ns |
|---|
Top sources
grouped by tracing target — usually a Rust module path| target | count |
|---|
Top messages
numbers + tx hashes collapsed to # so similar errors group| signature | count |
|---|
Live feed
0 events shown| time | level | target | message | fields | file |
|---|
Registered tasks
every long-lived background task tracked by the central supervisor| name | kind | status | uptime | spawned at | finished at | description |
|---|
Identity
host / OS / uptimeThis engine process
arbx-engine selfCPU
—| core | % | MHz | bar |
|---|
Memory & swap
from /proc/meminfoFilesystems
capacity + inodes| mount | device | type | size | used | avail | use% | inodes% |
|---|
Network interfaces
live RX/TX rates over ~250ms sample| iface | state | speed | RX/s | TX/s | RX tot | TX tot | err/drop | addrs |
|---|
Systemd units
key colo services| unit | active | sub | pid | rss | restarts |
|---|
Docker
containers| name | state | cpu% | mem | pids |
|---|
Top processes
by CPU over sample window (top 25)| pid | user | name | cpu% | mem% | rss | thr | cmd |
|---|
Move USDC via CCTP
Bridge Routes
Available CCTP corridors (USDC native burn-and-mint).
CCTP Tracker
background service polling Iris every 5s —Currently in flight
| id | status | src→dst | amount | burn tx | attestation | mint tx | age |
|---|
Rebalance History
| id | status | src | dst | amount | mode | burn tx | attestation | mint tx | operator | created |
|---|
Per-Chain Wrap Status
live RPC: native (snapshot) · wrapped (multicall) · click Wrap to deposit native into the WETH9-clone, Unwrap to withdraw native backWrap / Unwrap Activity
| when | chain | direction | wallet | wrapped | amount | status | tx | error |
|---|---|---|---|---|---|---|---|---|
| Loading activity… | ||||||||
Auto-Rebalance —
when ON, the engine fires one swap per cycle per chain, gated by every guard below — daily caps, gas %, drift %, oscillation, cooldownPer-Chain Inventory
target = equal split across base/quote of every[[dex_to_dex]] rule on the chain · native reserved as gas
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… | |||||||||||
Watching
gross spread present but cost stack still wins — these are early-warning rows, watch for them to flip net-positive.| asset | buy on | buy $ | sell on | sell $ | gross bps | net bps | note |
|---|---|---|---|---|---|---|---|
| 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.| asset | chain | local sym | USD mid | buy | sell | venue | age | fresh |
|---|---|---|---|---|---|---|---|---|
| loading… | ||||||||
Profit report
One card per trade route. Wallet in this currency is the full USD balance of that asset, every venue, not split across routes. Result is settled money after fees and gas. Gas is that on-chain cost, already taken out of the result. Performing is the return on that money, or the win rate, or how the live quote compares with its floor. Edge reality is the posted edge stored on each fill, the net that fill was aimed at, and the settled net it actually hit. Print and the PDF list every pair.
Open this page to load the latest report.
User accounts
…
Create user
Tickets
New ticket
Alchemy
Manages the API key used when a chain's endpoint source is set to Alchemy
on the Nodes-Pricing tab. One key covers every network that has an
alchemy_network slug configured — you don't pay per-chain.
How Alchemy billing works
This instance …
Pending enrollments
Approved guests
Guest dashboard
Readiness checklist
Identity
Authentication
Actions
What's left to do
Relay audit log (last 256)
Function Speed
(t) starts when the function is fired. While it is still running, (t) is the time since that fire. When it returns, (t) is how long the fire took. A healthcheck reads (t) four times a second. ok means the last fire finished under 1s. slow means the last (t) was 1s or more. stalled means it is still running and (t) has reached 8s. This page does not call the functions.
| page | function | health | (t) | fires | max (t) | last error |
|---|---|---|---|---|---|---|
| Loading function list… | ||||||
CEX-Maker / DEX-Hedge (DSA)
—Staleness (DEX→CEX)
—▸ ops to inline the live opportunity feed. Modes:
OFF — paused ·
LIVE — observe only, not fed to the trade engine ·
ON — fully executing.
CMDT and Staleness can both be ON at once (DSA maker-first vs DEX-first capture).
CMDT rules flagged dry_run in config stay in observe mode regardless of ON.
Requirements
build 20261103.3Bugs and optimizations found in the running engine, and what was done about each one. The posted distance still clears the live maker fee plus a 15 bp minimum. Quotes are not moved onto the touch.
| Found | Kind | What was wrong | What we did | Build |
|---|---|---|---|---|
| 2026-11-02 | P&L | A CEX fill whose DEX hedge reverted still counted as a multi-dollar win. The report used the swap’s min-out as if the pool had paid. | A reverted hedge never invents proceeds. The headline keeps the settler’s booked fee (and burned gas). Oct 30 AAVE and BTC no longer print +$3 from JoeRouter EXPIRED. | 20261103.3 |
| 2026-10-24 | P&L | The loss card said a 45 bp live edge covered a 250 bp buffer. That buffer is older than 48 hours and does not raise the post. | A loss older than 48 hours says so on the card. The headline, the win and loss counts, gross, fees, and gas each say what they add, since September 4. | 20261024.8 |
| 2026-10-24 | GUI | A narrow live card hid how far the order sat from the book, and hid how long it had rested. The side cell also printed the whole trade id. | From the touch and age stay visible, with their names in front of the numbers. The side cell says on book. The trade id is on the hover and in the copied JSON. | 20261024.7 |
| 2026-10-24 | GUI | The live row called the gap from the mid “to the touch,” and it called the profit of crossing the current book the profit of filling our order. | From the touch is the gap from the best book price on that side to our order. At the touch is the net if that book filled, after fees. At our price is the net if someone hits our order and the pool does not move. A live card shows the limit and the size, not a paragraph. | 20261024.6 |
| 2026-10-24 | GUI | The live card put the hedge gap and the walk-to-our-price gap under one word, and buried the required post in a row of pills next to a price chart. | The live card leads with six labeled figures: required post, distance now, edge knob, floor, cushion, and min net. To the touch is its own column. The price chart sits under Where the prices sit. | 20261024.5 |
| 2026-10-24 | Risk | A fill report on a shared Kraken or Binance.US account was logged as missed on the first pair that heard it, even when another pair still had the order. | The missed-fill alarm fires only for the pair that posted or adopted that order, and only after that pair has lost the resting row and the placement record. | 20261024.4 |
| 2026-10-24 | GUI | The live window opened every pair with four charts and three sliders. The word sandwich and five different edges sat on one card. | The live window shows the pair, the two orders, and the distance. Charts and sliders sit under Adjust this pair. Each label has a tooltip. Edge knob, required post, and distance now stay separate names. | 20261024.3 |
| 2026-10-24 | Risk | A missed fill and a retry still expired after one hour. The in-memory list of dropped orders did too. | Every recovery path keeps the fill hedgeable for a day. The phone alert is unchanged. The 15 bp gate still applies. | 20261024.2 |
| 2026-10-24 | Guard | The loss buffer was empty after a restart until someone opened P&L. A ten-day-old crash number was not used, and a thin opposing touch could still fill a resting order. | Buffers are saved and loaded at startup, and P&L is built once after boot so a fresh loss arms without opening the page. A loss older than 48 hours does not raise the post. An opposing touch under $10 pulls the resting quote. Owning the touch on a real book does not. | 20261024.2 |
| 2026-10-24 | P&L | Wallet cards shared one read across hedges. Binance before-and-after stayed frozen when the strings differed slightly. Gas and the clip used the resting size, not the fill, and skipped the dollar mark. Late fills had no momentum. Tape drift stayed on the candle after the price was replaced. | Each card applies its own hedge leg unless the live wallet already moved by that leg. A venue read that has not moved by the fill is updated from the fill. Gas and the clip use the filled size in dollars. Momentum is stamped at post. Drift is recomputed from the engine price. | 20261024.2 |
| 2026-10-24 | Frequency | A same-tick repost skipped the free-balance check. The traded-through counter went up on the cancel decision, before the market had traded through. The live window called the edge knob the posted edge, and a saved 5 bp minimum looked live. | The repost may use the clip just cancelled, and nothing beyond the free balance plus that clip. The counter is only a cancel the market traded through within 60 seconds. The live window names the edge knob, the required post, and the distance now, and the minimum shows 15 bp. Hover any label for the definition. | 20261024.2 |
| 2026-10-24 | Risk | A hedge whose target net was under the minimum was still sent. One card read −142 bp and lost $1.09. Another read +21 bp against a 5 bp floor. | The hedge is refused when target net is under the minimum. The minimum is 15 bp and a saved 5 bp knob cannot undercut it. The refusal is logged and counted. | 20261024.1 |
| 2026-10-24 | Risk | The maker loop dropped orders. The settler found them hours later, including two naked positions held overnight. | A fill the loop missed is queued for a day, not one hour, and the phone is alerted the moment the settler sees it. Late-fill memory holds 256 orders for the hour. The 15 bp gate still applies. | 20261024.1 |
| 2026-10-24 | Risk | Account cards went negative. A $2.74 free balance minus a $154 fill printed −$152. A 1.15 AVAX balance minus a 17.53 sale printed −16.38. Margin is not enabled. | That subtraction was the free residual, and the spent coins were already locked in the order. The after-balance no longer goes negative. A new post cannot exceed the free balance the venue just reported, except the repost of an order we just cancelled. | 20261024.1 |
| 2026-10-24 | Risk | max_rest_ms did not cancel. Orders rested 42 minutes against a 180 second cap, and 17 minutes against a 90 second cap. The cap was cleared whenever the price had not left the band. | The cap cancels on the tick it expires, including when the price is unchanged and when the side is otherwise skipped. The cancel is counted. | 20261024.1 |
| 2026-10-24 | Risk | Auto-size posted $154 against a $120 maximum and three clips under the configured minimum. | The size grid and the post both stay inside min_usd and max_usd. A balance under the minimum does not post. | 20261024.1 |
| 2026-10-24 | Risk | A 34 bp post went out against a 38 bp fee. The round trip could not win. | A post is refused unless its edge clears the live fee stack, half of any exchange spread above 20 bp, and the 15 bp minimum. | 20261024.1 |
| 2026-10-24 | Risk | A maker order filled in two pieces 10 ms apart. The hedge used the first piece and left 0.001152 base unhedged. | The two prints are one quantity. The hedge waits half a second and sends the larger cumulative size. A later print sends only the remainder. | 20261024.1 |
| 2026-10-24 | Guard | The loss buffer was calculated on every losing trade and never given to the strategy. The card also showed the losing trade's posted edge as if it were this fill's edge. | Each P&L load publishes the worst buffer per route and side. A live edge under that buffer does not post, and a resting order under it is pulled. The copied figure is named loss posted edge. | 20261024.1 |
| 2026-10-24 | Frequency | Cancels where the market then traded through the price were 26 to 46 per route. The hold was a fixed 8 bp, including on quotes that had paid for more room. | A toward move is held for the whole distance that still clears 15 bp. Past that, the cancel is counted as a traded-through cancel. The order is not held into a loss. | 20261024.1 |
| 2026-10-24 | Guard | Orders filled on books the engine had marked untrustworthy, including a 63 bp book and a thin opposing touch. | An exchange book wider than 40 bp, or a pool wider than 80 bp, pulls the quote. A book between 20 and 40 bp adds half that excess to the required edge. An untrusted mid still blocks only a new post. | 20261024.1 |
| 2026-10-24 | Guard | JOE momentum_max_bps was 400, so the guard could not fire short of a crash. A fat modeled edge then lifted the cap further. | A saved knob above 80 bp is capped at 40 bp, and the surplus lift does not apply to that cap. A side with no momentum sample does not start a new post. | 20261024.1 |
| 2026-10-24 | P&L | The fallback target printed the edge and labelled it as edge minus the fee. 34 minus 38 showed as +34 bp. | Every target path subtracts the fee stack. A stored figure that is already below the edge is left as the net. | 20261024.1 |
| 2026-10-24 | P&L | Wallet quote gained exactly 0.031296 on trades of different sizes. Two hedges in the same millisecond swapped each other's wallet fields. The min-clip notional was the probe size, so gas read 34 bp on a $154 fill. | A wallet read that only moved by dust, or a second hedge inside two seconds, uses this leg's own amounts. Gas bps and the min-clip notional are scaled to the order that filled. Binance after-balances still apply the fill when the cache has not moved. | 20261024.1 |
| 2026-10-24 | P&L | The public candle and the engine book disagreed by 25 to 500 bp, and the momentum line followed whichever one the card happened to read. Late fills showed no momentum at all. Five fields were all called the edge. | When the candle is more than 30 bp from the engine mid, the card uses the engine mid. The knob, the posted distance, the distance at post, and the executable distance are separate fields. A new post waits until a momentum sample exists. | 20261024.1 |
| 2026-10-23 | Fee | The cost of a quote has to be the account’s fee, not a stale seed. Kraken fills since Oct 7 charged about 20–22 bp. Binance.US maker fills charged 0 BNB. | The quote and the hedge check read the live schedule (Kraken TradeVolume 22 maker / 38 taker, Binance.US 0 maker). A Kraken zero before that read is treated as the 40 bp seed, so a fill is not priced as free. | 20261023.3 |
| 2026-10-23 | Fee | Kraken order OI3SGN (15 Oct) was booked with a zero fee. The DEX hedge is DispatchFailed, so the settler skipped the fee read. | Every 10 minutes the settler reads Kraken fills from September 4. A missing fee is read from the order itself, including when the hedge failed, and the booked profit moves by that fee. | 20261023.4 |
| 2026-10-23 | P&L | The headline, tape, and charts mixed in trades from before September 4. | P&L, the tape, the charts, and the profit report start on September 4, 2026 (New York). Older rows stay in the database. | 20261023.3 |
| 2026-10-23 | Speed | Each live route asked the pool for every clip size one after another, so the order update waited on the whole chain of reads. | The size grid is quoted four at a time. The posted price is unchanged: live maker fee, reserves, the 15 bp minimum, and the 8 bp rest band. | 20261023.3 |
| 2026-10-23 | Speed | The footer asked the Avalanche node on every status poll, including a log read while the node was still starting. | The node answer is reused for 8 seconds. Trading and hedging do not wait on that poll. | 20261023.3 |
| 2026-10-23 | Frequency | After a reprice cancel the new quote waited for the next block. That gap was one to two seconds with no order on the book. A failed place in that gap used to start a 45 second cooldown. | A cancel with no fill places the replacement on the same pass. The distance is unchanged. If the venue still has the old clip locked, the reservation stays with this order and the next pass tries again, without the 45 second cooldown. | 20261023.11 |
| 2026-10-23 | Speed | Kraken and Binance rules for the same pool each asked the node for the same clip at the same moment. The second read started before the first answer was stored. | The first read of a clip is shared. A second rule waits for that answer and uses it. If that read fails, the waiter asks again. The posted distance is unchanged. | 20261023.10 |
| 2026-10-23 | Speed | The configured clip was read on its own. The rest of the size grid waited for that answer, then made a second pool read. | The clip is included in the same pool read as the rest of the grid. The grid is sized from the last pool mark when that mark is under 5 seconds old, and from the exchange book after that. The prices that decide the order are the ones just read. | 20261023.9 |
| 2026-10-23 | Speed | The size grid still sent a separate pool read for every clip, four at a time. A new block waited on those trips before the order could move. | Every clip on a rule is read in one call. A size already stored for this block is reused. A sell from the previous output is kept only within 0.5%, and the price is the size that was quoted. | 20261023.8 |
| 2026-10-23 | Speed | Each clip reads the pool twice in a row. The buy comes back, then the sell of that output is read, and the order waits out both trips on every new block. | The sell of the previous output is read in the same wave as the new buy. It is kept when that output is within 0.5% of the new one, and the price is the size that was quoted. A larger move is read again at the real output. | 20261023.7 |
| 2026-10-23 | Speed | Each clip on a tick asked the node for the latest block’s gas. One quote waited on that same answer once per size, ahead of the pool read that sets the price. | A chain head younger than 3 seconds already carries that block’s base fee, so the quote uses it. A second read inside the same second reuses the last answer. The posted distance is unchanged. | 20261023.6 |
| 2026-10-23 | Frequency | In 20 minutes the engine cancelled 102 resting quotes. Median drift was 9.2 bp against an 8 bp line, and 75 of those cancels were less than 2 bp past that line. Each cancel dropped the order to the back of the queue. | A toward move may use the 2 bp that was already paid at post time. The order stays up until the fill would miss the 15 bp minimum. A wider tick (the line is already above 8 bp) gets no extra room. Away moves still re-anchor at 8 bp. | 20261023.5 |
| 2026-10-22 | Frequency | Quotes sit about 50–65 bp off a 2 bp-wide touch. A 6-hour sample was roughly one fill against about 1,300 posts. Median cancel was 8.8 bp of drift. | Left in place. That distance is the fee plus the 15 bp minimum plus the rest band. A closer quote would post inside the fee. The 15 bp floor is not lowered. | 20261022.8 |
Configuration history
Saved knob sets, newest first. A row is a config file or a profile file whose edge, minimum, momentum, size, or dry-run differs from the one before it. The engine still will not post or hedge under 15 bp when an older file shows a lower minimum.
Kraken staleness doctrine beta
Staleness takes the Avalanche pool first, waits for the receipt, then hedges on Kraken. It holds no resting order. The gate prices that hedge as a taker fill on the adverse touch, even when execution tries a post-only order first.
Maker orders are a different strategy. They post on Kraken and hedge on the DEX. Both may be on. They do not share a score.
The law
- DEX, then Kraken. A tick reads the Kraken websocket book, quotes the Avalanche pool at the funded size, and only then may swap. The Kraken hedge is the second leg.
- Score the taker.
maker_firstmay try a post-only hedge for about 1.2 seconds, then an IOC. The gate does not use that maker price or the maker fee. It uses the touch a taker would pay and the live taker fee. A maker-sized edge is not a fire. - The required gap is the whole stack. Required gross is the taker fee, the slip buffer, gas, the latency reserve, and the pair’s min net, rounded up. The operator threshold raises it when that number is higher. Modeled net must also clear $0.25.
- A gross gap above 250 bp is a bad quote. The engine refuses it. A real book we trade does not clear 250 bp at size.
- A side that cannot fund the clip does not quote. Buying the DEX needs chain quote and Kraken base. Selling the DEX needs chain base and Kraken quote. Capacity under the pair’s minimum is unfunded, not a near miss.
- Only a fresh websocket book may fire. A REST book can paint a price. It cannot authorize a take. A book older than 1.5 seconds cannot fire. After a fire the pair waits its cooldown.
- Do not cut the live floors to force a print. Quiet tape under the stack stays under the stack. The big switch on Kraken → Strategies turns every Kraken staleness rule off, and the next click puts each rule back to the mode it had.
- Staleness stays out of headline P&L until the staleness tile on the P&L page is on. Wins, losses, and P&L today follow that switch.
What the losses fixed
The Kraken JOE clips were scored as if the hedge would rest as a maker, about +2 to +24 bp. After the DEX receipt, Kraken filled the hedge as a taker at about 38 bp. Realized result was about −90 to −150 bp. One quote modeled +817 bp and still lost money. That quote is now a bad quote and does not fire.
Taker scoring stops that mismatch. It does not stop the pool moving during the receipt window. That drift is why slip and the latency reserve stay inside the required gap. Two older AVAX clips on Binance lost the same way at a 2 bp fee: the pool moved before the hedge, not because the fee was scored as maker.
The Kraken book
Each row is one [[staleness]] rule on Kraken. Cross-quote pairs hedge a USD, USDC, or USDT book and trade a WAVAX pool. The card shows the CEX price in that CEX quote. The gate converts the touch into the DEX quote before it scores.
- AVAX/USDC on Pharaoh, hedge AVAX/USDC.
- JOE/USDC on LFJ, hedge JOE/USD. Smaller clip, longer cooldown.
- BTC.b/WAVAX on Pharaoh, hedge BTC/USDC.
- WETH.e/WAVAX on Pharaoh, hedge ETH/USDC.
- AAVE/WAVAX on LFJ, hedge AAVE/USD.
Binance.US and Binance Global have their own staleness rules. This page does not govern them. Binance Global stays dry until its own page says otherwise.
In force now
Live knobs and the last verdict. This is what the gate is using, not a copy of the file.Ops reference
Same text as each page’s help carousel. Print a card or print all.