kona-node node subcommand, grouped by category. All flags can be provided as command-line arguments or via environment variables.
For more details on each flag, see the inline help (
kona-node node --help) or the source code.Default Ports
HTTP and WebSocket RPC share one TCP listener. WebSocket connections begin with
an HTTP upgrade request on that same address and port.
kona-node does not run a supervisor RPC server: the binary has no --supervisor.*
flag group. Its only interop flag, --interop.dependency-set
(KONA_NODE_INTEROP_DEPENDENCY_SET), takes a path to a dependency-set JSON file
rather than a port.
--conductor.rpc (KONA_NODE_CONDUCTOR_RPC) is not a listening port either. It is
the RPC endpoint URL of an external conductor service that the node dials out to,
and it has no default value. Supplying it enables the conductor integration when the
node runs in sequencer mode (--mode sequencer); in validator mode it has no effect.
Core Node Arguments
Global Arguments
Chain ID Support
The--l2-chain-id flag supports flexible chain identification using the alloy_chains crate:
Numeric Chain IDs:
alloy_chains (e.g., optimism, base, mainnet). Unknown numeric chain IDs are accepted for custom networks.
P2P Arguments
Static peers
--p2p.static-peers lists peers that the node connects to directly and keeps connected, whatever discovery finds. Use it to make sure that a node, such as a sequencer, stays connected to the nodes it trusts.
Each entry is a TCP multiaddr that ends in the peer’s ID:
- Prefer
/dns4/...addresses to/ip4/...ones. The name is resolved on every dial, so the list keeps working when a peer’s IP changes. - Repeat the flag, or give it a comma-separated list, as the environment variable needs. Spaces around entries are ignored, and an empty environment variable means no static peers.
- The node doesn’t start if an address isn’t TCP or doesn’t end in
/p2p/<peer id>. - Several addresses with the same peer ID make one peer, dialed at whichever address connects first.
- The node ignores entries with its own peer ID, so every node in a group can use the same list.
--p2p.priv.path or --p2p.priv.raw; without one, a node generates a new key, and so a new peer ID, each time it starts. To find a running node’s address, call opp2p_self: addresses lists its listen addresses with /p2p/<peer id> at the end. Replace the IP with the name or address other nodes reach it at. The node also logs its peer ID when it starts listening. To get the peer ID of a key file without running the node, use op-node p2p priv2id < key.txt, which works for kona keys too.
The node treats its static peers as follows:
- It dials them at startup, and once a minute dials those that aren’t connected. A static peer that disconnects is dialed again about a second later.
- Static peers are exempt from the redial limit (
--p2p.redial), are never banned for a low score, and stay protected afteropp2p_unprotectPeer. - A static peer blocked with
opp2p_blockPeer, or at a blocked address or subnet, isn’t dialed until it’s unblocked. - The node never passes its static peers on through discovery, so other nodes can’t find a static peer through it. A static peer can still be found if it runs discovery itself.
op-node calls this flag
--p2p.static, which kona-node accepts too. The environment variable is KONA_NODE_P2P_STATIC_PEERS, not KONA_NODE_P2P_STATIC.Running without discovery
With--p2p.no-discovery, the node doesn’t run Discv5:
- It binds no UDP port, so
--p2p.listen.udpmay be in use by another process, and publishes no ENR. - It ignores
--p2p.bootnodes, the chain’s built-in bootnodes and the bootstore. - It connects only to its static peers, to peers that dial it, and to peers added with
opp2p_connectPeer. Other nodes can’t find it, so only the nodes given its address dial it.
opp2p_self returns no ENR, opp2p_peerStats returns a table of 0, and opp2p_discoveryTable returns the error discovery disabled. opp2p_peerCount, which op-node doesn’t have, returns null for connectedDiscovery, and opp2p_peers returns no ENR and a chainID of 0 for each peer. op-conductor’s health check reads connected from opp2p_peerStats, which counts static peers.
With discovery on, the node stops if discovery fails to start or stops later, even if it has static peers.
The node finds its peers as follows:
With discovery off, the node logs a warning at startup if no static peers are set, and if bootnodes are set, since it ignores them.
RPC Arguments
The RPC server starts once. If it stops unexpectedly, the node shuts down with an error.Sequencer Arguments
Interop Arguments
kona-node does not run a supervisor RPC server, so there is no --supervisor.*
flag group. --interop.dependency-set is the node’s only interop flag.
RPC Trust Flags
The--l1-trust-rpc and --l2-trust-rpc flags control whether Kona verifies the block hashes of RPC responses. For guidance on when to disable trust and worked examples for trusted, untrusted, and mixed provider setups, see configure RPC trust.
Default Behavior
Unless overridden by the flags above, akona-node node run has the following defaults:
- The P2P stack is spun up. The libp2p swarm listens on TCP
9222to receive block gossip. Thediscv5discovery service runs on UDP port9223. Peer scoring is enabled. - An RPC server is exposed at
0.0.0.0:9545. Websocket connections are disabled by default. - Prometheus metrics are disabled. Enable them with the
--metrics.enabledflag; metrics are then served on0.0.0.0:9090, configurable via the--metrics.portand--metrics.addrflags.
Rollup Configuration Loading
If a file path to a rollup config is not specified via the--l2-config-file cli flag, the Rollup Config will be loaded
via the superchain registry.
A custom rollup config can either be specified through the
--l2-config-file flag, or specific values may be overridden
using a set of override flags provided by the kona-node.
Override flags (for example --canyon-override) can be viewed
in the help menu by running kona-node node --help. The only
overrides currently supported are hardfork timestamps in seconds.