cosmos-sdk/x/feegrant/genesis.go

62 lines
1.8 KiB
Go

package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
// GenesisState contains a set of fee allowances, persisted from the store
type GenesisState []types.FeeAllowanceGrant
// ValidateBasic ensures all grants in the genesis state are valid
func (g GenesisState) ValidateBasic() error {
for _, f := range g {
err := f.GetFeeGrant().ValidateBasic()
if err != nil {
return err
}
}
return nil
}
// InitGenesis will initialize the keeper from a *previously validated* GenesisState
func InitGenesis(ctx sdk.Context, k keeper.Keeper, data *types.GenesisState) {
for _, f := range data.FeeAllowances {
granter, err := sdk.AccAddressFromBech32(f.Granter)
if err != nil {
panic(err)
}
grantee, err := sdk.AccAddressFromBech32(f.Grantee)
if err != nil {
panic(err)
}
err = k.GrantFeeAllowance(ctx, granter, grantee, f.GetFeeGrant())
if err != nil {
panic(err)
}
}
}
// ExportGenesis will dump the contents of the keeper into a serializable GenesisState
//
// All expiration heights will be thrown off if we dump state and start at a new
// chain at height 0. Thus, we allow the Allowances to "prepare themselves"
// for export, like if they have expiry at 5000 and current is 4000, they export with
// expiry of 1000. Every FeeAllowance has a method `PrepareForExport` that allows
// them to perform any changes needed prior to export.
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) {
time, height := ctx.BlockTime(), ctx.BlockHeight()
var grants []types.FeeAllowanceGrant
err := k.IterateAllFeeAllowances(ctx, func(grant types.FeeAllowanceGrant) bool {
grants = append(grants, grant.PrepareForExport(time, height))
return false
})
return &types.GenesisState{
FeeAllowances: grants,
}, err
}