Configuration Reference
CLI Options
Section titled “CLI Options”The Base Reth Node inherits Reth’s comprehensive CLI. View all options:
./target/release/base-reth-node --helpKey option categories:
- Network — Chain selection, bootnodes, P2P port
- RPC — HTTP/WS endpoints, CORS, API namespaces
- Database — Data directory, state pruning
- Metrics — Prometheus endpoint
- Engine API — JWT secret, engine API endpoint
- Logging — Log level, log format
Environment Variables
Section titled “Environment Variables”Configuration can also be set via environment variables. The devnet uses etc/docker/devnet-env for its environment.
Build Profiles
Section titled “Build Profiles”The workspace defines several Cargo build profiles:
| Profile | Use Case | Key Settings |
|---|---|---|
dev | Development | debug = "line-tables-only" |
release | Production | opt-level = 3, lto = "thin", codegen-units = 16, strip = "symbols", panic = "unwind" |
maxperf | Published release artifacts | Inherits release, then lto = "fat", codegen-units = 1 |
release-symbols | Production build you need to profile | Inherits release, then debug = "line-tables-only", strip = "none" |
bench | Callgrind-driven benchmarks | Inherits release, then debug = true, strip = false |
profiling | Performance analysis | Inherits release, then lto = false, debug = "line-tables-only", strip = "none" |
ci | CI builds | Inherits dev, then debug = false, incremental = false |
Two profiles share the production role, and which one you get depends on who is building. release is the default everywhere you build yourself: docker-bake.hcl declares PROFILE with a default of release, so a local --build and an ordinary Cargo build both land there. maxperf is reserved for what Base actually publishes. The release workflow compiles the native binary archives with it and passes PROFILE: maxperf when it bakes the image pushed to ghcr.io/base/node. It inherits everything from release and then trades build time for speed, using fat LTO across the whole graph and a single codegen unit. So a binary you build locally is not bit-identical to the published one, even at the same tag.
Two of these exist because release strips symbols. release-symbols restores them without changing any codegen setting, so a profiled binary matches what you ship. bench goes further and keeps full debug info, which iai-callgrind needs to find the function it measures; without symbols every counter reads zero.
Dependencies drop their debug info in dev builds through a [profile.dev.package."*"] override. Workspace crates keep theirs. This mostly targets the C and C++ build scripts behind rocksdb, mdbx, and jemalloc, which otherwise dominate the size of target.
basectl
Section titled “basectl”The basectl utility provides configuration management for different network targets:
# Mainnet configurationcargo run -p basectl --release -- -c mainnet
# Sepolia testnetcargo run -p basectl --release -- -c sepolia
# Local devnetcargo run -p basectl --release -- -c devnet