Skip to content

Commit

Permalink
feat(denommetadata): Add support for providing denom-trace and creati…
Browse files Browse the repository at this point in the history
…on of multiple denom-metadatas (#384)
  • Loading branch information
trinitys7 authored Apr 19, 2024
1 parent 48ce6b2 commit c720640
Show file tree
Hide file tree
Showing 36 changed files with 745 additions and 223 deletions.
14 changes: 14 additions & 0 deletions proto/denommetadata/denommetadata.proto
Original file line number Diff line number Diff line change
@@ -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;
}
15 changes: 9 additions & 6 deletions proto/denommetadata/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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;
Expand Down
8 changes: 3 additions & 5 deletions proto/denommetadata/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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";

Expand All @@ -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
Expand All @@ -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
Expand Down
1 change: 0 additions & 1 deletion server/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
56 changes: 27 additions & 29 deletions testutil/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -248,7 +246,6 @@ func NewRollapp(
appOpts servertypes.AppOptions,
baseAppOptions ...func(*baseapp.BaseApp),
) *App {

appCodec := encodingConfig.Codec
cdc := encodingConfig.Amino
interfaceRegistry := encodingConfig.InterfaceRegistry
Expand Down Expand Up @@ -312,7 +309,7 @@ func NewRollapp(
app.GetSubspace(authtypes.ModuleName),
authtypes.ProtoBaseAccount,
maccPerms,
sdk.Bech32PrefixAccAddr, //Bech32MainPrefix
sdk.Bech32PrefixAccAddr, // Bech32MainPrefix
)

app.BankKeeper = bankkeeper.NewBaseKeeper(
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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],
Expand Down Expand Up @@ -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...)
Expand Down Expand Up @@ -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())
Expand Down
18 changes: 18 additions & 0 deletions utils/cmd_utils.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package utils

import (
"encoding/json"
"io"
"os"
"os/signal"
Expand Down Expand Up @@ -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
}
7 changes: 4 additions & 3 deletions utils/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{},
}
Expand All @@ -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 {
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions utils/logger/logger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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": ""
}
]
37 changes: 5 additions & 32 deletions x/denommetadata/client/cli/tx.go
Original file line number Diff line number Diff line change
@@ -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"
)

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
Loading

0 comments on commit c720640

Please sign in to comment.