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  }