The node reads a TOML file passed with --config (or <data-dir>/config.toml if it exists). Every section and field is optional; unknown keys and sections are ignored. Command-line flags override the file. xdevs init --dev and xdevs-cli testnet init write complete files you can start from.
Block time and Tendermint round timeouts. Each *_delta_ms is added per extra round, capped at max_timeout_ms. All validators of a network should use the same values.
Peers dialled at start (usually ending in /p2p/<peer id>)
max_peers
50
Max connected peers
max_inbound_peers
max_peers minus max(max_peers/5, bootnodes, 1)
Max peers that dialled us; the rest stays free for our own dials (bootnodes)
tx_rate_per_peer
1000
Inbound txs per second one peer may send (0 = no limit). Every tx counts; an ignored one (e.g. unfunded sender) costs 4. Over the budget txs are dropped unvalidated; a peer that keeps flooding is banned for 10 minutes
HTTP listen address; also accepts WebSocket upgrades
ws
none
Optional separate WebSocket listener
cors
["*"]
Allowed CORS origins (empty = no CORS headers)
namespaces
["eth", "net", "web3"]
Parsed but not used for filtering yet: every implemented method is served
gas_cap
50000000
Gas cap of eth_call / eth_estimateGas
max_logs_range
10000
Max eth_getLogs block range
max_batch
50
Max JSON-RPC batch size
max_concurrent_requests
0 (= 2 x CPUs)
Requests doing blocking work (state reads, EVM) at once over all connections; others wait up to 10 s, then get -32005. Consensus runs on its own threads and never waits for these
evm_timeout_ms
5000
EVM time limit of eth_call / eth_estimateGas ("execution aborted (timeout = 5s)"); 0 = none. A call is also stopped when its client disconnects
max_in_flight_per_connection
32
Calls running at once per connection; more fail at once with -32005 (0 = no cap)
rate_limit_per_ip
0 (off)
Calls per second per client IP (token bucket, -32005 above). Behind a proxy or tunnel every client has the proxy's IP: rate-limit at the proxy instead
xdevs-cli testnet init writes a [metrics] listen address (Prometheus /metrics, served by the xdevs-metrics crate). Keep it on a private address. At the time of writing, starting this endpoint from the node binary is still being wired up, so check that your build serves it before relying on it.
genesis.json follows the shape in §21 of the implementation plan: a config object (chainId, blockTimeMs, baseFee parameters including burnBps, treasury, xip0001Block, ...), gasLimit, alloc (balances, code, storage, nonces) and, for consensus networks, validators. xdevs init --dev writes the dev genesis; deploy/configs/dev-genesis.json is a copy.