Proof deck · every flow proven on real Rabby

We don't ask you to trust it.
This page verifies itself.

Atrium is cross-venue portfolio margin for the EVM — one deposit backs positions across venues because risk nets instead of being re-posted. Below, every user flow we ship is driven end-to-end with a real wallet against the live Arbitrum Sepolia contracts. Each screen is a real screenshot; each money move is a real transaction. And right now, in your browser, this page is reading those transactions back off-chain to confirm they're real — watch the badges turn green.

Flows proven
14
connect → deposit → open → withdraw → delegate → verify → and more
On-chain txs
4
verifying live…
Tests passing
792
unit + contract; core SPAN invariant Kani-proven
Chain tip
reading live…
Act I

Identity & the money round-trip

real Rabby · real USDC · real on-chain txs

01Connect — on-chain identity

A real Rabby wallet connects and signs in (SIWE). The portfolio reads live: buying power from Plinth's cross-product margin, collateral from Coffer — all labelled LIVE · ARB-SEPOLIA. Disconnected, it shows honest empty states, never mock data.

Connected portfolio
Connected as 0x6821…4a76 · Margin Lens + buying power read live from Plinth + Coffer.

02Deposit — collateral in

Enter an amount, approve USDC, deposit into the Coffer (ERC-4626) vault — two real Rabby confirmations. The balance moves for real: vault value $2.88 → $7.88 (+$5), and ERC-4626 shares mint accordingly.

Vault before deposit, amount entered
Before · vault value $2.88 · amount entered, "Deposit 5 USDC" armed.
Vault after deposit
After · vault value $7.88 · shares minted · "Deposit again".
approve0xb866ea02…deposit0x488ca0f2…checking…

03Open a position — on Aave

The trade form defaults to the openable venue (Aave Horizon), computes margin impact, and routes the open through AtriumRouter → Plinth → Coffer → adapter in one signed tx. On-chain, getUserPositions(0x6821…) returns [6, 7, 8, 10, 11, 12] and the account stays healthy.

Trade after open
Open succeeds → "Open another" · venue selector on Aave · margin impact computed live ($6.89).
open · Router0xbf1bcc82…checking…

04Withdraw — collateral out

The round-trip closes: withdraw from the vault, one Rabby confirmation, balance moves back — vault value $7.57 → $6.57 (-$1), shares burned via convertToSharesCeil.

Vault after withdraw
After · vault value $6.57 · shares burned · "Withdraw again".
withdraw · Coffer0xa198767b…checking…
Act II

Agentic & trust

delegate within limits · prove reserves · pay-per-call

05Proof of Reserves — verify it yourself

Atrium never custodies funds and proves it: Lantern publishes a signed Merkle attestation of every balance on-chain, and anyone generates an inclusion proof for their own balance in the browser — no trust required. Redeemable is a live read of Coffer.convertToAssets(balanceOf(you)).

Proof of Reserves
"Prove your balance to anyone in seconds." Redeemable read live on-chain.

06x402 API — a live, pay-per-call console

Codex is an x402-payable read API: margin, risk, positions, venue health, agent performance, attestations. The docs ship a live try-it console; public endpoints answer in the browser, per-user endpoints honestly require a signed wallet.

x402 try-it console
Codex worker LIVE · the in-browser try-it calls the real read route.

07Delegate to an agent — bounded, enforced on-chain

A user signs one EIP-712 Intent Sigil; a separate agent session key signs each trade within the signed scope — per-action cap, total cap, actions/day, expiry, venue allowlist. The SPAN engine (Plinth, in Stylus) checks every action against the mandate before any funds move. Four real transactions prove it: in-scope is ALLOWED, over-cap reverts NotionalExceeded (BLOCKED), a one-tap kill switch revokes, and a post-revocation action reverts MandateRevoked (BLOCKED) — each clickable on Arbiscan.

Agents page with on-chain enforcement proof
Recorded run · the mandate is the limit, not your trust · four real txs, ALLOWED / BLOCKED, each clickable on Arbiscan.
Act III

Breadth — every surface works

not a one-flow demo

08Cross-chain transfer — CCIP

Move collateral across chains via Aqueduct (Chainlink CCIP). Enter an amount and the estimate (fee, destination, receive) renders live.

Cross-chain transfer with estimate
5 USDC entered → estimate renders: time, CCIP fee, Postern-sponsored gas, Plinth credit on arrival · "Transfer 5 USDC" armed.

09Markets — the cross-venue set

Nine Portico adapters deployed and verified; seven venues in margin scope. Each is honestly badged — only Aave is openable today; the rest are deployed-but-scaffolded and say so. A "two venues, one margin account" worked example shows the netting.

Two venues, one margin account
"Two venues, one margin account" · the worked example computes from the same SPAN engine that margins on-chain.

10Onboarding — ninety seconds to a position

A new user: passkey, faucet (5 USDC + a gas grant so they're never stranded), first cross-margin position. Honest callouts throughout — "gas sponsorship is coming", "funds are testnet only".

Onboarding
"Step inside the atrium." Clear value, honest callouts, dual CTAs.

11Command palette — ⌘K navigation

A keyboard-first command palette jumps to any surface. Opens on click and ⌘K, filters, navigates — the small touches of a real product.

Command palette
⌘K palette over the live portfolio · filter and jump.
Act IV

Resilience — it doesn't break

the parts judges try to break

12Total backend outage — graceful

With the entire backend API aborted, the app degrades gracefully — no white screen, no $NaN, no crash. Honest empty/error states, real on-chain values where it can still read them.

API outage degradation
All /api/* aborted → still renders, honest, no crash.

13Hostile inputs — sanitized

Letters, symbols, negatives, scientific notation, huge values — every amount input sanitizes them, no NaN, no layout overflow, over-balance gated at submit.

Hostile input handling
Garbage in → sanitized; no NaN, no overflow.

14Smallest phone — 320px, flawless

At 320px (smaller than an iPhone SE), zero horizontal overflow, modals fit, nav works, focus rings visible on every tab. Many products break below 360px; Atrium holds.

320px mobile
320px · no overflow · usable.
Verify

On-chain transaction index

live-checked in your browser

Every money move this session, on Arbitrum Sepolia. The badge on the right is filled by JavaScript on this page calling eth_getTransactionReceipt against the public Arbitrum RPC — so you're not trusting our screenshots, you're reading the chain.

Deposit · approve USDC0xb866ea02…bfd50checking…
Deposit · Coffer.deposit0x488ca0f2…49fd26checking…
Open · Router.open_position0xbf1bcc82…afb765checking…
Withdraw · Coffer.withdraw0xa198767b…40b585checking…
Wallet · all txs0x6821…4a76
Plinth · SPAN margin engine (Stylus)0xe01d09ed…2a26c
Coffer · ERC-4626 vault0xb6276200…6a86ef
AtriumRouter0xE3E3bdc0…0B562
Sigil · agent mandates0x517afac9…959cdc
Said out loud, because we don't fake anything. Testnet only — nothing here has economic value. Only Aave Horizon is openable today; the other venues are deployed-but-scaffolded and the UI marks them so. Year-1 contracts are upgradeable (UUPS + multisig + 48h timelock), not yet immutable — and we say so. If Proof-of-Reserves or position history reads "pending", that's a third-party indexer (The Graph Studio) outage; the on-chain values are still read directly and shown honestly, never inflated.
zoom