Open kmlbgn opened 10 months ago
This is reducing the weight of an asset since that asset's value has been decreased from slashing underlying tokens. Therefore the slash handling should be actualy done in multistakingi module - not on basket module. Here's where it handles slashed tokens
func (k Keeper) SlashStakingPool(ctx sdk.Context, validator string, slash sdk.Dec) {
pool, found := k.GetStakingPoolByValidator(ctx, validator)
if !found {
return
}
pool.Slashed = slash
pool.Enabled = false
totalStakingTokens := sdk.Coins{}
for _, stakingToken := range pool.TotalStakingTokens {
totalStakingTokens = totalStakingTokens.Add(sdk.NewCoin(stakingToken.Denom, sdk.NewDecFromInt(stakingToken.Amount).Mul(sdk.OneDec().Sub(pool.Slashed)).RoundInt()))
}
totalSlashedTokens := sdk.Coins(pool.TotalStakingTokens).Sub(totalStakingTokens...)
pool.TotalStakingTokens = totalStakingTokens
defaultDenom := k.sk.DefaultDenom(ctx)
defaultDenomAmount := totalSlashedTokens.AmountOf(defaultDenom)
burnAmount := sdk.Coins{sdk.NewCoin(defaultDenom, defaultDenomAmount)}
err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, burnAmount)
if err != nil {
panic(err)
}
treasurySendAmount := totalSlashedTokens.Sub(burnAmount...)
err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, authtypes.FeeCollectorName, treasurySendAmount)
if err != nil {
panic(err)
}
feesTreasury := k.distrKeeper.GetFeesTreasury(ctx)
feesTreasury = feesTreasury.Add(treasurySendAmount...)
k.distrKeeper.SetFeesTreasury(ctx, feesTreasury)
For KEX tokens it's burnt. For non-KEX tokens, it's sent to fees treasury that can be controlled by governance.
PR #610 (commit c4d24761d78026f5ce8bdd707de74ec2c1e172c9) added new hooks to the basket module for handling validator slash events. However, it's not clear where the slashed funds go when the basket pool weight of a slashed validator is reduced. https://github.com/KiraCore/sekai/blob/c4d24761d78026f5ce8bdd707de74ec2c1e172c9/x/basket/keeper/hooks.go#L60-L81
As per KIP :