Skip to content

Chains Configuration Guide

The Chains repository contains configuration files, network parameters, and chain specifications for the Mezo ecosystem. This guide covers how to configure, deploy, and manage Mezo chains.

Overview

The Chains repository provides:

  • Network Configurations: Mainnet, testnet, and local configurations
  • Genesis Files: Initial blockchain state and parameters
  • Chain Specifications: Technical parameters and constants
  • Deployment Scripts: Automated chain deployment tools
  • Monitoring Configs: Observability and monitoring setups

Repository Structure

The Chains repository structure:

chains/
├── configs/ # Network configuration files
├── genesis/ # Genesis files for different networks
├── scripts/ # Deployment and management scripts
├── monitoring/ # Monitoring and observability configs
├── docs/ # Documentation and guides
└── tools/ # Utility tools and helpers

Network Configurations

Mainnet Configuration

Network Details:

  • Chain ID: mezo-mainnet
  • RPC Endpoint: https://rpc.mezo.org
  • WebSocket: wss://rpc.mezo.org/websocket
  • Explorer: https://explorer.mezo.org

Genesis Configuration:

{
"chain_id": "mezo-mainnet",
"genesis_time": "2024-01-01T00:00:00Z",
"consensus_params": {
"block": {
"max_bytes": "22020096",
"max_gas": "-1"
},
"evidence": {
"max_age_num_blocks": "100000",
"max_age_duration": "172800000000000"
}
}
}

Testnet Configuration

Network Details:

  • Chain ID: mezo-testnet
  • RPC Endpoint: https://testnet-rpc.mezo.org
  • WebSocket: wss://testnet-rpc.mezo.org/websocket
  • Explorer: https://testnet-explorer.mezo.org

Local Development Configuration

Network Details:

  • Chain ID: mezo-local
  • RPC Endpoint: http://localhost:26657
  • WebSocket: ws://localhost:26657/websocket

Chain Parameters

Consensus Parameters

[consensus]
timeout_commit = "1s"
timeout_propose = "3s"
timeout_propose_delta = "500ms"
timeout_prevote = "1s"
timeout_prevote_delta = "500ms"
timeout_precommit = "1s"
timeout_precommit_delta = "500ms"

P2P Configuration

[p2p]
laddr = "tcp://0.0.0.0:26656"
external_address = "YOUR_EXTERNAL_IP:26656"
persistent_peers = "peer1@ip1:26656,peer2@ip2:26656"
unconditional_peer_ids = ""

API Configuration

[api]
enable = true
swagger = false
address = "tcp://0.0.0.0:1317"
max_open_connections = 1000
rpc_read_timeout = "10s"
rpc_write_timeout = "10s"
rpc_max_body_bytes = 1000000

EVM Configuration

Ethereum Compatibility Settings

[evm]
rpc_address = "0.0.0.0:8545"
ws_address = "0.0.0.0:8546"
api_address = "0.0.0.0:1317"
max_gas_price = "1000000000000"
min_gas_price = "1000000000"

Gas Configuration

[evm.gas]
base_fee = "1000000000"
min_gas_price = "1000000000"
max_gas_price = "1000000000000"

Deployment Scripts

Automated Deployment

deploy-chain.sh
#!/bin/bash
set -e
CHAIN_ID=${1:-"mezo-testnet"}
NODE_TYPE=${2:-"validator"}
echo "Deploying $NODE_TYPE node for chain $CHAIN_ID"
# Clone chains repository
git clone https://github.com/mezo-org/chains.git
cd chains
# Copy configuration
cp configs/$CHAIN_ID/config.toml ~/.mezod/config/
cp configs/$CHAIN_ID/app.toml ~/.mezod/config/
# Initialize node
mezod init $NODE_TYPE --chain-id $CHAIN_ID
# Start node
mezod start

Docker Deployment

docker-compose.yml
version: '3.8'
services:
mezod:
image: mezod:latest
container_name: mezod-node
ports:
- "26656:26656"
- "26657:26657"
- "1317:1317"
- "8545:8545"
volumes:
- ./config:/root/.mezod/config
- ./data:/root/.mezod/data
environment:
- CHAIN_ID=mezo-testnet
- NODE_TYPE=validator
command: mezod start

Configuration Management

Environment-Specific Configs

Terminal window
# Production configuration
export CHAIN_ID="mezo-mainnet"
export RPC_ENDPOINT="https://rpc.mezo.org"
export EXPLORER_URL="https://explorer.mezo.org"
# Testnet configuration
export CHAIN_ID="mezo-testnet"
export RPC_ENDPOINT="https://testnet-rpc.mezo.org"
export EXPLORER_URL="https://testnet-explorer.mezo.org"
# Local development
export CHAIN_ID="mezo-local"
export RPC_ENDPOINT="http://localhost:26657"
export EXPLORER_URL="http://localhost:1317"

Configuration Templates

# config.toml template
[consensus]
timeout_commit = "{{ .ConsensusTimeoutCommit }}"
timeout_propose = "{{ .ConsensusTimeoutPropose }}"
[p2p]
laddr = "{{ .P2PAddress }}"
external_address = "{{ .ExternalAddress }}"
persistent_peers = "{{ .PersistentPeers }}"
[api]
enable = {{ .APIEnabled }}
address = "{{ .APIAddress }}"

Network Management

Adding New Networks

  1. Create Configuration Directory:
Terminal window
mkdir -p configs/new-network
  1. Add Network Config:
configs/new-network/config.toml
[consensus]
timeout_commit = "1s"
[p2p]
laddr = "tcp://0.0.0.0:26656"
  1. Add Genesis File:
{
"chain_id": "new-network",
"genesis_time": "2024-01-01T00:00:00Z"
}

Updating Network Parameters

Terminal window
# Update consensus parameters via governance
mezod tx gov submit-proposal param-change proposal.json
# Vote on proposal
mezod tx gov vote 1 yes --from validator

Monitoring Configuration

Prometheus Setup

monitoring/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'mezod-mainnet'
static_configs:
- targets: ['rpc.mezo.org:26660']
metrics_path: /metrics
- job_name: 'mezod-testnet'
static_configs:
- targets: ['testnet-rpc.mezo.org:26660']
metrics_path: /metrics

Grafana Dashboards

{
"dashboard": {
"title": "Mezo Chain Monitoring",
"panels": [
{
"title": "Block Height",
"type": "graph",
"targets": [
{
"expr": "mezod_block_height",
"legendFormat": "{{chain_id}}"
}
]
}
]
}
}

Security Configuration

Network Security

Terminal window
# Firewall rules
ufw allow 26656/tcp # P2P
ufw allow 26657/tcp # RPC
ufw allow 1317/tcp # API
ufw allow 8545/tcp # EVM RPC
# Restrict access
iptables -A INPUT -p tcp --dport 26657 -s TRUSTED_IP -j ACCEPT
iptables -A INPUT -p tcp --dport 26657 -j DROP

SSL/TLS Configuration

[api]
tls_cert_file = "/path/to/cert.pem"
tls_key_file = "/path/to/key.pem"

Development Tools

Chain Configuration CLI

Terminal window
# List available networks
# (Check repository for specific CLI tool)
# Get network configuration
cat configs/mezo-mainnet/config.toml
# Validate configuration
mezod config validate

Configuration Validation

validate-config.sh
#!/bin/bash
CONFIG_FILE=$1
if [ -z "$CONFIG_FILE" ]; then
echo "Usage: $0 <config-file>"
exit 1
fi
# Validate TOML syntax
if ! python3 -c "import toml; toml.load('$CONFIG_FILE')"; then
echo "Invalid TOML syntax"
exit 1
fi
echo "Configuration is valid"

Troubleshooting

Common Issues

  1. Configuration Errors:
Terminal window
# Check configuration syntax
mezod config validate
# Test configuration
mezod start --dry-run
  1. Network Connectivity:
Terminal window
# Test RPC connectivity
curl -s http://localhost:26657/status | jq
# Check peer connections
mezod tendermint show-peers
  1. Genesis Issues:
Terminal window
# Validate genesis file
mezod validate-genesis
# Reset with new genesis
mezod tendermint unsafe-reset-all

Best Practices

Configuration Management

  1. Version Control: Keep configurations in version control
  2. Environment Separation: Use separate configs for different environments
  3. Documentation: Document all custom parameters
  4. Validation: Always validate configurations before deployment

Security Considerations

  1. Access Control: Restrict RPC and API access
  2. Key Management: Secure validator keys
  3. Network Security: Use firewalls and VPNs
  4. Monitoring: Set up comprehensive monitoring

Additional Resources

Support

For configuration support: