Running Sova

Node Version: v0.0.5

Overview

There are two docker compose file variants, 'dev' and 'testnet' in the running-sova repository. The primary difference is in 'dev', the consensus is mocked in the execution client, where as the 'testnet' implementation, the OP rollup client is used for consensus.

dev - dockerfiles/dev-sova-node

  • Used to run a Sova validator locally in --dev mode. This means validator consensus is mocked and there is only one tx per sova block. This uses a regtest bitcoin node to mock bitcoin interactions.

  • When the 'core' profile is specified, sova-reth and sova-sentinel run alongside the Sova auxiliary services.

# run single node devnet sequencer locally
docker-compose -f dockerfiles/dev-sova-node.yml -p sova-devnet --profile core --env-file ./.env up --build -d

# remove all containers and volumes with:
docker-compose -f dockerfiles/dev-sova-node.yml -p sova-devnet --profile core --env-file ./.env down -v --rmi all

testnet - dockerfiles/sova-op-sequencer-nod

  • Used to run a full Sova OP Sequencer node.

  • When the 'core' and 'op-stack' profiles are specified sova-reth, sova-sentinel, op-node, op-batcher, op-proposer all run alongside the Sova auxiliary services.

# run Sova OP sequencer
docker-compose -f dockerfiles/sova-op-sequencer-node.yml -p sova-op-testnet --profile core --profile op-stack --env-file ./.env up --build -d

# remove all containers and volumes with:
docker-compose -f dockerfiles/sova-op-sequencer-node.yml -p sova-op-testnet --profile core --profile op-stack --env-file ./.env down -v --rmi all
# run all auxiliary services used by sequencer
docker-compose -f dockerfiles/sova-op-sequencer-node.yml -p sova-aux-services --env-file ./.env up --build -d

# remove all containers and volumes with:
docker-compose -f dockerfiles/sova-op-sequencer-node.yml -p sova-aux-services --env-file ./.env down -v --rmi all

Setup Guide

This guide will walk you through the process of setting up and running a local Sova devnet node using Docker Compose.

Prerequisites

  • Software

    • Docker (version 20.10.0 or higher)

    • Docker Compose (version 2.0.0 or higher)

    • Git

  • Hardware

    • A modern multi-core CPU with good single-core performance.

    • At least 32 GB RAM (64 GB recommended).

    • A locally attached NVMe SSD drive. RAID 0 configurations can improve performance.

    • Reth Archive Node:

      • Instance: AWS i4ie.6xlarge

        • Storage: RAID 0 of all local NVMe drives (/dev/nvme*)

          • Filesystem: ext4

Note: Requirements may vary based on network activity, transaction volume, number of connected peers, and chain state growth.

Installation Steps

1. Clone the Repository

git clone https://github.com/SovaNetwork/running-sova
cd running-sova

# checkout release version
git checkout v0.0.5

2. Configure Environment Variables

# Create and edit the .env file
cp env.example .env

In the .env file, update the variables if necessary. The `ENCLAVE_SEED` is the seed for computing the BIP-32 derivation path for the network signing service.

3. Build and Start the Services

# run single node devnet locally
docker-compose -f dockerfiles/dev-sova-node.yml -p sova-devnet --profile core --env-file ./.env up --build -d

# View all active containers
docker ps

# remove all containers and volumes with:
docker-compose -f dockerfiles/sova-op-sequencer-node.yml -p sova-op-testnet --profile core --profile op-stack --env-file ./.env down -v --rmi all

Service Architecture

The stack consists of the following services:

  • nginx-proxy (Port 18444)

    • Reverse proxy service based on nginx:alpine

    • Handles routing and load balancing

    • Configured via mounted nginx.conf file

  • bitcoin-regtest (Port 18443)

    • Bitcoin Core node running in regtest mode

    • Provides the underlying Bitcoin network functionality

  • sova-reth (Port 8545)

    • EVM-compatible JSON-RPC endpoint

    • Handles EVM-compatible transactions and smart contracts

  • sova-sentinel (port 50051)

    • Handles double spend protection

  • network-enclave (Port 5555)

    • Handles network signing operations

    • Manages cryptographic operations

  • network-utxos (Port 5557)

    • Tracks and manages UTXO state

    • Provides UTXO-related services

  • network-indexer

    • Indexes Bitcoin blockchain data

    • Maintains synchronization with the Bitcoin node

Network Health Checks

Verify the execution client JSON-RPC endpoint:

curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  http://localhost:8545

Verify the bitcoin regtest client JSON-RPC endpoint:

curl -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"1.0","method":"getblockchaininfo","params":[],"id":1}' \
  -u user:password http://localhost:18443

Last updated