Relay Binary Configuration
This document describes the configuration options for the Symbiotic Relay binary, which manages validator sets and performs signature aggregation for blockchain consensus systems.
YAML Configuration Structure
The relay binary uses a YAML configuration file with the following main sections:
Core Configuration
# Chain URLs for EVM client connections
chain_urls:
- "https://ethereum-rpc-url"
- "https://backup-rpc-url"
# Driver contract address (ValSetDriver)
driver_address:
chain_id: 1
address: "0x..."
# Request timeout for EVM operations
request_timeout: "30s"
# Node roles (can be combined)
signer: true # Signs validator sets
aggregator: true # Aggregates signatures
committer: true # Commits to blockchain
# Polling interval for epoch detection
polling_interval: "10s"
Network Configuration
The relay automatically retrieves network configuration from the ValSetDriver contract, including:
- Voting Power Providers: Cross-chain addresses that provide validator voting power data
- Keys Provider: Contract address for validator cryptographic keys
- Replicas: Settlement contract addresses for validator set commitments
- Verification Type: Signature aggregation method (ZK or Simple)
- Validator Constraints: Maximum voting power, minimum inclusion threshold, max validator count
- Key Requirements: Required cryptographic key tags and quorum thresholds
ValSetDriver and Settlement
ValSetDriver Configuration
The ValSetDriver contract serves as the central configuration source for the relay network.
Key parameters managed by ValSetDriver:
- Epoch Management: Duration and timing of validator set epochs
- Voting Power Providers: Contracts that determine validator voting power
- Settlement Replicas: Target contracts for validator set commitments
- Verification Parameters: Cryptographic verification settings
Settlement Integration
The relay can commit validator sets to one or multiple settlement contracts (replicas).
Settlement configuration includes:
- Cross-chain addresses: Chain ID and contract address pairs
- Verification type: ZK proofs or simple aggregation
- Quorum thresholds: Minimum voting power required for commitment
Secret Key Management
Key Provider Interface
The relay uses a KeyProvider interface for cryptographic operations
Supported Key Types
The relay supports:
- BLS BN254: For signature aggregation and ZK proofs
- ECDSA secp256k1: For standard Ethereum signatures
Key Configuration
key_provider:
type: "file" | "hardware" | "remote"
config:
# Provider-specific configuration
path: "/path/to/keystore"
password_file: "/path/to/password"
Other Parameters
Performance Tuning
# EVM client configuration
evm_client:
request_timeout: "30s"
max_retries: 3
retry_delay: "1s"
# Repository configuration
repository:
type: "badger" | "memory"
path: "/data/relay"
Monitoring and Metrics
# Metrics configuration
metrics:
enabled: true
address: ":8080"
path: "/metrics"
# Logging configuration [9](#header-9)
log:
level: "info"
format: "json"
Node Role Configuration
The relay supports three primary node types that can be combined:
- Signer Nodes: Create signatures for validator sets using private keys
- Aggregator Nodes: Collect signatures and generate aggregation proofs
- Committer Nodes: Submit validator sets to settlement contracts
Network Discovery
# P2P networking
p2p:
listen_address: "/ip4/0.0.0.0/tcp/9000"
bootstrap_peers:
- "/ip4/bootstrap1.example.com/tcp/9000/p2p/..."
Example Configuration
chain_urls:
- "https://eth-mainnet.g.alchemy.com/v2/your-api-key"
driver_address:
chain_id: 1
address: "0x1234567890123456789012345678901234567890"
request_timeout: "30s"
polling_interval: "10s"
# Node capabilities
signer: true
aggregator: true
committer: false
# Key management
key_provider:
type: "file"
config:
keystore_path: "/etc/relay/keystore"
password_file: "/etc/relay/password"
# Storage
repository:
type: "badger"
path: "/var/lib/relay/data"
# Monitoring
metrics:
enabled: true
address: ":8080"
log:
level: "info"