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 helpersNetwork 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 = trueswagger = falseaddress = "tcp://0.0.0.0:1317"max_open_connections = 1000rpc_read_timeout = "10s"rpc_write_timeout = "10s"rpc_max_body_bytes = 1000000EVM 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
#!/bin/bashset -e
CHAIN_ID=${1:-"mezo-testnet"}NODE_TYPE=${2:-"validator"}
echo "Deploying $NODE_TYPE node for chain $CHAIN_ID"
# Clone chains repositorygit clone https://github.com/mezo-org/chains.gitcd chains
# Copy configurationcp configs/$CHAIN_ID/config.toml ~/.mezod/config/cp configs/$CHAIN_ID/app.toml ~/.mezod/config/
# Initialize nodemezod init $NODE_TYPE --chain-id $CHAIN_ID
# Start nodemezod startDocker Deployment
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 startConfiguration Management
Environment-Specific Configs
# Production configurationexport CHAIN_ID="mezo-mainnet"export RPC_ENDPOINT="https://rpc.mezo.org"export EXPLORER_URL="https://explorer.mezo.org"
# Testnet configurationexport CHAIN_ID="mezo-testnet"export RPC_ENDPOINT="https://testnet-rpc.mezo.org"export EXPLORER_URL="https://testnet-explorer.mezo.org"
# Local developmentexport 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
- Create Configuration Directory:
mkdir -p configs/new-network- Add Network Config:
[consensus]timeout_commit = "1s"
[p2p]laddr = "tcp://0.0.0.0:26656"- Add Genesis File:
{ "chain_id": "new-network", "genesis_time": "2024-01-01T00:00:00Z"}Updating Network Parameters
# Update consensus parameters via governancemezod tx gov submit-proposal param-change proposal.json
# Vote on proposalmezod tx gov vote 1 yes --from validatorMonitoring Configuration
Prometheus Setup
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: /metricsGrafana Dashboards
{ "dashboard": { "title": "Mezo Chain Monitoring", "panels": [ { "title": "Block Height", "type": "graph", "targets": [ { "expr": "mezod_block_height", "legendFormat": "{{chain_id}}" } ] } ] }}Security Configuration
Network Security
# Firewall rulesufw allow 26656/tcp # P2Pufw allow 26657/tcp # RPCufw allow 1317/tcp # APIufw allow 8545/tcp # EVM RPC
# Restrict accessiptables -A INPUT -p tcp --dport 26657 -s TRUSTED_IP -j ACCEPTiptables -A INPUT -p tcp --dport 26657 -j DROPSSL/TLS Configuration
[api]tls_cert_file = "/path/to/cert.pem"tls_key_file = "/path/to/key.pem"Development Tools
Chain Configuration CLI
# List available networks# (Check repository for specific CLI tool)
# Get network configurationcat configs/mezo-mainnet/config.toml
# Validate configurationmezod config validateConfiguration Validation
#!/bin/bashCONFIG_FILE=$1
if [ -z "$CONFIG_FILE" ]; then echo "Usage: $0 <config-file>" exit 1fi
# Validate TOML syntaxif ! python3 -c "import toml; toml.load('$CONFIG_FILE')"; then echo "Invalid TOML syntax" exit 1fi
echo "Configuration is valid"Troubleshooting
Common Issues
- Configuration Errors:
# Check configuration syntaxmezod config validate
# Test configurationmezod start --dry-run- Network Connectivity:
# Test RPC connectivitycurl -s http://localhost:26657/status | jq
# Check peer connectionsmezod tendermint show-peers- Genesis Issues:
# Validate genesis filemezod validate-genesis
# Reset with new genesismezod tendermint unsafe-reset-allBest Practices
Configuration Management
- Version Control: Keep configurations in version control
- Environment Separation: Use separate configs for different environments
- Documentation: Document all custom parameters
- Validation: Always validate configurations before deployment
Security Considerations
- Access Control: Restrict RPC and API access
- Key Management: Secure validator keys
- Network Security: Use firewalls and VPNs
- Monitoring: Set up comprehensive monitoring
Additional Resources
- Chains Repository - Configuration repository
- Mezod Documentation - Chain client documentation
- Validator Kit - Validator setup guide
- Cosmos SDK Configuration - Cosmos SDK docs
Support
For configuration support:
- Join the Mezo Discord
- Check the GitHub Issues
- Review the FAQ