◆Exits
Getting out
Forced inclusion and permissionless exit — the two properties that separate a Layer 2 from something holding your funds.
Everything else on this site is a performance argument. This page is the safety one. If you cannot get your funds out when the operator is uncooperative, offline, or hostile, then nothing else about the design matters.
Forced inclusion
In progressA censoring sequencer is not a hypothetical — it is the default failure mode of a single operator. Forced inclusion removes it as a permanent condition: submit your transaction directly to a Solana program, and if the sequencer has not included it within a fixed maximum delay, the chain's own derivation rules include it whether the operator cooperates or not.
- Submission goes to Solana, so the sequencer cannot block the route.
- A hard maximum delay, after which inclusion is mandatory rather than discretionary.
- The queue and its age are public, so censorship is visible as it happens.
- This is what makes a centralised sequencer survivable rather than custodial.
Where this actually stands: the Solana program you submit to now exists, and the properties that make it a route rather than a courtesy are tested. Submitting takes no permission and does not involve the sequencer's key at all. Your inclusion deadline is fixed on-chain from the cluster clock at the moment you submit, and nobody can edit it afterwards. If your transaction is ignored past that deadline you take your fee back yourself, without the sequencer's cooperation — so being censored costs the operator the fee and costs you nothing — and a late inclusion is stamped late permanently rather than tidied up. The enforcement half is wired to it: an entry left past its deadline while the operator keeps posting batches makes their chain stop deriving — a fault naming the offending batch and the entry it skipped, while everything before it still stands. That is tested with both halves read back from on-chain records rather than from hand-made fixtures, so ignoring a transaction costs the operator the fee and invalidates their chain. The node now drains this queue as part of producing every block: it reads the entries off Solana, executes them, records each inclusion on-chain, and declares in the posted batch exactly how far it consumed — the number the derivation rule checks. Two things were forced by wiring that, and both are worth knowing. The transaction bytes now live on the queue entry itself rather than being hashed and kept elsewhere, because a sequencer can always claim it never received bytes it cannot be shown to have — a commitment nobody can open is not a forced transaction. And an entry that turns out to be junk, unsigned, or unpayable is still consumed and still counted, published as a record of its own; otherwise anyone could freeze the chain for the price of one fee by queueing garbage. Forced inclusion promises a slot, not a successful transaction. Measured: a transfer submitted only to Solana landed in the next block, and three adversarial entries — junk, an unfunded signer, a valid transfer behind them — were all consumed with balances changed by exactly the valid one. Where it is: the inbox program is deployed on Solana devnet, and the node settling there drains it every block. What is still missing is the part no test can supply — nobody outside the team has used it, and the convenience command that submits for you pays the Solana fee from the node's own wallet, so it demonstrates the drain rather than the independence. It is a route that works and is deployed, not yet a route in use by anyone independent.
Permissionless exit
In progressIf Solieum stops entirely — the sequencer is gone, the operator is unreachable, the company no longer exists — you prove what you own against the last final state root and withdraw on Solana. No cooperation required, no permission asked.
- Proven against the last final root, using publicly available data.
- Executable with public tools by someone with no relationship to the team.
- Rehearsed in a public drill by an unaffiliated user — an exit path nobody has ever used is a claim, not a feature.
Where this actually stands: the on-chain side exists and works. A program verifies a Merkle proof of your withdrawal against a state root that is final on Solana, checks that the proof commits to your exact amount and recipient, and pays out — with no involvement from the operator, and with the payout callable by anyone. It is demonstrated end to end against the settlement program, including that an inflated claim riding a genuine proof is rejected. Where it stands on devnet: deposits are credited in the next block, and the first withdrawal has been initiated — an ordinary signed transaction to the reserved L2 bridge address debited the sender and committed the withdrawal leaf into block 7 of the alpha chain, whose root is on Solana under bond, and again into block 3 of the beta chain on 2026-09-05. The proofs exist, sparse ones on the beta chain, and on 2026-09-07 the beta chain's first withdrawal was paid by the vault: proven against its root once final, held by the air gap, then paid — every step on Solana's public devnet. By the time beta stopped on 2026-09-12, all four of its withdrawals, 14,000,000 lamports, had been proven and paid, and it owed nothing. The alpha chain's first withdrawal still waits on the seven days it was created with. That, and public tooling for building your own proof, remain the open items. Until an unaffiliated person has done that in a drill, treat this as mechanism built rather than exit proven.
What a pause may and may not do
Emergency powers that can block exits are indistinguishable from custody. The line is that a pause protects users from an in-progress exploit; it must never become the mechanism by which funds are held.
May
- Stop new deposits
- Stop new state root submissions
- Halt the sequencer
Must never
- Delay a withdrawal that has already been proven
- Extend a challenge window that has already started
- Persist without an expiry and a public record
The first rule in the second column is enforced by construction rather than by policy: in the bridge program as written, the withdrawal path does not read the pause flag at all, so no setting of it can reach a proven withdrawal. The test that matters pauses the bridge, watches a deposit be refused, and then pays out an already-proven withdrawal while it is still paused. One other power does reach a proven withdrawal, and it is not this one — it is the air gap below.
The air gap, and the one key that reaches a proven withdrawal
In progressThe challenge window answers whether a root was challenged. It cannot answer whether the dispute machinery itself was sound — a bug in the verifier, or a challenger censored for the whole window, finalises a false root with nothing left to stop it. So the delay between proving your withdrawal and being paid is an air gap: the interval in which a guardian may deny a settlement root. This is the one place a key can reach a withdrawal you have already proven, and it is on this page rather than buried in a changelog, because a safety page that lists only the reassuring mechanisms is not a safety page.
- It names a root, never a withdrawal id — there is no instruction that can be pointed at a person.
- It moves nothing: denying creates a marker, and no path lets the guardian withdraw, redirect, or change a recipient.
- The remedy is permissionless. Anyone, not only the guardian, reopens an affected claim; your leaf never expired, so you prove the same withdrawal against the next honest root.
- The guardian is a different key from the upgrade authority, and the program refuses to install one that is not.
- A denial is permanent and public, and the count of them is readable on-chain.
What it costs you if it is ever used is the time to prove again, not your funds. What the design cannot survive is being coy about it, so plainly: this is written and tested in the protocol's own core, and the program half is deployed on the devnet chains — first on beta, now on gamma — with a guardian installed on each portal, and the mainnet guardian key does not exist yet. The gamma devnet portal carries the air gap, as beta's did — a one-hour payout delay and a guardian installed (a separate key that can only deny a settlement root). Mainnet is planned at twenty-four hours, which with the 48-hour window (ADR-0016) makes a full exit about three days. The window was shortened, but not to pay for the air gap: it was sized against the dispute game's own arithmetic, which needs hours, while the air gap took over the separate job the window had been doing badly.
◆Walkthrough
The exit, step by step, as a user
The scenario the whole page exists for: the operator is gone, the website is down, and you hold funds on Solieum. What you actually do.
- 01
Fetch the published data
Batch data is published in Solana transactions through the data-availability program, and committed roots live on the settlement program — neither depends on the operator existing. Public tooling reconstructs the final L2 state from them; the node itself does exactly this on every restart.
- 02
Prove your account
From that state, generate a proof that your account holds what it holds under the last final root. This is maths against public data, not a request to anyone.
- 03
Submit to the L1 portal
Present the proof to the bridge program on Solana. The program checks it against the root it already trusts — the operator is not a party to the verification.
- 04
Receive on Solana
Verified proof, released funds. Every step used public data, public programs, and your own signature. Nobody's cooperation appeared anywhere in the sequence.
Exit questions to ask any Layer 2
- Has the escape hatch ever been used by someone outside the team, on a network with real value?
- Does exiting require any operator-run service — an RPC, an indexer, a proof server — to be online?
- Can the emergency pause block a withdrawal that is already proven?
- If data retention lapsed tomorrow, could you still construct your proof?
- Is the exit documented well enough that a competent stranger could execute it from the docs alone?
Building something the base layer can't hold?
Tell us the workload. If Solieum is the wrong answer for it, we would rather say so early than have you find out at launch.