x/msdcheck enforces a minimum self-delegation floor for validator creation and proposed MinSelfDelegation updates across all transaction entry points: Cosmos SDK transactions, API routes, and the EVM staking precompile. The enforced minimum is:

Scope and semantics

  • The rule applies to the validator operator’s self-delegation only.
  • It does not depend on delegations from other users.
  • A validator can only set or raise MinSelfDelegation through create/edit flows.
  • EditValidator is not blocked solely because current validator tokens fell below the threshold after creation; the restriction applies to the proposed MinSelfDelegation value.
  • If an operator later reduces self-delegation below the minimum, for example through undelegation, the staking module’s native behavior jails the validator and removes it from the active set.
  • x/msdcheck does not block undelegate or redelegate.

Default genesis

x/msdcheck does not have an independent module genesis section in app_state. Practical implications:
  • There is no app_state.msdcheck object to configure.
  • Staking genesis (app_state.staking) still applies as usual.
  • The minimum self-delegation check is enforced by module logic, not by msdcheck-specific genesis params.

Covered scenarios

Test commands

Run the tests from the root of the c8ntinuum source repository (see Build the Node for prerequisites). The tests live in the evmd Go module and link against the Rust SP1 verifier library, so run them through the top-level Makefile, which builds that library and sets the library path:
The command runs TestMSDCheckIntegration (Cosmos SDK messages) and TestMSDCheckPrecompile (EVM staking precompile).