cosmos-sdk/x/stake/genesis.go

66 lines
1.7 KiB
Go
Raw Normal View History

package stake
import sdk "github.com/cosmos/cosmos-sdk/types"
// GenesisState - all staking state that must be provided at genesis
type GenesisState struct {
Pool Pool `json:"pool"`
Params Params `json:"params"`
Validators []Validator `json:"validators"`
Bonds []Delegation `json:"bonds"`
}
func NewGenesisState(pool Pool, params Params, validators []Validator, bonds []Delegation) GenesisState {
return GenesisState{
Pool: pool,
Params: params,
Validators: validators,
Bonds: bonds,
}
}
// get raw genesis raw message for testing
func DefaultGenesisState() GenesisState {
return GenesisState{
Pool: InitialPool(),
Params: DefaultParams(),
}
}
// InitGenesis - store genesis parameters
func InitGenesis(ctx sdk.Context, k Keeper, data GenesisState) {
2018-05-30 18:00:11 -07:00
store := ctx.KVStore(k.storeKey)
k.setPool(ctx, data.Pool)
k.setNewParams(ctx, data.Params)
for _, validator := range data.Validators {
2018-05-30 18:28:02 -07:00
// set validator
k.setValidator(ctx, validator)
// manually set indexes for the first time
2018-05-30 18:00:11 -07:00
k.setValidatorByPubKeyIndex(ctx, validator)
2018-05-30 18:28:02 -07:00
k.setValidatorByPowerIndex(ctx, validator, data.Pool)
2018-05-30 18:00:11 -07:00
if validator.Status() == sdk.Bonded {
store.Set(GetValidatorsBondedKey(validator.PubKey), validator.Owner)
}
}
for _, bond := range data.Bonds {
k.setDelegation(ctx, bond)
}
2018-05-28 23:49:37 -07:00
k.updateBondedValidatorsFull(ctx, store)
}
// WriteGenesis - output genesis parameters
func WriteGenesis(ctx sdk.Context, k Keeper) GenesisState {
pool := k.GetPool(ctx)
params := k.GetParams(ctx)
validators := k.getAllValidators(ctx)
bonds := k.getAllDelegations(ctx)
return GenesisState{
pool,
params,
validators,
bonds,
}
}