Skip to content
This repository was archived by the owner on Apr 6, 2026. It is now read-only.
98 changes: 49 additions & 49 deletions pages/builders/chain-operators/configuration/batcher.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ You can use [this calculator](https://docs.google.com/spreadsheets/d/12VIiXHaVEC

### active-sequencer-check-duration

The duration between checks to determine the active sequencer endpoint. The
The duration between checks to determine the active sequencer endpoint. The
default value is `2m0s`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -68,7 +68,7 @@ default value is `2m0s`.
<Tabs.Tab>`OP_BATCHER_ACTIVE_SEQUENCER_CHECK_DURATION=2m0s`</Tabs.Tab>
</Tabs>

### altda.da-server
### altda.da-server

HTTP address of a DA Server.

Expand All @@ -92,7 +92,7 @@ value is `false`.
### altda.enabled

Enable Alt-DA mode
Alt-DA Mode is a Beta feature of the MIT licensed OP Stack.
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.
The default value is `false`.
Expand Down Expand Up @@ -145,7 +145,7 @@ Verify input data matches the commitments from the DA storage service.

### approx-compr-ratio

The approximate compression ratio (`<=1.0`). Only relevant for ratio
The approximate compression ratio (`<=1.0`). Only relevant for ratio
compressor. The default value is `0.6`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -167,9 +167,9 @@ is `0` for `SingularBatch`.

### check-recent-txs-depth

Indicates how many blocks back the batcher should look during startup for a
recent batch tx on L1. This can speed up waiting for node sync. It should be
set to the verifier confirmation depth of the sequencer (e.g. 4). The default
Indicates how many blocks back the batcher should look during startup for a
recent batch tx on L1. This can speed up waiting for node sync. It should be
set to the verifier confirmation depth of the sequencer (e.g. 4). The default
value is `0`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -180,7 +180,7 @@ value is `0`.

### compression-algo

The compression algorithm to use. Valid options: zlib, brotli, brotli-9,
The compression algorithm to use. Valid options: zlib, brotli, brotli-9,
brotli-10, brotli-11. The default value is `zlib`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -191,7 +191,7 @@ brotli-10, brotli-11. The default value is `zlib`.

### compressor

The type of compressor. Valid options: none, ratio, shadow. The default value
The type of compressor. Valid options: none, ratio, shadow. The default value
is `shadow`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -202,7 +202,7 @@ is `shadow`.

### data-availability-type

The data availability type to use for submitting batches to the L1. Valid
The data availability type to use for submitting batches to the L1. Valid
options: calldata, blobs. The default value is `calldata`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -245,8 +245,8 @@ HTTP provider URL for L1.

### l2-eth-rpc

HTTP provider URL for L2 execution engine. A comma-separated list enables the
active L2 endpoint provider. Such a list needs to match the number of
HTTP provider URL for L2 execution engine. A comma-separated list enables the
active L2 endpoint provider. Such a list needs to match the number of
rollup-rpcs provided.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -308,7 +308,7 @@ Maximum number of blocks to add to a span batch. **Default is 0 (no maximum)**.

### max-channel-duration

The maximum duration of L1-blocks to keep a channel open. 0 to disable. The
The maximum duration of L1-blocks to keep a channel open. 0 to disable. The
default value is `0`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -319,7 +319,7 @@ default value is `0`.

### max-l1-tx-size-bytes

The maximum size of a batch tx submitted to L1. Ignored for blobs, where max
The maximum size of a batch tx submitted to L1. Ignored for blobs, where max
blob size will be used. The default value is `120000`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -391,7 +391,7 @@ Timeout for all network operations. The default value is `10s`.

### num-confirmations

Number of confirmations which we will wait after sending a transaction. The
Number of confirmations which we will wait after sending a transaction. The
default value is `10`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -412,7 +412,7 @@ HTTP address of a DA Server.

### altda.da-service

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

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -433,7 +433,7 @@ Enable altda mode. The default value is `false`.

### altda.verify-on-read

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

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -494,7 +494,7 @@ pprof listening port. The default value is `6060`.

### pprof.type

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

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -515,7 +515,7 @@ The private key to use with the service. Must not be used with mnemonic.

### resubmission-timeout

Duration we will wait before resubmitting a transaction to L1. The default
Duration we will wait before resubmitting a transaction to L1. The default
value is `48s`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -527,7 +527,7 @@ value is `48s`.
### rollup-rpc

HTTP provider URL for Rollup node. A comma-separated list enables the active L2
endpoint provider. Such a list needs to match the number of l2-eth-rpcs
endpoint provider. Such a list needs to match the number of l2-eth-rpcs
provided.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -568,7 +568,7 @@ rpc listening port. The default value is `8545`.

### safe-abort-nonce-too-low-count

Number of ErrNonceTooLow observations required to give up on a tx at a
Number of ErrNonceTooLow observations required to give up on a tx at a
particular nonce without receiving confirmation. The default value is `3`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -610,9 +610,9 @@ Signer endpoint the client will connect to.

### signer.header

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

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -654,7 +654,7 @@ tls key. The default value is `tls/tls.key`.
### stopped

Initialize the batcher in a stopped state. The batcher can be started using the
admin_startBatcher RPC. The default value is `false`.
admin\_startBatcher RPC. The default value is `false`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
<Tabs.Tab>`--stopped=<value>`</Tabs.Tab>
Expand All @@ -665,7 +665,7 @@ admin_startBatcher RPC. The default value is `false`.
### sub-safety-margin

The batcher tx submission safety margin (in #L1-blocks) to subtract from a
channel's timeout and sequencing window, to guarantee safe inclusion of a
channel's timeout and sequencing window, to guarantee safe inclusion of a
channel on L1. The default value is `10`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -705,7 +705,7 @@ The total DA limit to start imposing on block building **when we are over the th
<Tabs.Tab>`OP_BATCHER_THROTTLE_BLOCK_SIZE=50000`</Tabs.Tab>
</Tabs>

---
***

### throttle-interval

Expand All @@ -717,11 +717,11 @@ Interval between potential DA throttling actions. **Zero disables throttling**.
<Tabs.Tab>`OP_BATCHER_THROTTLE_INTERVAL=5s`</Tabs.Tab>
</Tabs>

---
***

### throttle-threshold

Threshold on `pending-blocks-bytes-current` beyond which the batcher instructs the
Threshold on `pending-blocks-bytes-current` beyond which the batcher instructs the\
block builder to start throttling transactions with larger DA demands.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -730,7 +730,7 @@ block builder to start throttling transactions with larger DA demands.
<Tabs.Tab>`OP_BATCHER_THROTTLE_THRESHOLD=1500000`</Tabs.Tab>
</Tabs>

---
***

### throttle-tx-size

Expand All @@ -744,7 +744,7 @@ The DA size of transactions at which throttling begins **when we are over the th

### txmgr.fee-limit-threshold

The minimum threshold (in GWei) at which fee bumping starts to be capped.
The minimum threshold (in GWei) at which fee bumping starts to be capped.
Allows arbitrary fee bumps below this threshold. The default value is `100`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -755,7 +755,7 @@ Allows arbitrary fee bumps below this threshold. The default value is `100`.

### txmgr.min-basefee

Enforces a minimum base fee (in GWei) to assume when determining tx fees. 1
Enforces a minimum base fee (in GWei) to assume when determining tx fees. 1
GWei by default. The default value is `1`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -798,7 +798,7 @@ Frequency to poll for receipts. The default value is `12s`.

### txmgr.send-timeout

Timeout for sending transactions. If 0 it is disabled. The default value is
Timeout for sending transactions. If 0 it is disabled. The default value is
`0s`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand All @@ -809,8 +809,8 @@ Timeout for sending transactions. If 0 it is disabled. The default value is

### wait-node-sync

Indicates if, during startup, the batcher should wait for a recent batcher tx
on L1 to finalize (via more block confirmations). This should help avoid
Indicates if, during startup, the batcher should wait for a recent batcher tx
on L1 to finalize (via more block confirmations). This should help avoid
duplicate batcher txs. The default value is `false`.

<Tabs items={['Syntax', 'Example', 'Environment Variable']}>
Expand Down Expand Up @@ -843,27 +843,27 @@ Print the version. The default value is false.

The batcher policy defines high-level constraints and responsibilities regarding how L2 data is posted to L1. Below are the standard guidelines for configuring the batcher within the OP Stack.

| Parameter | Description | Administrator | Requirement | Notes |
|-----------|------------|---------------|-------------|--------|
| Data Availability Type | Specifies whether the batcher uses **blobs** or **calldata** to post transaction data to L1. | Batch submitter address | Ethereum (Blobs or Calldata) | - Alternative data availability (Alt-DA) is not yet supported in the standard configuration.<br/>- The sequencer can switch at will between blob transactions and calldata, with no restrictions, because both are fully secured by L1. |
| Batch Submission Frequency | Determines how frequently the batcher submits aggregated transaction data to L1 (via the batcher transaction). | Batch submitter address | Must target **1,800 L1 blocks** (6 hours on Ethereum, assuming 12s L1 block time) or lower | - Batches must be posted before the sequencing window closes (commonly 12 hours by default).<br/>- Leave a buffer for L1 network congestion and data size to ensure that each batch is fully committed in a timely manner. |
| Output Frequency | Defines how frequently L2 output roots are submitted to L1 (via the output oracle). | L1 Proxy Admin | **43,200 L2 blocks** (24 hours at 2s block times) or lower | - Once fault proofs are implemented, this value may become deprecated.<br/>- It cannot be set to 0 (there must be some cadence for outputs). |
| Parameter | Description | Administrator | Requirement | Notes |
| -------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Data Availability Type | Specifies whether the batcher uses **blobs** or **calldata** to post transaction data to L1. | Batch submitter address | Ethereum (Blobs or Calldata) | - Alternative data availability (Alt-DA) is not yet supported in the standard configuration.<br />- The sequencer can switch at will between blob transactions and calldata, with no restrictions, because both are fully secured by L1. |
| Batch Submission Frequency | Determines how frequently the batcher submits aggregated transaction data to L1 (via the batcher transaction). | Batch submitter address | Must target **1,800 L1 blocks** (6 hours on Ethereum, assuming 12s L1 block time) or lower | - Batches must be posted before the sequencing window closes (commonly 12 hours by default).<br />- Leave a buffer for L1 network congestion and data size to ensure that each batch is fully committed in a timely manner. |
| Output Frequency | Defines how frequently L2 output roots are submitted to L1 (via the output oracle). | L1 Proxy Admin | **43,200 L2 blocks** (24 hours at 2s block times) or lower | - Once fault proofs are implemented, this value may become deprecated.<br />- It cannot be set to 0 (there must be some cadence for outputs). |

### Additional Guidance

* **Data Availability Types**:
* **Calldata** is generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices.
* **Blobs** are typically lower cost when your chain has enough transaction volume to fill large chunks of data.
* **Data Availability Types**:
* **Calldata** is generally simpler but can be more expensive on mainnet Ethereum, depending on gas prices.
* **Blobs** are typically lower cost when your chain has enough transaction volume to fill large chunks of data.
* The `op-batcher` can toggle between these approaches by setting the `--data-availability-type=<blobs|calldata>` flag or with the `OP_BATCHER_DATA_AVAILABILITY_TYPE` env variable.

* **Batch Submission Frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags):
* Standard OP Chains frequently target a maximum channel duration between 1–6 hours.
* Your chain should never exceed your L2's sequencing window (commonly 12 hours).
* **Batch Submission Frequency** (`OP_BATCHER_MAX_CHANNEL_DURATION` and related flags):
* Standard OP Chains frequently target a maximum channel duration between 1–6 hours.
* Your chain should never exceed your L2's sequencing window (commonly 12 hours).
* If targeting a longer submission window (e.g., 5 or 6 hours), be aware that the [safe head](https://github.com/ethereum-optimism/specs/blob/main/specs/glossary.md#safe-l2-head) can stall up to that duration.

* **Output Frequency**:
* Used to post output roots to L1 for verification.
* The recommended maximum is 24 hours (43,200 blocks at 2s each), though many chains choose smaller intervals.
* **Output Frequency**:
* Used to post output roots to L1 for verification.
* The recommended maximum is 24 hours (43,200 blocks at 2s each), though many chains choose smaller intervals.
* Will eventually be replaced or significantly changed by the introduction of fault proofs.

Include these high-level "policy" requirements when you set up or modify your `op-batcher` configuration. See the [Batcher Configuration](#global-options) reference, which explains each CLI flag and environment variable in depth.
Loading