Odometer follows these key design principles:
- Clear Hierarchy: Commands follow odometer → verb → noun pattern
- Explicit Naming: Self-explanatory verbs like measure, list, show, and nouns like gas-limit, clients
- Required Arguments First: Essential parameters come first
- Sensible Defaults: Reasonable defaults for duration, tps, concurrency
- Output Flexibility: Multiple output formats for different needs
- Extensibility: Easy addition of new benchmark types
- Discoverability: Consistent help system
Note
This document outlines the design philosophy and command structure for Odometer. Many of the commands described here serve as examples and may not yet be implemented in the current version of the tool.
- Conversational: Commands read like natural instructions
- Discoverable: Easy to find what you need with
help - Extensible: Seamlessly integrate new benchmark types
- Consistent: Predictable structure across different benchmark types
These options apply to all odometer commands:
odometer --version / -v # Show application version
odometer --help / -h # Display help information
odometer --debug # Enable verbose debugging outputThe command structure follows the pattern: odometer <verb> <noun> [options]
odometer measure gas-limit # Measure block gas limit
odometer list clients # List available clients
odometer show results # Display benchmark resultsodometer help # Shows main help message with available commands
odometer version # Displays Odometer version information
odometer debug # Enables verbose debugging outputodometer measure gas-limit [OPTIONS]
--for <client1,client2,...> # Optional: Clients to benchmark (default: all)
--duration <seconds> / -d # Optional: Test duration (default: 60)
--rate <tps> / -r # Optional: Target transactions per second
--output <format> / -o # Optional: Output format (table, json, csv)
--parallel <num_threads> / -p # Optional: Concurrency level (default: 1)
--config <file_path> # Optional: Custom configuration file
--endpoint <client>=<url> # Optional: Override default RPC endpointExample:
odometer measure gas-limit --for geth,erigon --duration 120odometer list clients [OPTIONS] # List configured Ethereum clientsOptions:
--verbose / -v # Show detailed informationodometer show results gas-limit [run_id | --latest] [OPTIONS] # Display gas-limit benchmark results
odometer show client <client_name> # Show client configurationOptions:
--output <format> / -o # Specify output formatodometer configure client add <name> --rpc-url <url> [OPTIONS] # Add client
odometer configure client remove <name> # Remove clientThe command structure allows easy addition of new benchmark types:
odometer measure zkevm --for geth --test-cases proof_generation_time
odometer list clients zkevm
odometer show results zkevm