Skip to content

feat(state-store): default evm-ss-split=true for new nodes#40

Merged
bdchatham merged 2 commits into
mainfrom
feat/default-evm-ss-split
Jul 15, 2026
Merged

feat(state-store): default evm-ss-split=true for new nodes#40
bdchatham merged 2 commits into
mainfrom
feat/default-evm-ss-split

Conversation

@bdchatham

Copy link
Copy Markdown
Collaborator

Adds StateStoreConfig.EVMSSSplit and defaults it true, so newly generated node configs render app.toml [state-store] evm-ss-split = true — the giga SS-store layout. ss-enable/sc-enable already default true, so this is the single extra flag distinguishing a giga SS node from a plain one (per protocol guidance; decoupled from the Giga executor, giga_executor.*, which is untouched).

Changes

  • config.go: new EVMSSSplit field on StateStoreConfig (unified tag evm_ss_split).
  • legacy.go: renders the bare evm-ss-split key under [state-store] (siblings are ss--prefixed; the binary reads this one unprefixed), mapped both directions for round-trip fidelity.
  • defaults.go: EVMSSSplit: true in the baseline.
  • enrichments.go: field description.
  • io_write_test.go: TestWriteConfigToDir_EVMSSSplit guards default-on render + the bare-key form + omit-when-false.

Safety / blast radius

  • Additive optional field, no schema-version bump. Existing v2 configs load the zero value (false) and, via ,omitempty, render no evm-ss-split key — their app.toml is byte-unchanged. Only newly generated configs carry it true.
  • Existing nodes are not migrated. Flipping the split on over an unsplit data dir fails seid's startup safety check, so an existing node adopts it only via a state-sync (the controller migration workflow) — unchanged by this PR.

Review focus (the one integration risk)

Does any consumer regenerate a node's config from DefaultForMode on reconcile (rather than load-and-preserve)? If so, existing nodes could pick up evm-ss-split=true without a state-sync and fail to boot. I believe the render path preserves on-disk values (hence omitempty), but flagging for the platform/controller experts to confirm before merge.

🤖 Generated with Claude Code

Adds StateStoreConfig.EVMSSSplit (renders app.toml [state-store] evm-ss-split)
and defaults it true, so newly generated node configs run the giga SS-store
layout (EVM state in the SeiDB state-store). ss-enable/sc-enable already default
true, so this is the one extra flag distinguishing a giga SS node from a plain
one, per protocol guidance.

Safety:
- Additive optional field; no schema-version bump. Existing v2 configs load the
  zero value (false) and, via `,omitempty`, render no evm-ss-split key at all —
  their app.toml is byte-unchanged. Only newly generated configs carry it true.
- Switching an existing node still requires a state-sync (enabling the split
  over an unsplit data dir fails seid's startup safety check); this change does
  not migrate existing configs.
- Decoupled from the Giga parallel-execution engine (giga_executor.*), untouched.

Round-trip + default render guarded by TestWriteConfigToDir_EVMSSSplit.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@cursor

cursor Bot commented Jul 15, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Default-on for new full nodes changes storage layout expectations at bootstrap; existing configs are preserved via omitempty, but any path that rewrites config from DefaultForMode without preserving on-disk values could enable split on unsplit data and fail startup.

Overview
Introduces storage.state_store.evm_ss_split and wires it through unified config, legacy app.toml [state-store] as the bare evm-ss-split key (not ss- prefixed), enrichments, and round-trip mapping.

Mode defaults: full nodes get EVMSSSplit = true so newly written configs emit evm-ss-split = true (giga SS layout with EVM state in its own state-store DB). Archive explicitly resets it to false; validator and seed omit the key because state store is disabled. false uses omitempty, so existing on-disk configs without the key stay unchanged on re-render.

Validation rejects evm_ss_split when state_store.enable is false. TestWriteConfigToDir_EVMSSSplit locks the per-mode render behavior and bare-key form.

Reviewed by Cursor Bugbot for commit 4b1dcaa. Bugbot is set up for automated code reviews on this repo. Configure here.

Addresses xreview: baseDefaults=true rendered a contradictory ss-enable=false +
evm-ss-split=true on validator/seed. Per giga_store_migration.md the split is for
RPC nodes only (validator/seed run no SS store; archive unsupported). So set the
default in applyFullOverrides only, reset it in applyArchiveOverrides, and add a
validateStateStore guard (evm_ss_split requires state_store.enable). Test broadened
to a per-mode matrix; comments trimmed to house style.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bdchatham bdchatham merged commit 23b817a into main Jul 15, 2026
3 checks passed
@bdchatham bdchatham deleted the feat/default-evm-ss-split branch July 15, 2026 18:03
@bdchatham bdchatham mentioned this pull request Jul 15, 2026
bdchatham added a commit that referenced this pull request Jul 15, 2026
Ships the full/RPC-mode evm-ss-split=true default (#40).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
bdchatham added a commit to sei-protocol/seictl that referenced this pull request Jul 15, 2026
Bumps `github.com/sei-protocol/sei-config` v0.0.22 → **v0.0.23**, which
defaults `evm-ss-split=true` for full/RPC-mode nodes
(sei-protocol/sei-config#40). seictl resolves node config via sei-config
(`ResolveIntent`/`DefaultForMode`), so this bump is what actually
renders `[state-store] evm-ss-split = true` into a fresh RPC node's
`app.toml`.

Build + full sidecar test suite pass on the bump. Reviewed GO by
platform + kubernetes xreview on the sei-config change; controller-side
rollout gates (retained-PVC re-bootstrap wipe, replayer-mode
applicability, giga-capable seid images) tracked separately for the
controller import — they are not addressed by this dependency bump.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant