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

     1  package types
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  )
     9  
    10  // GenesisState - all staking state that must be provided at genesis
    11  type GenesisState struct {
    12  	Params               Params                      `json:"params" yaml:"params"`
    13  	LastTotalPower       sdk.Int                     `json:"last_total_power" yaml:"last_total_power"`
    14  	LastValidatorPowers  []LastValidatorPower        `json:"last_validator_powers" yaml:"last_validator_powers"`
    15  	Validators           []ValidatorExported         `json:"validators" yaml:"validators"`
    16  	Delegators           []Delegator                 `json:"delegators" yaml:"delegators"`
    17  	UnbondingDelegations []UndelegationInfo          `json:"unbonding_delegations" yaml:"unbonding_delegations"`
    18  	AllShares            []SharesExported            `json:"all_shares" yaml:"all_shares"`
    19  	ProxyDelegatorKeys   []ProxyDelegatorKeyExported `json:"proxy_delegator_keys" yaml:"proxy_delegator_keys"`
    20  	Exported             bool                        `json:"exported" yaml:"exported"`
    21  }
    22  
    23  // LastValidatorPower is needed for validator set update logic
    24  type LastValidatorPower struct {
    25  	Address sdk.ValAddress
    26  	Power   int64
    27  }
    28  
    29  // NewLastValidatorPower creates a new instance of LastValidatorPower
    30  func NewLastValidatorPower(valAddr sdk.ValAddress, power int64) LastValidatorPower {
    31  	return LastValidatorPower{
    32  		valAddr,
    33  		power,
    34  	}
    35  }
    36  
    37  // NewGenesisState creates a new object of GenesisState
    38  func NewGenesisState(params Params, validators Validators, delegators []Delegator) GenesisState {
    39  	return GenesisState{
    40  		Params:     params,
    41  		Validators: validators.Export(),
    42  		Delegators: delegators,
    43  	}
    44  }
    45  
    46  // DefaultGenesisState gets the default genesis state
    47  func DefaultGenesisState() GenesisState {
    48  	return GenesisState{
    49  		Params: DefaultParams(),
    50  	}
    51  }
    52  
    53  // ValidatorExported is designed for Validator export
    54  type ValidatorExported struct {
    55  	OperatorAddress         sdk.ValAddress `json:"operator_address"`
    56  	ConsPubKey              string         `json:"consensus_pubkey"`
    57  	Jailed                  bool           `json:"jailed"`
    58  	Status                  sdk.BondStatus `json:"status" yaml:"status"`
    59  	DelegatorShares         sdk.Dec        `json:"delegator_shares"`
    60  	Description             Description    `json:"description"`
    61  	UnbondingHeight         int64          `json:"unbonding_height"`
    62  	UnbondingCompletionTime time.Time      `json:"unbonding_time"`
    63  	MinSelfDelegation       sdk.Dec        `json:"min_self_delegation"`
    64  }
    65  
    66  // Import converts validator exported format to inner one by filling the zero-value of Tokens and Commission
    67  func (ve ValidatorExported) Import() Validator {
    68  	consPk, err := GetConsPubKeyBech32(ve.ConsPubKey)
    69  	if err != nil {
    70  		panic(fmt.Sprintf("failed. consensus pubkey is parsed error: %s", err.Error()))
    71  	}
    72  
    73  	return Validator{
    74  		ve.OperatorAddress,
    75  		consPk,
    76  		ve.Jailed,
    77  		ve.Status,
    78  		sdk.NewInt(0),
    79  		ve.DelegatorShares,
    80  		ve.Description,
    81  		ve.UnbondingHeight,
    82  		ve.UnbondingCompletionTime,
    83  		NewCommission(sdk.NewDec(1), sdk.NewDec(1), sdk.NewDec(0)),
    84  		ve.MinSelfDelegation,
    85  	}
    86  }
    87  
    88  // ConsAddress returns the TM validator address of exported validator
    89  func (ve ValidatorExported) ConsAddress() sdk.ConsAddress {
    90  	consPk, err := GetConsPubKeyBech32(ve.ConsPubKey)
    91  	if err != nil {
    92  		panic(fmt.Sprintf("failed. consensus pubkey is parsed error: %s", err.Error()))
    93  	}
    94  
    95  	return sdk.ConsAddress(consPk.Address())
    96  }
    97  
    98  // IsBonded checks if the exported validator status equals Bonded
    99  func (ve ValidatorExported) IsBonded() bool {
   100  	return ve.Status.Equal(sdk.Bonded)
   101  }
   102  
   103  // ProxyDelegatorKeyExported is designed for ProxyDelegatorKey export
   104  type ProxyDelegatorKeyExported struct {
   105  	DelAddr   sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
   106  	ProxyAddr sdk.AccAddress `json:"proxy_address" yaml:"proxy_address"`
   107  }
   108  
   109  // NewProxyDelegatorKeyExported creates a new object of ProxyDelegatorKeyExported
   110  func NewProxyDelegatorKeyExported(delAddr, proxyAddr sdk.AccAddress) ProxyDelegatorKeyExported {
   111  	return ProxyDelegatorKeyExported{
   112  		delAddr,
   113  		proxyAddr,
   114  	}
   115  }
   116  
   117  // SharesExported is designed for types.Shares export
   118  type SharesExported struct {
   119  	DelAddress       sdk.AccAddress `json:"delegator_address" yaml:"delegator_address"`
   120  	ValidatorAddress sdk.ValAddress `json:"validator_address" yaml:"validator_address"`
   121  	Shares           Shares         `json:"shares" yaml:"shares"`
   122  }
   123  
   124  // NewSharesExported creates a new object of SharesExported
   125  func NewSharesExported(delAddr sdk.AccAddress, valAddr sdk.ValAddress, shares Shares) SharesExported {
   126  	return SharesExported{
   127  		delAddr,
   128  		valAddr,
   129  		shares,
   130  	}
   131  }