> ## Documentation Index
> Fetch the complete documentation index at: https://docs.optimism.io/llms.txt
> Use this file to discover all available pages before exploring further.

# op-node configuration options

> Complete reference for all op-node command-line flags and environment variables.

This page provides detailed documentation for all available op-node configuration options, organized by functionality.
The following options are from the `--help` in [v1.10.2](https://github.com/ethereum-optimism/optimism/releases/tag/op-node/v1.10.2).

## L1 and L2 connection settings

Configure how op-node connects to L1 (Ethereum) and L2 (execution layer) endpoints.

### l1

Address of L1 User JSON-RPC endpoint to use (eth namespace required). The default value is `"http://127.0.0.1:8545"`.

<Tabs>
  <Tab title="Syntax">`--l1=<value>`</Tab>
  <Tab title="Example">`--l1="http://127.0.0.1:8545"`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_ETH_RPC="http://127.0.0.1:8545"`</Tab>
</Tabs>

### l1.beacon

Address of L1 Beacon-node HTTP endpoint to use.

<Tabs>
  <Tab title="Syntax">`--l1.beacon=<value>`</Tab>
  <Tab title="Example">`--l1.beacon="http://127.0.0.1:3500"`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_BEACON="http://127.0.0.1:3500"`</Tab>
</Tabs>

### l1.beacon-fallbacks

Addresses of L1 Beacon-API compatible HTTP fallback endpoints. Used to fetch blob sidecars not available at the l1.beacon (e.g. expired blobs).

<Tabs>
  <Tab title="Syntax">`--l1.beacon-fallbacks=<value>`</Tab>
  <Tab title="Example">`--l1.beacon-fallbacks="http://fallback1.example.com,http://fallback2.example.com"`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_BEACON_FALLBACKS="http://fallback1.example.com,http://fallback2.example.com"`</Tab>
</Tabs>

### l1.beacon-header

Optional HTTP header to add to all requests to the L1 Beacon endpoint. Format: 'X-Key: Value'

<Tabs>
  <Tab title="Syntax">`--l1.beacon-header=<value>`</Tab>
  <Tab title="Example">`--l1.beacon-header="Authorization: Bearer token"`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_BEACON_HEADER="Authorization: Bearer token"`</Tab>
</Tabs>

### l1.beacon.fetch-all-sidecars

If true, all sidecars are fetched and filtered locally. Workaround for buggy Beacon nodes. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--l1.beacon.fetch-all-sidecars=<boolean>`</Tab>
  <Tab title="Example">`--l1.beacon.fetch-all-sidecars=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_BEACON=false`</Tab>
</Tabs>

### l1.beacon.ignore

When false, halts `op-node` startup if the healthcheck to the Beacon-node endpoint fails. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--l1.beacon.ignore=<boolean>`</Tab>
  <Tab title="Example">`--l1.beacon.ignore=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_BEACON_IGNORE=false`</Tab>
</Tabs>

### l1.cache-size

Cache size for blocks, receipts and transactions. If this flag is set to 0, 3/2 of the sequencing window size is used (usually 2400). The default value of 900 (\~3h of L1 blocks) is good for (high-throughput) networks that see frequent safe head increments. On (low-throughput) networks with infrequent safe head increments, it is recommended to set this value to 0, or a value that well covers the typical span between safe head increments. Note that higher values will cause significantly increased memory usage. The default value is `900`.

<Tabs>
  <Tab title="Syntax">`--l1.cache-size=<value>`</Tab>
  <Tab title="Example">`--l1.cache-size=900`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_CACHE_SIZE=900`</Tab>
</Tabs>

### l1.epoch-poll-interval

Poll interval for retrieving new L1 epoch updates such as safe and finalized block changes. Disabled if 0 or negative. The default value is `6m24s`.

<Tabs>
  <Tab title="Syntax">`--l1.epoch-poll-interval=<value>`</Tab>
  <Tab title="Example">`--l1.epoch-poll-interval=6m24s`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_EPOCH_POLL_INTERVAL=6m24s`</Tab>
</Tabs>

### l1.http-poll-interval

Polling interval for latest-block subscription when using an HTTP RPC provider. Ignored for other types of RPC endpoints. The default value is `12s`.

<Tabs>
  <Tab title="Syntax">`--l1.http-poll-interval=<value>`</Tab>
  <Tab title="Example">`--l1.http-poll-interval=12s`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_HTTP_POLL_INTERVAL=12s`</Tab>
</Tabs>

### l1.max-concurrency

Maximum number of concurrent RPC requests to make to the L1 RPC provider. The default value is `10`.

<Tabs>
  <Tab title="Syntax">`--l1.max-concurrency=<value>`</Tab>
  <Tab title="Example">`--l1.max-concurrency=10`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_MAX_CONCURRENCY=10`</Tab>
</Tabs>

### l1.rpc-max-batch-size

Maximum number of RPC requests to bundle, e.g., during L1 blocks receipt fetching. The L1 RPC rate limit counts this as N items, but allows it to burst at once. The default value is `20`.

<Tabs>
  <Tab title="Syntax">`--l1.rpc-max-batch-size=<value>`</Tab>
  <Tab title="Example">`--l1.rpc-max-batch-size=20`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_RPC_MAX_BATCH_SIZE=20`</Tab>
</Tabs>

### l1.rpc-rate-limit

Optional self-imposed global rate-limit on L1 RPC requests, specified in requests / second. Disabled if set to 0. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--l1.rpc-rate-limit=<value>`</Tab>
  <Tab title="Example">`--l1.rpc-rate-limit=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_RPC_RATE_LIMIT=0`</Tab>
</Tabs>

### l1.rpckind

The kind of RPC provider, used to inform optimal transactions receipts fetching, and thus reduce costs. Valid options: alchemy, quicknode, infura, parity, `nethermind`, debug\_geth, erigon, basic, any, standard. The default value is `standard`.

<Tabs>
  <Tab title="Syntax">`--l1.rpckind=<value>`</Tab>
  <Tab title="Example">`--l1.rpckind=standard`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_RPC_KIND=standard`</Tab>
</Tabs>

<Info>
  For details on additional values, see [RPC Receipts](https://github.com/ethereum-optimism/optimism/blob/844cc20084a2e9716631b4092ce7eca4804a8e0a/op-service/sources/receipts_rpc.go#L239-L322).
</Info>

### l1.runtime-config-reload-interval

Poll interval for reloading the runtime config, useful when config events are not being picked up. Disabled if 0 or negative. The default value is `10m0s`.

<Tabs>
  <Tab title="Syntax">`--l1.runtime-config-reload-interval=<value>`</Tab>
  <Tab title="Example">`--l1.runtime-config-reload-interval=10m0s`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_RUNTIME_CONFIG_RELOAD_INTERVAL=10m0s`</Tab>
</Tabs>

### l1.trustrpc

Trust the L1 RPC, sync faster at risk of malicious/buggy RPC providing bad or inconsistent L1 data. The default value is `false`.

<Info>
  If you're running an Erigon Ethereum execution client for your L1 provider you will need to include `--l1.trustrpc`. At the time of writing,
  Erigon doesn't support the `eth_getProof` that we prefer to use to load L1 data for some processing in `op-node`. The trustrpc flag makes it
  use something else that erigon supports, but the `op-node` can't verify for correctness.
</Info>

<Tabs>
  <Tab title="Syntax">`--l1.trustrpc=<boolean>`</Tab>
  <Tab title="Example">`--l1.trustrpc=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_L1_TRUST_RPC=false`</Tab>
</Tabs>

### l2

Address of L2 Engine JSON-RPC endpoints to use (engine and eth namespace required). This is referred to as `authrpc` by Geth and Reth.

<Tabs>
  <Tab title="Syntax">`--l2=<value>`</Tab>
  <Tab title="Example">`--l2=http://127.0.0.1:8751`</Tab>
  <Tab title="Environment variable">`OP_NODE_L2_ENGINE_RPC=http://127.0.0.1:8751`</Tab>
</Tabs>

### l2.engine-rpc-timeout

L2 engine client rpc timeout. The default value is `10s`.

<Tabs>
  <Tab title="Syntax">`--l2.engine-rpc-timeout=<value>`</Tab>
  <Tab title="Example">`--l2.engine-rpc-timeout=10s`</Tab>
  <Tab title="Environment variable">`OP_NODE_L2_ENGINE_RPC_TIMEOUT=10s`</Tab>
</Tabs>

### l2.jwt-secret

Path to JWT secret key. Keys are 32 bytes, hex encoded in a file. A new key will be generated if left empty.

<Tabs>
  <Tab title="Syntax">`--l2.jwt-secret=<value>`</Tab>
  <Tab title="Example">`--l2.jwt-secret=/path/to/jwt/secret`</Tab>
  <Tab title="Environment variable">`OP_NODE_L2_ENGINE_AUTH=/path/to/jwt/secret`</Tab>
</Tabs>

### l2.enginekind

The kind of engine client, used to control the behavior of optimism in respect to different types of engine clients. Valid options: `geth`, `reth`, `erigon`. The default value is `geth`.

<Tabs>
  <Tab title="Syntax">`--l2.enginekind=<value>`</Tab>
  <Tab title="Example">`--l2.enginekind=geth`</Tab>
  <Tab title="Environment variable">`OP_NODE_L2_ENGINE_KIND=geth`</Tab>
</Tabs>

## Network selection and rollup configuration

Configure which OP Stack network to connect to and manage rollup-specific settings.

### network

Predefined network selection. Available networks: arena-z-mainnet, arena-z-sepolia,
automata-mainnet, base-devnet-0-sepolia-dev-0, base-mainnet, base-sepolia, bob-mainnet,
camp-sepolia, creator-chain-testnet-sepolia, cyber-mainnet, cyber-sepolia,
ethernity-mainnet, ethernity-sepolia, fraxtal-mainnet, funki-mainnet, funki-sepolia,
hashkeychain-mainnet, ink-mainnet, ink-sepolia, lisk-mainnet, lisk-sepolia, lyra-mainnet,
metal-mainnet, metal-sepolia, mint-mainnet, mode-mainnet, mode-sepolia, op-mainnet,
op-sepolia, oplabs-devnet-0-sepolia-dev-0, orderly-mainnet, ozean-sepolia, pivotal-sepolia,
polynomial-mainnet, race-mainnet, race-sepolia, radius\_testnet-sepolia, redstone-mainnet,
rehearsal-0-bn-0-rehearsal-0-bn, rehearsal-0-bn-1-rehearsal-0-bn, settlus-mainnet-mainnet,
settlus-sepolia-sepolia, shape-mainnet, shape-sepolia, silent-data-mainnet-mainnet,
snax-mainnet, soneium-mainnet, soneium-minato-sepolia, sseed-mainnet, swan-mainnet,
swell-mainnet, tbn-mainnet, tbn-sepolia, unichain-mainnet, unichain-sepolia,
worldchain-mainnet, worldchain-sepolia, xterio-eth-mainnet, zora-mainnet, zora-sepolia.

<Tabs>
  <Tab title="Syntax">`--network=<value>`</Tab>
  <Tab title="Example">`--network=op-mainnet`</Tab>
  <Tab title="Environment variable">`OP_NODE_NETWORK=op-mainnet`</Tab>
</Tabs>

### rollup.config

Rollup chain parameters.

<Tabs>
  <Tab title="Syntax">`--rollup.config=<value>`</Tab>
  <Tab title="Example">`--rollup.config=[ConfigValueHere]`</Tab>
  <Tab title="Environment variable">`OP_NODE_ROLLUP_CONFIG=[ConfigValueHere]`</Tab>
</Tabs>

### rollup.halt

Opt-in option to halt on incompatible protocol version requirements of the given level (major/minor/patch/none), as signaled onchain in L1.

<Tabs>
  <Tab title="Syntax">`--rollup.halt=<value>`</Tab>
  <Tab title="Example">`--rollup.halt=[HaltOptionHere]`</Tab>
  <Tab title="Environment variable">`OP_NODE_ROLLUP_HALT=[HaltOptionHere]`</Tab>
</Tabs>

### rollup.l1-chain-config

Path to .json file with the chain configuration for the L1, either in the direct format or genesis.json format (i.e. embedded under the .config property). Not necessary / will be ignored if using Ethereum mainnet or Sepolia as an L1.

<Tabs>
  <Tab title="Syntax">`--rollup.l1-chain-config=<value>`</Tab>
  <Tab title="Example">`--rollup.l1-chain-config=/path/to/l1-config.json`</Tab>
  <Tab title="Environment variable">`OP_NODE_ROLLUP_L1_CHAIN_CONFIG=/path/to/l1-config.json`</Tab>
</Tabs>

### syncmode

Blockchain sync mode. Options are "consensus-layer" or "execution-layer". The default value is `consensus-layer`.

<Tabs>
  <Tab title="Syntax">`--syncmode=<value>`</Tab>
  <Tab title="Example">`--syncmode=consensus-layer`</Tab>
  <Tab title="Environment variable">`OP_NODE_SYNCMODE=consensus-layer`</Tab>
</Tabs>

## Fork overrides

Manually override fork activation timestamps for testing or custom deployments.

### override.canyon

Manually specify the Canyon fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.canyon=<value>`</Tab>
  <Tab title="Example">`--override.canyon=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_CANYON=0`</Tab>
</Tabs>

### override.delta

Manually specify the Delta fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.delta=<value>`</Tab>
  <Tab title="Example">`--override.delta=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_DELTA=0`</Tab>
</Tabs>

### override.ecotone

Manually specify the ecotone fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.ecotone=<value>`</Tab>
  <Tab title="Example">`--override.ecotone=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_ECOTONE=0`</Tab>
</Tabs>

### override.fjord

Manually specify the fjord fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.fjord=<value>`</Tab>
  <Tab title="Example">`--override.fjord=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_FJORD=0`</Tab>
</Tabs>

### override.granite

Manually specify the granite fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.granite=<value>`</Tab>
  <Tab title="Example">`--override.granite=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_GRANITE=0`</Tab>
</Tabs>

### override.holocene

Manually specify the holocene fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.holocene=<value>`</Tab>
  <Tab title="Example">`--override.holocene=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_HOLOCENE=0`</Tab>
</Tabs>

### override.isthmus

Manually specify the isthmus fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.isthmus=<value>`</Tab>
  <Tab title="Example">`--override.isthmus=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_ISTHMUS=0`</Tab>
</Tabs>

### override.interop

Manually specify the Interop fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.interop=<value>`</Tab>
  <Tab title="Example">`--override.interop=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_INTEROP=0`</Tab>
</Tabs>

### override.jovian

Manually specify the Jovian fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.jovian=<value>`</Tab>
  <Tab title="Example">`--override.jovian=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_JOVIAN=0`</Tab>
</Tabs>

### override.pectrablobschedule

Manually specify the PectraBlobSchedule fork timestamp, overriding the bundled setting. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--override.pectrablobschedule=<value>`</Tab>
  <Tab title="Example">`--override.pectrablobschedule=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_OVERRIDE_PECTRABLOBSCHEDULE=0`</Tab>
</Tabs>

## Logging configuration

Control log output format, level, and color.

### log.color

Color the log output if in terminal mode. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--log.color=<boolean>`</Tab>
  <Tab title="Example">`--log.color=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_LOG_COLOR=false`</Tab>
</Tabs>

### log.format

Format the log output. Supported formats: 'text', 'terminal', 'logfmt', 'json', 'json-pretty'. The default value is `text`.

<Tabs>
  <Tab title="Syntax">`--log.format=<value>`</Tab>
  <Tab title="Example">`--log.format=text`</Tab>
  <Tab title="Environment variable">`OP_NODE_LOG_FORMAT=text`</Tab>
</Tabs>

### log.level

The lowest log level that will be output. The default value is `info`.

<Tabs>
  <Tab title="Syntax">`--log.level=<value>`</Tab>
  <Tab title="Example">`--log.level=info`</Tab>
  <Tab title="Environment variable">`OP_NODE_LOG_LEVEL=info`</Tab>
</Tabs>

### log.pid

Show pid in the log. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--log.pid=<boolean>`</Tab>
  <Tab title="Example">`--log.pid=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_LOG_PID=false`</Tab>
</Tabs>

## Logging and RPC

Configure RPC API endpoints and admin functionality.

### rpc.addr

RPC listening address. Default is `"0.0.0.0"`.

<Tabs>
  <Tab title="Syntax">`--rpc.addr=<value>`</Tab>
  <Tab title="Example">`--rpc.addr=0.0.0.0`</Tab>
  <Tab title="Environment variable">`OP_NODE_RPC_ADDR=0.0.0.0`</Tab>
</Tabs>

### rpc.admin-state

File path used to persist state changes made via the admin API so they persist across restarts. Disabled if not set.

<Tabs>
  <Tab title="Syntax">`--rpc.admin-state=<value>`</Tab>
  <Tab title="Example">`--rpc.admin-state=[FilePathHere]`</Tab>
  <Tab title="Environment variable">`OP_NODE_RPC_ADMIN_STATE=[FilePathHere]`</Tab>
</Tabs>

### rpc.enable-admin

Enable the admin API (experimental). Default is `false`.

<Tabs>
  <Tab title="Syntax">`--rpc.enable-admin=[true|false]`</Tab>
  <Tab title="Example">`--rpc.enable-admin=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_RPC_ENABLE_ADMIN=false`</Tab>
</Tabs>

### rpc.port

RPC listening port. Default is `9545`.

<Tabs>
  <Tab title="Syntax">`--rpc.port=<value>`</Tab>
  <Tab title="Example">`--rpc.port=9545`</Tab>
  <Tab title="Environment variable">`OP_NODE_RPC_PORT=9545`</Tab>
</Tabs>

## Metrics and profiling

Enable observability through metrics and performance profiling.

### metrics.addr

Metrics listening address. The default value is `"0.0.0.0"`.

<Tabs>
  <Tab title="Syntax">`--metrics.addr=<value>`</Tab>
  <Tab title="Example">`--metrics.addr="0.0.0.0"`</Tab>
  <Tab title="Environment variable">`OP_NODE_METRICS_ADDR="0.0.0.0"`</Tab>
</Tabs>

### metrics.enabled

Enable the metrics server. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--metrics.enabled=<boolean>`</Tab>
  <Tab title="Example">`--metrics.enabled=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_METRICS_ENABLED=false`</Tab>
</Tabs>

### metrics.port

Metrics listening port. The default value is `7300`.

<Tabs>
  <Tab title="Syntax">`--metrics.port=<value>`</Tab>
  <Tab title="Example">`--metrics.port=7300`</Tab>
  <Tab title="Environment variable">`OP_NODE_METRICS_PORT=7300`</Tab>
</Tabs>

### pprof.addr

pprof listening address. Default is `"0.0.0.0"`.

<Tabs>
  <Tab title="Syntax">`--pprof.addr=<value>`</Tab>
  <Tab title="Example">`--pprof.addr=0.0.0.0`</Tab>
  <Tab title="Environment variable">`OP_NODE_PPROF_ADDR=0.0.0.0`</Tab>
</Tabs>

### pprof.enabled

Enable the pprof server. Default is `false`.

<Tabs>
  <Tab title="Syntax">`--pprof.enabled=[true|false]`</Tab>
  <Tab title="Example">`--pprof.enabled=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_PPROF_ENABLED=false`</Tab>
</Tabs>

### pprof.path

pprof file path. If it is a directory, the path is \{dir}/\{profileType}.prof

<Tabs>
  <Tab title="Syntax">`--pprof.path=<path>`</Tab>
  <Tab title="Example">`--pprof.path={dir}/{profileType}.prof`</Tab>
  <Tab title="Environment variable">`OP_NODE_PPROF_PATH={dir}/{profileType}.prof`</Tab>
</Tabs>

### pprof.port

pprof listening port. Default is `6060`.

<Tabs>
  <Tab title="Syntax">`--pprof.port=<value>`</Tab>
  <Tab title="Example">`--pprof.port=6060`</Tab>
  <Tab title="Environment variable">`OP_NODE_PPROF_PORT=6060`</Tab>
</Tabs>

### pprof.type

pprof profile type. One of cpu, heap, goroutine, threadcreate, block, mutex, allocs

<Tabs>
  <Tab title="Syntax">`--pprof.type=<value>`</Tab>
  <Tab title="Example">`--pprof.type=cpu`</Tab>
  <Tab title="Environment variable">`OP_NODE_PPROF_TYPE=cpu`</Tab>
</Tabs>

## P2P networking

Configure peer-to-peer networking, discovery, and connection management.

### p2p.advertise.ip

The IP address to advertise in Discv5, put into the ENR of the node. This may also be a hostname/domain name to resolve to an IP.

<Tabs>
  <Tab title="Syntax">`--p2p.advertise.ip=<value>`</Tab>
  <Tab title="Example">`--p2p.advertise.ip=YourIPAddressOrHostnameHere`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_ADVERTISE_IP=YourIPAddressOrHostnameHere`</Tab>
</Tabs>

### p2p.advertise.tcp

The TCP port to advertise in Discv5, put into the ENR of the node. Set to p2p.listen.tcp value if 0. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--p2p.advertise.tcp=<value>`</Tab>
  <Tab title="Example">`--p2p.advertise.tcp=3456`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_ADVERTISE_TCP=3456`</Tab>
</Tabs>

### p2p.advertise.udp

The UDP port to advertise in Discv5 as a fallback if not determined by Discv5, put into the ENR of the node. Set to p2p.listen.udp value if 0. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--p2p.advertise.udp=<value>`</Tab>
  <Tab title="Example">`--p2p.advertise.udp=3457`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_ADVERTISE_UDP=3457`</Tab>
</Tabs>

### p2p.ban.duration

The duration that peers are banned for. The default value is `1h0m0s`.

<Tabs>
  <Tab title="Syntax">`--p2p.ban.duration=<value>`</Tab>
  <Tab title="Example">`--p2p.ban.duration=1h0m0s`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEER_BANNING_DURATION=1h0m0s`</Tab>
</Tabs>

### p2p.ban.peers

Enables peer banning. The default value is `true`.

<Tabs>
  <Tab title="Syntax">`--p2p.ban.peers=<boolean>`</Tab>
  <Tab title="Example">`--p2p.ban.peers=true`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEER_BANNING=true`</Tab>
</Tabs>

### p2p.ban.threshold

The minimum score below which peers are disconnected and banned. The default value is `-100`.

<Tabs>
  <Tab title="Syntax">`--p2p.ban.threshold=<value>`</Tab>
  <Tab title="Example">`--p2p.ban.threshold=-100`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEER_BANNING_THRESHOLD=-100`</Tab>
</Tabs>

### p2p.bootnodes

Comma-separated base64-format ENR list. Bootnodes to start discovering other node records from.

<Tabs>
  <Tab title="Syntax">`--p2p.bootnodes=<value>`</Tab>
  <Tab title="Example">`--p2p.bootnodes=YourBootnodesListHere`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_BOOTNODES=YourBootnodesListHere`</Tab>
</Tabs>

### p2p.disable

Completely disable the P2P stack. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--p2p.disable=<boolean>`</Tab>
  <Tab title="Example">`--p2p.disable=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_DISABLE=false`</Tab>
</Tabs>

### p2p.discovery.path

Enables persistent storage of discovered ENRs in a database to recover from a restart without bootstrapping the discovery process again. Set to 'memory' to never persist the peerstore. The default value is `opnode_discovery_db`.

<Tabs>
  <Tab title="Syntax">`--p2p.discovery.path=<value>`</Tab>
  <Tab title="Example">`--p2p.discovery.path=opnode_discovery_db`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_DISCOVERY_PATH=opnode_discovery_db`</Tab>
</Tabs>

### p2p.gossip.timestamp.threshold

Threshold for rejecting gossip messages with payload timestamps older than this duration. The default value is `1m0s`.

<Tabs>
  <Tab title="Syntax">`--p2p.gossip.timestamp.threshold=<value>`</Tab>
  <Tab title="Example">`--p2p.gossip.timestamp.threshold=1m0s`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_GOSSIP_TIMESTAMP_THRESHOLD=1m0s`</Tab>
</Tabs>

### p2p.listen.ip

Specifies the IP to bind LibP2P and Discv5 to. The default value is `0.0.0.0`.

<Tabs>
  <Tab title="Syntax">`--p2p.listen.ip=<value>`</Tab>
  <Tab title="Example">`--p2p.listen.ip=0.0.0.0`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_LISTEN_IP=0.0.0.0`</Tab>
</Tabs>

### p2p.listen.tcp

Defines the TCP port to bind LibP2P to. Any available system port if set to 0. The default value is `9222`.

<Tabs>
  <Tab title="Syntax">`--p2p.listen.tcp=<value>`</Tab>
  <Tab title="Example">`--p2p.listen.tcp=9222`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_LISTEN_TCP_PORT=9222`</Tab>
</Tabs>

### p2p.listen.udp

Sets the UDP port to bind Discv5 to. It will be the same as the TCP port if left at 0. The default value is `0`.

<Tabs>
  <Tab title="Syntax">`--p2p.listen.udp=<value>`</Tab>
  <Tab title="Example">`--p2p.listen.udp=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_LISTEN_UDP_PORT=0`</Tab>
</Tabs>

### p2p.nat

Enables NAT traversal with PMP/UPNP devices to learn external IP. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--p2p.nat=<boolean>`</Tab>
  <Tab title="Example">`--p2p.nat=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_NAT=false`</Tab>
</Tabs>

### p2p.netrestrict

Specifies a comma-separated list of CIDR masks. P2P will only try to connect on these networks.

<Tabs>
  <Tab title="Syntax">`--p2p.netrestrict=<value>`</Tab>
  <Tab title="Example">`--p2p.netrestrict=`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_NETRESTRICT=`</Tab>
</Tabs>

### p2p.no-discovery

Disables Discv5 (node discovery). The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--p2p.no-discovery=<boolean>`</Tab>
  <Tab title="Example">`--p2p.no-discovery=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_NO_DISCOVERY=false`</Tab>
</Tabs>

### p2p.peers.grace

Determines the grace period to keep a newly connected peer around, if it is not misbehaving. The default value is `30s`.

<Tabs>
  <Tab title="Syntax">`--p2p.peers.grace=<value>`</Tab>
  <Tab title="Example">`--p2p.peers.grace=30s`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEERS_GRACE=30s`</Tab>
</Tabs>

### p2p.peers.hi

Sets the high-tide peer count. The node starts pruning peer connections slowly after reaching this number. The default value is `30`.

<Tabs>
  <Tab title="Syntax">`--p2p.peers.hi=<value>`</Tab>
  <Tab title="Example">`--p2p.peers.hi=30`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEERS_HI=30`</Tab>
</Tabs>

### p2p.peers.lo

Determines the low-tide peer count. The node actively searches for new peer connections if below this amount. The default value is `20`.

<Tabs>
  <Tab title="Syntax">`--p2p.peers.lo=<number>`</Tab>
  <Tab title="Example">`--p2p.peers.lo=20`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEERS_LO=20`</Tab>
</Tabs>

### p2p.peerstore.path

Specifies the Peerstore database location. Persisted peerstores help recover peers after restarts. Set to 'memory' to never persist the peerstore. Warning: a copy of the priv network key of the local peer will be persisted here. The default value is `"opnode_peerstore_db"`.

<Tabs>
  <Tab title="Syntax">`--p2p.peerstore.path=<path>`</Tab>
  <Tab title="Example">`--p2p.peerstore.path=opnode_peerstore_db`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEERSTORE_PATH=opnode_peerstore_db`</Tab>
</Tabs>

### p2p.priv.path

Defines the file path for reading the hex-encoded 32-byte private key for the peer ID. Created if not already exists. Important for maintaining the same network identity after restarting. The default value is `"opnode_p2p_priv.txt"`.

<Tabs>
  <Tab title="Syntax">`--p2p.priv.path=<file-path>`</Tab>
  <Tab title="Example">`--p2p.priv.path=opnode_p2p_priv.txt`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PRIV_PATH=opnode_p2p_priv.txt`</Tab>
</Tabs>

### p2p.scoring

Sets the peer scoring strategy for the P2P stack. Options include 'none' or 'light'. The default value is `"light"`.

<Tabs>
  <Tab title="Syntax">`--p2p.scoring=<strategy>`</Tab>
  <Tab title="Example">`--p2p.scoring=light`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_PEER_SCORING=light`</Tab>
</Tabs>

### p2p.sequencer.key

Hex-encoded private key for signing off on p2p application messages as sequencer.

<Tabs>
  <Tab title="Syntax">`--p2p.sequencer.key=<value>`</Tab>
  <Tab title="Example">`--p2p.sequencer.key=[YourKeyHere]`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_SEQUENCER_KEY=[YourKeyHere]`</Tab>
</Tabs>

### p2p.static

Comma-separated multiaddr-format(an unsigned address, containing: IP, TCP port, [PeerID](/node-operators/reference/op-node-json-rpc#opp2p_self)) peer list. Static connections to make and
maintain, these peers will be regarded as trusted. Addresses of the local peer
are ignored. Duplicate/Alternative addresses for the same peer all apply, but
only a single connection per peer is maintained.

<Tabs>
  <Tab title="Syntax">`--p2p.static=<value>`</Tab>
  <Tab title="Example">`--p2p.static=/ip4/127.0.0.1/tcp/9222/p2p/16Uiu2HAm2y6DXp6THWHCyquczNUh8gVAm4spo6hjP3Ns1dGRiAdE`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_STATIC=/ip4/127.0.0.1/tcp/9222/p2p/16Uiu2HAm2y6DXp6THWHCyquczNUh8gVAm4spo6hjP3Ns1dGRiAdE`</Tab>
</Tabs>

### p2p.sync.onlyreqtostatic

Restricts `RequestL2Range` sync requests to static peers only. Useful for enforcing trusted peer sync. When enabled, non-static peers are skipped during sync. Default is `false`.

<Tabs>
  <Tab title="Syntax">`--p2p.sync.onlyreqtostatic=[true|false]`</Tab>
  <Tab title="Example">`--p2p.sync.onlyreqtostatic=true`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_SYNC_ONLYREQTOSTATIC=true`</Tab>
</Tabs>

### p2p.sync.req-resp

Enables P2P req-resp alternative sync method, on both server and client side. Default is `true`.

<Tabs>
  <Tab title="Syntax">`--p2p.sync.req-resp=[true|false]`</Tab>
  <Tab title="Example">`--p2p.sync.req-resp=true`</Tab>
  <Tab title="Environment variable">`OP_NODE_P2P_SYNC_REQ_RESP=true`</Tab>
</Tabs>

## Sequencer options

Configuration for running op-node as a sequencer.

### sequencer.enabled

Enable sequencing of new L2 blocks. A separate batch submitter has to be deployed to publish the data for verifiers. Default is `false`.

<Tabs>
  <Tab title="Syntax">`--sequencer.enabled=[true|false]`</Tab>
  <Tab title="Example">`--sequencer.enabled=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_SEQUENCER_ENABLED=false`</Tab>
</Tabs>

### sequencer.l1-confs

Number of L1 blocks to keep distance from the L1 head as a sequencer for picking an L1 origin. Default is `4`.

<Tabs>
  <Tab title="Syntax">`--sequencer.l1-confs=<value>`</Tab>
  <Tab title="Example">`--sequencer.l1-confs=4`</Tab>
  <Tab title="Environment variable">`OP_NODE_SEQUENCER_L1_CONFS=4`</Tab>
</Tabs>

<Warning>
  The maximum value for `sequencer.l1-confs` cannot exceed the sequencer drift, currently set to 30 minutes (1800 seconds or 150 blocks). Setting a value higher than this limit will prevent the sequencer from producing blocks within the sequence window.
</Warning>

### sequencer.max-safe-lag

Maximum number of L2 blocks for restricting the distance between L2 safe and unsafe. Disabled if 0. Default is `0`.

<Tabs>
  <Tab title="Syntax">`--sequencer.max-safe-lag=<value>`</Tab>
  <Tab title="Example">`--sequencer.max-safe-lag=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_SEQUENCER_MAX_SAFE_LAG=0`</Tab>
</Tabs>

### sequencer.recover

Forces the sequencer to strictly prepare the next L1 origin and create empty L2 blocks. Default is `false`.

<Tabs>
  <Tab title="Syntax">`--sequencer.recover=[true|false]`</Tab>
  <Tab title="Example">`--sequencer.recover=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_SEQUENCER_RECOVER=false`</Tab>
</Tabs>

### sequencer.stopped

Initialize the sequencer in a stopped state. The sequencer can be started using the admin\_startSequencer RPC. Default is `false`.

<Tabs>
  <Tab title="Syntax">`--sequencer.stopped=[true|false]`</Tab>
  <Tab title="Example">`--sequencer.stopped=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_SEQUENCER_STOPPED=false`</Tab>
</Tabs>

## Verifier options

Configuration for running op-node as a verifier (replica node).

### verifier.l1-confs

Number of L1 blocks to keep distance from the L1 head before deriving L2 data from. Reorgs are supported, but may be slow to perform. Default is `0`.

<Tabs>
  <Tab title="Syntax">`--verifier.l1-confs=<value>`</Tab>
  <Tab title="Example">`--verifier.l1-confs=0`</Tab>
  <Tab title="Environment variable">`OP_NODE_VERIFIER_L1_CONFS=0`</Tab>
</Tabs>

<Info>
  While `verifier.l1-confs` has no strict limit, it's recommended to keep this value within 12-13 minutes (typically 10-20 blocks) for optimal performance. Exceeding this range may impact the verifier's data processing efficiency.
</Info>

## Conductor mode

Options for running op-node in conductor mode (for conductor-enabled chains).

### conductor.enabled

Enable the conductor service. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--conductor.enabled=<boolean>`</Tab>
  <Tab title="Example">`--conductor.enabled=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_CONDUCTOR_ENABLED=false`</Tab>
</Tabs>

### conductor.rpc

Conductor service rpc endpoint. The default value is `http://127.0.0.1:8547`.

<Tabs>
  <Tab title="Syntax">`--conductor.rpc=<value>`</Tab>
  <Tab title="Example">`--conductor.rpc=http://127.0.0.1:8547`</Tab>
  <Tab title="Environment variable">`OP_NODE_CONDUCTOR_RPC=http://127.0.0.1:8547`</Tab>
</Tabs>

### conductor.rpc-timeout

Conductor service rpc timeout. The default value is `1s`.

<Tabs>
  <Tab title="Syntax">`--conductor.rpc-timeout=<value>`</Tab>
  <Tab title="Example">`--conductor.rpc-timeout=1s`</Tab>
  <Tab title="Environment variable">`OP_NODE_CONDUCTOR_RPC_TIMEOUT=1s`</Tab>
</Tabs>

## Database and state persistence

Configure persistent storage for node state and snapshot data.

### safedb.path

File path used to persist safe head update data. Disabled if not set.

<Tabs>
  <Tab title="Syntax">`--safedb.path=<value>`</Tab>
  <Tab title="Example">`--safedb.path=/db`</Tab>
  <Tab title="Environment variable">`OP_NODE_SAFEDB_PATH=/db`</Tab>
</Tabs>

### snapshotlog.file

Path to the snapshot log file.

<Tabs>
  <Tab title="Syntax">`--snapshotlog.file=<value>`</Tab>
  <Tab title="Example">`--snapshotlog.file=[FilePathHere]`</Tab>
  <Tab title="Environment variable">`OP_NODE_SNAPSHOT_LOG=[FilePathHere]`</Tab>
</Tabs>

## Signer configuration

Options for configuring an external signer for P2P messages.

### signer.address

Address the signer is signing requests for.

<Tabs>
  <Tab title="Syntax">`--signer.address=<value>`</Tab>
  <Tab title="Example">`--signer.address=0x1234...`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_ADDRESS=0x1234...`</Tab>
</Tabs>

### signer.endpoint

Signer endpoint the client will connect to.

<Tabs>
  <Tab title="Syntax">`--signer.endpoint=<value>`</Tab>
  <Tab title="Example">`--signer.endpoint=https://signer.example.com`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_ENDPOINT=https://signer.example.com`</Tab>
</Tabs>

### signer.header

Headers to pass to the remote signer. Format `key=value`. Value can contain any character allowed in a HTTP header. When using env vars, split with commas. When using flags one key value pair per flag.

<Tabs>
  <Tab title="Syntax">`--signer.header=<value>`</Tab>
  <Tab title="Example">`--signer.header="Authorization: Bearer token"`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_HEADER="Authorization: Bearer token"`</Tab>
</Tabs>

### signer.tls.ca

TLS ca cert path. The default value is `"tls/ca.crt"`.

<Tabs>
  <Tab title="Syntax">`--signer.tls.ca=<value>`</Tab>
  <Tab title="Example">`--signer.tls.ca="tls/ca.crt"`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_TLS_CA="tls/ca.crt"`</Tab>
</Tabs>

### signer.tls.cert

TLS cert path. The default value is `"tls/tls.crt"`.

<Tabs>
  <Tab title="Syntax">`--signer.tls.cert=<value>`</Tab>
  <Tab title="Example">`--signer.tls.cert="tls/tls.crt"`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_TLS_CERT="tls/tls.crt"`</Tab>
</Tabs>

### signer.tls.enabled

Enable or disable TLS client authentication for the signer. The default value is `true`.

<Tabs>
  <Tab title="Syntax">`--signer.tls.enabled=<boolean>`</Tab>
  <Tab title="Example">`--signer.tls.enabled=true`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_TLS_ENABLED=true`</Tab>
</Tabs>

### signer.tls.key

TLS key path. The default value is `"tls/tls.key"`.

<Tabs>
  <Tab title="Syntax">`--signer.tls.key=<value>`</Tab>
  <Tab title="Example">`--signer.tls.key="tls/tls.key"`</Tab>
  <Tab title="Environment variable">`OP_NODE_SIGNER_TLS_KEY="tls/tls.key"`</Tab>
</Tabs>

## Alt-DA (Experimental)

<Warning>
  Alt-DA Mode is a Beta feature of the MIT licensed OP Stack. While it has received initial review from core contributors, it is still undergoing testing, and may have bugs or other issues.
</Warning>

Configuration options for Alternative Data Availability mode.

### altda.enabled

Enable Alt-DA mode. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--altda.enabled=<boolean>`</Tab>
  <Tab title="Example">`--altda.enabled=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_ENABLED=false`</Tab>
</Tabs>

### altda.da-server

HTTP address of a DA Server.

<Tabs>
  <Tab title="Syntax">`--altda.da-server=<value>`</Tab>
  <Tab title="Example">`--altda.da-server=http://da-server.example.com`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_DA_SERVER=http://da-server.example.com`</Tab>
</Tabs>

### altda.da-service

Use DA service type where commitments are generated by Alt-DA server. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--altda.da-service=<boolean>`</Tab>
  <Tab title="Example">`--altda.da-service=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_DA_SERVICE=false`</Tab>
</Tabs>

### altda.get-timeout

Timeout for get requests. 0 means no timeout. The default value is `0s`.

<Tabs>
  <Tab title="Syntax">`--altda.get-timeout=<value>`</Tab>
  <Tab title="Example">`--altda.get-timeout=0s`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_GET_TIMEOUT=0s`</Tab>
</Tabs>

### altda.max-concurrent-da-requests

Maximum number of concurrent requests to the DA server. The default value is `1`.

<Tabs>
  <Tab title="Syntax">`--altda.max-concurrent-da-requests=<value>`</Tab>
  <Tab title="Example">`--altda.max-concurrent-da-requests=1`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_MAX_CONCURRENT_DA_REQUESTS=1`</Tab>
</Tabs>

### altda.put-timeout

Timeout for put requests. 0 means no timeout. The default value is `0s`.

<Tabs>
  <Tab title="Syntax">`--altda.put-timeout=<value>`</Tab>
  <Tab title="Example">`--altda.put-timeout=0s`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_PUT_TIMEOUT=0s`</Tab>
</Tabs>

### altda.verify-on-read

Verify input data matches the commitments from the DA storage service. The default value is `true`.

<Tabs>
  <Tab title="Syntax">`--altda.verify-on-read=<boolean>`</Tab>
  <Tab title="Example">`--altda.verify-on-read=true`</Tab>
  <Tab title="Environment variable">`OP_NODE_ALTDA_VERIFY_ON_READ=true`</Tab>
</Tabs>

## Interop (Super Experimental)

<Warning>
  Interop is a highly experimental feature. Use with caution in production environments.
</Warning>

Configuration options for OP Stack interop networks.

### interop.dependency-set

Dependency-set configuration, point at JSON file.

<Tabs>
  <Tab title="Syntax">`--interop.dependency-set=<value>`</Tab>
  <Tab title="Example">`--interop.dependency-set=/path/to/dependency-set.json`</Tab>
  <Tab title="Environment variable">`OP_NODE_INTEROP_DEPENDENCY_SET=/path/to/dependency-set.json`</Tab>
</Tabs>

### interop.jwt-secret

Interop RPC server authentication. Path to JWT secret key. Keys are 32 bytes, hex encoded in a file. A new key will be generated if the file is empty. Applies only to Interop-enabled networks.

<Tabs>
  <Tab title="Syntax">`--interop.jwt-secret=<value>`</Tab>
  <Tab title="Example">`--interop.jwt-secret=/path/to/interop-jwt-secret.txt`</Tab>
  <Tab title="Environment variable">`OP_NODE_INTEROP_JWT_SECRET=/path/to/interop-jwt-secret.txt`</Tab>
</Tabs>

### interop.rpc.addr

Interop Websocket-only RPC listening address, for supervisor service to manage syncing of the op-node. Applies only to Interop-enabled networks. Optional, disabled if left empty. Do not enable if you do not run a supervisor service.

<Tabs>
  <Tab title="Syntax">`--interop.rpc.addr=<value>`</Tab>
  <Tab title="Example">`--interop.rpc.addr=0.0.0.0`</Tab>
  <Tab title="Environment variable">`OP_NODE_INTEROP_RPC_ADDR=0.0.0.0`</Tab>
</Tabs>

### interop.rpc.port

Interop RPC listening port, to serve supervisor syncing. Applies only to Interop-enabled networks. The default value is `9645`.

<Tabs>
  <Tab title="Syntax">`--interop.rpc.port=<value>`</Tab>
  <Tab title="Example">`--interop.rpc.port=9645`</Tab>
  <Tab title="Environment variable">`OP_NODE_INTEROP_RPC_PORT=9645`</Tab>
</Tabs>

## Experimental and miscellaneous

Additional experimental features and utility flags.

### experimental.sequencer-api

Enables experimental test sequencer RPC functionality. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--experimental.sequencer-api=<boolean>`</Tab>
  <Tab title="Example">`--experimental.sequencer-api=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_EXPERIMENTAL_SEQUENCER_API=false`</Tab>
</Tabs>

### fetch-withdrawal-root-from-state

Read withdrawal\_storage\_root (aka message passer storage root) from state trie (via execution layer) instead of the block header. Restores pre-Isthmus behavior, requires an archive EL client. The default value is `false`.

<Tabs>
  <Tab title="Syntax">`--fetch-withdrawal-root-from-state=<boolean>`</Tab>
  <Tab title="Example">`--fetch-withdrawal-root-from-state=false`</Tab>
  <Tab title="Environment variable">`OP_NODE_FETCH_WITHDRAWAL_ROOT_FROM_STATE=false`</Tab>
</Tabs>

## General options

Help and version information.

### --help, -h

Show help. The default value is `false`.

<Tabs items={['Syntax', 'Example']}>
  <Tab title="Syntax">`--help` OR `-h`</Tab>
  <Tab title="Syntax">`--help`</Tab>
</Tabs>

### --version, -v

<Info>
  Nodes built from source do not output the correct version numbers that are reported on
  the GitHub release page.
</Info>

Print the version. The default value is `false`.

<Tabs items={['Syntax', 'Example']}>
  <Tab title="Syntax">`--version` OR `-v`</Tab>
  <Tab title="Syntax">`--version`</Tab>
</Tabs>

## Node log levels

Node log levels determine the verbosity of log messages, allowing operators to filter messages based on importance and detail. The log levels for the `op-node` (used in Optimism)
are as follows:

1. Silent (0): No log messages are displayed. This level is rarely used as it provides
   no feedback on the node's status.

2. Error (1): Only error messages are displayed. Use this level to focus on critical
   issues that need immediate attention.

3. Warn (2): Displays error messages and warnings. This level helps to identify
   potential problems that might not be immediately critical but require attention.

4. Info (3): Displays error messages, warnings, and normal activity logs. This is the
   default level and provides a balanced view of the node's operations without being too
   verbose.

5. Debug (4): All info-level messages plus additional debugging information. Use this
   level when troubleshooting issues or developing the node software.

6. Detail (5): The most verbose level, including detailed debugging information and
   low-level system operations. This level generates a large amount of log data and is
   typically used only for in-depth troubleshooting.

To set the log level, use the `--log.level` flag when running the `op-node` command. For
example, to set the log level to debug:

```bash theme={null}
op-node --log.level=debug
```

By adjusting the log level, operators can control the amount and type of information that
gets logged, helping to manage log data volume and focus on relevant details during
different operational scenarios.
