Architecture

Inside the protocol

The four components that carry the design, what each one is responsible for, and the conditions under which the whole thing actually inherits Solana's security.

Solieum executes transactions in an SVM environment off-chain, publishes the data needed to verify that execution, and commits the resulting state to Solana. It is an optimistic rollup and stays one: no validator set of its own decides finality. Four components carry the design; a fifth thing — independent verifiers — is what makes the other four trustworthy. Six programs are deployed on Solana devnet: the five that carry settlement, and the sequencer bond that prices the operator's own honesty. The node settles real blocks to them.

01

Rollup operator network

In progress

Aggregates incoming transactions, executes them against current L2 state, and produces rollup blocks. Each block header binds to its parent so the chain of state cannot silently fork or skip.

  • Ordering follows a published policy rather than operator discretion.
  • Blocks reference the L1 block they were built against, which anchors them in Solana's history.
  • A proposer posts state roots under bond; an invalid root costs the proposer that bond.
  • Implemented as solieum-node: it signs an ordering receipt per transaction, produces a block every two seconds when there is work, and on devnet publishes each batch and commits each root itself. Restarts replay published data and refuse to serve state that does not reproduce its committed root.
// Rollup block header
pub struct RollupBlockHeader {
    pub block_id:            [u8; 32],
    pub previous_block_hash: [u8; 32],
    // Binds to the parent's post-state, so the root chain
    // cannot fork or skip a block.
    pub pre_state_root:      [u8; 32],
    pub transactions_root:   [u8; 32],
    pub post_state_root:     [u8; 32],
    pub l1_reference_block:  u64,
    pub proposer:            [u8; 32],
}
02

State commitment chain

In progress

A Solana program holding the sequence of L2 state roots. This is the anchor: once a root is final here, the L2 state it represents is what withdrawals are settled against.

  • Roots advance strictly one block at a time, with no gaps and no rewrites.
  • Time comes from the on-chain clock, never from the submitter — a challenge window measured by a value the operator controls is not a window.
  • Each root moves through an explicit lifecycle: proposed, challengeable, then final.
  • Deployed on Solana devnet. The first root landed within five seconds of its transaction, and challenge verdicts enter only by cross-program call from the dispute program — a direct key cannot inject one.
// State root lifecycle
Proposed ──► Challengeable ──► Final
     │              │
     │              └──► Challenged ──► Disproven (root removed, bond slashed)
     └──► rejected if the parent link or sequence does not match
03

Fraud proof system

In progress

Lets anyone challenge a state root they believe is wrong. Challenger and proposer narrow the disagreement down to a single execution step, which Solana can then check directly and cheaply.

  • Re-running an entire batch on L1 does not fit inside a transaction's compute budget, so the dispute is narrowed by bisection instead.
  • Each round halves the disputed range; the final round is one instruction, verified against proofs of exactly the state it touched.
  • The full dispute must complete comfortably inside the challenge window, with margin for L1 congestion.
  • The dispute game is a Solana program deployed on devnet. Its witnessed one-step verifier is measured at about 20,000 compute units for system and SPL-token transfers; wider instruction classes are the open work.
// Narrowing a disagreement to one step
round 1   [ 0 ............................. N ]   disagree
round 2   [ 0 ......... N/2 ]                     disagree
round 3            [ N/4 ... N/2 ]                disagree
   …
round k                    [ i, i+1 ]            one instruction
                              ▼
                    verified on Solana L1
04

Data availability

In progress

Publishes the transaction data needed to reconstruct L2 state independently. Without it, nobody outside the operator can check the operator — and the fraud proof system has nothing to prove against.

  • Data is published so any party can re-derive the chain and compare roots.
  • Retention has to outlast the withdrawal path: a withdrawal that becomes unprovable once data expires is a loss, not an inconvenience.
  • Where the data lives determines what the system actually is — on Solana it is a rollup; elsewhere it is a different security model with a different name.
  • Implemented as a Solana program on devnet: a batch is opened, its compressed bytes posted in transactions, and sealed only if they fold to the commitment declared at open. The data lives on Solana.

The part that does the work

Fraud proofs only protect anyone if somebody is checking. A verifier re-derives L2 state from published data and compares its own root against the posted one; a mismatch is the alarm that matters. The loop exists as code — agree, diverge, or not yet derivable, kept distinct so withheld data is never mistaken for fraud — and in the harness the divergence alarm opens a real challenge on-chain. Solieum's aim is for verifiers to run outside the team, because a system where only the operator is watching is trusting the operator; packaging it for strangers is the work that remains.

Roles

Who does what, and what each can do wrong

RoleResponsibilityWorst case
SequencerOrders and executes transactions; signs a receipt per positionDelay or reorder; cannot forge state once proofs enforce, and cannot deny a position it signed. A staked set is a later stage — for ordering only
ProposerPosts bonded state roots to SolanaPost an invalid root, and lose the bond for it
BatcherPublishes batch dataWithhold data, which is itself detectable
VerifierRe-derives state independentlyDetect a bad root — the security backbone
ChallengerDisputes invalid roots on L1Remove a bad root and claim the bond
RPCServes applications and walletsMisreport state to clients; verify against L1 for anything that matters

Walkthrough

Follow one transaction through all four components

The components above are easier to hold onto when you watch a single transfer cross them.

  1. 01

    You sign a transfer and submit it. The rollup operator's sequencer places it in an ordered batch and executes it — your balance moves in L2 state, and you get a soft confirmation in milliseconds.

  2. 02

    The batch containing your transfer is compressed and published on Solana through the data-availability program — opened, posted, sealed against its commitment. From this moment, anyone can reconstruct what happened without asking the operator.

  3. 03

    The proposer computes the new state root — a fingerprint of every account after your batch — and commits it to the state commitment chain on Solana, posting a bond behind it.

  4. 04

    Independent verifiers re-derive the same root from the published data. Match: silence, by design. Mismatch: one of them opens a dispute in the fraud proof system, the bisection narrows to a single instruction, Solana checks it, the bad root is removed and the bond is slashed.

  5. 05

    The challenge window closes with no successful dispute. Your transfer is now final — provable on Solana, spendable on Solieum, withdrawable through the bridge.

Failure modes

If a component fails

Redundancy claims mean nothing without the failure column filled in.

FailureEffectDetail
Operator network downLiveness lost, funds safeNo new batches. Existing state and exits against the last final root are untouched. Forced inclusion queues transactions on L1.
Commitment chain stalledFinality delayedRoots stop advancing; withdrawals queue. Soft confirmations continue but nothing new becomes final until submission resumes.
Proof system brokenSafety depends on it staying unusedThe worst one. If disputes cannot be raised or resolved, an invalid root could finalise — which is why the dispute game gets formal specification and its own audit.
Data withheldVerification blindDetectable by verifiers immediately — they report not-yet-derivable, which is deliberately not a fraud alarm. Policy: halt root finalisation rather than finalise unverifiable state.

Security architecture

Security architecture: where the trust boundaries actually are

After the 2026 bridge losses the useful question is not whether the contracts are audited but what each component believes about the other chain, and who could lie to it. ADR-0013 records the answers; the status of each is on the security page.

  • Out: proof, not attestation

    The vault pays only against an inclusion proof verified on-chain against a final settlement root. No verifier set exists to compromise or downgrade.

  • In: two RPCs must agree

    The node learns of deposits by reading Solana. That read is the boundary: it requires agreement from every configured provider, halts and alarms on disagreement, and no credit may exceed what the vault holds. Built. The beta devnet chain read through two independent providers, the public endpoint and a keyed second one; the first time they disagreed, one lagging on a freshly created inbox entry, the node refused the read and halted crediting rather than pick a side, which is the rule doing its job.

  • Watchers on their own rails

    Verifiers use RPC infrastructure the sequencer does not, so a lie told to the operator is not also told to the watcher. The divergence alarm is the signal. The watchtower exists as one command and is drilled; nobody outside the operator runs one yet.

  • Keys: quorum, timelock, hardware

    Multisig upgrade authority with a timelock longer than the exit path; on-device confirmation; three roles on three machines. Devnet runs one hot key and says so.

  • Limits before humans

    Caps and velocity limits that defer rather than lose, plus a payout delay that lengthens with size. The delay exists; the caps are built in the program since 2026-09-12 and not yet deployed, so no chain enforces them.

  • A pause that cannot become custody

    The pause stops new deposits and new roots. The withdrawal path cannot read the flag, so no setting of it delays a payout. Built and tested.

  • One key that can reach a proven withdrawal — and its limits

    The challenge window proves nobody objected. It cannot prove the dispute machinery was sound, so between your proof and your payout there is a gap in which a guardian can deny a settlement root: the case where a false root survives its window through a bug or a challenger who was censored. The power is deliberately blunt. It names a root, never your withdrawal, so it cannot be pointed at a person. It moves no money. And the remedy is not the guardian's to withhold — anyone can reopen an affected claim, and your leaf is still in the tree, so you prove it again against the next honest root. It costs you time, not funds. Written and tested in the program source; not yet on the deployed devnet build, and the guardian is a mainnet key that does not exist yet.

When a Layer 2 inherits Solana's security

All three have to hold at once. The first two are live on devnet and the third is built; none is enforcing on a network that holds funds. The security page tracks where each one stands today.

  1. 01Batch data is published, so state can be reconstructed by anyone.
  2. 02An invalid state root can be proven wrong and removed, by anyone.
  3. 03Users can exit against a final root without the operator's cooperation.

Where each condition stands today →

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.