Evolve EVM Single Sequencer Setup Guide
Evolve EVM Single Sequencer Setup Guide
Introduction
This guide covers how to set up and run the Single Sequencer implementation of Evolve EVM chains. This implementation provides a centralized approach to transaction sequencing while using EVM as the execution layer.
Prerequisites
Before starting, ensure you have:
- Go 1.20 or later
- Docker and Docker Compose
- Access to the ev-node and ev-reth repositories
- Git
Setting Up the Environment
1. Clone the Evolve Repository
git clone --depth 1 --branch {{constants.evolveLatestTag}} https://github.com/evstack/ev-node.git
cd evolve
2. Build the Evolve EVM Single Sequencer Implementation
make build-evm-single
make build-da
This will create the following binaries in the build directory:
evm-single- Single sequencer implementationlocal-da- Local data availability node for testing
Setting Up the Data Availability (DA) Layer
Start the Local DA Node
cd build
./local-da start
This will start a local DA node on the default port (26658).
Setting Up the EVM Layer
1. Clone the ev-node Repository
git clone https://github.com/evstack/ev-node.git
cd ev-node
2. Start the EVM Layer Using Docker Compose
docker compose up -d
This will start Reth (Rust Ethereum client) with the appropriate configuration for Evolve.
3. Note the JWT Secret Path
The JWT secret is typically located at ev-node/execution/evm/docker/jwttoken/jwt.hex. You'll need this path for the sequencer configuration.
Running the Single Sequencer Implementation
1. Initialize the Sequencer
cd build
./evm-single init --evolve.node.aggregator=true --evolve.signer.passphrase secret
2. Start the Sequencer
./evm-single start \
--evm.jwt-secret $(cat /path/to/ev-node/execution/evm/docker/jwttoken/jwt.hex) \
--evm.genesis-hash 0x0a962a0d163416829894c89cb604ae422323bcdf02d7ea08b94d68d3e026a380 \
--evolve.node.block_time 1s \
--evolve.node.aggregator=true \
--evolve.signer.passphrase secret
Replace /path/to/ with the actual path to your ev-node repository.
Setting Up a Full Node
To run a full node alongside your sequencer, follow these steps:
1. Initialize a New Node Directory
./evm-single init --home ~/.evolve/evm-single-fullnode
2. Copy the Genesis File
Copy the genesis file from the sequencer node to the full node:
cp ~/.evolve/evm-single/config/genesis.json ~/.evolve/evm-single-fullnode/config/
3. Get the Sequencer's P2P Address
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
4. Start the Full Node
./evm-single start \
--home ~/.evolve/evm-single-fullnode \
--evm.jwt-secret $(cat /path/to/ev-node/execution/evm/docker/jwttoken/jwt.hex) \
--evm.genesis-hash 0x0a962a0d163416829894c89cb604ae422323bcdf02d7ea08b94d68d3e026a380 \
--evolve.node.block_time 1s \
--evolve.node.aggregator=false \
--evolve.p2p.peers <SEQUENCER_P2P_ID>@127.0.0.1:26659
Replace <SEQUENCER_P2P_ID> with the actual P2P ID from your sequencer's logs.
Verifying Node Operation
After starting your nodes, you should see logs indicating successful block processing:
INF block marked as DA included blockHash=XXXX blockHeight=XX module=BlockManager
Configuration Reference
Common Flags
| Flag | Description |
|---|---|
--evolve.node.aggregator |
Set to true for sequencer mode, false for full node |
--evolve.signer.passphrase |
Passphrase for the signer |
--evolve.node.block_time |
Block time for the Evolve node |
EVM Flags
| 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 |
Conclusion
You've now set up and configured the Single Sequencer implementation of Evolve EVM chains. This implementation provides a centralized approach to transaction sequencing while using EVM as the execution layer.