Hashgard 创世状态(Genesis State)

Hashgard 创世状态GenesisState由账户、各种模块状态和元数据组成,例如创世交易。 每个模块可以指定自己的GenesisState。 此外,每个模块可以指定自己的创世状态有效性验证、导入和导出功能。

Hashgard 创世状态定义如下:

type GenesisState struct {
  Accounts     []GenesisAccount      `json:"accounts"`
  AuthData     auth.GenesisState     `json:"auth"`
  BankData     bank.GenesisState     `json:"bank"`
  StakingData  staking.GenesisState  `json:"staking"`
  MintData     mint.GenesisState     `json:"mint"`
  DistrData    distr.GenesisState    `json:"distribution"`
  GovData      gov.GenesisState      `json:"gov"`
  SlashingData slashing.GenesisState `json:"slashing"`
  GenTxs       []json.RawMessage     `json:"gentxs"`
  ContractData []ContractInfo        `json:"deployed_contracts"`
}

在 Hashgard 的 ABCIinitChainer定义中调用initFromGenesisState, 它在内部调用每个模块的InitGenesis,提供它自己的GenesisState作为参数。

账户(Accounts)

GenesisState 中的创世账户定义如下:

type GenesisAccount struct {
  Address       sdk.AccAddress `json:"address"`
  Coins         sdk.Coins      `json:"coins"`
  Sequence      uint64         `json:"sequence_number"`
  AccountNumber uint64         `json:"account_number"`

  // vesting account fields
  OriginalVesting  sdk.Coins `json:"original_vesting"`  // total vesting coins upon initialization
  DelegatedFree    sdk.Coins `json:"delegated_free"`    // delegated vested coins at time of delegation
  DelegatedVesting sdk.Coins `json:"delegated_vesting"` // delegated vesting coins at time of delegation
  StartTime        int64     `json:"start_time"`        // vesting start time (UNIX Epoch time)
  EndTime          int64     `json:"end_time"`          // vesting end time (UNIX Epoch time)
}

除序列号(nonce)和地址外,每个帐户还必须具有有效且唯一的账户编号。

账户也可能锁仓,此时他们必须提供必要的锁仓信息,锁仓帐户必须至少提供OriginalVestingEndTime。 如果还提供了StartTime,则该帐户将被视为“连续”锁仓帐户,其中按预定义的时间表锁仓 coins。 提供的StartTime必须小于EndTime,但可能是未来的时间。 换句话说,它不必等于创世时间。 在从新状态(未导出)开始的新链中,OriginalVesting必须小于或等于Coins

Last Updated: 9/26/2019, 6:20:52 PM