github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/client/common/common_distr_proposal.go (about) 1 package common 2 3 import ( 4 "fmt" 5 6 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 7 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 8 9 "github.com/fibonacci-chain/fbc/x/distribution/types" 10 ) 11 12 // QueryDelegatorValidators returns delegator's list of validators 13 // it submitted delegations to. 14 func QueryDelegatorValidators(cliCtx context.CLIContext, queryRoute string, delegatorAddr sdk.AccAddress) ([]byte, error) { 15 res, _, err := cliCtx.QueryWithData( 16 fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorValidators), 17 cliCtx.Codec.MustMarshalJSON(types.NewQueryDelegatorParams(delegatorAddr)), 18 ) 19 return res, err 20 } 21 22 // WithdrawAllDelegatorRewards builds a multi-message slice to be used 23 // to withdraw all delegations rewards for the given delegator. 24 func WithdrawAllDelegatorRewards(cliCtx context.CLIContext, queryRoute string, delegatorAddr sdk.AccAddress) ([]sdk.Msg, error) { 25 // retrieve the comprehensive list of all validators which the 26 // delegator had submitted delegations to 27 bz, err := QueryDelegatorValidators(cliCtx, queryRoute, delegatorAddr) 28 if err != nil { 29 return nil, err 30 } 31 32 var validators []sdk.ValAddress 33 if err := cliCtx.Codec.UnmarshalJSON(bz, &validators); err != nil { 34 return nil, err 35 } 36 37 if len(validators) <= 0 { 38 return nil, fmt.Errorf("no validators") 39 } 40 41 // build multi-message transaction 42 msgs := make([]sdk.Msg, 0, len(validators)) 43 for _, valAddr := range validators { 44 msg := types.NewMsgWithdrawDelegatorReward(delegatorAddr, valAddr) 45 msgs = append(msgs, msg) 46 } 47 48 return msgs, nil 49 } 50 51 // QueryDelegationRewards queries a delegation rewards between a delegator and a 52 // validator. 53 func QueryDelegationRewards(cliCtx context.CLIContext, queryRoute, delAddr, valAddr string) ([]byte, int64, error) { 54 delegatorAddr, err := sdk.AccAddressFromBech32(delAddr) 55 if err != nil { 56 return nil, 0, err 57 } 58 59 validatorAddr, err := sdk.ValAddressFromBech32(valAddr) 60 if err != nil { 61 return nil, 0, err 62 } 63 64 params := types.NewQueryDelegationRewardsParams(delegatorAddr, validatorAddr) 65 bz, err := cliCtx.Codec.MarshalJSON(params) 66 if err != nil { 67 return nil, 0, fmt.Errorf("failed to marshal params: %w", err) 68 } 69 70 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegationRewards) 71 return cliCtx.QueryWithData(route, bz) 72 }