github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/types/delegator.go (about)

     1  package types
     2  
     3  import (
     4  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     5  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     6  	"github.com/fibonacci-chain/fbc/x/staking/exported"
     7  )
     8  
     9  var _ exported.DelegatorI = &Delegator{}
    10  
    11  // Delegator is the struct of delegator info
    12  type Delegator struct {
    13  	DelegatorAddress     sdk.AccAddress   `json:"delegator_address" yaml:"delegator_address"`
    14  	ValidatorAddresses   []sdk.ValAddress `json:"validator_address" yaml:"validator_address"`
    15  	Shares               sdk.Dec          `json:"shares" yaml:"shares"`
    16  	Tokens               sdk.Dec          `json:"tokens" yaml:"tokens"` // self-delegated tokens
    17  	IsProxy              bool             `json:"is_proxy" yaml:"is_proxy"`
    18  	TotalDelegatedTokens sdk.Dec          `json:"total_delegated_tokens" yaml:"total_delegated_tokens"` // total tokens delegated by other delegators
    19  	ProxyAddress         sdk.AccAddress   `json:"proxy_address" yaml:"proxy_address"`
    20  }
    21  
    22  // NewDelegator creates a new Delegator object
    23  func NewDelegator(delAddr sdk.AccAddress) Delegator {
    24  	return Delegator{
    25  		delAddr,
    26  		nil,
    27  		sdk.ZeroDec(),
    28  		sdk.ZeroDec(),
    29  		false,
    30  		sdk.ZeroDec(),
    31  		nil,
    32  	}
    33  }
    34  
    35  // GetShareAddedValidatorAddresses gets validator address that the delegator added shares to for other module
    36  func (d Delegator) GetShareAddedValidatorAddresses() []sdk.ValAddress {
    37  	return d.ValidatorAddresses
    38  }
    39  
    40  // GetLastAddedShares gets the last shares added to validators of a delegator for other module
    41  func (d Delegator) GetLastAddedShares() sdk.Dec {
    42  	return d.Shares
    43  }
    44  
    45  // RegProxy registers or deregisters the identity of proxy
    46  func (d *Delegator) RegProxy(reg bool) {
    47  	d.IsProxy = reg
    48  	if reg {
    49  		d.UnbindProxy()
    50  	}
    51  }
    52  
    53  // BindProxy sets relationship between a delegator and proxy
    54  func (d *Delegator) BindProxy(proxyAddr sdk.AccAddress) {
    55  	d.ProxyAddress = proxyAddr
    56  	d.IsProxy = false
    57  }
    58  
    59  // UnbindProxy clears the proxy address on a delegator
    60  func (d *Delegator) UnbindProxy() {
    61  	d.ProxyAddress = nil
    62  }
    63  
    64  // HasProxy tells whether the delegator has bound a proxy
    65  func (d Delegator) HasProxy() bool {
    66  	return d.ProxyAddress != nil
    67  }
    68  
    69  // MustUnMarshalDelegator must return a delegator entity by unmarshalling
    70  func MustUnMarshalDelegator(cdc *codec.Codec, value []byte) (delegator Delegator) {
    71  	cdc.MustUnmarshalBinaryLengthPrefixed(value, &delegator)
    72  	return
    73  }