package slashing import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" ) // nolint const ( MaxEvidenceAgeKey = "slashing/MaxEvidenceAge" SignedBlocksWindowKey = "slashing/SignedBlocksWindow" MinSignedPerWindowKey = "slashing/MinSignedPerWindow" DoubleSignUnbondDurationKey = "slashing/DoubleSignUnbondDuration" DowntimeUnbondDurationKey = "slashing/DowntimeUnbondDuration" SlashFractionDoubleSignKey = "slashing/SlashFractionDoubleSign" SlashFractionDowntimeKey = "slashing/SlashFractionDowntime" ) // MaxEvidenceAge - Max age for evidence - 21 days (3 weeks) // MaxEvidenceAge = 60 * 60 * 24 * 7 * 3 func (k Keeper) MaxEvidenceAge(ctx sdk.Context) time.Duration { return time.Duration(k.params.GetInt64WithDefault(ctx, MaxEvidenceAgeKey, defaultMaxEvidenceAge)) * time.Second } // SignedBlocksWindow - sliding window for downtime slashing func (k Keeper) SignedBlocksWindow(ctx sdk.Context) int64 { return k.params.GetInt64WithDefault(ctx, SignedBlocksWindowKey, defaultSignedBlocksWindow) } // Downtime slashing thershold - default 50% func (k Keeper) MinSignedPerWindow(ctx sdk.Context) int64 { minSignedPerWindow := k.params.GetDecWithDefault(ctx, MinSignedPerWindowKey, defaultMinSignedPerWindow) signedBlocksWindow := k.SignedBlocksWindow(ctx) return sdk.NewDec(signedBlocksWindow).Mul(minSignedPerWindow).RoundInt64() } // Double-sign unbond duration func (k Keeper) DoubleSignUnbondDuration(ctx sdk.Context) time.Duration { return time.Duration(k.params.GetInt64WithDefault(ctx, DoubleSignUnbondDurationKey, defaultDoubleSignUnbondDuration)) * time.Second } // Downtime unbond duration func (k Keeper) DowntimeUnbondDuration(ctx sdk.Context) time.Duration { return time.Duration(k.params.GetInt64WithDefault(ctx, DowntimeUnbondDurationKey, defaultDowntimeUnbondDuration)) * time.Second } // SlashFractionDoubleSign - currently default 5% func (k Keeper) SlashFractionDoubleSign(ctx sdk.Context) sdk.Dec { return k.params.GetDecWithDefault(ctx, SlashFractionDoubleSignKey, defaultSlashFractionDoubleSign) } // SlashFractionDowntime - currently default 1% func (k Keeper) SlashFractionDowntime(ctx sdk.Context) sdk.Dec { return k.params.GetDecWithDefault(ctx, SlashFractionDowntimeKey, defaultSlashFractionDowntime) } // declared as var because of keeper_test.go // TODO: make it const or parameter of NewKeeper var ( // defaultMaxEvidenceAge = 60 * 60 * 24 * 7 * 3 // TODO Temporarily set to 2 minutes for testnets. defaultMaxEvidenceAge int64 = 60 * 2 // TODO Temporarily set to five minutes for testnets defaultDoubleSignUnbondDuration int64 = 60 * 5 // TODO Temporarily set to 10000 blocks for testnets defaultSignedBlocksWindow int64 = 10000 // TODO Temporarily set to 10 minutes for testnets defaultDowntimeUnbondDuration int64 = 60 * 10 defaultMinSignedPerWindow = sdk.NewDecWithPrec(5, 1) defaultSlashFractionDoubleSign = sdk.NewDec(1).Quo(sdk.NewDec(20)) defaultSlashFractionDowntime = sdk.NewDec(1).Quo(sdk.NewDec(100)) )