Skip to main content

Covalent Refiner Upgrade Guide

This guide covers upgrading your Covalent Refiner components to newer versions safely and efficiently.

Before You Start

Pre-Upgrade Checklist

# 1. Check current versions
docker images | grep covalent
docker-compose ps

# 2. Backup your configuration
cp .env .env.backup
cp docker-compose.yml docker-compose.yml.backup

# 3. Check system resources
df -h # Need at least 5GB free space
free -h # Check available RAM

# 4. Verify current operator status
# Check your operator dashboard at:
# https://www.covalenthq.com/staking/#/operator-dashboard/

Important Notes

warning

Always backup your configuration before upgrading. Some upgrades may require environment variable updates.

info

Check the Covalent Network announcements for upgrade timing and special instructions.

Upgrade Methods

# 1. Stop current services
docker-compose down

# 2. Pull latest images
docker-compose pull

# 3. Start with new versions
docker-compose up -d

# 4. Check logs for issues
docker-compose logs -f

# 5. Verify services are healthy
docker-compose ps
curl -s http://localhost:3001/health # IPFS Pinner
curl -s http://localhost:3002/health # EVM Server

Method 2: Manual Docker Upgrade

# Stop containers
docker stop rudder evm-server ipfs-pinner

# Remove old containers (keeps volumes)
docker rm rudder evm-server ipfs-pinner

# Pull latest images
docker pull us-docker.pkg.dev/covalent-project/network/rudder:stable
docker pull us-docker.pkg.dev/covalent-project/network/evm-server:stable
docker pull us-docker.pkg.dev/covalent-project/network/ipfs-pinner:stable

# Restart with docker-compose
docker-compose up -d

Component-Specific Upgrades

Rudder Upgrade

# 1. Check current Rudder version
docker exec rudder mix version

# 2. Stop Rudder
docker-compose stop rudder

# 3. Pull latest Rudder image
docker pull us-docker.pkg.dev/covalent-project/network/rudder:stable

# 4. Start Rudder
docker-compose up -d rudder

# 5. Monitor startup
docker logs rudder -f

# 6. Verify metrics
curl -s http://localhost:9568/metrics | grep rudder

EVM Server Upgrade

# 1. Stop EVM Server
docker-compose stop evm-server

# 2. Pull latest image
docker pull us-docker.pkg.dev/covalent-project/network/evm-server:stable

# 3. Start EVM Server
docker-compose up -d evm-server

# 4. Test functionality
curl -X POST http://localhost:3002 \
-H "Content-Type: application/json" \
-d '{"method":"evm_version","params":[],"id":1}'

IPFS Pinner Upgrade

# 1. Stop IPFS Pinner
docker-compose stop ipfs-pinner

# 2. Pull latest image
docker pull us-docker.pkg.dev/covalent-project/network/ipfs-pinner:stable

# 3. Start IPFS Pinner
docker-compose up -d ipfs-pinner

# 4. Test upload capability
curl -X POST http://localhost:3001/api/v0/add \
-F file=@test.txt

Configuration Updates

Environment Variables

Check for new environment variables in upgrades:

.env
# Core Configuration (Always Required)
BLOCK_RESULT_OPERATOR_PRIVATE_KEY=your_64_char_private_key
NODE_ETHEREUM_MAINNET=https://eth-mainnet.alchemyapi.io/v2/YOUR_KEY
WEB3_JWT=your_web3_storage_jwt_token

# Network Configuration
NETWORK=moonbase-alpha # or mainnet when available

# Service URLs (Internal Docker Network)
IPFS_PINNER_URL=http://ipfs-pinner:3001
EVM_SERVER_URL=http://evm-server:3002

# New in Recent Versions (check upgrade notes)
PROOF_CHAIN_TIMEOUT=300
BATCH_SIZE=100
RETRY_ATTEMPTS=3

# Monitoring (Optional)
ENABLE_METRICS=true
METRICS_PORT=9568

# Performance Tuning (Optional)
WORKER_THREADS=4
MAX_MEMORY=4096

Docker Compose Updates

docker-compose.yml
version: '3.8'

services:
evm-server:
image: us-docker.pkg.dev/covalent-project/network/evm-server:stable
container_name: evm-server
restart: unless-stopped
ports:
- "3002:3002"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3002/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
- cqt-net

ipfs-pinner:
image: us-docker.pkg.dev/covalent-project/network/ipfs-pinner:stable
container_name: ipfs-pinner
restart: unless-stopped
ports:
- "3001:3001"
environment:
- WEB3_JWT=${WEB3_JWT}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
networks:
- cqt-net

rudder:
image: us-docker.pkg.dev/covalent-project/network/rudder:stable
container_name: rudder
restart: unless-stopped
depends_on:
evm-server:
condition: service_healthy
ipfs-pinner:
condition: service_healthy
environment:
- BLOCK_RESULT_OPERATOR_PRIVATE_KEY=${BLOCK_RESULT_OPERATOR_PRIVATE_KEY}
- NODE_ETHEREUM_MAINNET=${NODE_ETHEREUM_MAINNET}
- IPFS_PINNER_URL=${IPFS_PINNER_URL}
- EVM_SERVER_URL=${EVM_SERVER_URL}
- WEB3_JWT=${WEB3_JWT}
ports:
- "9568:9568" # Metrics port
networks:
- cqt-net

# Optional: Autoheal container
autoheal:
image: willfarrell/autoheal
container_name: autoheal
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- AUTOHEAL_CONTAINER_LABEL=autoheal
- AUTOHEAL_INTERVAL=10

networks:
cqt-net:
driver: bridge

Version-Specific Upgrades

Upgrading to Mainnet

When mainnet becomes available:

# 1. Update environment for mainnet
export NETWORK=mainnet
export NODE_ETHEREUM_MAINNET=your_mainnet_ethereum_rpc

# 2. Update contract addresses (will be announced)
export PROOF_CHAIN_CONTRACT=0x_new_mainnet_address

# 3. Ensure sufficient ETH for gas fees on mainnet
# Check your operator wallet balance

# 4. Update to mainnet-compatible versions
docker-compose pull
docker-compose up -d

# 5. Monitor transition carefully
docker-compose logs -f rudder

Upgrading to v2.0 (Hypothetical Major Version)

# Major version upgrades may require data migration
# 1. Stop all services
docker-compose down

# 2. Backup current data
mkdir -p backups
docker run --rm -v cqt_rudder_data:/data -v $(pwd)/backups:/backup \
alpine tar czf /backup/rudder-data-$(date +%Y%m%d).tar.gz -C /data .

# 3. Update configuration for v2.0
# New required variables (example):
export RUDDER_VERSION=2.0
export NEW_FEATURE_ENABLED=true

# 4. Pull v2.0 images
docker-compose pull

# 5. Run migration script (if provided)
docker run --rm -v cqt_rudder_data:/data \
us-docker.pkg.dev/covalent-project/network/migration:v2.0

# 6. Start services
docker-compose up -d

Post-Upgrade Verification

Health Checks

# 1. Check all containers are running
docker-compose ps

# 2. Verify service health
curl -s http://localhost:3001/health | jq . # IPFS Pinner
curl -s http://localhost:3002/health | jq . # EVM Server

# 3. Check Rudder pipeline status
docker logs rudder | tail -20

# 4. Verify metrics endpoint
curl -s http://localhost:9568/metrics | grep rudder_pipeline

# 5. Check operator dashboard
# Visit: https://www.covalenthq.com/staking/#/operator-dashboard/

# 6. Monitor for block specimen processing
docker logs rudder | grep -i "found.*bsps"

Performance Validation

# Monitor resource usage
docker stats --no-stream

# Check processing metrics
watch -n 30 'curl -s http://localhost:9568/metrics | grep -E "(pipeline_success|upload_success)"'

# Monitor error rates
docker logs rudder | grep -i error | tail -10

# Check disk usage growth
df -h
du -sh /var/lib/docker/volumes/

Rollback Procedure

# If upgrade causes issues, rollback:

# 1. Stop current services
docker-compose down

# 2. Restore previous configuration
cp .env.backup .env
cp docker-compose.yml.backup docker-compose.yml

# 3. Use previous image versions
# Edit docker-compose.yml to specify previous tags
# Example: change :stable to :v1.2.3

# 4. Start services
docker-compose up -d

# 5. Verify rollback successful
docker-compose ps
curl -s http://localhost:3001/health

Automation Scripts

Automated Upgrade Script

upgrade-refiner.sh
#!/bin/bash
set -e

echo "🔄 Starting Covalent Refiner Upgrade..."

# Configuration
BACKUP_DIR="./backups"
mkdir -p "$BACKUP_DIR"

# Create backup
echo "💾 Creating backup..."
cp .env "$BACKUP_DIR/.env.$(date +%Y%m%d-%H%M%S)"
cp docker-compose.yml "$BACKUP_DIR/docker-compose.yml.$(date +%Y%m%d-%H%M%S)"

# Stop services
echo "⏹️ Stopping services..."
docker-compose down

# Pull latest images
echo "⬇️ Pulling latest images..."
docker-compose pull

# Start services
echo "▶️ Starting services..."
docker-compose up -d

# Wait for startup
echo "⏳ Waiting for services to start..."
sleep 60

# Verify upgrade
echo "✅ Verifying upgrade..."
if curl -s http://localhost:3001/health > /dev/null && \
curl -s http://localhost:3002/health > /dev/null; then
echo "🎉 Upgrade successful!"
docker-compose ps
else
echo "❌ Upgrade failed! Check logs:"
docker-compose logs --tail=50
exit 1
fi

echo "📊 Current resource usage:"
docker stats --no-stream

Troubleshooting Upgrades

Common Issues

# Check container logs
docker logs rudder
docker logs evm-server
docker logs ipfs-pinner

# Common causes:
# 1. Invalid environment variables
env | grep -E "(BLOCK_RESULT|NODE_ETHEREUM|WEB3_JWT)"

# 2. Network connectivity issues
curl -s $NODE_ETHEREUM_MAINNET

# 3. Resource constraints
docker stats
df -h

Best Practices

  1. Backup First: Always backup configuration before upgrading
  2. Gradual Updates: Update one component at a time if issues occur
  3. Monitor Health: Watch logs and metrics after upgrade
  4. Resource Planning: Upgrades may increase resource requirements
  5. Network Status: Ensure good connectivity to Ethereum mainnet
  6. Operator Status: Keep CQT staking above minimum requirements

Resources