This guide covers how to set up and run the Single Sequencer implementation of Rollkit EVM chains. This implementation provides a centralized approach to transaction sequencing while using EVM as the execution layer.
Before starting, ensure you have:
- Go 1.20 or later
- Docker and Docker Compose
- Access to the go-execution-evm repository (op-geth branch)
- Git
git clone --depth 1 --branch {{constants.rollkitLatestTag}} https://github.com/rollkit/rollkit.git
cd rollkitmake build-evm-single
make build-daThis will create the following binaries in the build directory:
evm-single- Single sequencer implementationlocal-da- Local data availability node for testing
cd build
./local-da startThis will start a local DA node on the default port (26658).
git clone https://github.com/rollkit/go-execution-evm.git
cd go-execution-evm
git checkout op-gethdocker compose up -dThis will start Reth (Rust Ethereum client) with the appropriate configuration for Rollkit.
The JWT secret is typically located at go-execution-evm/docker/jwttoken/jwt.hex. You'll need this path for the sequencer configuration.
cd build
./evm-single init --rollkit.node.aggregator=true --rollkit.signer.passphrase secret./evm-single start \
--evm.jwt-secret $(cat /path/to/go-execution-evm/docker/jwttoken/jwt.hex) \
--evm.genesis-hash 0x0a962a0d163416829894c89cb604ae422323bcdf02d7ea08b94d68d3e026a380 \
--rollkit.node.block_time 1s \
--rollkit.node.aggregator=true \
--rollkit.signer.passphrase secretReplace /path/to/ with the actual path to your go-execution-evm repository.
To run a full node alongside your sequencer, follow these steps:
./evm-single init --home ~/.rollkit/evm-single-fullnodeCopy the genesis file from the sequencer node to the full node:
cp ~/.rollkit/evm-single/config/genesis.json ~/.rollkit/evm-single-fullnode/config/Find the sequencer's P2P address in its logs. It will look similar to:
INF listening on address=/ip4/127.0.0.1/tcp/26659/p2p/12D3KooWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX./evm-single start \
--home ~/.rollkit/evm-single-fullnode \
--evm.jwt-secret $(cat /path/to/go-execution-evm/docker/jwttoken/jwt.hex) \
--evm.genesis-hash 0x0a962a0d163416829894c89cb604ae422323bcdf02d7ea08b94d68d3e026a380 \
--rollkit.node.block_time 1s \
--rollkit.node.aggregator=false \
--rollkit.p2p.peers <SEQUENCER_P2P_ID>@127.0.0.1:26659Replace <SEQUENCER_P2P_ID> with the actual P2P ID from your sequencer's logs.
After starting your nodes, you should see logs indicating successful block processing:
INF block marked as DA included blockHash=XXXX blockHeight=XX module=BlockManager| Flag | Description |
|---|---|
--rollkit.node.aggregator |
Set to true for sequencer mode, false for full node |
--rollkit.signer.passphrase |
Passphrase for the signer |
--rollkit.node.block_time |
Block time for the Rollkit node |
| Flag | Description |
|---|---|
--evm.eth-url |
Ethereum JSON-RPC URL (default http://localhost:8545) |
--evm.engine-url |
Engine API URL (default http://localhost:8551) |
--evm.jwt-secret |
JWT secret file path for the Engine API |
--evm.genesis-hash |
Genesis block hash of the chain |
--evm.fee-recipient |
Address to receive priority fees |
You've now set up and configured the Single Sequencer implementation of Rollkit EVM chains. This implementation provides a centralized approach to transaction sequencing while using EVM as the execution layer.