github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/handler.go (about) 1 package distribution 2 3 import ( 4 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 5 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 6 7 "github.com/fibonacci-chain/fbc/x/distribution/keeper" 8 "github.com/fibonacci-chain/fbc/x/distribution/types" 9 govtypes "github.com/fibonacci-chain/fbc/x/gov/types" 10 ) 11 12 // NewHandler manages all distribution tx 13 func NewHandler(k keeper.Keeper) sdk.Handler { 14 return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { 15 ctx.SetEventManager(sdk.NewEventManager()) 16 17 if tmtypes.HigherThanVenus2(ctx.BlockHeight()) && !k.GetWithdrawRewardEnabled(ctx) { 18 return nil, types.ErrCodeDisabledWithdrawRewards() 19 } 20 21 switch msg := msg.(type) { 22 case types.MsgSetWithdrawAddress: 23 return handleMsgModifyWithdrawAddress(ctx, msg, k) 24 25 case types.MsgWithdrawValidatorCommission: 26 return handleMsgWithdrawValidatorCommission(ctx, msg, k) 27 28 case types.MsgWithdrawDelegatorReward: 29 if k.CheckDistributionProposalValid(ctx) { 30 return handleMsgWithdrawDelegatorReward(ctx, msg, k) 31 } 32 return nil, types.ErrUnknownDistributionMsgType() 33 case types.MsgWithdrawDelegatorAllRewards: 34 if k.CheckDistributionProposalValid(ctx) { 35 return handleMsgWithdrawDelegatorAllRewards(ctx, msg, k) 36 } 37 return nil, types.ErrUnknownDistributionMsgType() 38 39 default: 40 return nil, types.ErrUnknownDistributionMsgType() 41 } 42 } 43 } 44 45 // These functions assume everything has been authenticated (ValidateBasic passed, and signatures checked) 46 func handleMsgModifyWithdrawAddress(ctx sdk.Context, msg types.MsgSetWithdrawAddress, k keeper.Keeper) (*sdk.Result, error) { 47 err := k.SetWithdrawAddr(ctx, msg.DelegatorAddress, msg.WithdrawAddress) 48 if err != nil { 49 return nil, err 50 } 51 52 ctx.EventManager().EmitEvent( 53 sdk.NewEvent( 54 sdk.EventTypeMessage, 55 sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), 56 sdk.NewAttribute(sdk.AttributeKeySender, msg.DelegatorAddress.String()), 57 ), 58 ) 59 60 return &sdk.Result{Events: ctx.EventManager().Events()}, nil 61 } 62 63 func handleMsgWithdrawValidatorCommission(ctx sdk.Context, msg types.MsgWithdrawValidatorCommission, k keeper.Keeper) (*sdk.Result, error) { 64 _, err := k.WithdrawValidatorCommission(ctx, msg.ValidatorAddress) 65 if err != nil { 66 return nil, err 67 } 68 69 ctx.EventManager().EmitEvent( 70 sdk.NewEvent( 71 sdk.EventTypeMessage, 72 sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), 73 sdk.NewAttribute(sdk.AttributeKeySender, msg.ValidatorAddress.String()), 74 ), 75 ) 76 return &sdk.Result{Events: ctx.EventManager().Events()}, nil 77 } 78 79 func NewDistributionProposalHandler(k Keeper) govtypes.Handler { 80 return func(ctx sdk.Context, content *govtypes.Proposal) error { 81 switch c := content.Content.(type) { 82 case types.CommunityPoolSpendProposal: 83 return keeper.HandleCommunityPoolSpendProposal(ctx, k, c) 84 case types.ChangeDistributionTypeProposal: 85 if tmtypes.HigherThanVenus2(ctx.BlockHeight()) { 86 return keeper.HandleChangeDistributionTypeProposal(ctx, k, c) 87 } 88 return types.ErrUnknownDistributionCommunityPoolProposaType() 89 case types.WithdrawRewardEnabledProposal: 90 if tmtypes.HigherThanVenus2(ctx.BlockHeight()) { 91 return keeper.HandleWithdrawRewardEnabledProposal(ctx, k, c) 92 } 93 return types.ErrUnknownDistributionCommunityPoolProposaType() 94 case types.RewardTruncatePrecisionProposal: 95 if tmtypes.HigherThanVenus2(ctx.BlockHeight()) { 96 return keeper.HandleRewardTruncatePrecisionProposal(ctx, k, c) 97 } 98 return types.ErrUnknownDistributionCommunityPoolProposaType() 99 100 default: 101 return types.ErrUnknownDistributionCommunityPoolProposaType() 102 } 103 } 104 }