diff --git a/proto/denommetadata/denommetadata.proto b/proto/denommetadata/denommetadata.proto new file mode 100644 index 00000000..cca29c19 --- /dev/null +++ b/proto/denommetadata/denommetadata.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; +package rollapp.denommetadata.types; + +import "gogoproto/gogo.proto"; +import "cosmos/bank/v1beta1/bank.proto"; + +option go_package = "github.com/dymensionxyz/dymension-rdk/x/denommetadata/types"; + +// DenomMetdata defines the metadata and the denom trace for the denom. +message DenomMetadata { + cosmos.bank.v1beta1.Metadata token_metadata = 1 + [ (gogoproto.nullable) = false ]; + string denom_trace = 2; +} \ No newline at end of file diff --git a/proto/denommetadata/query.proto b/proto/denommetadata/query.proto index 8900c2ec..fa6619d8 100644 --- a/proto/denommetadata/query.proto +++ b/proto/denommetadata/query.proto @@ -15,9 +15,11 @@ service Query { "/dymensionxyz/dymension-rdk/denommetadata/params"; } // Queries an IBC denom base on denom trace - rpc IBCDenomByDenomTrace(QueryGetIBCDenomByDenomTraceRequest) returns (QueryIBCDenomByDenomTraceResponse) { - option (google.api.http).get = "/dymensionxyz/dymension-rdk/denommetadata/ibc_denom/{denom_trace}"; - } + rpc IBCDenomByDenomTrace(QueryGetIBCDenomByDenomTraceRequest) + returns (QueryIBCDenomByDenomTraceResponse) { + option (google.api.http).get = + "/dymensionxyz/dymension-rdk/denommetadata/ibc_denom/{denom_trace}"; + } } // QueryParamsRequest is request type for the Query/Params RPC method. @@ -29,14 +31,15 @@ message QueryParamsResponse { Params params = 1 [ (gogoproto.nullable) = false ]; } - -// QueryGetIBCDenomByDenomTraceRequest is the request type for the Query/IBCDenomByDenomTrace RPC method. +// QueryGetIBCDenomByDenomTraceRequest is the request type for the +// Query/IBCDenomByDenomTrace RPC method. message QueryGetIBCDenomByDenomTraceRequest { // denom trace of a denom string denom_trace = 1; } -// QueryIBCDenomByDenomTraceResponse is the response type for the Query/IBCDenomByDenomTrace RPC method. +// QueryIBCDenomByDenomTraceResponse is the response type for the +// Query/IBCDenomByDenomTrace RPC method. message QueryIBCDenomByDenomTraceResponse { // ibc denom base on denom trace string ibc_denom = 1; diff --git a/proto/denommetadata/tx.proto b/proto/denommetadata/tx.proto index 80d86aa2..3bef45a9 100644 --- a/proto/denommetadata/tx.proto +++ b/proto/denommetadata/tx.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package rollapp.denommetadata.types; import "gogoproto/gogo.proto"; -import "cosmos/bank/v1beta1/bank.proto"; +import "denommetadata/denommetadata.proto"; option go_package = "github.com/dymensionxyz/dymension-rdk/x/denommetadata/types"; @@ -19,8 +19,7 @@ service Msg { message MsgCreateDenomMetadata { // sender_address is the bech32 address of message sender. string sender_address = 1; - cosmos.bank.v1beta1.Metadata token_metadata = 2 - [ (gogoproto.nullable) = false ]; + repeated DenomMetadata metadatas = 2 [ (gogoproto.nullable) = false ]; } // MsgCreateDenomMetadataResponse defines the MsgCreateDenomMetadata response @@ -31,8 +30,7 @@ message MsgCreateDenomMetadataResponse {} message MsgUpdateDenomMetadata { // sender_address is the bech32 address of message sender. string sender_address = 1; - cosmos.bank.v1beta1.Metadata token_metadata = 2 - [ (gogoproto.nullable) = false ]; + repeated DenomMetadata metadatas = 2 [ (gogoproto.nullable) = false ]; } // MsgUpdateDenomMetadataResponse defines the MsgUpdateDenomMetadata response diff --git a/server/commands.go b/server/commands.go index 4efa0a7f..85a77be2 100644 --- a/server/commands.go +++ b/server/commands.go @@ -94,7 +94,6 @@ func ResetState() *cobra.Command { Aliases: []string{"reset_state"}, Short: "Remove all the data and WAL", RunE: func(cmd *cobra.Command, args []string) (err error) { - config := server.GetServerContextFromCmd(cmd).Config var paths []string appdb := filepath.Join(config.DBDir(), "application.db") diff --git a/testutil/app/app.go b/testutil/app/app.go index 39986fef..f99ca0af 100644 --- a/testutil/app/app.go +++ b/testutil/app/app.go @@ -116,17 +116,15 @@ const ( Name = "rollapp" ) -var ( - kvstorekeys = []string{ - authtypes.StoreKey, banktypes.StoreKey, - stakingtypes.StoreKey, seqtypes.StoreKey, - minttypes.StoreKey, denommetadatatypes.StoreKey, distrtypes.StoreKey, - govtypes.StoreKey, paramstypes.StoreKey, - ibchost.StoreKey, upgradetypes.StoreKey, - epochstypes.StoreKey, hubgentypes.StoreKey, - ibctransfertypes.StoreKey, capabilitytypes.StoreKey, - } -) +var kvstorekeys = []string{ + authtypes.StoreKey, banktypes.StoreKey, + stakingtypes.StoreKey, seqtypes.StoreKey, + minttypes.StoreKey, denommetadatatypes.StoreKey, distrtypes.StoreKey, + govtypes.StoreKey, paramstypes.StoreKey, + ibchost.StoreKey, upgradetypes.StoreKey, + epochstypes.StoreKey, hubgentypes.StoreKey, + ibctransfertypes.StoreKey, capabilitytypes.StoreKey, +} func getGovProposalHandlers() []govclient.ProposalHandler { var govProposalHandlers []govclient.ProposalHandler @@ -248,7 +246,6 @@ func NewRollapp( appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp), ) *App { - appCodec := encodingConfig.Codec cdc := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry @@ -312,7 +309,7 @@ func NewRollapp( app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, - sdk.Bech32PrefixAccAddr, //Bech32MainPrefix + sdk.Bech32PrefixAccAddr, // Bech32MainPrefix ) app.BankKeeper = bankkeeper.NewBaseKeeper( @@ -346,20 +343,6 @@ func NewRollapp( ), ) - app.DenommetadataKeeper = denommetadatakeeper.NewKeeper( - appCodec, - keys[denommetadatatypes.StoreKey], - app.BankKeeper, - nil, - app.GetSubspace(denommetadatatypes.ModuleName), - ) - // set hook for denom metadata keeper later - app.DenommetadataKeeper.SetHooks( - denommetadatatypes.NewMultiDenommetadataHooks( - // insert denom metadata hooks receivers here - ), - ) - app.DistrKeeper = distrkeeper.NewKeeper( appCodec, keys[distrtypes.StoreKey], app.GetSubspace(distrtypes.ModuleName), app.AccountKeeper, app.BankKeeper, &stakingKeeper, &app.SequencersKeeper, authtypes.FeeCollectorName, app.ModuleAccountAddrs(), @@ -428,6 +411,21 @@ func NewRollapp( ) transferIBCModule := ibctransfer.NewIBCModule(app.TransferKeeper) + app.DenommetadataKeeper = denommetadatakeeper.NewKeeper( + appCodec, + keys[denommetadatatypes.StoreKey], + app.BankKeeper, + app.TransferKeeper, + nil, + app.GetSubspace(denommetadatatypes.ModuleName), + ) + // set hook for denom metadata keeper later + app.DenommetadataKeeper.SetHooks( + denommetadatatypes.NewMultiDenommetadataHooks( + // insert denom metadata hooks receivers here + ), + ) + app.HubGenesisKeeper = hubgenkeeper.NewKeeper( appCodec, keys[hubgentypes.StoreKey], @@ -536,12 +534,12 @@ func NewRollapp( vestingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, - denommetadatatypes.ModuleName, ibchost.ModuleName, genutiltypes.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, ibctransfertypes.ModuleName, + denommetadatatypes.ModuleName, hubgentypes.ModuleName, } app.mm.SetOrderInitGenesis(initGenesisList...) @@ -656,7 +654,7 @@ func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.Res panic(err) } - //Passing the dymint sequencers to the sequencer module from RequestInitChain + // Passing the dymint sequencers to the sequencer module from RequestInitChain app.SequencersKeeper.SetDymintSequencers(ctx, req.Validators) app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) diff --git a/utils/cmd_utils.go b/utils/cmd_utils.go index dff4130e..ec4b812e 100644 --- a/utils/cmd_utils.go +++ b/utils/cmd_utils.go @@ -1,6 +1,7 @@ package utils import ( + "encoding/json" "io" "os" "os/signal" @@ -61,3 +62,20 @@ func WaitForQuitSignals() server.ErrorCode { sig := <-sigs return server.ErrorCode{Code: int(sig.(syscall.Signal)) + 128} } + +// ParseJsonFromFile parses a json file into a slice of type T +func ParseJsonFromFile[T any](path string) ([]T, error) { + var result []T + + // #nosec G304 + contents, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + err = json.Unmarshal(contents, &result) + if err != nil { + return nil, err + } + return result, nil +} diff --git a/utils/logger/logger.go b/utils/logger/logger.go index 6a8d75a5..ab385e24 100644 --- a/utils/logger/logger.go +++ b/utils/logger/logger.go @@ -24,7 +24,7 @@ type Logger struct { // NewLog creates a new Log struct with the given persistent fields func NewLogger(path string, maxSize int, level string, moduleOverrideLevel ...map[string]string) Logger { - var logger = Logger{ + logger := Logger{ Fields: map[string]interface{}{}, moduleOverrideLevel: map[string]string{}, } @@ -44,7 +44,7 @@ func (l Logger) setupLogger(path string, maxSize int, level string) *log.Logger Filename: path, MaxSize: maxSize, // megabytes MaxBackups: defaultMaxBackups, - MaxAge: defaultMaxAgeDays, //days + MaxAge: defaultMaxAgeDays, // days Compress: true, // disabled by default }) } else { @@ -73,6 +73,7 @@ func (l Logger) Info(msg string, keyvals ...interface{}) { } l.Logger.WithFields(l.Fields).Info(msg, keyvals) } + func (l Logger) Error(msg string, keyvals ...interface{}) { if l.customLogLevel < log.ErrorLevel { return @@ -81,7 +82,7 @@ func (l Logger) Error(msg string, keyvals ...interface{}) { } func (l Logger) With(keyvals ...interface{}) tmlog.Logger { - //Make deep copy of the current fields + // Make deep copy of the current fields fields := map[string]interface{}{} for k, v := range l.Fields { fields[k] = v diff --git a/utils/logger/logger_test.go b/utils/logger/logger_test.go index c4c230bb..f4ebcfb8 100644 --- a/utils/logger/logger_test.go +++ b/utils/logger/logger_test.go @@ -60,7 +60,7 @@ func TestMultipleWithCalls(t *testing.T) { logger.SetOutput(&buf) logger1 := logger.With("module", "module1") - logger2 := logger1.With("arg", "custom_arg") //on top logger1 + logger2 := logger1.With("arg", "custom_arg") // on top logger1 logger1.Info("testing") msg := strings.TrimSpace(buf.String()) @@ -111,7 +111,7 @@ func TestMaxFileSize(t *testing.T) { logFileName := fmt.Sprintf("test-log-%s.log", seed) logDir := filepath.Join("/tmp", seed) - err := os.Mkdir(logDir, 0700) + err := os.Mkdir(logDir, 0o700) assert.NoError(t, err) logPath := filepath.Join(logDir, logFileName) diff --git a/x/denommetadata/client/cli/test-proposals/create_multiple_denom_metadatas_proposal_test.json b/x/denommetadata/client/cli/test-proposals/create_multiple_denom_metadatas_proposal_test.json new file mode 100644 index 00000000..f5313972 --- /dev/null +++ b/x/denommetadata/client/cli/test-proposals/create_multiple_denom_metadatas_proposal_test.json @@ -0,0 +1,38 @@ +[ + { + "token_metadata": { + "description": "DYM", + "denom_units": [ + { + "denom": "ibc/FECACB927EB3102CCCB240FFB3B6FCCEEB8D944C6FEA8DFF079650FEFF59781D", + "exponent": 0 + }, + { + "denom": "DYM", + "exponent": 18 + } + ], + "base": "ibc/FECACB927EB3102CCCB240FFB3B6FCCEEB8D944C6FEA8DFF079650FEFF59781D", + "display": "DYM", + "name": "DYM", + "symbol": "DYM" + }, + "denom_trace": "transfer/channel-0/dym" + }, + { + "token_metadata": { + "description": "The native token of rollapp", + "denom_units": [ + { + "denom": "test", + "exponent": 0 + } + ], + "base": "test", + "display": "test", + "name": "TEST", + "symbol": "TEST" + }, + "denom_trace": "" + } +] \ No newline at end of file diff --git a/x/denommetadata/client/cli/tx.go b/x/denommetadata/client/cli/tx.go index a649e397..c304f12d 100644 --- a/x/denommetadata/client/cli/tx.go +++ b/x/denommetadata/client/cli/tx.go @@ -1,16 +1,13 @@ package cli import ( - "encoding/json" - "os" - "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/dymensionxyz/dymension-rdk/utils" "github.com/dymensionxyz/dymension-rdk/x/denommetadata/types" ) @@ -46,26 +43,14 @@ func NewCmdCreateDenomMetadata() *cobra.Command { path := args[0] - //nolint:gosec - fileContent, err := os.ReadFile(path) - if err != nil { - return err - } - - metadata := banktypes.Metadata{} - err = json.Unmarshal([]byte(fileContent), &metadata) - if err != nil { - return err - } - - err = metadata.Validate() + metadatas, err := utils.ParseJsonFromFile[types.DenomMetadata](path) if err != nil { return err } msg := &types.MsgCreateDenomMetadata{ SenderAddress: sender.String(), - TokenMetadata: metadata, + Metadatas: metadatas, } if err := msg.ValidateBasic(); err != nil { @@ -95,26 +80,14 @@ func NewCmdUpdateDenomMetadata() *cobra.Command { path := args[0] - //nolint:gosec - fileContent, err := os.ReadFile(path) - if err != nil { - return err - } - - metadata := banktypes.Metadata{} - err = json.Unmarshal([]byte(fileContent), &metadata) - if err != nil { - return err - } - - err = metadata.Validate() + metadatas, err := utils.ParseJsonFromFile[types.DenomMetadata](path) if err != nil { return err } msg := &types.MsgUpdateDenomMetadata{ SenderAddress: sender.String(), - TokenMetadata: metadata, + Metadatas: metadatas, } if err := msg.ValidateBasic(); err != nil { diff --git a/x/denommetadata/keeper/keeper.go b/x/denommetadata/keeper/keeper.go index 0bb9faaa..45695242 100644 --- a/x/denommetadata/keeper/keeper.go +++ b/x/denommetadata/keeper/keeper.go @@ -15,8 +15,9 @@ type Keeper struct { cdc codec.BinaryCodec paramSpace paramtypes.Subspace - bankKeeper types.BankKeeper - hooks types.MultiDenomMetadataHooks + bankKeeper types.BankKeeper + transferKeeper types.TransferKeeper + hooks types.MultiDenomMetadataHooks } // NewKeeper creates new instances of the Keeper @@ -24,6 +25,7 @@ func NewKeeper( cdc codec.BinaryCodec, storeKey storetypes.StoreKey, bk types.BankKeeper, + tk types.TransferKeeper, hooks types.MultiDenomMetadataHooks, paramSpace paramtypes.Subspace, ) Keeper { @@ -33,11 +35,12 @@ func NewKeeper( } return Keeper{ - storeKey: storeKey, - cdc: cdc, - paramSpace: paramSpace, - bankKeeper: bk, - hooks: hooks, + storeKey: storeKey, + cdc: cdc, + paramSpace: paramSpace, + bankKeeper: bk, + transferKeeper: tk, + hooks: hooks, } } diff --git a/x/denommetadata/keeper/msg_server.go b/x/denommetadata/keeper/msg_server.go index 862a22b8..85dc1e33 100644 --- a/x/denommetadata/keeper/msg_server.go +++ b/x/denommetadata/keeper/msg_server.go @@ -5,6 +5,7 @@ import ( "fmt" sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" "github.com/dymensionxyz/dymension-rdk/x/denommetadata/types" ) @@ -36,18 +37,27 @@ func (k msgServer) CreateDenomMetadata( return nil, types.ErrNoPermission } - found := k.bankKeeper.HasDenomMetaData(ctx, msg.TokenMetadata.Base) - if found { - return nil, types.ErrDenomAlreadyExists + for _, metadata := range msg.Metadatas { + found := k.bankKeeper.HasDenomMetaData(ctx, metadata.TokenMetadata.Base) + if found { + return nil, types.ErrDenomAlreadyExists + } + + k.bankKeeper.SetDenomMetaData(ctx, metadata.TokenMetadata) + // set hook after denom metadata creation + err := k.hooks.AfterDenomMetadataCreation(ctx, metadata.TokenMetadata) + if err != nil { + return nil, fmt.Errorf("error in after denom metadata creation hook: %w", err) + } + + // construct the denomination trace from the full raw denomination + denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace) + + traceHash := denomTrace.Hash() + if !k.transferKeeper.HasDenomTrace(ctx, traceHash) { + k.transferKeeper.SetDenomTrace(ctx, denomTrace) + } } - - k.bankKeeper.SetDenomMetaData(ctx, msg.TokenMetadata) - // set hook after denom metadata creation - err := k.hooks.AfterDenomMetadataCreation(ctx, msg.TokenMetadata) - if err != nil { - return nil, fmt.Errorf("error in after denom metadata creation hook: %w", err) - } - return &types.MsgCreateDenomMetadataResponse{}, nil } @@ -66,17 +76,27 @@ func (k msgServer) UpdateDenomMetadata( return nil, types.ErrNoPermission } - found := k.bankKeeper.HasDenomMetaData(ctx, msg.TokenMetadata.Base) - if !found { - return nil, types.ErrDenomDoesNotExist - } + for _, metadata := range msg.Metadatas { + found := k.bankKeeper.HasDenomMetaData(ctx, metadata.TokenMetadata.Base) + if !found { + return nil, types.ErrDenomDoesNotExist + } + + k.bankKeeper.SetDenomMetaData(ctx, metadata.TokenMetadata) + + // set hook after denom metadata update + err := k.hooks.AfterDenomMetadataUpdate(ctx, metadata.TokenMetadata) + if err != nil { + return nil, fmt.Errorf("error in after denom metadata update hook: %w", err) + } - k.bankKeeper.SetDenomMetaData(ctx, msg.TokenMetadata) + // construct the denomination trace from the full raw denomination + denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace) - // set hook after denom metadata update - err := k.hooks.AfterDenomMetadataUpdate(ctx, msg.TokenMetadata) - if err != nil { - return nil, fmt.Errorf("error in after denom metadata update hook: %w", err) + traceHash := denomTrace.Hash() + if k.transferKeeper.HasDenomTrace(ctx, traceHash) { + k.transferKeeper.SetDenomTrace(ctx, denomTrace) + } } return &types.MsgUpdateDenomMetadataResponse{}, nil diff --git a/x/denommetadata/keeper/msg_server_test.go b/x/denommetadata/keeper/msg_server_test.go index 25438b0f..8c131af7 100644 --- a/x/denommetadata/keeper/msg_server_test.go +++ b/x/denommetadata/keeper/msg_server_test.go @@ -40,8 +40,9 @@ func (suite *DenomMetadataMsgServerTestSuite) setupTest(hooks types.DenomMetadat } const ( - ibcBase = "ibc/7B2A4F6E798182988D77B6B884919AF617A73503FDAC27C916CD7A69A69013CF" + ibcBase = "ibc/896F0081794734A2DBDF219B7575C569698F872619C43D18CC63C03CFB997257" senderAddress = "cosmos1s77x8wr2gzdhq8gt8c085vate0s23xu9u80wtx" + denomTrace = "transfer/channel-0/atom" ) var denomMetadata = banktypes.Metadata{ @@ -70,7 +71,12 @@ func (suite *DenomMetadataMsgServerTestSuite) TestCreateDenomMetadata() { name: "success", msg: &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: denomMetadata, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: denomTrace, + }, + }, }, hooks: &mockERC20Hook{}, expectHookCalled: true, @@ -78,7 +84,12 @@ func (suite *DenomMetadataMsgServerTestSuite) TestCreateDenomMetadata() { name: "permission error", msg: &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: denomMetadata, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: denomTrace, + }, + }, }, malleate: func() { initialParams := types.DefaultParams() @@ -88,16 +99,40 @@ func (suite *DenomMetadataMsgServerTestSuite) TestCreateDenomMetadata() { hooks: &mockERC20Hook{}, expectHookCalled: false, expectErr: types.ErrNoPermission.Error(), + }, { + name: "ibc denom does not match", + msg: &types.MsgCreateDenomMetadata{ + SenderAddress: senderAddress, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: "transfer/channel-0/uatom", + }, + }, + }, + hooks: &mockERC20Hook{}, + expectHookCalled: false, + expectErr: "denom parse from denom trace does not match metadata base denom", }, { name: "denom already exists", msg: &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: denomMetadata, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: denomTrace, + }, + }, }, malleate: func() { msg := &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: denomMetadata, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: denomTrace, + }, + }, } _, err := suite.msgServer.CreateDenomMetadata(suite.ctx, msg) suite.Require().NoError(err, "CreateDenomMetadata() error") @@ -109,16 +144,21 @@ func (suite *DenomMetadataMsgServerTestSuite) TestCreateDenomMetadata() { name: "invalid denom units", msg: &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: banktypes.Metadata{ - Description: "ATOM IBC", - Base: ibcBase, - DenomUnits: []*banktypes.DenomUnit{ - {Denom: ibcBase, Exponent: 18}, - {Denom: "ATOM", Exponent: 0}, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: banktypes.Metadata{ + Description: "ATOM IBC", + Base: ibcBase, + DenomUnits: []*banktypes.DenomUnit{ + {Denom: ibcBase, Exponent: 18}, + {Denom: "ATOM", Exponent: 0}, + }, + Name: "ATOM channel-0", + Symbol: "ibcATOM-0", + Display: ibcBase, + }, + DenomTrace: denomTrace, }, - Name: "ATOM channel-0", - Symbol: "ibcATOM-0", - Display: ibcBase, }, }, hooks: &mockERC20Hook{}, @@ -128,7 +168,12 @@ func (suite *DenomMetadataMsgServerTestSuite) TestCreateDenomMetadata() { name: "failed to create erc20 contract", msg: &types.MsgCreateDenomMetadata{ SenderAddress: senderAddress, - TokenMetadata: denomMetadata, + Metadatas: []types.DenomMetadata{ + { + TokenMetadata: denomMetadata, + DenomTrace: denomTrace, + }, + }, }, hooks: &mockERC20Hook{ err: fmt.Errorf("failed to deploy the erc20 contract for the IBC coin"), diff --git a/x/denommetadata/module.go b/x/denommetadata/module.go index d23f4d0a..32ba848f 100644 --- a/x/denommetadata/module.go +++ b/x/denommetadata/module.go @@ -40,6 +40,7 @@ func (AppModuleBasic) Name() string { func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { types.RegisterLegacyAminoCodec(cdc) } + func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { types.RegisterInterfaces(reg) } diff --git a/x/denommetadata/types/denommetadata.pb.go b/x/denommetadata/types/denommetadata.pb.go new file mode 100644 index 00000000..48bde412 --- /dev/null +++ b/x/denommetadata/types/denommetadata.pb.go @@ -0,0 +1,376 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: denommetadata/denommetadata.proto + +package types + +import ( + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/x/bank/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// DenomMetdata defines the metadata and the denom trace for the denom. +type DenomMetadata struct { + TokenMetadata types.Metadata `protobuf:"bytes,1,opt,name=token_metadata,json=tokenMetadata,proto3" json:"token_metadata"` + DenomTrace string `protobuf:"bytes,2,opt,name=denom_trace,json=denomTrace,proto3" json:"denom_trace,omitempty"` +} + +func (m *DenomMetadata) Reset() { *m = DenomMetadata{} } +func (m *DenomMetadata) String() string { return proto.CompactTextString(m) } +func (*DenomMetadata) ProtoMessage() {} +func (*DenomMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_74a11037efbe4195, []int{0} +} +func (m *DenomMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DenomMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomMetadata.Merge(m, src) +} +func (m *DenomMetadata) XXX_Size() int { + return m.Size() +} +func (m *DenomMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_DenomMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomMetadata proto.InternalMessageInfo + +func (m *DenomMetadata) GetTokenMetadata() types.Metadata { + if m != nil { + return m.TokenMetadata + } + return types.Metadata{} +} + +func (m *DenomMetadata) GetDenomTrace() string { + if m != nil { + return m.DenomTrace + } + return "" +} + +func init() { + proto.RegisterType((*DenomMetadata)(nil), "rollapp.denommetadata.types.DenomMetadata") +} + +func init() { proto.RegisterFile("denommetadata/denommetadata.proto", fileDescriptor_74a11037efbe4195) } + +var fileDescriptor_74a11037efbe4195 = []byte{ + // 252 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0x49, 0xcd, 0xcb, + 0xcf, 0xcd, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x47, 0xe1, 0xe9, 0x15, 0x14, 0xe5, + 0x97, 0xe4, 0x0b, 0x49, 0x17, 0xe5, 0xe7, 0xe4, 0x24, 0x16, 0x14, 0xe8, 0xa1, 0x4a, 0x96, 0x54, + 0x16, 0xa4, 0x16, 0x4b, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0xd5, 0xe9, 0x83, 0x58, 0x10, 0x2d, + 0x52, 0x72, 0xc9, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0xfa, 0x49, 0x89, 0x79, 0xd9, 0xfa, 0x65, 0x86, + 0x49, 0xa9, 0x25, 0x89, 0x86, 0x60, 0x0e, 0x44, 0x5e, 0xa9, 0x86, 0x8b, 0xd7, 0x05, 0x64, 0x98, + 0x2f, 0xd4, 0x30, 0x21, 0x2f, 0x2e, 0xbe, 0x92, 0xfc, 0xec, 0xd4, 0xbc, 0x78, 0x98, 0xf1, 0x12, + 0x8c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, 0xb2, 0x7a, 0x10, 0x93, 0xf4, 0xc0, 0x9a, 0xa1, 0x26, 0xe9, + 0xc1, 0xb4, 0x39, 0xb1, 0x9c, 0xb8, 0x27, 0xcf, 0x10, 0xc4, 0x0b, 0xd6, 0x0a, 0x37, 0x4b, 0x9e, + 0x8b, 0x1b, 0xec, 0xd2, 0xf8, 0x92, 0xa2, 0xc4, 0xe4, 0x54, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, + 0x20, 0x2e, 0xb0, 0x50, 0x08, 0x48, 0xc4, 0x29, 0xf4, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, + 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, + 0xe5, 0x18, 0xa2, 0xac, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x53, + 0x2a, 0x73, 0x53, 0xf3, 0x8a, 0x33, 0xf3, 0xf3, 0x2a, 0x2a, 0xab, 0x10, 0x1c, 0xdd, 0xa2, 0x94, + 0x6c, 0xfd, 0x0a, 0xd4, 0x70, 0xd2, 0x07, 0x07, 0x45, 0x12, 0x1b, 0xd8, 0x6f, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x87, 0x70, 0x47, 0x14, 0x53, 0x01, 0x00, 0x00, +} + +func (m *DenomMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DenomMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DenomTrace) > 0 { + i -= len(m.DenomTrace) + copy(dAtA[i:], m.DenomTrace) + i = encodeVarintDenommetadata(dAtA, i, uint64(len(m.DenomTrace))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.TokenMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintDenommetadata(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintDenommetadata(dAtA []byte, offset int, v uint64) int { + offset -= sovDenommetadata(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *DenomMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.TokenMetadata.Size() + n += 1 + l + sovDenommetadata(uint64(l)) + l = len(m.DenomTrace) + if l > 0 { + n += 1 + l + sovDenommetadata(uint64(l)) + } + return n +} + +func sovDenommetadata(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozDenommetadata(x uint64) (n int) { + return sovDenommetadata(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *DenomMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DenomMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthDenommetadata + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthDenommetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TokenMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DenomTrace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthDenommetadata + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthDenommetadata + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DenomTrace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipDenommetadata(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthDenommetadata + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipDenommetadata(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowDenommetadata + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthDenommetadata + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupDenommetadata + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthDenommetadata + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthDenommetadata = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowDenommetadata = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupDenommetadata = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/denommetadata/types/expected_keeper.go b/x/denommetadata/types/expected_keeper.go index 5a1c67b3..04577e5c 100644 --- a/x/denommetadata/types/expected_keeper.go +++ b/x/denommetadata/types/expected_keeper.go @@ -2,12 +2,20 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/x/bank/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" + tmbytes "github.com/tendermint/tendermint/libs/bytes" ) // BankKeeper defines the expected interface needed to retrieve account balances. type BankKeeper interface { - GetDenomMetaData(ctx sdk.Context, denom string) (types.Metadata, bool) + GetDenomMetaData(ctx sdk.Context, denom string) (banktypes.Metadata, bool) HasDenomMetaData(ctx sdk.Context, denom string) bool - SetDenomMetaData(ctx sdk.Context, denomMetaData types.Metadata) + SetDenomMetaData(ctx sdk.Context, denomMetaData banktypes.Metadata) +} + +// TransferKeeper defines the expected interface needed to set denom trace. +type TransferKeeper interface { + HasDenomTrace(ctx sdk.Context, denomTraceHash tmbytes.HexBytes) bool + SetDenomTrace(ctx sdk.Context, denomTrace transfertypes.DenomTrace) } diff --git a/x/denommetadata/types/msg.go b/x/denommetadata/types/msg.go index 9294f2a9..df295c86 100644 --- a/x/denommetadata/types/msg.go +++ b/x/denommetadata/types/msg.go @@ -1,9 +1,11 @@ package types import ( + fmt "fmt" + errorsmod "cosmossdk.io/errors" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + transfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -21,11 +23,11 @@ const ( // NewMsgCreateDenomMetadata creates new instance of MsgCreateDenomMetadata func NewMsgCreateDenomMetadata( sender sdk.Address, - tokenMetadata banktypes.Metadata, + metadatas []DenomMetadata, ) *MsgCreateDenomMetadata { return &MsgCreateDenomMetadata{ SenderAddress: sender.String(), - TokenMetadata: tokenMetadata, + Metadatas: metadatas, } } @@ -37,15 +39,25 @@ func (msg MsgCreateDenomMetadata) Type() string { return TypeMsgCreateDenomMetad // ValidateBasic runs stateless checks on the message func (msg MsgCreateDenomMetadata) ValidateBasic() error { - // this also checks for empty addresses if _, err := sdk.AccAddressFromBech32(msg.SenderAddress); err != nil { return errorsmod.Wrapf(err, "invalid sender address: %s", err.Error()) } - err := msg.TokenMetadata.Validate() - if err != nil { - return err + for _, metadata := range msg.Metadatas { + err := metadata.TokenMetadata.Validate() + if err != nil { + return err + } + + denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace) + // If path is empty, then the denom is not ibc denom + if denomTrace.Path != "" { + denom := denomTrace.IBCDenom() + if denom != metadata.TokenMetadata.Base { + return fmt.Errorf("denom parse from denom trace does not match metadata base denom. base denom: %s, expected: %s", metadata.TokenMetadata.Base, denom) + } + } } return nil @@ -65,11 +77,11 @@ func (msg MsgCreateDenomMetadata) GetSigners() []sdk.AccAddress { // NewMsgCreateDenomMetadata creates new instance of MsgCreateDenomMetadata func NewMsgUpdateDenomMetadata( sender sdk.Address, - tokenMetadata banktypes.Metadata, + metadatas []DenomMetadata, ) *MsgUpdateDenomMetadata { return &MsgUpdateDenomMetadata{ SenderAddress: sender.String(), - TokenMetadata: tokenMetadata, + Metadatas: metadatas, } } @@ -81,15 +93,25 @@ func (msg MsgUpdateDenomMetadata) Type() string { return TypeMsgUpdateDenomMetad // ValidateBasic runs stateless checks on the message func (msg MsgUpdateDenomMetadata) ValidateBasic() error { - // this also checks for empty addresses if _, err := sdk.AccAddressFromBech32(msg.SenderAddress); err != nil { return errorsmod.Wrapf(err, "invalid sender address: %s", err.Error()) } - err := msg.TokenMetadata.Validate() - if err != nil { - return err + for _, metadata := range msg.Metadatas { + err := metadata.TokenMetadata.Validate() + if err != nil { + return err + } + + denomTrace := transfertypes.ParseDenomTrace(metadata.DenomTrace) + // If path is empty, then the denom is not ibc denom + if denomTrace.Path != "" { + denom := denomTrace.IBCDenom() + if denom != metadata.TokenMetadata.Base { + return fmt.Errorf("denom parse from denom trace does not match metadata base denom. base denom: %s, expected: %s", metadata.TokenMetadata.Base, denom) + } + } } return nil diff --git a/x/denommetadata/types/query.pb.go b/x/denommetadata/types/query.pb.go index f0514bdd..77fd4b94 100644 --- a/x/denommetadata/types/query.pb.go +++ b/x/denommetadata/types/query.pb.go @@ -112,7 +112,8 @@ func (m *QueryParamsResponse) GetParams() Params { return Params{} } -// QueryGetIBCDenomByDenomTraceRequest is the request type for the Query/IBCDenomByDenomTrace RPC method. +// QueryGetIBCDenomByDenomTraceRequest is the request type for the +// Query/IBCDenomByDenomTrace RPC method. type QueryGetIBCDenomByDenomTraceRequest struct { // denom trace of a denom DenomTrace string `protobuf:"bytes,1,opt,name=denom_trace,json=denomTrace,proto3" json:"denom_trace,omitempty"` @@ -158,7 +159,8 @@ func (m *QueryGetIBCDenomByDenomTraceRequest) GetDenomTrace() string { return "" } -// QueryIBCDenomByDenomTraceResponse is the response type for the Query/IBCDenomByDenomTrace RPC method. +// QueryIBCDenomByDenomTraceResponse is the response type for the +// Query/IBCDenomByDenomTrace RPC method. type QueryIBCDenomByDenomTraceResponse struct { // ibc denom base on denom trace IbcDenom string `protobuf:"bytes,1,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` diff --git a/x/denommetadata/types/tx.pb.go b/x/denommetadata/types/tx.pb.go index c98dac24..749f8537 100644 --- a/x/denommetadata/types/tx.pb.go +++ b/x/denommetadata/types/tx.pb.go @@ -6,7 +6,6 @@ package types import ( context "context" fmt "fmt" - types "github.com/cosmos/cosmos-sdk/x/bank/types" _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" @@ -32,8 +31,8 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // MsgCreateDenomMetadata defines a message that create the denom metadata. type MsgCreateDenomMetadata struct { // sender_address is the bech32 address of message sender. - SenderAddress string `protobuf:"bytes,1,opt,name=sender_address,json=senderAddress,proto3" json:"sender_address,omitempty"` - TokenMetadata types.Metadata `protobuf:"bytes,2,opt,name=token_metadata,json=tokenMetadata,proto3" json:"token_metadata"` + SenderAddress string `protobuf:"bytes,1,opt,name=sender_address,json=senderAddress,proto3" json:"sender_address,omitempty"` + Metadatas []DenomMetadata `protobuf:"bytes,2,rep,name=metadatas,proto3" json:"metadatas"` } func (m *MsgCreateDenomMetadata) Reset() { *m = MsgCreateDenomMetadata{} } @@ -76,11 +75,11 @@ func (m *MsgCreateDenomMetadata) GetSenderAddress() string { return "" } -func (m *MsgCreateDenomMetadata) GetTokenMetadata() types.Metadata { +func (m *MsgCreateDenomMetadata) GetMetadatas() []DenomMetadata { if m != nil { - return m.TokenMetadata + return m.Metadatas } - return types.Metadata{} + return nil } // MsgCreateDenomMetadataResponse defines the MsgCreateDenomMetadata response @@ -124,8 +123,8 @@ var xxx_messageInfo_MsgCreateDenomMetadataResponse proto.InternalMessageInfo // MsgDistributeTokens defines a message that update the denom metadata. type MsgUpdateDenomMetadata struct { // sender_address is the bech32 address of message sender. - SenderAddress string `protobuf:"bytes,1,opt,name=sender_address,json=senderAddress,proto3" json:"sender_address,omitempty"` - TokenMetadata types.Metadata `protobuf:"bytes,2,opt,name=token_metadata,json=tokenMetadata,proto3" json:"token_metadata"` + SenderAddress string `protobuf:"bytes,1,opt,name=sender_address,json=senderAddress,proto3" json:"sender_address,omitempty"` + Metadatas []DenomMetadata `protobuf:"bytes,2,rep,name=metadatas,proto3" json:"metadatas"` } func (m *MsgUpdateDenomMetadata) Reset() { *m = MsgUpdateDenomMetadata{} } @@ -168,11 +167,11 @@ func (m *MsgUpdateDenomMetadata) GetSenderAddress() string { return "" } -func (m *MsgUpdateDenomMetadata) GetTokenMetadata() types.Metadata { +func (m *MsgUpdateDenomMetadata) GetMetadatas() []DenomMetadata { if m != nil { - return m.TokenMetadata + return m.Metadatas } - return types.Metadata{} + return nil } // MsgUpdateDenomMetadataResponse defines the MsgUpdateDenomMetadata response @@ -223,29 +222,27 @@ func init() { func init() { proto.RegisterFile("denommetadata/tx.proto", fileDescriptor_a5bb4e1c9698e3b7) } var fileDescriptor_a5bb4e1c9698e3b7 = []byte{ - // 346 bytes of a gzipped FileDescriptorProto + // 314 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0x49, 0xcd, 0xcb, 0xcf, 0xcd, 0x4d, 0x2d, 0x49, 0x4c, 0x49, 0x2c, 0x49, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x2e, 0xca, 0xcf, 0xc9, 0x49, 0x2c, 0x28, 0xd0, 0x43, 0x91, 0xd7, 0x2b, 0xa9, 0x2c, 0x48, 0x2d, 0x96, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xab, 0xd3, 0x07, 0xb1, 0x20, - 0x5a, 0xa4, 0xe4, 0x92, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0xf5, 0x93, 0x12, 0xf3, 0xb2, 0xf5, 0xcb, - 0x0c, 0x93, 0x52, 0x4b, 0x12, 0x0d, 0xc1, 0x1c, 0x88, 0xbc, 0x52, 0x37, 0x23, 0x97, 0x98, 0x6f, - 0x71, 0xba, 0x73, 0x51, 0x6a, 0x62, 0x49, 0xaa, 0x0b, 0xc8, 0x58, 0x5f, 0xa8, 0xb1, 0x42, 0xaa, - 0x5c, 0x7c, 0xc5, 0xa9, 0x79, 0x29, 0xa9, 0x45, 0xf1, 0x89, 0x29, 0x29, 0x45, 0xa9, 0xc5, 0xc5, - 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0xbc, 0x10, 0x51, 0x47, 0x88, 0xa0, 0x90, 0x17, 0x17, - 0x5f, 0x49, 0x7e, 0x76, 0x6a, 0x5e, 0x3c, 0xcc, 0x3d, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xdc, 0x46, - 0xb2, 0x7a, 0x10, 0xab, 0xf5, 0xc0, 0xb6, 0x41, 0xad, 0xd6, 0x83, 0x99, 0xee, 0xc4, 0x72, 0xe2, - 0x9e, 0x3c, 0x43, 0x10, 0x2f, 0x58, 0x2b, 0x4c, 0x50, 0x49, 0x81, 0x4b, 0x0e, 0xbb, 0x63, 0x82, - 0x52, 0x8b, 0x0b, 0xf2, 0xf3, 0x8a, 0x53, 0x61, 0xee, 0x0d, 0x2d, 0x48, 0x19, 0x3c, 0xee, 0xc5, - 0xe2, 0x18, 0x98, 0x7b, 0x8d, 0xe6, 0x32, 0x71, 0x31, 0xfb, 0x16, 0xa7, 0x0b, 0x75, 0x32, 0x72, - 0x09, 0x63, 0x0b, 0x64, 0x63, 0x3d, 0x3c, 0x71, 0xaa, 0x87, 0x3d, 0x30, 0xa4, 0xac, 0xc9, 0xd0, - 0x04, 0x0f, 0x41, 0x06, 0xb0, 0x5b, 0xb0, 0x05, 0x20, 0x41, 0xb7, 0x60, 0xd1, 0x44, 0xd8, 0x2d, - 0x78, 0x42, 0x47, 0x89, 0xc1, 0x29, 0xf4, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, - 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, - 0xa2, 0xac, 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x53, 0x2a, 0x73, - 0x53, 0xf3, 0x8a, 0x33, 0xf3, 0xf3, 0x2a, 0x2a, 0xab, 0x10, 0x1c, 0xdd, 0xa2, 0x94, 0x6c, 0xfd, - 0x0a, 0x7d, 0xb4, 0xcc, 0x02, 0xb2, 0x37, 0x89, 0x0d, 0x9c, 0xba, 0x8d, 0x01, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x7c, 0x60, 0xfc, 0x1f, 0x4a, 0x03, 0x00, 0x00, + 0x5a, 0xa4, 0x14, 0x51, 0x8d, 0x42, 0xd5, 0x08, 0x56, 0xa2, 0xd4, 0xcf, 0xc8, 0x25, 0xe6, 0x5b, + 0x9c, 0xee, 0x5c, 0x94, 0x9a, 0x58, 0x92, 0xea, 0x02, 0x52, 0xe0, 0x0b, 0x55, 0x20, 0xa4, 0xca, + 0xc5, 0x57, 0x9c, 0x9a, 0x97, 0x92, 0x5a, 0x14, 0x9f, 0x98, 0x92, 0x52, 0x94, 0x5a, 0x5c, 0x2c, + 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x0b, 0x11, 0x75, 0x84, 0x08, 0x0a, 0xf9, 0x71, 0x71, + 0xc2, 0xcc, 0x2c, 0x96, 0x60, 0x52, 0x60, 0xd6, 0xe0, 0x36, 0xd2, 0xd2, 0xc3, 0xe3, 0x56, 0x3d, + 0x14, 0x5b, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x42, 0x18, 0xa1, 0xa4, 0xc0, 0x25, 0x87, + 0xdd, 0x41, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x30, 0x37, 0x87, 0x16, 0xa4, 0x0c, + 0x2e, 0x37, 0x63, 0x71, 0x10, 0xcc, 0xcd, 0x46, 0x73, 0x99, 0xb8, 0x98, 0x7d, 0x8b, 0xd3, 0x85, + 0x3a, 0x19, 0xb9, 0x84, 0xb1, 0x05, 0xb6, 0x31, 0x5e, 0xeb, 0xb1, 0x07, 0x88, 0x94, 0x35, 0x19, + 0x9a, 0xe0, 0xa1, 0xc8, 0x00, 0x76, 0x0b, 0xb6, 0x40, 0x24, 0xe8, 0x16, 0x2c, 0x9a, 0x08, 0xbb, + 0x05, 0x4f, 0xe8, 0x28, 0x31, 0x38, 0x85, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, + 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, + 0x43, 0x94, 0x75, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x4a, 0x65, + 0x6e, 0x6a, 0x5e, 0x71, 0x66, 0x7e, 0x5e, 0x45, 0x65, 0x15, 0x82, 0xa3, 0x5b, 0x94, 0x92, 0xad, + 0x5f, 0xa1, 0x8f, 0x96, 0x6f, 0x40, 0xf6, 0x26, 0xb1, 0x81, 0x53, 0xb9, 0x31, 0x20, 0x00, 0x00, + 0xff, 0xff, 0xae, 0xa3, 0x20, 0x5f, 0x55, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -384,16 +381,20 @@ func (m *MsgCreateDenomMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - { - size, err := m.TokenMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.Metadatas) > 0 { + for iNdEx := len(m.Metadatas) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metadatas[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0x12 if len(m.SenderAddress) > 0 { i -= len(m.SenderAddress) copy(dAtA[i:], m.SenderAddress) @@ -447,16 +448,20 @@ func (m *MsgUpdateDenomMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - { - size, err := m.TokenMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.Metadatas) > 0 { + for iNdEx := len(m.Metadatas) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metadatas[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0x12 if len(m.SenderAddress) > 0 { i -= len(m.SenderAddress) copy(dAtA[i:], m.SenderAddress) @@ -511,8 +516,12 @@ func (m *MsgCreateDenomMetadata) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = m.TokenMetadata.Size() - n += 1 + l + sovTx(uint64(l)) + if len(m.Metadatas) > 0 { + for _, e := range m.Metadatas { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -535,8 +544,12 @@ func (m *MsgUpdateDenomMetadata) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = m.TokenMetadata.Size() - n += 1 + l + sovTx(uint64(l)) + if len(m.Metadatas) > 0 { + for _, e := range m.Metadatas { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } return n } @@ -618,7 +631,7 @@ func (m *MsgCreateDenomMetadata) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadatas", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -645,7 +658,8 @@ func (m *MsgCreateDenomMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.TokenMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Metadatas = append(m.Metadatas, DenomMetadata{}) + if err := m.Metadatas[len(m.Metadatas)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -783,7 +797,7 @@ func (m *MsgUpdateDenomMetadata) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Metadatas", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -810,7 +824,8 @@ func (m *MsgUpdateDenomMetadata) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.TokenMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Metadatas = append(m.Metadatas, DenomMetadata{}) + if err := m.Metadatas[len(m.Metadatas)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/dist/keeper/allocation_test.go b/x/dist/keeper/allocation_test.go index 8ee2db44..151a8109 100644 --- a/x/dist/keeper/allocation_test.go +++ b/x/dist/keeper/allocation_test.go @@ -33,9 +33,9 @@ var ( totalFeesDec = sdk.NewDecFromInt(totalFees) ) -//TODO: Test multiple sequencers, each propose a block +// TODO: Test multiple sequencers, each propose a block -//TODO: test staker which is the proposer as well +// TODO: test staker which is the proposer as well /* -------------------------------------------------------------------------- */ /* utils */ @@ -122,13 +122,13 @@ func TestAllocateTokensValidatorsNoProposer(t *testing.T) { require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: val2Coins}}, app.DistrKeeper.GetValidatorOutstandingRewards(ctx, valAddrs[1]).Rewards) // Check commissions and delegator rewards val1 - //val1 has 50% commission + // val1 has 50% commission val1Commission := val1Coins.Mul(sdk.MustNewDecFromStr(fmt.Sprintf("%f", 0.5))) require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: val1Commission}}, app.DistrKeeper.GetValidatorAccumulatedCommission(ctx, valAddrs[0]).Commission) require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: val1Coins.Sub(val1Commission)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[0]).Rewards) // Check commissions and delegator rewards val2 - //val2 has 10% commission + // val2 has 10% commission val2Commission := val2Coins.Mul(sdk.MustNewDecFromStr(fmt.Sprintf("%f", 0.1))) require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: val2Commission}}, app.DistrKeeper.GetValidatorAccumulatedCommission(ctx, valAddrs[1]).Commission) require.Equal(t, sdk.DecCoins{{Denom: sdk.DefaultBondDenom, Amount: val2Coins.Sub(val2Commission)}}, app.DistrKeeper.GetValidatorCurrentRewards(ctx, valAddrs[1]).Rewards) diff --git a/x/dist/keeper/proposal_handler.go b/x/dist/keeper/proposal_handler.go index e14a49ca..3856d9fa 100644 --- a/x/dist/keeper/proposal_handler.go +++ b/x/dist/keeper/proposal_handler.go @@ -16,7 +16,6 @@ func HandleCommunityPoolSpendProposal(ctx sdk.Context, k Keeper, p *types.Commun if k.bankKeeper.BlockedAddr(recipient) { return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "not allowed to receive external funds: recipient: %s", p.Recipient) - } err := k.DistributeFromFeePool(ctx, p.Amount, recipient) diff --git a/x/epochs/keeper/genesis_test.go b/x/epochs/keeper/genesis_test.go index fa16addf..177eb103 100644 --- a/x/epochs/keeper/genesis_test.go +++ b/x/epochs/keeper/genesis_test.go @@ -20,5 +20,4 @@ func TestEpochsInitAndExportGenesis(t *testing.T) { require.Len(t, genesis.Epochs, 5) nullify.Fill(&genesis) nullify.Fill(genesis) - } diff --git a/x/hub-genesis/keeper/msg_server_test.go b/x/hub-genesis/keeper/msg_server_test.go index 845de0d0..cc7b4bd5 100644 --- a/x/hub-genesis/keeper/msg_server_test.go +++ b/x/hub-genesis/keeper/msg_server_test.go @@ -159,7 +159,7 @@ func (suite *HubGenesisMsgServerTestSuite) TestTriggerGenesisEvent() { expErr: types.ErrLockingGenesisTokens, }, - //TODO: add test of not enough tokens + // TODO: add test of not enough tokens } for _, tc := range cases { diff --git a/x/hub-genesis/module.go b/x/hub-genesis/module.go index f6638ee1..ef149e2e 100644 --- a/x/hub-genesis/module.go +++ b/x/hub-genesis/module.go @@ -73,7 +73,6 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingCo // RegisterRESTRoutes registers the REST routes for the hub-genesis module. func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { - } // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the hub-genesis module. diff --git a/x/hub-genesis/types/codec.go b/x/hub-genesis/types/codec.go index 10151db1..c5ea6e39 100644 --- a/x/hub-genesis/types/codec.go +++ b/x/hub-genesis/types/codec.go @@ -15,7 +15,6 @@ func RegisterCodec(cdc *codec.LegacyAmino) { func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgHubGenesisEvent{}) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) - } func init() { diff --git a/x/hub-genesis/types/params.go b/x/hub-genesis/types/params.go index 5608be01..50064780 100644 --- a/x/hub-genesis/types/params.go +++ b/x/hub-genesis/types/params.go @@ -10,10 +10,8 @@ import ( var _ paramtypes.ParamSet = (*Params)(nil) -var ( - // GenesisTriggererAllowlist is store's key for GenesisTriggererAllowlist Params - KeyGenesisTriggererAllowlist = []byte("GenesisTriggererAllowlist") -) +// GenesisTriggererAllowlist is store's key for GenesisTriggererAllowlist Params +var KeyGenesisTriggererAllowlist = []byte("GenesisTriggererAllowlist") // ParamTable for hub_genesis module. func ParamKeyTable() paramtypes.KeyTable { diff --git a/x/mint/keeper/hooks_test.go b/x/mint/keeper/hooks_test.go index e3eeb8e2..b0c84a07 100644 --- a/x/mint/keeper/hooks_test.go +++ b/x/mint/keeper/hooks_test.go @@ -25,9 +25,7 @@ const ( defaultBalanceAmt = int64(1000000000) ) -var ( - defaultReductionFactor = sdk.NewDec(2).Quo(sdk.NewDec(3)) -) +var defaultReductionFactor = sdk.NewDec(2).Quo(sdk.NewDec(3)) type MintKeeperTestSuite struct { suite.Suite diff --git a/x/mint/keeper/inflation_test.go b/x/mint/keeper/inflation_test.go index b88eb611..ef8b9b09 100644 --- a/x/mint/keeper/inflation_test.go +++ b/x/mint/keeper/inflation_test.go @@ -36,7 +36,7 @@ func TestInflationChangeTCs(t *testing.T) { { name: "Test Decrease - Max", currentInflationRate: sdk.NewDecWithPrec(6, 2), // 6% - inflationRateChange: sdk.NewDecWithPrec(15, 2), //1.5% + inflationRateChange: sdk.NewDecWithPrec(15, 2), // 1.5% expectedInflation: targetInflationRate, // 5% }, { diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go index 94fe91d8..df7c9f90 100644 --- a/x/mint/keeper/keeper.go +++ b/x/mint/keeper/keeper.go @@ -99,8 +99,8 @@ func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { // SetParams sets the total set of minting parameters. func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { - //validate existing correct epoch identifiers. - //this is the only place where we have access to the epoch keeper when changing params + // validate existing correct epoch identifiers. + // this is the only place where we have access to the epoch keeper when changing params _, ok := k.epochKeeper.GetEpochInfo(ctx, params.MintEpochIdentifier) if !ok { diff --git a/x/mint/keeper/mint.go b/x/mint/keeper/mint.go index 8b26625f..f2274c6d 100644 --- a/x/mint/keeper/mint.go +++ b/x/mint/keeper/mint.go @@ -10,7 +10,7 @@ func (k Keeper) HandleMintingEpoch(ctx sdk.Context) (sdk.Coins, error) { var mintedCoins sdk.Coins params := k.GetParams(ctx) - //calculate coins + // calculate coins total := k.bankKeeper.GetSupply(ctx, params.MintDenom) mintAmount := k.CalcMintedCoins(ctx, total.Amount) if mintAmount.IsZero() { diff --git a/x/mint/keeper/mint_test.go b/x/mint/keeper/mint_test.go index 25d9c18d..1bd0999f 100644 --- a/x/mint/keeper/mint_test.go +++ b/x/mint/keeper/mint_test.go @@ -39,7 +39,7 @@ func TestMinting(t *testing.T) { initialBalance := app.BankKeeper.GetBalance(ctx, recipientAcc, params.MintDenom) require.True(t, initialBalance.IsZero()) - //mint supply + // mint supply err := app.BankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(totalSupplyCoin)) require.NoError(t, err) @@ -61,10 +61,9 @@ func TestMinting(t *testing.T) { assert.True(t, newSupply.IsEqual(totalSupplyCoin.Add(mintedCoin))) } -//TODO: test start time - +// TODO: test start time func TestCalcMintedCoins(t *testing.T) { - var DymDecimals = sdk.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)) + DymDecimals := sdk.NewIntFromBigInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)) testCases := []struct { name string @@ -101,7 +100,6 @@ func TestCalcMintedCoins(t *testing.T) { require.False(t, mintedCoins.IsZero()) assert.Equal(t, tc.expectedAmount, mintedCoins.TruncateInt()) }) - } } @@ -146,6 +144,5 @@ func TestDifferentMintEpochs(t *testing.T) { require.False(t, mintedCoins.IsZero()) assert.Equal(t, tc.expectedAmount, mintedCoins.TruncateInt()) }) - } } diff --git a/x/sequencers/client/cli/query.go b/x/sequencers/client/cli/query.go index d49b65b7..72e73610 100644 --- a/x/sequencers/client/cli/query.go +++ b/x/sequencers/client/cli/query.go @@ -25,7 +25,7 @@ func GetQueryCmd() *cobra.Command { cmd.AddCommand(CmdQuerySequencers()) cmd.AddCommand(CmdQuerySequencer()) - //TODO: + // TODO: // cmd.AddCommand(CmdQueryHistoricalInfo()) // Add queries for specific sequencer (num of blocks, rewards, etc..) diff --git a/x/sequencers/keeper/grpc_query_test.go b/x/sequencers/keeper/grpc_query_test.go index e802d5a1..dbce577c 100644 --- a/x/sequencers/keeper/grpc_query_test.go +++ b/x/sequencers/keeper/grpc_query_test.go @@ -12,7 +12,6 @@ import ( ) func TestParamsQuery(t *testing.T) { - app := utils.Setup(t, false) k, ctx := testkeepers.NewTestSequencerKeeperFromApp(app) diff --git a/x/sequencers/keeper/params.go b/x/sequencers/keeper/params.go index 04dfcafc..14229308 100644 --- a/x/sequencers/keeper/params.go +++ b/x/sequencers/keeper/params.go @@ -1,10 +1,10 @@ package keeper import ( + "time" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/dymensionxyz/dymension-rdk/x/sequencers/types" - - "time" ) // GetParams returns the total set of sequencers parameters. diff --git a/x/sequencers/module.go b/x/sequencers/module.go index eb27588e..4c35e6a8 100644 --- a/x/sequencers/module.go +++ b/x/sequencers/module.go @@ -43,6 +43,7 @@ func (AppModuleBasic) Name() string { func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { types.RegisterCodec(cdc) } + func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { types.RegisterInterfaces(reg) } diff --git a/x/sequencers/module_simulation.go b/x/sequencers/module_simulation.go index 13239d4a..0722ec7b 100644 --- a/x/sequencers/module_simulation.go +++ b/x/sequencers/module_simulation.go @@ -44,7 +44,6 @@ func (AppModule) ProposalContents(_ module.SimulationState) []simtypes.WeightedP // RandomizedParams creates randomized param changes for the simulator func (am AppModule) RandomizedParams(_ *rand.Rand) []simtypes.ParamChange { - return []simtypes.ParamChange{} }