From e4593d7e0bb456ecb1639fed917bd4097c790991 Mon Sep 17 00:00:00 2001 From: juniuszhou Date: Fri, 18 Nov 2022 14:10:09 +0800 Subject: [PATCH] init the solution --- x/tokenregistry/keeper/denom_mapping.go | 32 ++++++++++++++++++++ x/tokenregistry/keeper/denom_mapping_test.go | 23 ++++++++++++++ x/tokenregistry/keeper/keeper.go | 1 + x/tokenregistry/keeper/migrations.go | 30 ++++++++++++++++++ x/tokenregistry/types/expected_keepers.go | 2 ++ x/tokenregistry/types/keys.go | 1 + 6 files changed, 89 insertions(+) create mode 100644 x/tokenregistry/keeper/denom_mapping.go create mode 100644 x/tokenregistry/keeper/denom_mapping_test.go diff --git a/x/tokenregistry/keeper/denom_mapping.go b/x/tokenregistry/keeper/denom_mapping.go new file mode 100644 index 0000000000..8adeb5843e --- /dev/null +++ b/x/tokenregistry/keeper/denom_mapping.go @@ -0,0 +1,32 @@ +package keeper + +import ( + "github.com/Sifchain/sifnode/x/tokenregistry/types" + "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (k keeper) getPeggy1DenomMappingPrefix(ctx sdk.Context, peggy1_denom string) []byte { + return append(types.Peggy1DenomMappingPrefix, []byte(peggy1_denom)...) +} + +func (k keeper) GetPeggy2Denom(ctx sdk.Context, peggy1_denom string) (string, bool) { + denom_prefix := k.getPeggy1DenomMappingPrefix(ctx, peggy1_denom) + + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.Peggy1DenomMappingPrefix) + + b := store.Get(denom_prefix) + + if b == nil { + return "", false + } + return string(b), true +} + +func (k keeper) SetPeggy2Denom(ctx sdk.Context, peggy1_denom string, peggy2_denom string) { + denom_prefix := k.getPeggy1DenomMappingPrefix(ctx, peggy1_denom) + + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.Peggy1DenomMappingPrefix) + + store.Set(denom_prefix, []byte(peggy2_denom)) +} diff --git a/x/tokenregistry/keeper/denom_mapping_test.go b/x/tokenregistry/keeper/denom_mapping_test.go new file mode 100644 index 0000000000..30ae2595fd --- /dev/null +++ b/x/tokenregistry/keeper/denom_mapping_test.go @@ -0,0 +1,23 @@ +package keeper_test + +import ( + "testing" + + "github.com/Sifchain/sifnode/x/tokenregistry/test" + "github.com/stretchr/testify/require" +) + +func TestGetPeggy2Denom(t *testing.T) { + app, ctx, _ := test.CreateTestApp(false) + peggy1Denom := "peggy1" + _, found := app.TokenRegistryKeeper.GetPeggy2Denom(ctx, peggy1Denom) + // not found before set + require.Equal(t, found, false) + + peggy2Denom := "peggy2" + app.TokenRegistryKeeper.SetPeggy2Denom(ctx, peggy1Denom, peggy2Denom) + peggy2DenomInKeeper, found := app.TokenRegistryKeeper.GetPeggy2Denom(ctx, peggy1Denom) + // found after set + require.Equal(t, found, true) + require.Equal(t, peggy2Denom, peggy2DenomInKeeper) +} diff --git a/x/tokenregistry/keeper/keeper.go b/x/tokenregistry/keeper/keeper.go index 593ec2fadf..e22b039dab 100644 --- a/x/tokenregistry/keeper/keeper.go +++ b/x/tokenregistry/keeper/keeper.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + adminkeeper "github.com/Sifchain/sifnode/x/admin/keeper" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/tokenregistry/keeper/migrations.go b/x/tokenregistry/keeper/migrations.go index b9876e35cc..3bbb7415f3 100644 --- a/x/tokenregistry/keeper/migrations.go +++ b/x/tokenregistry/keeper/migrations.go @@ -1,6 +1,10 @@ package keeper import ( + "encoding/json" + "io/ioutil" + "path/filepath" + tkrtypes "github.com/Sifchain/sifnode/x/tokenregistry/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -26,5 +30,31 @@ func (m Migrator) MigrateToVer4(ctx sdk.Context) error { store.Delete(iterator.Key()) } + denomMigrationMap := getDenomMigrationMap() + for peggy1denom, peggy2denom := range denomMigrationMap { + m.Keeper.SetPeggy2Denom(ctx, peggy1denom, peggy2denom) + } + return nil } + +func getDenomMigrationMap() map[string]string { + migrationMap := map[string]string{} + input, err := ioutil.ReadFile(denomMigrationFilePath()) + if err != nil { + panic(err) + } + err = json.Unmarshal(input, &migrationMap) + if err != nil { + panic(err) + } + return migrationMap +} + +func denomMigrationFilePath() string { + fp, err := filepath.Abs("../../../smart-contracts/data/denom_mapping_peggy1_to_peggy2.json") + if err != nil { + panic(err) + } + return fp +} diff --git a/x/tokenregistry/types/expected_keepers.go b/x/tokenregistry/types/expected_keepers.go index 90e6b5d656..166d8c8a22 100644 --- a/x/tokenregistry/types/expected_keepers.go +++ b/x/tokenregistry/types/expected_keepers.go @@ -30,6 +30,8 @@ type Keeper interface { SetFirstDoublePeg(ctx sdk.Context, denom string, networkDescriptor oracletypes.NetworkDescriptor) AddMultipleTokens(ctx sdk.Context, entries []*RegistryEntry) RemoveMultipleTokens(ctx sdk.Context, denoms []string) + GetPeggy2Denom(ctx sdk.Context, peggy1_denom string) (string, bool) + SetPeggy2Denom(ctx sdk.Context, peggy1_denom string, peggy2_denom string) } type AccountKeeper interface { diff --git a/x/tokenregistry/types/keys.go b/x/tokenregistry/types/keys.go index 3828bf4736..9ebe5f028f 100644 --- a/x/tokenregistry/types/keys.go +++ b/x/tokenregistry/types/keys.go @@ -3,3 +3,4 @@ package types var WhitelistStorePrefix = []byte{0x01} var AdminAccountStorePrefix = []byte{0x02} // no longer used var TokenDenomPrefix = []byte{0x03} +var Peggy1DenomMappingPrefix = []byte{0x04}