Nomos Sovereign Rollup Example
This repository contains a proof-of-concept implementation of a Risc0-based sovereign rollup showcased by Nomos during IFT All-Hands 2025 in Split. The system demonstrates a complete end-to-end sovereign rollup architecture with EVM compatibility.
Overview
This implementation consists of three main components:
- Sequencer Node: An Reth-based execution node that processes transactions and submits blocks to Nomos.
- Prover: Generates zero-knowledge proofs for block execution, ensuring the correctness of state transitions.
- Light Node: Verifies proofs and block data, enabling trustless verification of the rollup state.
The system integrates with a fork of zeth (an Ethereum STF): 👉 logos-co/zeth
Additionally, the repository includes a fully functioning Uniswap example:
- Uniswap's Contracts - Smart contracts for the DEX
- Nomoswap: Uniswap Frontend - Web interface for interacting with the DEX
- Blockscout: Block Explorer - Block explorer for the rollup
Prerequisites
- Rust
- Cargo
- Access to a Nomos node
Installation
-
Clone the repository:
git clone https://github.com/your-org/nomos-example-sovereign.git cd nomos-example-sovereign -
Build the components:
cargo build --release
Running the Sovereign Rollup
1. Start the Sequencer Node
The sequencer node processes transactions and submits blocks to Nomos:
NOMOS_EXECUTOR="https://nomos.url" \
NOMOS_USER=your_username \
NOMOS_PASSWORD=your_password \
cargo run --release --bin evm-sequencer-node
Environment variables:
NOMOS_EXECUTOR: URL to the Nomos testnet nodeNOMOS_USERandNOMOS_PASSWORD: Authentication credentials for the Nomos node, if required
The sequencer exposes RPC endpoints on:
- HTTP: http://localhost:8545
- WebSocket: ws://localhost:8546
2. Start the Prover
The prover generates zero-knowledge proofs for block execution:
cargo run --release --bin evm-prover -- \
--rpc http://localhost:8545 \
--start-block 0 \
--batch-size 10 \
--interval 5 \
--zeth-binary-dir /path/to/zeth/bin
Parameters:
--rpc: URL to the sequencer's RPC endpoint--start-block: Block number to start proving from--batch-size: Number of blocks to prove in a batch--interval: Polling interval in seconds--zeth-binary-dir: Path to the directory containing the zeth binary
The prover service will be available at: http://localhost:8070
3. Start the Light Node
The light node validates proofs and verifies block data:
cargo run --release --bin evm-lightnode -- \
--rpc http://localhost:8545 \
--ws-rpc wss://localhost:8546 \
--prover-url http://localhost:8070 \
--nomos-node https://testnet.nomos.tech/node/3/ \
--batch-size 10 \
--zeth-binary-dir /path/to/zeth
Parameters:
--rpc: HTTP RPC endpoint of the sequencer--ws-rpc: WebSocket RPC endpoint of the sequencer--prover-url: URL to the prover service--nomos-node: URL to the Nomos testnet node--batch-size: Number of blocks in a proof batch--zeth-binary-dir: Path to the directory containing the zeth binary
Deploying Uniswap
Follow these steps to deploy and interact with Uniswap on the sovereign rollup:
-
Deploy the Uniswap's Contracts
cd nomos-example-uniswap-contracts # Follow instructions in the README -
Deploy Nomoswap
cd nomos-example-uniswap # Follow instructions in the README -
(Optional) Deploy Blockscout
cd nomos-example-blockscout # Follow instructions in the README
Each component's directory contains a detailed README with specific setup instructions.
Architecture
+----------------+ +----------------+ +----------------+
| Sequencer |----->| Prover |----->| Light Node |
| (EVM) | | (Risc0) | | (Verifier) |
+----------------+ +----------------+ +----------------+
| |
v v
+----------------+ +----------------+
| Nomos Node |<--------------------------| Consensus |
| (DA Layer) | | Verification |
+----------------+ +----------------+
q The system works as follows:
- Sequencer processes transactions and sends blocks to the Nomos data availability layer
- Prover generates ZK proofs of block execution
- Light Node fetches blocks from the sequencer and verifies proofs
- Light Node confirms block data is available on Nomos