Skip to main content

Installation Guide

This guide covers all methods for installing and running a Viction node, including building from source, using pre-built binaries, and Docker deployment.

System Requirements

Minimum Requirements

  • CPU: 2+ cores
  • RAM: 4GB minimum, 8GB recommended
  • Storage: 100GB+ SSD (blockchain grows over time)
  • Network: Stable internet connection
  • OS: Linux, macOS, or Windows

Software Prerequisites

  • Go 1.18 or higher
  • GCC compiler
  • Git
Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y build-essential git golang-1.18
CentOS/RHEL
sudo yum groupinstall "Development Tools"
sudo yum install -y git golang

Installation Methods

Method 1: Build from Source

Building from source gives you the latest code and full control over the build process.
1

Install Go

Download and install Go from https://go.dev/dl/Verify installation:
go version
# Should output: go version go1.18 or higher
2

Clone Repository

git clone https://github.com/BuildOnViction/victionchain
cd victionchain
3

Build Binary

Use the build script to compile the tomo client:
go run build/ci.go install
This compiles and installs the binary to build/bin/tomo.
The build process may take several minutes depending on your system.
4

Add to PATH (Optional)

Make tomo available system-wide:
Linux/macOS
sudo cp build/bin/tomo /usr/local/bin/
Add to PATH manually
export PATH=$PATH:/path/to/victionchain/build/bin
echo 'export PATH=$PATH:/path/to/victionchain/build/bin' >> ~/.bashrc
source ~/.bashrc
5

Verify Installation

tomo version

Method 2: Pre-built Binaries

The fastest way to get started is using pre-compiled binaries.
1

Download Binary

Visit the GitHub releases page and download the latest release for your platform:
Linux
wget https://github.com/BuildOnViction/victionchain/releases/download/v2.5.1/tomo-linux-amd64
chmod +x tomo-linux-amd64
sudo mv tomo-linux-amd64 /usr/local/bin/tomo
macOS
wget https://github.com/BuildOnViction/victionchain/releases/download/v2.5.1/tomo-darwin-amd64
chmod +x tomo-darwin-amd64
sudo mv tomo-darwin-amd64 /usr/local/bin/tomo
2

Verify Installation

tomo version

Method 3: Docker Installation

Docker provides isolated, reproducible deployments.
1

Install Docker

Install Docker Engine from https://docs.docker.com/engine/install/Verify installation:
docker --version
2

Build Docker Image

Option A: Build from source
git clone https://github.com/BuildOnViction/victionchain
cd victionchain
docker build --file Dockerfile.node -t "buildonviction/node:v2.5.1" .
Option B: Pull pre-built image
docker pull buildonviction/node:v2.5.1
3

Prepare Directories

Create directories for persistent data:
mkdir -p ~/viction/data ~/viction/keystore

Account Management

Before running a node, you need an account to unlock. Viction uses the tomo account command for keystore management.

Create a New Account

tomo account new
# You'll be prompted to enter a password
Important: Store your password securely! Without it, you cannot unlock your account or access your funds.

Import Existing Account

If you have a private key, import it:
tomo account import /path/to/private_key.txt \
  --password /path/to/password.txt \
  --keystore /path/to/keystore
The private key file should contain your unencrypted private key in hexadecimal format.

List Accounts

tomo account list --keystore /path/to/keystore

Update Account Password

tomo account update <address> --keystore /path/to/keystore

Network Configuration

Mainnet Configuration

Connect to Viction mainnet (Chain ID: 88):
tomo --datadir ~/viction/mainnet \
  --keystore ~/viction/keystore \
  --password ~/viction/password.txt \
  --unlock 0 \
  --networkid 88 \
  --identity "my-mainnet-node" \
  --gasprice 250000000
Mainnet Parameters:
  • Chain ID: 88
  • Network ID: 88
  • Block time: 2 seconds
  • Epoch: 900 blocks
  • Consensus: Proof of Stake Voting (PoSV)

Testnet Configuration

Connect to Viction testnet (Chain ID: 89):
tomo --datadir ~/viction/testnet \
  --keystore ~/viction/keystore \
  --password ~/viction/password.txt \
  --unlock 0 \
  --tomo-testnet \
  --networkid 89 \
  --identity "my-testnet-node"
Testnet Parameters:
  • Chain ID: 89
  • Network ID: 89
  • Use --tomo-testnet flag
  • Same consensus parameters as mainnet

Full Node Configuration

A complete full node configuration with all features enabled:
tomo --datadir /data/viction \
  --keystore /data/keystore \
  --password /data/password.txt --unlock 0 \
  --identity "production-node" \
  --networkid 88 \
  --gasprice 250000000 \
  --rpc --rpcaddr 0.0.0.0 --rpcport 8545 \
  --rpcvhosts "*" --rpccorsdomain "*" \
  --rpcapi "eth,debug,net,db,personal,web3" \
  --ws --wsaddr 0.0.0.0 --wsport 8546 --wsorigins "*" \
  --port 30303 \
  --syncmode "full" --gcmode "full" \
  --ethstats my-node:getty-site-pablo-auger-room-sos-blair-shin-whiz-delhi@stats.viction.xyz \
  --verbosity 3

Configuration Breakdown

--datadir /data/viction          # Blockchain data directory
--keystore /data/keystore        # Account keystore directory
--password /data/password.txt    # Password file for account
--unlock 0                       # Unlock account at index 0
--identity "production-node"     # Node name identifier
--networkid 88                   # Network ID (88=mainnet, 89=testnet)
--port 30303                     # P2P listening port
--nat any                        # NAT port mapping (any|none|upnp|pmp|extip:<IP>)
--bootnodes <enode-list>         # Custom bootnode list
--rpc                            # Enable HTTP-RPC server
--rpcaddr 0.0.0.0               # Listening interface (0.0.0.0=all)
--rpcport 8545                  # HTTP-RPC port
--rpcvhosts "*"                 # Accepted virtual hostnames
--rpccorsdomain "*"             # CORS domain
--rpcapi "eth,net,web3,..."     # Enabled API modules
Available API modules:
  • eth: Ethereum JSON-RPC
  • net: Network information
  • web3: Web3 utilities
  • personal: Account management
  • db: Database access
  • debug: Debug and tracing
--ws                             # Enable WebSocket server
--wsaddr 0.0.0.0                # WebSocket interface
--wsport 8546                   # WebSocket port
--wsorigins "*"                 # Accepted origins
--wsapi "eth,net,web3"          # WebSocket API modules
--syncmode "full"               # Sync mode: fast|full|light
--gcmode "full"                 # Garbage collection: full|archive
--store-reward                  # Store reward snapshots (archive mode)
Sync Modes:
  • fast: Fast sync (downloads state snapshots)
  • full: Full verification of all blocks
  • light: Light client mode (minimal storage)
GC Modes:
  • full: Regular node (pruned state)
  • archive: Archive node (full historical state)
--mine                          # Enable mining/staking
--miner.threads 1               # Number of CPU threads for mining
--etherbase <address>           # Coinbase address for rewards
--ethstats <name>:<secret>@<host>  # Report to stats dashboard
--verbosity 3                      # Log verbosity (0-5)

Archive Node Configuration

An archive node stores complete historical state:
tomo --datadir /data/archive \
  --keystore /data/keystore \
  --password /data/password.txt --unlock 0 \
  --gcmode "archive" \
  --store-reward \
  --syncmode "full" \
  # ... other flags
Archive nodes require significantly more disk space (1TB+) and are needed for:
  • Historical state queries
  • Reward tracking
  • Block explorers
  • Analytics services

Docker Compose Setup

For production deployments, use Docker Compose:
docker-compose.yml
version: '3.8'

services:
  viction:
    image: buildonviction/node:v2.5.1
    container_name: viction-node
    restart: unless-stopped
    ports:
      - "8545:8545"   # RPC
      - "8546:8546"   # WebSocket
      - "30303:30303" # P2P
      - "30303:30303/udp"
    volumes:
      - ./data:/tomochain/data
      - ./keystore:/tomochain/keystore
      - ./password.txt:/tomochain/password
    environment:
      - IDENTITY=my-node
      - NETWORK_ID=88
      - SYNC_MODE=full
      - NETSTATS_HOST=stats.viction.xyz
      - NETSTATS_PORT=443
      - WS_SECRET=getty-site-pablo-auger-room-sos-blair-shin-whiz-delhi
      - VERBOSITY=3
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "10"
Run with:
docker-compose up -d

Systemd Service (Linux)

Create a systemd service for automatic startup:
/etc/systemd/system/viction.service
[Unit]
Description=Viction Node
After=network.target

[Service]
Type=simple
User=viction
WorkingDirectory=/home/viction
ExecStart=/usr/local/bin/tomo \
  --datadir /data/viction \
  --keystore /data/keystore \
  --password /data/password.txt --unlock 0 \
  --networkid 88 \
  --identity "production-node" \
  --gasprice 250000000 \
  --rpc --rpcaddr 127.0.0.1 --rpcport 8545 \
  --rpcapi "eth,net,web3" \
  --verbosity 3

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl daemon-reload
sudo systemctl enable viction
sudo systemctl start viction
sudo systemctl status viction
View logs:
sudo journalctl -u viction -f

Firewall Configuration

Open required ports:
UFW (Ubuntu)
sudo ufw allow 30303/tcp comment 'Viction P2P'
sudo ufw allow 30303/udp comment 'Viction P2P discovery'
# Only if exposing RPC publicly (not recommended)
# sudo ufw allow 8545/tcp comment 'Viction RPC'
Firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=30303/tcp
sudo firewall-cmd --permanent --add-port=30303/udp
sudo firewall-cmd --reload
Security: Never expose RPC/WebSocket ports (8545, 8546) directly to the internet. Use a reverse proxy with authentication or VPN access.

Troubleshooting

Node Won’t Start

Error: Failed to unlock accountSolution:
  • Verify password file exists and is readable
  • Check password is correct
  • Ensure keystore path is correct
  • Try --unlock 0 or --unlock <address>
Error: bind: address already in useSolution:
  • Check if another instance is running: ps aux | grep tomo
  • Change ports with --port, --rpcport, or --wsport
  • Kill existing process: pkill tomo
Error: write: no space left on deviceSolution:
  • Check disk usage: df -h
  • Clean old logs
  • Move datadir to larger partition
  • For full nodes, consider pruning with --gcmode full

Sync Issues

Solution:
  • Check if your version is up to date
  • Verify network connectivity
  • Try different bootnodes
  • Increase peer count: --maxpeers 50
Solution:
  • Check firewall allows port 30303
  • Enable NAT traversal: --nat upnp
  • Add explicit bootnodes: --bootnodes <enode-urls>
  • Set external IP: --nat extip:<your-public-ip>

Next Steps

Quick Start

Get your node running quickly

Run a Masternode

Become a validator and earn rewards

Network Info

Network parameters and endpoints

GitHub Repository

Source code and issues
For advanced configuration, custom genesis blocks, or private networks, refer to the full documentation.

Build docs developers (and LLMs) love