Espresso | Install
System Specs
Section titled “System Specs”| Hardware | Requirement |
|---|---|
| CPU | 4 Cores |
| RAM | 8 GB |
| Disk | 500 GB |
Install Espresso Mainnet Validator
Section titled “Install Espresso Mainnet Validator”1. System Preparation
Section titled “1. System Preparation”sudo apt updatesudo apt upgrade -y2. Install Docker
Section titled “2. Install Docker”maouam.xyz/tool/docker
3. Pull Images
Section titled “3. Pull Images”docker pull ghcr.io/espressosystems/espresso-sequencer/sequencer:20260407docker pull ghcr.io/espressosystems/espresso-sequencer/staking-cli:202604074. Generate Consensus Keys
Section titled “4. Generate Consensus Keys”mkdir -p ~/espressocd ~/espresso
docker run -v ~/espresso/keys:/keys \ghcr.io/espressosystems/espresso-sequencer/sequencer:20260407 \keygen -o /keys#save resultcat ~/espresso/keys/0.env#give permissionchmod 600 ~/espresso/keys/0.env#note your public ipcurl -s ifconfig.me -45. Create Metadata JSON on github (save raw url)
Section titled “5. Create Metadata JSON on github (save raw url)”{ "pub_key": "BLS_VER_KEY~...", "name": "your_val_name", "description": "your_description", "company_name": "your_comp", "company_website": "https://yourweb.com", "client_version": "1.0.0", "icon": { "14x14": { "@1x": "https://example.com/icon-14-1x.png", "@2x": "https://example.com/icon-14-2x.png", "@3x": "https://example.com/icon-14-3x.png" }, "24x24": { "@1x": "https://example.com/icon-24-1x.png", "@2x": "https://example.com/icon-24-2x.png", "@3x": "https://example.com/icon-24-3x.png" } }}6. Register Validator (fill/buy for gasfee eth)
Section titled “6. Register Validator (fill/buy for gasfee eth)”#your keyexport CONSENSUS_PRIVATE_KEY=$(grep PRIVATE_STAKING ~/espresso/keys/0.env | cut -d= -f2)export STATE_PRIVATE_KEY=$(grep PRIVATE_STATE ~/espresso/keys/0.env | cut -d= -f2)
#Fill your dataexport L1_PROVIDER="https://ethereum-rpc.publicnode.com" #Fill your dedicated rpcexport STAKE_TABLE_ADDRESS="0xCeF474D372B5b09dEfe2aF187bf17338Dc704451" #Don't change, it's stake table address.export MNEMONIC="your mnemonic" #12/24 your seed phrase ETH walletexport ACCOUNT_INDEX=0 #Account mnemonic wallet, first account is index 0export COMMISSION="10.00" #Commission 10%export METADATA_URI="https://.." #URL github raw format#Registerdocker run \ -e L1_PROVIDER \ -e STAKE_TABLE_ADDRESS \ -e MNEMONIC \ -e ACCOUNT_INDEX \ -e CONSENSUS_PRIVATE_KEY \ -e STATE_PRIVATE_KEY \ ghcr.io/espressosystems/espresso-sequencer/staking-cli:20260407 \ staking-cli register-validator \ --commission $COMMISSION \ --metadata-uri $METADATA_URI7. Run Node
Section titled “7. Run Node”#Create docker composecat > ~/espresso/docker-compose.yml << 'EOF'---services: espresso-node: image: ghcr.io/espressosystems/espresso-sequencer/sequencer:20260407 command: sequencer -- http -- catchup -- status restart: unless-stopped sysctls: net.ipv4.tcp_congestion_control: "bbr" net.ipv4.tcp_rmem: "8192 262144 67108864" net.ipv4.tcp_wmem: "4096 16384 536870912" net.ipv4.tcp_adv_win_scale: "0" net.ipv4.tcp_notsent_lowat: "131072" net.ipv4.tcp_slow_start_after_idle: "0" ports: - "8080:8080" - "9000:9000/udp" volumes: - ./store:/data/store - ./keys/0.env:/keys/0.env:ro environment: ESPRESSO_SEQUENCER_CDN_ENDPOINT: "cdn.main.net.espresso.network:1737" ESPRESSO_STATE_RELAY_SERVER_URL: "https://state-relay.main.net.espresso.network" ESPRESSO_SEQUENCER_GENESIS_FILE: "/genesis/mainnet.toml" ESPRESSO_SEQUENCER_EMBEDDED_DB: "true" ESPRESSO_SEQUENCER_STATE_PEERS: "https://query.main.net.espresso.network" RUST_LOG: "warn,libp2p=off" RUST_LOG_FORMAT: "json" ESPRESSO_SEQUENCER_L1_PROVIDER: "https://ethereum-rpc.publicnode.com" #Fill dedicated rpc ESPRESSO_SEQUENCER_L1_WS_PROVIDER: "wss://ethereum-rpc.publicnode.com" #FIll dedicated wss ESPRESSO_SEQUENCER_API_PORT: "8080" ESPRESSO_SEQUENCER_STORAGE_PATH: "/data/store" ESPRESSO_SEQUENCER_KEY_FILE: "/keys/0.env" ESPRESSO_SEQUENCER_LIBP2P_BIND_ADDRESS: "0.0.0.0:9000" ESPRESSO_SEQUENCER_LIBP2P_ADVERTISE_ADDRESS: "your-public-ip:9000" #Your public IP ESPRESSO_SEQUENCER_CONFIG_PEERS: "https://cache.main.net.espresso.network" ESPRESSO_SEQUENCER_IDENTITY_NODE_NAME: "my-espresso-node" ESPRESSO_SEQUENCER_IDENTITY_COUNTRY_CODE: "ID" ESPRESSO_SEQUENCER_IDENTITY_NETWORK_TYPE: "Hosted"EOF#Run nodedocker compose up -d#Check logsdocker compose logs -f#Check block (node block vs network block)echo "Node: $(curl -s http://localhost:8080/v0/status/metrics | grep 'consensus_last_synced_block_height' | awk '{print $2}') | Network: $(curl -s https://query.main.net.espresso.network/v0/node/block-height)"lastUpdated: 2026-05-02