Skip to content

Commit

Permalink
Add migration for asset module
Browse files Browse the repository at this point in the history
  • Loading branch information
trinitys7 committed Oct 8, 2024
1 parent ef4f39d commit 2c58c9e
Show file tree
Hide file tree
Showing 16 changed files with 76 additions and 59 deletions.
2 changes: 1 addition & 1 deletion x/asset/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func InitGenesis(ctx context.Context, k keeper.Keeper, genState types.GenesisSta
panic(err)
}
for _, token := range genState.Tokens {
err := k.Token.Set(ctx, token.Symbol, token)
err := k.Token.Set(ctx, types.TokenKey(token.Symbol), token)
if err != nil {
panic(err)
}
Expand Down
4 changes: 2 additions & 2 deletions x/asset/keeper/grpc_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ func (q queryServer) Token(c context.Context, req *types.QueryTokenRequest) (*ty
}
ctx := sdk.UnwrapSDKContext(c)

if t, err := q.k.Token.Get(ctx, req.Symbol); err != nil {
if t, err := q.k.Token.Get(ctx, types.TokenKey(req.Symbol)); err != nil {
return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, "not found")
} else { //nolint:revive // fixing this causes t to be inaccessible, so let's leave all as is.
return &types.QueryTokenResponse{Token: t}, nil
Expand All @@ -70,7 +70,7 @@ func (q queryServer) IsAuthorized(c context.Context, req *types.QueryIsAuthorize
}
ctx := sdk.UnwrapSDKContext(c)

if t, err := q.k.Token.Get(ctx, req.Symbol); err != nil {
if t, err := q.k.Token.Get(ctx, types.TokenKey(req.Symbol)); err != nil {
return nil, errorsmod.Wrap(sdkerrors.ErrKeyNotFound, "not found")
} else { //nolint:revive // fixing this causes t to be inaccessible, so let's leave all as is.
accAddress, _ := sdk.AccAddressFromBech32(req.Address)
Expand Down
6 changes: 3 additions & 3 deletions x/asset/keeper/grpc_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func (suite *KeeperTestSuite) TestTokensQuery() {
Total: "1000",
AuthorizationRequired: false,
}
suite.app.AssetKeeper.Token.Set(suite.ctx, "rst", token)
suite.app.AssetKeeper.Token.Set(suite.ctx, types.TokenKey("rst"), token)

expRes = &types.QueryTokensResponse{
Tokens: []types.Token{token},
Expand All @@ -72,7 +72,7 @@ func (suite *KeeperTestSuite) TestTokensQuery() {
Total: "1000",
AuthorizationRequired: false,
}
suite.app.AssetKeeper.Token.Set(suite.ctx, "rst", token1)
suite.app.AssetKeeper.Token.Set(suite.ctx, types.TokenKey("rst"), token1)

token2 := types.Token{
Manager: suite.testUser1Address,
Expand All @@ -81,7 +81,7 @@ func (suite *KeeperTestSuite) TestTokensQuery() {
Total: "1000",
AuthorizationRequired: false,
}
suite.app.AssetKeeper.Token.Set(suite.ctx, "btf", token2)
suite.app.AssetKeeper.Token.Set(suite.ctx, types.TokenKey("btf"), token2)

expRes = &types.QueryTokensResponse{
Tokens: []types.Token{token2, token1},
Expand Down
4 changes: 1 addition & 3 deletions x/asset/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package keeper
import (
"context"
"fmt"
"strings"

"cosmossdk.io/collections"
"cosmossdk.io/core/store"
Expand Down Expand Up @@ -70,8 +69,7 @@ func (k Keeper) Logger(ctx context.Context) log.Logger {
}

func (k Keeper) IsAddressAuthorizedToSend(ctx context.Context, symbol string, address sdk.AccAddress) (authorized bool) {
lowerCased := strings.ToLower(symbol)
token, err := k.Token.Get(ctx, lowerCased)
token, err := k.Token.Get(ctx, types.TokenKey(symbol))
if err != nil {
return false
}
Expand Down
29 changes: 29 additions & 0 deletions x/asset/keeper/migrator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/realiotech/realio-network/x/asset/exported"
v2 "github.com/realiotech/realio-network/x/asset/migrations/v2"
)

// Migrator is a struct for handling in-place state migrations.
type Migrator struct {
keeper Keeper
legacySubspace exported.Subspace
}

// NewMigrator returns Migrator instance for the state migration.
func NewMigrator(k Keeper, ss exported.Subspace) Migrator {
return Migrator{
keeper: k,
legacySubspace: ss,
}
}

// Migrate1to2 migrates the x/mint module state from the consensus version 1 to
// version 2. Specifically, it takes the parameters that are currently stored
// and managed by the x/params modules and stores them directly into the x/mint
// module state.
func (m Migrator) Migrate1to2(ctx sdk.Context) error {
return v2.Migrate(ctx, m.keeper.storeService.OpenKVStore(ctx), m.legacySubspace, m.keeper.cdc)
}
8 changes: 3 additions & 5 deletions x/asset/keeper/msg_server_authorize_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"context"
"strings"

errorsmod "cosmossdk.io/errors"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
Expand All @@ -13,10 +12,9 @@ import (

func (k msgServer) AuthorizeAddress(goCtx context.Context, msg *types.MsgAuthorizeAddress) (*types.MsgAuthorizeAddressResponse, error) {
// Check if the value exists
lowerCaseSymbol := strings.ToLower(msg.Symbol)
token, err := k.Token.Get(goCtx, lowerCaseSymbol)
token, err := k.Token.Get(goCtx, types.TokenKey(msg.Symbol))
if err != nil {
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists : %s", lowerCaseSymbol, err.Error())
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists : %s", msg.Symbol, err.Error())
}

// Checks if the token manager signed
Expand All @@ -36,7 +34,7 @@ func (k msgServer) AuthorizeAddress(goCtx context.Context, msg *types.MsgAuthori
}

token.AuthorizeAddress(accAddress)
err = k.Token.Set(goCtx, lowerCaseSymbol, token)
err = k.Token.Set(goCtx, types.TokenKey(msg.Symbol), token)
if err != nil {
return nil, types.ErrSetTokenUnable
}
Expand Down
3 changes: 1 addition & 2 deletions x/asset/keeper/msg_server_create_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ func (k msgServer) CreateToken(goCtx context.Context, msg *types.MsgCreateToken)
token.Authorized = append(token.Authorized, moduleAuthorization, newAuthorizationManager)
}

k.Token.Set(ctx, lowerCaseSymbol, token)
err = k.Token.Set(goCtx, lowerCaseSymbol, token)
err = k.Token.Set(goCtx, types.TokenKey(lowerCaseSymbol), token)
if err != nil {
return nil, types.ErrSetTokenUnable
}
Expand Down
19 changes: 9 additions & 10 deletions x/asset/keeper/msg_server_token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,8 @@ func (suite *KeeperTestSuite) TestTokenMsgServerCreate() {
} else {
suite.Require().NoError(err)

lowercased := strings.ToLower(tc.msg.Symbol)
token, err := suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(lowercased),
types.TokenKey(tc.msg.Symbol),
)
suite.Require().NoError(err)
suite.Require().Equal(token.Manager, tc.msg.Manager)
Expand Down Expand Up @@ -123,7 +122,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerCreateAuthorizationDefaultFalse(
_, err := srv.CreateToken(wctx, expected)
suite.Require().NoError(err)
token, _ := suite.app.AssetKeeper.Token.Get(suite.ctx,
expected.Symbol,
types.TokenKey(expected.Symbol),
)
suite.Require().False(token.AuthorizationRequired)
}
Expand Down Expand Up @@ -188,7 +187,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerUpdate() {
suite.Require().NoError(err)

token, _ := suite.app.AssetKeeper.Token.Get(suite.ctx,
t1.Symbol,
types.TokenKey(t1.Symbol),
)
suite.Require().False(token.AuthorizationRequired)

Expand All @@ -200,7 +199,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerUpdate() {
_, err = srv.UpdateToken(wctx, updateMsg)

token, _ = suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().NoError(err)
suite.Require().True(token.AuthorizationRequired)
Expand Down Expand Up @@ -244,7 +243,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerAuthorizeAddress() {
suite.Require().NoError(err)

token, _ := suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().True(token.AddressIsAuthorized(suite.testUser1Acc))

Expand All @@ -257,7 +256,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerAuthorizeAddress() {
suite.Require().NoError(err)

token, _ = suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().NotNil(token.Authorized)
suite.Require().True(token.AddressIsAuthorized(suite.testUser1Acc))
Expand Down Expand Up @@ -328,7 +327,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerUnAuthorizeAddress() {
suite.Require().NoError(err)

token, _ := suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().True(token.AddressIsAuthorized(suite.testUser1Acc))

Expand All @@ -341,7 +340,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerUnAuthorizeAddress() {
suite.Require().NoError(err)

token, _ = suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().True(token.AddressIsAuthorized(suite.testUser2Acc))

Expand All @@ -354,7 +353,7 @@ func (suite *KeeperTestSuite) TestTokenMsgServerUnAuthorizeAddress() {
suite.Require().NoError(err)

token, _ = suite.app.AssetKeeper.Token.Get(suite.ctx,
strings.ToLower(t1.Symbol),
types.TokenKey(t1.Symbol),
)
suite.Require().False(token.AddressIsAuthorized(suite.testUser2Acc))
}
Expand Down
2 changes: 1 addition & 1 deletion x/asset/keeper/msg_server_transfer_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (k msgServer) TransferToken(goCtx context.Context, msg *types.MsgTransferTo
// Check if the value already exists
token, err := k.Token.Get(
ctx,
lowerCaseSymbol,
types.TokenKey(msg.Symbol),
)
if err != nil {
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "token %s not found: %s", lowerCaseSymbol, err.Error())
Expand Down
8 changes: 3 additions & 5 deletions x/asset/keeper/msg_server_un_authorize_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"context"
"strings"

errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand All @@ -13,11 +12,10 @@ import (
func (k msgServer) UnAuthorizeAddress(goCtx context.Context, msg *types.MsgUnAuthorizeAddress) (*types.MsgUnAuthorizeAddressResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)

lowerCaseSymbol := strings.ToLower(msg.Symbol)
// Check if the value exists
token, err := k.Token.Get(ctx, lowerCaseSymbol)
token, err := k.Token.Get(ctx, types.TokenKey(msg.Symbol))
if err != nil {
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists: %s", lowerCaseSymbol, err.Error())
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists: %s", msg.Symbol, err.Error())
}

// Checks if the token manager signed
Expand All @@ -37,7 +35,7 @@ func (k msgServer) UnAuthorizeAddress(goCtx context.Context, msg *types.MsgUnAut
}

token.UnAuthorizeAddress(accAddress)
err = k.Token.Set(goCtx, lowerCaseSymbol, token)
err = k.Token.Set(goCtx, types.TokenKey(msg.Symbol), token)
if err != nil {
return nil, types.ErrSetTokenUnable
}
Expand Down
8 changes: 3 additions & 5 deletions x/asset/keeper/msg_server_update_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"context"
"strings"

errorsmod "cosmossdk.io/errors"

Expand All @@ -14,10 +13,9 @@ import (
func (k msgServer) UpdateToken(goCtx context.Context, msg *types.MsgUpdateToken) (*types.MsgUpdateTokenResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)

lowerCaseSymbol := strings.ToLower(msg.Symbol)
existing, err := k.Token.Get(ctx, lowerCaseSymbol)
existing, err := k.Token.Get(ctx, types.TokenKey(msg.Symbol))
if err != nil {
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists: %s", lowerCaseSymbol, err.Error())
return nil, errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "symbol %s does not exists: %s", msg.Symbol, err.Error())
}

// Checks if the token manager signed
Expand All @@ -40,7 +38,7 @@ func (k msgServer) UpdateToken(goCtx context.Context, msg *types.MsgUpdateToken)
AuthorizationRequired: msg.AuthorizationRequired,
}

err = k.Token.Set(goCtx, lowerCaseSymbol, token)
err = k.Token.Set(goCtx, types.TokenKey(msg.Symbol), token)
if err != nil {
return nil, types.ErrSetTokenUnable
}
Expand Down
3 changes: 1 addition & 2 deletions x/asset/keeper/restrictions.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package keeper

import (
"context"
"strings"

errorsmod "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
Expand All @@ -27,7 +26,7 @@ func (k Keeper) AssetSendRestriction(ctx context.Context, fromAddr, toAddr sdk.A
}
token, err := k.Token.Get(
ctx,
strings.ToLower(symbol),
types.TokenKey(symbol),
)
if err != nil {
continue
Expand Down
2 changes: 1 addition & 1 deletion x/asset/migrations/v2/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const (
ModuleName = "asset"
)

var ParamsKey = []byte{0x01}
var ParamsKey = []byte{0x00}

// Migrate migrates the x/mint module state from the consensus version 1 to
// version 2. Specifically, it takes the parameters that are currently stored
Expand Down
10 changes: 5 additions & 5 deletions x/asset/migrations/v2/migrator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"

"github.com/realiotech/realio-network/x/mint"
"github.com/realiotech/realio-network/x/mint/exported"
v2 "github.com/realiotech/realio-network/x/mint/migrations/v2"
"github.com/realiotech/realio-network/x/mint/types"
"github.com/realiotech/realio-network/x/asset"
"github.com/realiotech/realio-network/x/asset/exported"
v2 "github.com/realiotech/realio-network/x/asset/migrations/v2"
"github.com/realiotech/realio-network/x/asset/types"
)

type mockSubspace struct {
Expand All @@ -31,7 +31,7 @@ func (ms mockSubspace) GetParamSet(ctx sdk.Context, ps exported.ParamSet) {
}

func TestMigrate(t *testing.T) {
encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{})
encCfg := moduletestutil.MakeTestEncodingConfig(asset.AppModuleBasic{})
cdc := encCfg.Codec

storeKey := storetypes.NewKVStoreKey(v2.ModuleName)
Expand Down
6 changes: 5 additions & 1 deletion x/asset/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,11 @@ func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))
types.RegisterQueryServer(cfg.QueryServer(), keeper.NewQueryServerImpl(am.keeper))

// TODO: run migrations
m := keeper.NewMigrator(am.keeper, am.legacySubspace)

if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil {
panic(fmt.Sprintf("failed to migrate x/%s from version 1 to 2: %v", types.ModuleName, err))
}
}

// RegisterInvariants registers the capability module's invariants.
Expand Down
21 changes: 8 additions & 13 deletions x/asset/types/keys.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package types

import "cosmossdk.io/collections"
import (
"strings"

"cosmossdk.io/collections"
)

var (
ParamsKey = collections.NewPrefix(0)
TokenKeyPrefix = collections.NewPrefix(1)
TokenKeyPrefix = collections.NewPrefix("Token/value/")
)

const (
Expand All @@ -22,9 +26,6 @@ const (

// PortID is the default port id that module binds to
PortID = "asset"

// TokenKeyPrefix is the prefix to retrieve all Token
// TokenKeyPrefix = "Token/value/"
)

// PortKey defines the key to store the port ID in store
Expand All @@ -37,12 +38,6 @@ func KeyPrefix(p string) []byte {
// TokenKey returns the store key to retrieve a Token from the index fields
func TokenKey(
index string,
) []byte {
var key []byte

indexBytes := []byte(index)
key = append(key, indexBytes...)
key = append(key, []byte("/")...)

return key
) string {
return strings.ToLower(index) + "/"
}

0 comments on commit 2c58c9e

Please sign in to comment.