48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
|
package app
|
||
|
|
||
|
import (
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
||
|
"github.com/cosmos/cosmos-sdk/x/gov"
|
||
|
"github.com/cosmos/cosmos-sdk/x/stake"
|
||
|
"github.com/cosmos/ethermint/types"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
// GenesisState defines the application's genesis state. It contains all the
|
||
|
// information required and accounts to initialize the blockchain.
|
||
|
GenesisState struct {
|
||
|
Accounts []GenesisAccount `json:"accounts"`
|
||
|
StakeData stake.GenesisState `json:"stake"`
|
||
|
GovData gov.GenesisState `json:"gov"`
|
||
|
}
|
||
|
|
||
|
// GenesisAccount defines an account to be initialized in the genesis state.
|
||
|
GenesisAccount struct {
|
||
|
Address sdk.AccAddress `json:"address"`
|
||
|
Coins sdk.Coins `json:"coins"`
|
||
|
Code []byte `json:"code,omitempty"`
|
||
|
Storage types.Storage `json:"storage,omitempty"`
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// NewGenesisAccount returns a reference to a new initialized genesis account.
|
||
|
func NewGenesisAccount(acc *types.Account) GenesisAccount {
|
||
|
return GenesisAccount{
|
||
|
Address: acc.GetAddress(),
|
||
|
Coins: acc.GetCoins(),
|
||
|
Code: acc.Code,
|
||
|
Storage: acc.Storage,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ToAccount converts a genesis account to an initialized Ethermint account.
|
||
|
func (ga *GenesisAccount) ToAccount() (acc *types.Account) {
|
||
|
base := auth.BaseAccount{
|
||
|
Address: ga.Address,
|
||
|
Coins: ga.Coins.Sort(),
|
||
|
}
|
||
|
|
||
|
return types.NewAccount(base, ga.Code, ga.Storage)
|
||
|
}
|