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:
888888000000000000000000

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

ScenarioExpected result
MsgCreateValidator below minimumReject
MsgCreateValidator at exact minimumAccept
MsgCreateValidator above minimumAccept
MsgEditValidator below current stake threshold but without invalid MinSelfDelegation changeAccept
MsgEditValidator proposed MinSelfDelegation below minimumReject
EVM staking precompile createValidator below minimumReject
EVM staking precompile createValidator at exact minimumAccept
EVM staking precompile createValidator above minimumAccept

Test commands

go test -tags=test ./tests/integration/staking -run MSDCheck -count=1
go test -tags=test ./tests/integration/precompiles/staking \
  -run TestStakingPrecompileIntegrationTestSuite \
  -ginkgo.label-filter=msd \
  -count=1