Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion STYLE_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Sei Docs Style Guide

Check warning on line 1 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L1

Use sentence case for headings: 'Sei Docs Style Guide'.

This style guide contains general rules and principles to ensure the documentation is cohesive, useful, and organized.

Expand All @@ -6,7 +6,7 @@

This documentation strives to be:

### Beginner Friendly

Check warning on line 9 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L9

Use sentence case for headings: 'Beginner Friendly'.

The Sei community welcomes members from all walks of life. As such, the documentation should be understandable by anyone, including those who are new to Web3 or non-technical.

Expand All @@ -22,8 +22,8 @@

- To be clear and inclusive, avoid using jargon and obscure words where possible.
- Limit the number of clauses in a sentence and make sure that your points are structured.
- Avoid qualifying language, which is ~~quite~~ often ~~completely~~ unnecessary.

Check warning on line 25 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L25

'quite' is often unnecessary qualifying language — consider removing it.

Check warning on line 25 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L25

'completely' is often unnecessary qualifying language — consider removing it.
- Information should be simply organized and easy to find.

Check warning on line 26 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L26

'simply' is often unnecessary qualifying language — consider removing it.

### Self-explanatory

Expand Down Expand Up @@ -64,30 +64,30 @@
- **Reference**: Transactions, RPC reference, tokens, changelog, ecosystem contracts
- **Hardware Wallets**: Ledger integration with Ethers

### Cosmos-SDK (Deprecated)

Check warning on line 67 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L67

Use sentence case for headings: 'Cosmos-SDK (Deprecated)'.

> ⚠️ **Deprecation Notice**: Cosmos SDK and CosmWasm functionality is being deprecated in favor of EVM-only. For more details, see [SIP-3](https://github.com/sei-protocol/sips/blob/main/sips/sip-3.md) and [Proposal 99](https://seistream.app/proposals/99).

This section contains legacy documentation for Cosmos SDK functionality. New development should focus on the EVM.

### Operate (Node)

Check warning on line 73 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L73

Use sentence case for headings: 'Operate (Node)'.

The Operate section covers topics related to running Sei infrastructure. This is relevant for node operators, validators, and those looking to contribute to chain infrastructure.

**Contents include:**

- **Node Operations**: Overview, Seictl setup, statesync, snapshot sync, node types, troubleshooting, API configuration, validators, oracle price feeder
- **Advanced Operations**: Configuration & monitoring, RocksDB backend, technical reference
- **Advanced Operations**: Configuration & monitoring, Giga SS Store migration, technical reference

## Style Guidelines

Check warning on line 82 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L82

Use sentence case for headings: 'Style Guidelines'.

### Acronyms and Abbreviations

Check warning on line 84 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L84

Use sentence case for headings: 'Acronyms and Abbreviations'.

To maximize clarity, we should avoid acronyms and abbreviations where possible, especially for shorter, more ambiguous acronyms:

- Just use 'CosmWasm' instead of 'CW'

However, there are occasions where acronyms might be more easily understandable (e.g., NFT instead of Non-Fungible Token, RPC instead of Remote Procedure Call), or referred to very frequently.

Check warning on line 90 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L90

'very' is often unnecessary qualifying language — consider removing it.

In these cases, we should first use the spelled-out term followed by the shortened form in parentheses:

Expand Down Expand Up @@ -252,7 +252,7 @@
</Frame>
```

### Callouts and Admonitions

Check warning on line 255 in STYLE_GUIDE.md

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

STYLE_GUIDE.md#L255

Use sentence case for headings: 'Callouts and Admonitions'.

Use callouts to highlight important information. Mintlify supports the following callout types:

Expand Down
Binary file removed assets/pebbledb-vs-rocksdb.png
Binary file not shown.
6 changes: 5 additions & 1 deletion docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,6 @@
"group": "Advanced Operations",
"pages": [
"node/advanced-config-monitoring",
"node/rocksdb-backend",
"node/giga-storage-migration",
"node/technical-reference"
]
Expand Down Expand Up @@ -899,6 +898,11 @@
"destination": "/node",
"permanent": true
},
{
"source": "/node/rocksdb-backend",
"destination": "/node/node-operators#seidb-configuration",
"permanent": true
},
{
"source": "/node/oracle-price-feeder",
"destination": "/learn/oracles",
Expand Down
19 changes: 4 additions & 15 deletions node/giga-storage-migration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: 'Giga SS Store Migration Guide'
sidebarTitle: 'Giga SS Store Migration'
description: 'Migrate a Sei RPC node to Giga SS Store: split EVM state into a dedicated state-store backend so non-EVM modules stop paying EVM write amplification.'
keywords: ['sei node', 'giga storage', 'seidb', 'state sync', 'evm ss', 'flatkv', 'rpc node', 'pebbledb', 'rocksdb']
keywords: ['sei node', 'giga storage', 'seidb', 'state sync', 'evm ss', 'flatkv', 'rpc node', 'pebbledb']

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit] Removing 'rocksdb' here leaves no page in the docs carrying that keyword now that node/rocksdb-backend.mdx is deleted. Since the point of this PR is to reach RocksDB operators, keeping the keyword on at least one page (this one, or node-operators.mdx) helps site search and LLM retrieval surface the deprecation warning to exactly the audience that needs it.

---

Giga SS Store is the next step in Sei's storage evolution on top of [SeiDB](/node/node-operators#architecture).
Expand All @@ -15,7 +15,7 @@
| Layer | Cosmos backend | EVM backend |
|---|---|---|
| **SC** (State Commit, app hash) | `memiavl` | FlatKV |
| **SS** (State Store, historical queries) | single MVCC DB (PebbleDB or RocksDB) | dedicated EVM SS MVCC DB(s) under `data/evm_ss/` |
| **SS** (State Store, historical queries) | single PebbleDB MVCC database | dedicated EVM SS MVCC databases under `data/evm_ss/` |

Only the **SS** layer changes for this migration. SC layer config is untouched
and `memiavl` remains the authoritative source for the app hash, so this is
Expand Down Expand Up @@ -43,9 +43,6 @@

- EVM reads are served exclusively from a dedicated EVM SS database.
- Non-EVM modules no longer pay write amplification for EVM state.
- A backend change (PebbleDB ↔ RocksDB) can be combined with the same state
sync, since `ss-backend` drives both the Cosmos SS MVCC DB and every EVM SS
sub-DB.

## What's different about EVM SS

Expand All @@ -55,9 +52,9 @@
per-type sub-DB layout. Any EVM read that needs iteration must stay on the
Cosmos SS side.

## Migration Steps

Check warning on line 55 in node/giga-storage-migration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/giga-storage-migration.mdx#L55

Use sentence case for headings: 'Migration Steps'.

### Step 1: Update `app.toml`

Check warning on line 57 in node/giga-storage-migration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/giga-storage-migration.mdx#L57

Use sentence case for headings: 'Step 1: Update ********'.

Apply the following settings in `~/.sei/config/app.toml`:

Expand All @@ -69,8 +66,7 @@
[state-store]
ss-enable = true

# DBBackend for the Cosmos SS MVCC DB and for every EVM SS sub-DB.
# Supported: pebbledb, rocksdb. Default pebbledb.
# Use PebbleDB for the Cosmos SS MVCC DB and every EVM SS sub-DB.
ss-backend = "pebbledb"

# Route EVM state to the dedicated EVM SS backend.
Expand All @@ -80,14 +76,7 @@
evm-ss-split = true
```

If you want to switch SS backend in the same step:

- **PebbleDB → RocksDB**: set `ss-backend = "rocksdb"`, build `seid` with
`-tags rocksdbBackend`, and install RocksDB per the
[RocksDB Backend Guide](/node/rocksdb-backend). `ss-backend` drives both the
Cosmos SS MVCC DB and every EVM SS sub-DB, so a single setting flips both.
- No data migration tool is needed across backends — the state sync populates
the new layout.
<Warning>Keep `ss-backend = "pebbledb"` during this migration. RocksDB support for the state store will be removed. No target release has been published.</Warning>

### Step 2: State sync into the new layout

Expand Down Expand Up @@ -205,7 +194,7 @@

<Warning>Cleanly rolling back to `evm-ss-split = false` requires another state sync. Under `evm-ss-split = true`, EVM writes go only to the EVM SS DB, so Cosmos SS will not have those writes. Restarting with `evm-ss-split = false` stops opening the EVM SS DB, but EVM-state queries will miss anything written after the Giga state sync until you re-state-sync without the split.</Warning>

## FAQ

Check warning on line 197 in node/giga-storage-migration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/giga-storage-migration.mdx#L197

Use sentence case for headings: 'FAQ'.

### Where do the data files live after migrating?

Expand All @@ -214,7 +203,7 @@
- EVM SS data lives under `data/evm_ss/`.
- SC data (`memiavl` + FlatKV) is untouched by this migration.

### Does Giga SS Store change the app hash or consensus?

Check warning on line 206 in node/giga-storage-migration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/giga-storage-migration.mdx#L206

Use sentence case for headings: 'Does Giga SS Store change the app hash or consensus?'.

No. The SC layer is unchanged, so `memiavl` remains the authoritative source
for the app hash. Giga SS Store is a per-node SS change that is invisible to
Expand All @@ -241,7 +230,7 @@
translate into missing EVM state at query time. The safety checks above
block this scenario at startup.

### Does Giga SS Store support historical proofs?

Check warning on line 233 in node/giga-storage-migration.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/giga-storage-migration.mdx#L233

Use sentence case for headings: 'Does Giga SS Store support historical proofs?'.

No, same as SeiDB. SS stores raw KVs and does not reconstruct IAVL-style
proofs.
14 changes: 6 additions & 8 deletions node/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
<Card horizontal title="Archive Nodes" icon="database" />
</CardGroup>

## Network Versions

Check warning on line 22 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L22

Use sentence case for headings: 'Network Versions'.

<VersionTable />

_Live binary versions, genesis, and seed peers — see the [technical reference](/node/technical-reference)._

## Hardware Requirements

Check warning on line 28 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L28

Use sentence case for headings: 'Hardware Requirements'.

| Component | Required |
| --------- | ------------------------------------------------------ |
Expand All @@ -34,7 +34,7 @@
| Storage | 2 TB NVMe SSD (high IOPS required) |
| Network | 2 Gbps with low latency |

## Installation & Setup Steps

Check warning on line 37 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L37

Use sentence case for headings: 'Installation & Setup Steps'.

<Steps>

Expand All @@ -47,13 +47,13 @@
sudo apt update && sudo apt upgrade -y
```

###### 2. Install Essential Packages

Check warning on line 50 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L50

Use sentence case for headings: '2. Install Essential Packages'.

```bash
sudo apt install make gcc git jq chrony curl lz4 wget tar build-essential -y
```

###### 3. Synchronize System Time

Check warning on line 56 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L56

Use sentence case for headings: '3. Synchronize System Time'.

```bash
sudo timedatectl set-timezone UTC
Expand All @@ -61,7 +61,7 @@
timedatectl
```

##### Install Go

Check warning on line 64 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L64

Use sentence case for headings: 'Install Go'.

You need Go only if you build `seid` from source. The prebuilt binary and Docker
install paths in the next step do not require it.
Expand All @@ -71,7 +71,7 @@
(e.g. [`v6.6.1`](https://github.com/sei-protocol/sei-chain/blob/v6.6.1/go.mod)) for its
exact requirement.

###### Installation Steps

Check warning on line 74 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L74

Use sentence case for headings: 'Installation Steps'.

```bash
# Check for existing Go installations — more than one entry means another copy
Expand Down Expand Up @@ -138,12 +138,10 @@
```

<Info>
Prebuilt binaries are attached from `v6.6.1` onward — for earlier versions, build
from source or use Docker. They are `linux/amd64` only, omit hardware Ledger
support, and don't include the optional
[RocksDB state-store backend](/node/rocksdb-backend). On other architectures, or
if you sign with a Ledger device, build from source or use Docker; a
RocksDB-enabled `seid` must be built from source.
Prebuilt binaries are attached from `v6.6.1` onward. For earlier versions,
build from source or use Docker. They are `linux/amd64` only and omit hardware
Ledger support. On other architectures, or if you sign with a Ledger device,
build from source or use Docker.
</Info>

<Note>
Expand Down Expand Up @@ -198,7 +196,7 @@
</Tab>
</Tabs>

##### Initialize Chain Files

Check warning on line 199 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L199

Use sentence case for headings: 'Initialize Chain Files'.

<Info>Default init mode is **full** (RPC/P2P bind to all interfaces). For **validator** or **seed** nodes, use `--mode validator` or `--mode seed` so RPC and P2P bind to localhost only. See the [Validator Operations Guide](/node/validators) for the full validator init example.</Info>

Expand Down Expand Up @@ -226,7 +224,7 @@
sed -i 's/persistent-peers = .*/persistent-peers = "'$PEERS'"/' ~/.sei/config/config.toml
```

##### Configure App Settings

Check warning on line 227 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L227

Use sentence case for headings: 'Configure App Settings'.

```bash
# Set minimum gas price (recommended; helps prevent spam transactions)
Expand Down Expand Up @@ -256,7 +254,7 @@

<Accordion title="Advanced Configuration">

#### Archive Node Setup

Check warning on line 257 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L257

Use sentence case for headings: 'Archive Node Setup'.

An archive node maintains the complete historical record of the chain. This requires disabling state sync and starting with a pre-existing database using a "snapshot".

Expand All @@ -270,7 +268,7 @@

**2. Configure Archive Node Peers** — To sync from the height your snapshot was created at, you need peers retaining a large amount of historical blocks. The node will require specific peers during initial sync, which can be changed at a later time.

#### Mempool Configuration

Check warning on line 271 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L271

Use sentence case for headings: 'Mempool Configuration'.

For optimal transaction handling and resource management, it is recommended to update the mempool settings in your `config.toml` file.

Expand Down Expand Up @@ -358,7 +356,7 @@
sudo systemctl start seid
```

##### Monitoring & Troubleshooting

Check warning on line 359 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L359

Use sentence case for headings: 'Monitoring & Troubleshooting'.

Check your node's status with these commands:

Expand Down Expand Up @@ -394,9 +392,9 @@

[View Complete Node Setup Guide](/node/node-operators)

## Node Resources

Check warning on line 395 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L395

Use sentence case for headings: 'Node Resources'.

### Node Setup

Check warning on line 397 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L397

Use sentence case for headings: 'Node Setup'.

<CardGroup cols={3}>
<Card horizontal title="Node Operations Guide" icon="server" href="/node/node-operators">
Expand All @@ -410,14 +408,14 @@
</Card>
</CardGroup>

### Advanced Operations

Check warning on line 411 in node/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/index.mdx#L411

Use sentence case for headings: 'Advanced Operations'.

<CardGroup cols={3}>
<Card horizontal title="Configuration & Monitoring" icon="gauge-simple-high" href="/node/advanced-config-monitoring">
Optimize your node's performance with advanced settings and monitoring tools.
</Card>
<Card horizontal title="RocksDB Backend" icon="database" href="/node/rocksdb-backend">
Run with RocksDB instead of the default backend.
<Card horizontal title="Giga SS Store Migration" icon="database" href="/node/giga-storage-migration">
Move EVM historical state into dedicated state-store databases on supported RPC nodes.
</Card>
<Card horizontal title="Technical Reference" icon="terminal" href="/node/technical-reference">
Detailed technical specifications, API endpoints, and commands for node operators.
Expand Down
30 changes: 26 additions & 4 deletions node/node-operators.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
including configuration management, maintenance procedures, and best practices
for stable and performant operations.

## Configuration Management

Check warning on line 12 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L12

Use sentence case for headings: 'Configuration Management'.

### Directory Structure

Check warning on line 14 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L14

Use sentence case for headings: 'Directory Structure'.

The Sei node configuration is stored in `$HOME/.sei/config/`:

Expand All @@ -31,9 +31,9 @@
[Default Configurations](#default-configurations) at the bottom of this
section.

### Essential Configuration Parameters

Check warning on line 34 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L34

Use sentence case for headings: 'Essential Configuration Parameters'.

#### Network Settings (config.toml)

Check warning on line 36 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L36

Use sentence case for headings: 'Network Settings (config.toml)'.

```toml
[p2p]
Expand All @@ -59,7 +59,7 @@
timeout-broadcast-tx-commit = "10s"
```

#### Application Settings (app.toml)

Check warning on line 62 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L62

Use sentence case for headings: 'Application Settings (app.toml)'.

```toml
# Minimum gas prices to prevent spam transactions
Expand Down Expand Up @@ -89,6 +89,8 @@
[state-store]
# Historical SS layer for queries. Required for any node serving RPC.
ss-enable = true
# State-store backend. Use PebbleDB; RocksDB support will be removed.
ss-backend = "pebbledb"
Comment thread
alexander-sei marked this conversation as resolved.
# 0 = keep everything; 100,000 is roughly 28 hours of pacific-1 history.
ss-keep-recent = 100000

Expand All @@ -97,12 +99,14 @@
rs-backend = "pebbledb"
```

### Default Configurations

Check warning on line 102 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L102

Use sentence case for headings: 'Default Configurations'.

The full unmodified `app.toml`, `config.toml`, and `client.toml` produced by
`seid init` against the latest tagged `seid` release. Use these as the
canonical reference for every available knob and its default value.

<Warning>The generated `app.toml` below mirrors the latest tagged release and may still list RocksDB as a state-store option. Do not use RocksDB for new or resynced nodes. RocksDB support for the SeiDB state store will be removed. No target release has been published.</Warning>

<Tabs>
<Tab title="app.toml">

Expand Down Expand Up @@ -1349,7 +1353,7 @@
</Tab>
</Tabs>

## Database Management

Check warning on line 1356 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1356

Use sentence case for headings: 'Database Management'.

### Architecture

Expand All @@ -1366,15 +1370,18 @@
modes is set to a non-default value.
2. **State Store (SS)** — versioned raw key/value pairs used for historical
queries. Required for any node that serves RPC. The default backend is
**PebbleDB**; **RocksDB** is available for iteration-heavy workloads such
as archive nodes or RPC nodes that run a lot of `debug_trace*` (see the
[RocksDB Backend Guide](/node/rocksdb-backend) for build instructions).
**PebbleDB**. RocksDB support for this layer will be removed. No target
release has been published. Check the
[Sei release notes](https://github.com/sei-protocol/sei-chain/releases)
before each upgrade. Use PebbleDB for new nodes. Before upgrading, resync
any node that uses RocksDB onto PebbleDB through [state sync](/node/statesync)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[blocker] "resync any node that uses RocksDB onto PebbleDB through [state sync] or a [PebbleDB snapshot]" is not a valid path for archive nodes, and following it destroys history.

State sync fetches state at a recent height and discards earlier versions; a public snapshot is likewise pruned. Neither can reproduce an archive node running ss-keep-recent = 0. The page the PR deletes was explicit about this (node/rocksdb-backend.mdx: "RocksDB is not supported for existing data unless syncing from genesis"), so the caveat is being dropped, not resolved.

Add the archive-node case here — either that they must sync from genesis onto PebbleDB, or that no supported path exists yet and they should hold on the current release. As written, an archive operator reading this loses their history at the next upgrade.

or a [PebbleDB snapshot](/node/snapshot).

The legacy IAVL backend is still selectable via `sc-enable = false` but is
deprecated and slated for removal — new deployments and existing nodes
should run on SeiDB.

### SeiDB Configuration

Check warning on line 1384 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1384

Use sentence case for headings: 'SeiDB Configuration'.

The full set of knobs is in the auto-generated
[Default Configurations](#default-configurations) above. The block below
Expand Down Expand Up @@ -1420,7 +1427,7 @@
# serving RPC must keep it on.
ss-enable = true

# pebbledb (default) or rocksdb (faster iteration, archive-friendly).
# Use PebbleDB. RocksDB support will be removed.
ss-backend = "pebbledb"

ss-async-write-buffer = 100
Expand All @@ -1444,11 +1451,26 @@
prune-interval-seconds = 600
```

#### PebbleDB version encoding

Check warning on line 1454 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1454

Use sentence case for headings: 'PebbleDB version encoding'.

Check warning on line 1454 in node/node-operators.mdx

View workflow job for this annotation

GitHub Actions / vale

[vale] node/node-operators.mdx#L1454

[Sei.Headings] Use sentence case for headings: 'PebbleDB version encoding'.
Raw output
{"message": "[Sei.Headings] Use sentence case for headings: 'PebbleDB version encoding'.", "location": {"path": "node/node-operators.mdx", "range": {"start": {"line": 1454, "column": 6}}}, "severity": "WARNING"}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[suggestion] Inserting this #### heading here orphans a pre-existing paragraph. Line 1469 ("Setting small (more frequent) pruning intervals may collide with snapshot creation...") is guidance about ss-prune-interval from the TOML block above, but it now renders as the tail of the "PebbleDB version encoding" subsection, where it's unrelated and confusing.

Either move the new subsection below that paragraph, or lift the pruning paragraph up to directly follow the TOML block.


Fresh PebbleDB state stores use descending-version MVCC encoding. Sei includes
the version in each key and sorts newer versions first. This lets
latest-version reads reach the newest visible value without scanning older
versions. The store records this format with the `s/_mvcc_descending` sentinel
key, which `seid` detects automatically when it opens the database.

PebbleDB state stores created by older builds use ascending-version encoding.
`seid` detects these stores and opens them in compatibility mode without an
error. They remain on the slower ascending read path. Rebuild the state store
through [state sync](/node/statesync) with a current `seid` release to adopt
descending encoding. A filesystem snapshot preserves the source store's
encoding, so confirm its encoding with the snapshot provider.

Setting small (more frequent) pruning intervals may collide with
snapshot creation. Too-large (less frequent) intervals mean pruning takes
longer overall, which can cause missed blocks and excessive resync time.

### Giga Storage and Giga Executor

Check warning on line 1473 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1473

Use sentence case for headings: 'Giga Storage and Giga Executor'.

These are two **separate** opt-in features that ship in newer `seid`
releases. Both default to off; only enable them deliberately and after
Expand Down Expand Up @@ -1492,7 +1514,7 @@
occ_enabled = false
```

### Database Maintenance

Check warning on line 1517 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1517

Use sentence case for headings: 'Database Maintenance'.

The database is typically stable and can be left alone, although some attention
may be required:
Expand All @@ -1519,9 +1541,9 @@

<Warning>The wipe command above deletes the entire local database (everything except `priv_validator_state.json`) and the `wasm` folder. It does not compact data in place — after running it, the node must be re-synced from a [snapshot](/node/snapshot) or via [state sync](/node/statesync) before it can serve traffic again.</Warning>

## Service Management

Check warning on line 1544 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1544

Use sentence case for headings: 'Service Management'.

### Systemd Commands

Check warning on line 1546 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1546

Use sentence case for headings: 'Systemd Commands'.

```bash
# Check service status
Expand All @@ -1540,7 +1562,7 @@
journalctl -fu seid -o cat
```

### Log Management

Check warning on line 1565 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1565

Use sentence case for headings: 'Log Management'.

Prevent logs from consuming excessive disk space by enabling rotation:

Expand All @@ -1561,7 +1583,7 @@
EOF
```

## Update Procedures

Check warning on line 1586 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1586

Use sentence case for headings: 'Update Procedures'.

<Info>
Upgrade with the same method you originally installed with: `make install`
Expand All @@ -1571,7 +1593,7 @@
`which -a seid` lists every copy.
</Info>

### Minor Updates

Check warning on line 1596 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1596

Use sentence case for headings: 'Minor Updates'.

For minor updates that are non-consensus-breaking:

Expand Down Expand Up @@ -1613,7 +1635,7 @@
</Tab>
</Tabs>

### Major Updates

Check warning on line 1638 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1638

Use sentence case for headings: 'Major Updates'.

For major upgrades that introduce state-breaking changes:

Expand Down Expand Up @@ -1657,7 +1679,7 @@
halt-height so the swap takes seconds at upgrade time.
</Tip>

## Performance Optimization

Check warning on line 1682 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1682

Use sentence case for headings: 'Performance Optimization'.

Performance optimizations can yield different results depending on your system's
hardware, workload, and network conditions. Before implementing any changes,
Expand All @@ -1665,7 +1687,7 @@
your specific configuration and requirements. Always back up important data
before making modifications.

### Memory Management (sysctl tuning)

Check warning on line 1690 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1690

Use sentence case for headings: 'Memory Management (sysctl tuning)'.

Optimizing memory management settings can help improve performance and
stability, particularly for high-load nodes. These settings control swap usage
Expand All @@ -1679,7 +1701,7 @@
vm.dirty_writeback_centisecs = 100 # Frequency (in hundredths of a second) at which the system writes "dirty" pages to disk
```

### Network Stack Optimization

Check warning on line 1704 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1704

Use sentence case for headings: 'Network Stack Optimization'.

Tuning the network stack can enhance packet processing efficiency and
throughput, particularly for nodes handling a large number of peers and high
Expand All @@ -1693,7 +1715,7 @@
net.core.wmem_max = 16777216 # send buffer size for network sockets
```

### Storage Optimization

Check warning on line 1718 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1718

Use sentence case for headings: 'Storage Optimization'.

Optimizing storage settings can significantly reduce write latency and improve
database performance, especially for nodes using NVMe SSDs.
Expand All @@ -1703,9 +1725,9 @@
blockdev --setra 4096 /dev/nvme0n1 # readahead value to optimize sequential reads
```

## Backup and Recovery

Check warning on line 1728 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1728

Use sentence case for headings: 'Backup and Recovery'.

### Regular Backups

Check warning on line 1730 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1730

Use sentence case for headings: 'Regular Backups'.

Automate backups to avoid data loss:

Expand All @@ -1724,7 +1746,7 @@
systemctl start seid
```

### Recovery Procedure

Check warning on line 1749 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1749

Use sentence case for headings: 'Recovery Procedure'.

Restoring from backup in case of corruption or accidental deletion:

Expand All @@ -1742,7 +1764,7 @@
systemctl start seid
```

## Security Considerations

Check warning on line 1767 in node/node-operators.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/node-operators.mdx#L1767

Use sentence case for headings: 'Security Considerations'.

- Use firewalls and rate-limiting to prevent attacks
- Keep your system and node software updated
Expand Down
122 changes: 0 additions & 122 deletions node/rocksdb-backend.mdx

This file was deleted.

41 changes: 34 additions & 7 deletions node/snapshot.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@

Follow this guide to join an existing network through **snapshot sync**. To quickly spin up a fresh full node and join the network, it's recommended to restore from a snapshot instead of replaying all historical blocks.

## Snapshot Sync

Check warning on line 11 in node/snapshot.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/snapshot.mdx#L11

Use sentence case for headings: 'Snapshot Sync'.

Snapshot sync allows a new node to join a network by downloading a recent, compressed copy of the entire application state and extracting it directly into the data directory. This reduces the initial sync time from days to minutes.

<Warning>RocksDB support for the SeiDB state store will be removed. No target release has been published. For new or resynced nodes, use a snapshot only after confirming that its state store uses PebbleDB. Keep `ss-backend = "pebbledb"` in `app.toml`.</Warning>

## Snapshot Providers

Check warning on line 17 in node/snapshot.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

node/snapshot.mdx#L17

Use sentence case for headings: 'Snapshot Providers'.

You can select from various providers for downloading snapshots:

Expand All @@ -23,6 +25,10 @@

<iframe src="https://seistream.app/labs?page=snapshots" width="100%" height="600" style={{ border: 'none', borderRadius: '8px' }} title="Sei Snapshot Providers" />

Snapshot providers do not consistently label the state-store backend. Follow
the verification step below before you extract a snapshot. If you cannot
identify the backend from the archive, ask the provider to confirm it.

## Clean Up & Preparation

If you are **not** starting a node from fresh, perform the following backups and clean‑ups first.
Expand Down Expand Up @@ -79,21 +85,37 @@
SNAPSHOT_URL="<PASTE_SNAPSHOT_URL_HERE>"
```

2. **Download and Extract**
Most providers compress the `data` and `wasm` directory directly. The following command streams the download and extracts it into `$HOME/.sei`.
2. **Download, verify, and extract**
Most providers compress the `data` and `wasm` directories directly. Download the archive so you can inspect its state-store path before extraction:

```bash
curl -L $SNAPSHOT_URL | lz4 -c -d | tar -x -C $HOME/.sei
curl -L "$SNAPSHOT_URL" -o snapshot.tar.lz4

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[suggestion] Dropping the streaming curl -L $SNAPSHOT_URL | lz4 -c -d | tar -x one-liner in favor of download-then-verify-then-extract has real operational cost that the doc doesn't mention:

  • Peak disk roughly doubles — the compressed archive plus the extracted state must coexist. On pacific-1 that is hundreds of GB, and it's the most common way this procedure fails.
  • The archive is decompressed twice (once for tar -tf, once for tar -x), adding substantial CPU/wall-clock on a multi-hundred-GB lz4 stream.
  • -o snapshot.tar.lz4 writes to the current working directory, which is often $HOME on a small root volume rather than the large data disk.

A cheaper alternative that keeps the streaming extract: extract as before, then verify the backend on the extracted tree before starting seid (ls $HOME/.sei/data | grep -E 'pebbledb|rocksdb'). If you keep the pre-extraction check, please state the free-space requirement (~2× compressed size on top of the extracted state) and suggest -o /path/on/data/disk/snapshot.tar.lz4.


lz4 -c -d snapshot.tar.lz4 | tar -tf - | \
awk '/(^|\/)data\/(state_store\/cosmos\/)?(pebbledb|rocksdb)\// { print; exit }'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[blocker] This verification gate — the core safety mechanism of the PR — can pass a snapshot that contains a RocksDB store.

awk ... { print; exit } stops at the first match of (pebbledb|rocksdb). An archive taken from a machine that previously ran RocksDB can contain both data/pebbledb/ and data/rocksdb/; tar ordering will typically surface pebbledb first, the command prints a PebbleDB path, and the operator extracts a RocksDB store anyway. The prose at line 100 ("Do not extract ... if the path contains rocksdb") assumes all state-store paths were inspected, but only one ever is.

It also doesn't cover the EVM SS store under data/evm_ss/, which the Giga guide documents as a separate MVCC database.

Suggest collecting all matches and failing on any RocksDB hit instead of exiting early:

lz4 -c -d snapshot.tar.lz4 | tar -tf - \
  | grep -oE '(^|/)data/((state_store/cosmos|evm_ss)/)?(pebbledb|rocksdb)/' \
  | sort -u

Then: proceed only if every printed path contains pebbledb and none contains rocksdb.

Minor side effect worth noting in the doc either way: the early exit breaks the pipe, so lz4/tar will print "Broken pipe" to stderr, which reads like a failure to operators following along.

```

**Alternative: Parallel Download with aria2**
The printed path must contain either `data/pebbledb/` or

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[suggestion] data/state_store/cosmos/pebbledb/ doesn't appear anywhere else in this repo and conflicts with the only other documented layout: node/giga-storage-migration.mdx:202 states Cosmos SS lives at data/pebbledb/ for the default backend. If this second path is a real (legacy or Giga-era) layout, document it in the Giga FAQ and the Directory Structure section too; if it isn't, drop it so operators don't reject a valid archive for not matching.

Also worth a sentence: ss-db-directory can relocate the state store outside data/ entirely, in which case neither pattern matches and the check silently prints nothing — which line 100 tells the operator to treat as "do not extract."

`data/state_store/cosmos/pebbledb/`. Do not extract the archive if the path
contains `rocksdb` or the command prints no state-store path.

Extract the verified archive, then remove it:

```bash
lz4 -c -d snapshot.tar.lz4 | tar -x -C $HOME/.sei
rm snapshot.tar.lz4
```

**Alternative: parallel download with aria2**

For faster downloads, especially with large snapshots, you can use `aria2c` which supports parallel connections:

```bash
# Download with 16 parallel connections
aria2c -x 16 -s 16 -o snapshot.tar.lz4 $SNAPSHOT_URL

# Run the backend verification command above before extraction

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit] A bare # Run the backend verification command above before extraction inside the code block is easy to paste past — the aria2 block stays copy-pasteable end-to-end and extracts without ever verifying. Consider inlining the actual verification command here, or pulling it out into a numbered step both download paths reference.

Same gap applies to the pv variant at line 129, and note that the <Warning> at line 134 covers .tar.gz snapshots, for which the lz4-based verification command doesn't work at all.


# Extract after download completes
lz4 -c -d snapshot.tar.lz4 | tar -x -C $HOME/.sei

Expand All @@ -117,13 +139,18 @@
cp $HOME/priv_validator_state.json $HOME/.sei/data/priv_validator_state.json
```

4. **Enable SeiDB**
Make sure to enable `sei-db` in your config if it's not already enabled:
4. **Enable SeiDB and configure PebbleDB**
Make sure SeiDB is enabled and the state-store backend is PebbleDB:

```bash
sed -i.bak -E "/^\[state-commit\]/,/^\[.*\]/ s|^(sc-enable[[:space:]]*=[[:space:]]*).*$|\1true| ; /^\[state-store\]/,/^\[.*\]/ s|^(ss-enable[[:space:]]*=[[:space:]]*).*$|\1true|" $HOME/.sei/config/app.toml
sed -i.bak -E "/^\[state-commit\]/,/^\[.*\]/ s|^[#[:space:]]*(sc-enable[[:space:]]*=[[:space:]]*).*$|\1true| ; /^\[state-store\]/,/^\[.*\]/ s|^[#[:space:]]*(ss-enable[[:space:]]*=[[:space:]]*).*$|\1true| ; /^\[state-store\]/,/^\[.*\]/ s|^[#[:space:]]*(ss-backend[[:space:]]*=[[:space:]]*).*$|\1\"pebbledb\"|" $HOME/.sei/config/app.toml

sed -n '/^\[state-store\]/,/^\[.*\]/p' $HOME/.sei/config/app.toml
```

Confirm that the output includes `ss-backend = "pebbledb"`. If the key is
absent, add it directly below `[state-store]` before you restart the node.

5. **Restart the Node**

```bash
Expand Down
Loading
Loading