2018-05-12 15:22:59 -07:00
|
|
|
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{
|
2018-05-25 07:17:49 -07:00
|
|
|
Pool: InitialPool(),
|
|
|
|
Params: DefaultParams(),
|
2018-05-12 15:22:59 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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)
|
2018-05-12 15:22:59 -07:00
|
|
|
k.setPool(ctx, data.Pool)
|
2018-05-17 13:03:35 -07:00
|
|
|
k.setNewParams(ctx, data.Params)
|
2018-05-12 15:22:59 -07:00
|
|
|
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)
|
|
|
|
}
|
2018-05-12 15:22:59 -07:00
|
|
|
}
|
|
|
|
for _, bond := range data.Bonds {
|
|
|
|
k.setDelegation(ctx, bond)
|
|
|
|
}
|
2018-05-28 23:49:37 -07:00
|
|
|
k.updateBondedValidatorsFull(ctx, store)
|
2018-05-12 15:22:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// WriteGenesis - output genesis parameters
|
|
|
|
func WriteGenesis(ctx sdk.Context, k Keeper) GenesisState {
|
|
|
|
pool := k.GetPool(ctx)
|
|
|
|
params := k.GetParams(ctx)
|
2018-05-17 11:09:35 -07:00
|
|
|
validators := k.getAllValidators(ctx)
|
|
|
|
bonds := k.getAllDelegations(ctx)
|
2018-05-12 15:22:59 -07:00
|
|
|
return GenesisState{
|
|
|
|
pool,
|
|
|
|
params,
|
|
|
|
validators,
|
|
|
|
bonds,
|
|
|
|
}
|
|
|
|
}
|