github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/slashing/handler.go (about) 1 package slashing 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 6 "github.com/fibonacci-chain/fbc/x/slashing/internal/types" 7 ) 8 9 // NewHandler creates an sdk.Handler for all the slashing type messages 10 func NewHandler(k Keeper) sdk.Handler { 11 return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { 12 ctx.SetEventManager(sdk.NewEventManager()) 13 14 switch msg := msg.(type) { 15 case MsgUnjail: 16 return handleMsgUnjail(ctx, msg, k) 17 18 default: 19 return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized %s message type: %T", ModuleName, msg) 20 } 21 } 22 } 23 24 // Validators must submit a transaction to unjail itself after 25 // having been jailed (and thus unbonded) for downtime 26 func handleMsgUnjail(ctx sdk.Context, msg MsgUnjail, k Keeper) (*sdk.Result, error) { 27 validator := k.GetStakingKeeper().Validator(ctx, msg.ValidatorAddr) 28 if validator == nil { 29 return nil, sdkerrors.Wrapf(ErrNoValidatorForAddress, "Unjail failed") 30 } 31 32 if validator.GetMinSelfDelegation().IsZero() { 33 return nil, sdkerrors.Wrapf(ErrMissingSelfDelegation, "Unjail failed") 34 } 35 36 err := k.Unjail(ctx, msg.ValidatorAddr) 37 if err != nil { 38 return nil, err 39 } 40 41 ctx.EventManager().EmitEvent( 42 sdk.NewEvent( 43 sdk.EventTypeMessage, 44 sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), 45 sdk.NewAttribute(sdk.AttributeKeySender, msg.ValidatorAddr.String()), 46 ), 47 ) 48 49 return &sdk.Result{Events: ctx.EventManager().Events()}, nil 50 }