> ## 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-reth historical proof configuration

> Configuration options for historical proofs using ExEx in op-reth (op-rs fork).

This page provides documentation for the configuration options available in [op-reth](https://github.com/ethereum-optimism/optimism/tree/develop/rust/op-reth) for supporting historical proofs via ExEx.

By enabling this Execution Extension (ExEx), the node initializes a separate storage database specifically for historical trie nodes. This allows the node to **generate and serve historical proofs** efficiently, which is critical for applications requiring historical state access, such as fault proof systems.

For a complete setup guide, see the tutorial on [Running op-reth with Historical Proofs](/node-operators/tutorials/reth-historical-proofs).

<Info>
  This fork inherits all standard op-reth configuration options. See the [op-reth configuration reference](/node-operators/reference/op-reth-config).
</Info>

## Proof History

Options for configuring the proof history ExEx.

### proofs-history

If true, initialize external-proofs exex to save and serve trie nodes to provide proofs faster.

<Tabs>
  <Tab title="Syntax">`--proofs-history`</Tab>
</Tabs>

### proofs-history.storage-path

The path to the storage DB for proofs history.

<Tabs>
  <Tab title="Syntax">`--proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH>`</Tab>
</Tabs>

### proofs-history.window

The window to span blocks for proofs history. Value is the number of blocks.
Default is 1 month of blocks based on 2 seconds block time (`30 * 24 * 60 * 60 / 2 = 1,296,000`).

<Tabs>
  <Tab title="Syntax">`--proofs-history.window <PROOFS_HISTORY_WINDOW>`</Tab>
  <Tab title="Default">`1296000`</Tab>
</Tabs>

### proofs-history.prune-interval

Interval between proof-storage prune runs. Accepts human-friendly durations like "100s", "5m", "1h".

* Shorter intervals prune smaller batches more often.
* Longer intervals prune larger batches less often.

A shorter interval is preferred so that prune runs stay small and don’t stall writes for too long.

<Tabs>
  <Tab title="Syntax">`--proofs-history.prune-interval <PROOFS_HISTORY_PRUNE_INTERVAL>`</Tab>
  <Tab title="Default">`15s`</Tab>
</Tabs>

### proofs-history.verification-interval

Verification interval: perform full block execution every N blocks for data integrity.

* `0`: Disabled (Default). Always use fast path with pre-computed data.
* `1`: Always verify. Always execute blocks.
* `N`: Verify every Nth block (e.g., 100 = every 100 blocks).

Periodic verification helps catch data corruption while maintaining good performance.

<Tabs>
  <Tab title="Syntax">`--proofs-history.verification-interval <PROOFS_HISTORY_VERIFICATION_INTERVAL>`</Tab>
  <Tab title="Default">`0`</Tab>
</Tabs>

## Management Commands

The `op-reth proofs` command allows you to manage the storage of historical proofs.

### init

Initialize the proofs storage with the current state of the chain.

```bash theme={null}
op-reth proofs init --chain <CHAIN> --datadir <DATA_DIR> --proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH> 
```

### prune

Prune old proof history to reclaim space.

```bash theme={null}
op-reth proofs prune --chain <CHAIN> --datadir <DATA_DIR> --proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH> --proofs-history.window <PROOFS_HISTORY_WINDOW>
```

<Info>
  Pruning runs automatically while the node is up, on the cadence set by `--proofs-history.prune-interval`. Running this command manually is only required at startup if op-reth detects a gap larger than 1000 blocks between the configured window and the data on disk and refuses to start. See the [tutorial](/node-operators/tutorials/reth-historical-proofs#manual-prune) for details.
</Info>

### unwind

Unwind the proofs storage to a specific block

```bash theme={null}
op-reth proofs unwind --datadir <DATA_DIR> --proofs-history.storage-path <PROOFS_HISTORY_STORAGE_PATH> --target <TARGET_BLOCK>
```

## RPC Endpoints

### debug\_proofsSyncStatus

Returns the current sync status of the proofs store.

```
debug_proofsSyncStatus → { "earliest": <block>, "latest": <block> }
```

Once `latest` tracks the chain tip, `eth_getProof` calls for blocks within `[earliest, latest]` will be served from the versioned store.

## Metrics

When the `metrics` feature is enabled, the proofs-history system exposes Prometheus metrics to monitor health and performance.

### Block processing (`optimism_trie.block.*`)

| Metric                               | Type      | Description                                 |
| ------------------------------------ | --------- | ------------------------------------------- |
| `total_duration_seconds`             | Histogram | End-to-end time to process a block          |
| `execution_duration_seconds`         | Histogram | Time spent in EVM execution                 |
| `state_root_duration_seconds`        | Histogram | Time spent calculating state root           |
| `write_duration_seconds`             | Histogram | Time spent writing trie updates to storage  |
| `account_trie_updates_written_total` | Counter   | Number of account trie branch nodes written |
| `storage_trie_updates_written_total` | Counter   | Number of storage trie branch nodes written |
| `hashed_accounts_written_total`      | Counter   | Number of hashed account entries written    |
| `hashed_storages_written_total`      | Counter   | Number of hashed storage entries written    |
| `earliest_number`                    | Gauge     | Earliest block number in the proofs store   |
| `latest_number`                      | Gauge     | Latest block number in the proofs store     |

### Pruner (`optimism_trie.pruner.*`)

| Metric                         | Type      | Description                                      |
| ------------------------------ | --------- | ------------------------------------------------ |
| `total_duration_seconds`       | Histogram | Duration of each prune run                       |
| `pruned_blocks`                | Gauge     | Number of blocks pruned in the last run          |
| `account_trie_updates_written` | Gauge     | Account trie entries deleted in the last prune   |
| `storage_trie_updates_written` | Gauge     | Storage trie entries deleted in the last prune   |
| `hashed_accounts_written`      | Gauge     | Hashed account entries deleted in the last prune |
| `hashed_storages_written`      | Gauge     | Hashed storage entries deleted in the last prune |

### RPC (`optimism_rpc.eth_api_ext.*`)

| Metric                           | Type      | Description                                   |
| -------------------------------- | --------- | --------------------------------------------- |
| `get_proof_latency`              | Histogram | Latency of successful `eth_getProof` requests |
| `get_proof_requests`             | Counter   | Total `eth_getProof` requests received        |
| `get_proof_successful_responses` | Counter   | Total successful `eth_getProof` responses     |
| `get_proof_failures`             | Counter   | Total failed `eth_getProof` requests          |

### Storage operations (`optimism_trie.storage.operation.*`)

Per-operation `duration_seconds` histograms are recorded for: `store_account_branch`, `store_storage_branch`, `store_hashed_account`, `store_hashed_storage`, `trie_cursor_seek_exact`, `trie_cursor_seek`, `trie_cursor_next`, `trie_cursor_current`, `hashed_cursor_seek`, `hashed_cursor_next`.
