/
slash.go
44 lines (35 loc) · 1.13 KB
/
slash.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package keeper
import (
sdkmath "cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/bnb-chain/greenfield/x/sp/types"
)
func (k Keeper) Slash(ctx sdk.Context, spID uint32, rewardInfos []types.RewardInfo) error {
sp, found := k.GetStorageProvider(ctx, spID)
if !found {
return types.ErrStorageProviderNotFound
}
totalAmount := sdkmath.NewInt(0)
for _, rewardInfo := range rewardInfos {
totalAmount = totalAmount.Add(rewardInfo.Amount.Amount)
if k.DepositDenomForSP(ctx) != rewardInfo.GetAmount().Denom {
return types.ErrInvalidDenom.Wrapf("Expect: %s, actual: %s", k.DepositDenomForSP(ctx), rewardInfo.GetAmount().Denom)
}
}
if totalAmount.GT(sp.TotalDeposit) {
return types.ErrInsufficientDepositAmount
}
for _, rewardInfo := range rewardInfos {
rewardAcc, err := sdk.AccAddressFromHexUnsafe(rewardInfo.Address)
if err != nil {
return err
}
err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, rewardAcc, sdk.NewCoins(rewardInfo.GetAmount()))
if err != nil {
return err
}
}
sp.TotalDeposit = sp.TotalDeposit.Sub(totalAmount)
k.SetStorageProvider(ctx, sp)
return nil
}