feat: Fair Birth logic - allow 0 UMC self-delegation for validators at genesis
Some checks failed
Build SimApp / build (amd64) (push) Has been cancelled
Build SimApp / build (arm64) (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Build & Push / build (push) Has been cancelled
Run Gosec / Gosec (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Checks dependencies and mocks generation / Check go mod tidy (push) Has been cancelled
Checks dependencies and mocks generation / Check up to date mocks (push) Has been cancelled
System Tests / setup (push) Has been cancelled
System Tests / test-system (push) Has been cancelled
System Tests / test-system-legacy (push) Has been cancelled
Tests / Code Coverage / split-test-files (push) Has been cancelled
Tests / Code Coverage / tests (00) (push) Has been cancelled
Tests / Code Coverage / tests (01) (push) Has been cancelled
Tests / Code Coverage / tests (02) (push) Has been cancelled
Tests / Code Coverage / tests (03) (push) Has been cancelled
Tests / Code Coverage / test-integration (push) Has been cancelled
Tests / Code Coverage / test-e2e (push) Has been cancelled
Tests / Code Coverage / repo-analysis (push) Has been cancelled
Tests / Code Coverage / test-sim-nondeterminism (push) Has been cancelled
Tests / Code Coverage / test-clientv2 (push) Has been cancelled
Tests / Code Coverage / test-core (push) Has been cancelled
Tests / Code Coverage / test-depinject (push) Has been cancelled
Tests / Code Coverage / test-errors (push) Has been cancelled
Tests / Code Coverage / test-math (push) Has been cancelled
Tests / Code Coverage / test-schema (push) Has been cancelled
Tests / Code Coverage / test-collections (push) Has been cancelled
Tests / Code Coverage / test-cosmovisor (push) Has been cancelled
Tests / Code Coverage / test-confix (push) Has been cancelled
Tests / Code Coverage / test-store (push) Has been cancelled
Tests / Code Coverage / test-log (push) Has been cancelled
Tests / Code Coverage / test-x-tx (push) Has been cancelled
Tests / Code Coverage / test-x-nft (push) Has been cancelled
Tests / Code Coverage / test-x-circuit (push) Has been cancelled
Tests / Code Coverage / test-x-feegrant (push) Has been cancelled
Tests / Code Coverage / test-x-evidence (push) Has been cancelled
Tests / Code Coverage / test-x-upgrade (push) Has been cancelled
Tests / Code Coverage / test-tools-benchmark (push) Has been cancelled

This commit is contained in:
Mukan Erkin TÖRÜK 2026-05-11 03:59:27 +03:00
parent abb1ff956e
commit 8d5d1699f9
2 changed files with 13 additions and 4 deletions

View file

@ -162,10 +162,10 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato
return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "empty description") return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "empty description")
} }
if msg.MinSelfDelegation != nil && !msg.MinSelfDelegation.IsPositive() { if msg.MinSelfDelegation != nil && msg.MinSelfDelegation.IsNegative() {
return nil, errorsmod.Wrap( return nil, errorsmod.Wrap(
sdkerrors.ErrInvalidRequest, sdkerrors.ErrInvalidRequest,
"minimum self delegation must be a positive integer", "minimum self delegation cannot be negative",
) )
} }

View file

@ -57,8 +57,15 @@ func (msg MsgCreateValidator) Validate(ac address.Codec) error {
return ErrEmptyValidatorPubKey return ErrEmptyValidatorPubKey
} }
if !msg.Value.IsValid() { // MUKAN FAIR BIRTH: Allow zero self-delegation at genesis.
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid delegation amount") // Standard Cosmos SDK requires IsValid() which enforces IsPositive().
// Mukan Network allows validators to join with 0 UMC — they earn stake
// through PoJ mining after the network is live.
if err := sdk.ValidateDenom(msg.Value.Denom); err != nil {
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "invalid delegation coin denom")
}
if msg.Value.Amount.IsNegative() {
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "self delegation amount cannot be negative")
} }
if msg.Description == (Description{}) { if msg.Description == (Description{}) {
@ -80,6 +87,8 @@ func (msg MsgCreateValidator) Validate(ac address.Codec) error {
) )
} }
// MUKAN FAIR BIRTH: Zero self-delegation is valid — minimum is enforced at
// the PoJ level, not at the staking layer.
if msg.Value.Amount.LT(msg.MinSelfDelegation) { if msg.Value.Amount.LT(msg.MinSelfDelegation) {
return ErrSelfDelegationBelowMinimum return ErrSelfDelegationBelowMinimum
} }