github.com/Finschia/finschia-sdk@v0.49.1/x/feegrant/keeper/msg_server.go (about) 1 package keeper 2 3 import ( 4 "context" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 8 "github.com/Finschia/finschia-sdk/x/feegrant" 9 ) 10 11 type msgServer struct { 12 Keeper 13 } 14 15 // NewMsgServerImpl returns an implementation of the feegrant MsgServer interface 16 // for the provided Keeper. 17 func NewMsgServerImpl(k Keeper) feegrant.MsgServer { 18 return &msgServer{ 19 Keeper: k, 20 } 21 } 22 23 var _ feegrant.MsgServer = msgServer{} 24 25 // GrantAllowance grants an allowance from the granter's funds to be used by the grantee. 26 func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) { 27 ctx := sdk.UnwrapSDKContext(goCtx) 28 29 grantee, err := sdk.AccAddressFromBech32(msg.Grantee) 30 if err != nil { 31 return nil, err 32 } 33 34 granter, err := sdk.AccAddressFromBech32(msg.Granter) 35 if err != nil { 36 return nil, err 37 } 38 39 // Checking for duplicate entry 40 if f, _ := k.Keeper.GetAllowance(ctx, granter, grantee); f != nil { 41 return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "fee allowance already exists") 42 } 43 44 allowance, err := msg.GetFeeAllowanceI() 45 if err != nil { 46 return nil, err 47 } 48 49 err = k.Keeper.GrantAllowance(ctx, granter, grantee, allowance) 50 if err != nil { 51 return nil, err 52 } 53 54 return &feegrant.MsgGrantAllowanceResponse{}, nil 55 } 56 57 // RevokeAllowance revokes a fee allowance between a granter and grantee. 58 func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) { 59 ctx := sdk.UnwrapSDKContext(goCtx) 60 61 grantee, err := sdk.AccAddressFromBech32(msg.Grantee) 62 if err != nil { 63 return nil, err 64 } 65 66 granter, err := sdk.AccAddressFromBech32(msg.Granter) 67 if err != nil { 68 return nil, err 69 } 70 71 err = k.Keeper.revokeAllowance(ctx, granter, grantee) 72 if err != nil { 73 return nil, err 74 } 75 76 return &feegrant.MsgRevokeAllowanceResponse{}, nil 77 }