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 }