From 00d821538fc7d9270642b54431e2c2d72da338a2 Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Thu, 22 Feb 2024 15:09:40 +0530 Subject: [PATCH] Implement genesis import and export keepers --- x/registry/keeper/genesis.go | 111 +++++++++++++++++------------ x/registry/keeper/naming_keeper.go | 15 ++++ 2 files changed, 80 insertions(+), 46 deletions(-) diff --git a/x/registry/keeper/genesis.go b/x/registry/keeper/genesis.go index 7621e309..cd6b9856 100644 --- a/x/registry/keeper/genesis.go +++ b/x/registry/keeper/genesis.go @@ -1,80 +1,99 @@ package keeper import ( - "context" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" "git.vdb.to/cerc-io/laconic2d/x/registry" ) // InitGenesis initializes the module state from a genesis state. -func (k *Keeper) InitGenesis(ctx context.Context, data *registry.GenesisState) error { +func (k *Keeper) InitGenesis(ctx sdk.Context, data *registry.GenesisState) error { if err := k.Params.Set(ctx, data.Params); err != nil { return err } - // for _, record := range data.Records { - // keeper.PutRecord(ctx, record) + for _, record := range data.Records { + if err := k.SaveRecord(ctx, record); err != nil { + return err + } - // // Add to record expiry queue if expiry time is in the future. - // expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime) - // if err != nil { - // panic(err) - // } + // Add to record expiry queue if expiry time is in the future. + expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime) + if err != nil { + panic(err) + } - // if expiryTime.After(ctx.BlockTime()) { - // keeper.InsertRecordExpiryQueue(ctx, record) - // } + if expiryTime.After(ctx.BlockTime()) { + // TODO + // k.InsertRecordExpiryQueue(ctx, record) + } + } - // // Note: Bond genesis runs first, so bonds will already be present. - // if record.BondId != "" { - // keeper.AddBondToRecordIndexEntry(ctx, record.BondId, record.Id) - // } - // } + for _, authority := range data.Authorities { + // Only import authorities that are marked active. + if authority.Entry.Status == registry.AuthorityActive { + if err := k.SaveNameAuthority(ctx, authority.Name, authority.Entry); err != nil { + return err + } - // for _, authority := range data.Authorities { - // // Only import authorities that are marked active. - // if authority.Entry.Status == types.AuthorityActive { - // keeper.SetNameAuthority(ctx, authority.Name, authority.Entry) + // TODO + // Add authority name to expiry queue. + // k.InsertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime) - // // Add authority name to expiry queue. - // keeper.InsertAuthorityExpiryQueue(ctx, authority.Name, authority.Entry.ExpiryTime) + // TODO + // Note: Bond genesis runs first, so bonds will already be present. + // if authority.Entry.BondId != "" { + // k.AddBondToAuthorityIndexEntry(ctx, authority.Entry.BondId, authority.Name) + // } + } + } - // // Note: Bond genesis runs first, so bonds will already be present. - // if authority.Entry.BondId != "" { - // keeper.AddBondToAuthorityIndexEntry(ctx, authority.Entry.BondId, authority.Name) - // } - // } - // } - - // for _, nameEntry := range data.Names { - // keeper.SetNameRecord(ctx, nameEntry.Name, nameEntry.Entry.Latest.Id) - // } + for _, nameEntry := range data.Names { + if err := k.SaveNameRecord(ctx, nameEntry.Name, nameEntry.Entry.Latest.Id); err != nil { + return err + } + } return nil } // ExportGenesis exports the module state to a genesis state. -func (k *Keeper) ExportGenesis(ctx context.Context) (*registry.GenesisState, error) { +func (k *Keeper) ExportGenesis(ctx sdk.Context) (*registry.GenesisState, error) { params, err := k.Params.Get(ctx) if err != nil { return nil, err } - // records := keeper.ListRecords(ctx) + records, err := k.ListRecords(ctx) + if err != nil { + return nil, err + } - // authorities := keeper.ListNameAuthorityRecords(ctx) - // authorityEntries := []types.AuthorityEntry{} - // // #nosec G705 - // for name, record := range authorities { - // authorityEntries = append(authorityEntries, types.AuthorityEntry{ - // Name: name, - // Entry: &record, //nolint: all - // }) // #nosec G601 - // } + authorities, err := k.ListNameAuthorityRecords(ctx) + if err != nil { + return nil, err + } - // names := keeper.ListNameRecords(ctx) + authorityEntries := []registry.AuthorityEntry{} + // #nosec G705 + for name, record := range authorities { + authorityEntries = append(authorityEntries, registry.AuthorityEntry{ + Name: name, + Entry: &record, //nolint: all + }) // #nosec G601 + } + + names, err := k.ListNameRecords(ctx) + if err != nil { + return nil, err + } return ®istry.GenesisState{ - Params: params, + Params: params, + Records: records, + Authorities: authorityEntries, + Names: names, }, nil } diff --git a/x/registry/keeper/naming_keeper.go b/x/registry/keeper/naming_keeper.go index 173a4788..fe829a80 100644 --- a/x/registry/keeper/naming_keeper.go +++ b/x/registry/keeper/naming_keeper.go @@ -39,6 +39,21 @@ func (k Keeper) GetNameAuthority(ctx sdk.Context, name string) (registrytypes.Na return authority, nil } +// ListNameAuthorityRecords - get all name authority records. +func (k Keeper) ListNameAuthorityRecords(ctx sdk.Context) (map[string]registrytypes.NameAuthority, error) { + nameAuthorityRecords := make(map[string]registrytypes.NameAuthority) + + err := k.Authorities.Walk(ctx, nil, func(key string, value registrytypes.NameAuthority) (bool, error) { + nameAuthorityRecords[key] = value + return false, nil + }) + if err != nil { + return map[string]registrytypes.NameAuthority{}, err + } + + return nameAuthorityRecords, nil +} + // HasNameRecord - checks if a name record exists. func (k Keeper) HasNameRecord(ctx sdk.Context, crn string) (bool, error) { return k.NameRecords.Has(ctx, crn)