From ad226c6aedb9c0f6ccdec8f13e146bffb7733219 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 00:39:27 +0700 Subject: [PATCH 01/13] change DenomTrace grpc --- docs/client/swagger-ui/swagger.yaml | 4 ++- docs/ibc/proto-docs.md | 2 +- modules/apps/transfer/client/cli/query.go | 10 +++--- modules/apps/transfer/keeper/grpc_query.go | 13 ++++++-- .../apps/transfer/keeper/grpc_query_test.go | 31 +++++++++++++------ modules/apps/transfer/types/query.pb.go | 2 +- .../ibc/applications/transfer/v1/query.proto | 2 +- 7 files changed, 44 insertions(+), 20 deletions(-) diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml index 5feb43dd2a5..46ed1f188b8 100644 --- a/docs/client/swagger-ui/swagger.yaml +++ b/docs/client/swagger-ui/swagger.yaml @@ -235,7 +235,9 @@ paths: format: byte parameters: - name: hash - description: hash (in hex format) of the denomination trace information. + description: >- + hash (in hex format) or denom (full denom with ibc prefix) of the + denomination trace information. in: path required: true type: string diff --git a/docs/ibc/proto-docs.md b/docs/ibc/proto-docs.md index 799ad8243ec..41b20e7abe1 100644 --- a/docs/ibc/proto-docs.md +++ b/docs/ibc/proto-docs.md @@ -1863,7 +1863,7 @@ method | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| `hash` | [string](#string) | | hash (in hex format) of the denomination trace information. | +| `hash` | [string](#string) | | hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information. | diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index 3239b154377..5f2cb2bf64a 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -11,13 +11,13 @@ import ( "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" ) -// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given hash. +// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given denom. func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ - Use: "denom-trace [hash]", - Short: "Query the denom trace info from a given trace hash", - Long: "Query the denom trace info from a given trace hash", - Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash]", version.AppName), + Use: "denom-trace [hash/denom]", + Short: "Query the denom trace info from a denom or a hash", + Long: "Query the denom trace info from a denom or a hash", + Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash/denom]", version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientQueryContext(cmd) diff --git a/modules/apps/transfer/keeper/grpc_query.go b/modules/apps/transfer/keeper/grpc_query.go index e0b16c6a761..9c367b7c05a 100644 --- a/modules/apps/transfer/keeper/grpc_query.go +++ b/modules/apps/transfer/keeper/grpc_query.go @@ -3,11 +3,13 @@ package keeper import ( "context" "fmt" + "strings" "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" + tmbytes "github.com/tendermint/tendermint/libs/bytes" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -22,9 +24,16 @@ func (q Keeper) DenomTrace(c context.Context, req *types.QueryDenomTraceRequest) return nil, status.Error(codes.InvalidArgument, "empty request") } - hash, err := types.ParseHexHash(req.Hash) + var hash tmbytes.HexBytes + var err error + if strings.HasPrefix(req.Hash, "ibc/") { + hash, err = types.ParseHexHash(req.Hash[4:]) + } else { + hash, err = types.ParseHexHash(req.Hash) + } + if err != nil { - return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid denom trace hash %s, %s", req.Hash, err)) + return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid denom trace hash: %s, error: %s", hash.String(), err)) } ctx := sdk.UnwrapSDKContext(c) diff --git a/modules/apps/transfer/keeper/grpc_query_test.go b/modules/apps/transfer/keeper/grpc_query_test.go index 34563447b5f..7c30320999e 100644 --- a/modules/apps/transfer/keeper/grpc_query_test.go +++ b/modules/apps/transfer/keeper/grpc_query_test.go @@ -21,37 +21,50 @@ func (suite *KeeperTestSuite) TestQueryDenomTrace() { expPass bool }{ { - "invalid hex hash", + "success: correct ibc denom", func() { + expTrace.Path = "transfer/channelToA/transfer/channelToB" + expTrace.BaseDenom = "uatom" + suite.chainA.GetSimApp().TransferKeeper.SetDenomTrace(suite.chainA.GetContext(), expTrace) + req = &types.QueryDenomTraceRequest{ - Hash: "!@#!@#!", + Hash: expTrace.IBCDenom(), } }, - false, + true, }, { - "not found denom trace", + "success: correct hash", func() { expTrace.Path = "transfer/channelToA/transfer/channelToB" expTrace.BaseDenom = "uatom" + suite.chainA.GetSimApp().TransferKeeper.SetDenomTrace(suite.chainA.GetContext(), expTrace) + req = &types.QueryDenomTraceRequest{ Hash: expTrace.Hash().String(), } }, + true, + }, + { + "false: invalid hash", + func() { + req = &types.QueryDenomTraceRequest{ + Hash: "!@#!@#!", + } + }, false, }, { - "success", + "false: not found denom trace", func() { expTrace.Path = "transfer/channelToA/transfer/channelToB" expTrace.BaseDenom = "uatom" - suite.chainA.GetSimApp().TransferKeeper.SetDenomTrace(suite.chainA.GetContext(), expTrace) - req = &types.QueryDenomTraceRequest{ - Hash: expTrace.Hash().String(), + Hash: expTrace.IBCDenom(), } }, - true, + false, }, } diff --git a/modules/apps/transfer/types/query.pb.go b/modules/apps/transfer/types/query.pb.go index 024da758162..e1206ab0e30 100644 --- a/modules/apps/transfer/types/query.pb.go +++ b/modules/apps/transfer/types/query.pb.go @@ -33,7 +33,7 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC // method type QueryDenomTraceRequest struct { - // hash (in hex format) of the denomination trace information. + // hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information. Hash string `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"` } diff --git a/proto/ibc/applications/transfer/v1/query.proto b/proto/ibc/applications/transfer/v1/query.proto index 2ed28049fd7..8491c52139b 100644 --- a/proto/ibc/applications/transfer/v1/query.proto +++ b/proto/ibc/applications/transfer/v1/query.proto @@ -35,7 +35,7 @@ service Query { // QueryDenomTraceRequest is the request type for the Query/DenomTrace RPC // method message QueryDenomTraceRequest { - // hash (in hex format) of the denomination trace information. + // hash (in hex format) or denom (full denom with ibc prefix) of the denomination trace information. string hash = 1; } From ee4b6a4f46202025c28e168515d970edcf2340a8 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:32:20 +0700 Subject: [PATCH 02/13] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65274b8fa95..b3bf5317cb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements +* (transfer) [\#1342](https://github.com/cosmos/ibc-go/pull/1342) `DenomTrace` grpc now takes in either an `ibc denom` or a `hash` instead of only accepting a `hash` as input like before. * (modules/core/keeper) [\#1284](https://github.com/cosmos/ibc-go/pull/1284) Add sanity check for the keepers passed into `ibckeeper.NewKeeper`. `ibckeeper.NewKeeper` now panics if any of the keepers passed in is empty. * (middleware) [\#1022](https://github.com/cosmos/ibc-go/pull/1022) Add `GetAppVersion` to the ICS4Wrapper interface. This function should be used by IBC applications to obtain their own version since the version set in the channel structure may be wrapped many times by middleware. * (modules/core/04-channel) [\#1160](https://github.com/cosmos/ibc-go/pull/1160) Improve `uint64 -> string` performance in `Logger`. From 96d71da8f802247e4609c2ed2f4c8b881d68c6e8 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:34:29 +0700 Subject: [PATCH 03/13] minor --- modules/apps/transfer/client/cli/query.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index 5f2cb2bf64a..e394c119d5a 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" ) -// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given denom. +// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given hash or denom. func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ Use: "denom-trace [hash/denom]", From 43af0128308ec02e2fde31832231f5526b3f9632 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:36:11 +0700 Subject: [PATCH 04/13] minor --- modules/apps/transfer/client/cli/query.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index e394c119d5a..52f147031ae 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -15,8 +15,8 @@ import ( func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ Use: "denom-trace [hash/denom]", - Short: "Query the denom trace info from a denom or a hash", - Long: "Query the denom trace info from a denom or a hash", + Short: "Query the denom trace info from a hash or a denom", + Long: "Query the denom trace info from a hash or a denom", Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash/denom]", version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { From 789f5415e78848ac979835b763191fdd744ac073 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:37:33 +0700 Subject: [PATCH 05/13] minor --- modules/apps/transfer/client/cli/query.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index 52f147031ae..e25bdc52eba 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -11,12 +11,12 @@ import ( "github.com/cosmos/ibc-go/v3/modules/apps/transfer/types" ) -// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given hash or denom. +// GetCmdQueryDenomTrace defines the command to query a a denomination trace from a given trace hash or ibc denom. func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ Use: "denom-trace [hash/denom]", - Short: "Query the denom trace info from a hash or a denom", - Long: "Query the denom trace info from a hash or a denom", + Short: "Query the denom trace info from a trace hash or a ibc denom", + Long: "Query the denom trace info from a trace hash or a ibc denom", Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash/denom]", version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { From 8e3fa5e82d835a200a7f80a1eb3c449332486caf Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:40:07 +0700 Subject: [PATCH 06/13] minor --- modules/apps/transfer/keeper/grpc_query_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/transfer/keeper/grpc_query_test.go b/modules/apps/transfer/keeper/grpc_query_test.go index 7c30320999e..d5691154b45 100644 --- a/modules/apps/transfer/keeper/grpc_query_test.go +++ b/modules/apps/transfer/keeper/grpc_query_test.go @@ -34,7 +34,7 @@ func (suite *KeeperTestSuite) TestQueryDenomTrace() { true, }, { - "success: correct hash", + "success: correct hex hash", func() { expTrace.Path = "transfer/channelToA/transfer/channelToB" expTrace.BaseDenom = "uatom" From e7c3645de9053cdbb0de670e4bc7b4ba073bf72b Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:43:08 +0700 Subject: [PATCH 07/13] minor --- modules/apps/transfer/client/cli/query.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index e25bdc52eba..a1e38b7aede 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -15,8 +15,8 @@ import ( func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ Use: "denom-trace [hash/denom]", - Short: "Query the denom trace info from a trace hash or a ibc denom", - Long: "Query the denom trace info from a trace hash or a ibc denom", + Short: "Query the denom trace info from a trace hash or an ibc denom", + Long: "Query the denom trace info from a trace hash or an ibc denom", Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash/denom]", version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { From 7748111002eae7dc99ef616e7e21e556f95399e5 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Fri, 6 May 2022 02:44:59 +0700 Subject: [PATCH 08/13] minor --- modules/apps/transfer/client/cli/query.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/transfer/client/cli/query.go b/modules/apps/transfer/client/cli/query.go index a1e38b7aede..5eb1a1a0c9b 100644 --- a/modules/apps/transfer/client/cli/query.go +++ b/modules/apps/transfer/client/cli/query.go @@ -15,8 +15,8 @@ import ( func GetCmdQueryDenomTrace() *cobra.Command { cmd := &cobra.Command{ Use: "denom-trace [hash/denom]", - Short: "Query the denom trace info from a trace hash or an ibc denom", - Long: "Query the denom trace info from a trace hash or an ibc denom", + Short: "Query the denom trace info from a given trace hash or ibc denom", + Long: "Query the denom trace info from a given trace hash or ibc denom", Example: fmt.Sprintf("%s query ibc-transfer denom-trace [hash/denom]", version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { From 2465752a31efc572c70266a6e413eb57492d3da2 Mon Sep 17 00:00:00 2001 From: khanh <50263489+catShaark@users.noreply.github.com> Date: Fri, 6 May 2022 16:16:59 +0700 Subject: [PATCH 09/13] Update modules/apps/transfer/keeper/grpc_query_test.go Co-authored-by: Carlos Rodriguez --- modules/apps/transfer/keeper/grpc_query_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/transfer/keeper/grpc_query_test.go b/modules/apps/transfer/keeper/grpc_query_test.go index d5691154b45..4b4b4a26478 100644 --- a/modules/apps/transfer/keeper/grpc_query_test.go +++ b/modules/apps/transfer/keeper/grpc_query_test.go @@ -56,7 +56,7 @@ func (suite *KeeperTestSuite) TestQueryDenomTrace() { false, }, { - "false: not found denom trace", + "failure: not found denom trace", func() { expTrace.Path = "transfer/channelToA/transfer/channelToB" expTrace.BaseDenom = "uatom" From f5e99e15bbc1cf666d02ecf1ce505433edee94d3 Mon Sep 17 00:00:00 2001 From: khanh <50263489+catShaark@users.noreply.github.com> Date: Fri, 6 May 2022 16:17:08 +0700 Subject: [PATCH 10/13] Update modules/apps/transfer/keeper/grpc_query_test.go Co-authored-by: Carlos Rodriguez --- modules/apps/transfer/keeper/grpc_query_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/transfer/keeper/grpc_query_test.go b/modules/apps/transfer/keeper/grpc_query_test.go index 4b4b4a26478..963abd21577 100644 --- a/modules/apps/transfer/keeper/grpc_query_test.go +++ b/modules/apps/transfer/keeper/grpc_query_test.go @@ -47,7 +47,7 @@ func (suite *KeeperTestSuite) TestQueryDenomTrace() { true, }, { - "false: invalid hash", + "failure: invalid hash", func() { req = &types.QueryDenomTraceRequest{ Hash: "!@#!@#!", From 4662cc4f41113ef8f6a4a148fe9dc6bab7ea89c3 Mon Sep 17 00:00:00 2001 From: khanh <50263489+catShaark@users.noreply.github.com> Date: Mon, 9 May 2022 23:33:24 +0700 Subject: [PATCH 11/13] Update CHANGELOG.md Co-authored-by: Damian Nolan --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3bf5317cb7..cb35d02e733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,7 +49,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Improvements -* (transfer) [\#1342](https://github.com/cosmos/ibc-go/pull/1342) `DenomTrace` grpc now takes in either an `ibc denom` or a `hash` instead of only accepting a `hash` as input like before. +* (transfer) [\#1342](https://github.com/cosmos/ibc-go/pull/1342) `DenomTrace` grpc now takes in either an `ibc denom` or a `hash` instead of only accepting a `hash`. * (modules/core/keeper) [\#1284](https://github.com/cosmos/ibc-go/pull/1284) Add sanity check for the keepers passed into `ibckeeper.NewKeeper`. `ibckeeper.NewKeeper` now panics if any of the keepers passed in is empty. * (middleware) [\#1022](https://github.com/cosmos/ibc-go/pull/1022) Add `GetAppVersion` to the ICS4Wrapper interface. This function should be used by IBC applications to obtain their own version since the version set in the channel structure may be wrapped many times by middleware. * (modules/core/04-channel) [\#1160](https://github.com/cosmos/ibc-go/pull/1160) Improve `uint64 -> string` performance in `Logger`. From 730f7d85b559aaf3916c3db965745e581228847b Mon Sep 17 00:00:00 2001 From: romelukaku Date: Mon, 9 May 2022 23:42:50 +0700 Subject: [PATCH 12/13] use TrimPrefix() in DenomTrace() --- modules/apps/transfer/keeper/grpc_query.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/modules/apps/transfer/keeper/grpc_query.go b/modules/apps/transfer/keeper/grpc_query.go index 9c367b7c05a..5e7c5e7d295 100644 --- a/modules/apps/transfer/keeper/grpc_query.go +++ b/modules/apps/transfer/keeper/grpc_query.go @@ -9,7 +9,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" - tmbytes "github.com/tendermint/tendermint/libs/bytes" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -24,13 +23,7 @@ func (q Keeper) DenomTrace(c context.Context, req *types.QueryDenomTraceRequest) return nil, status.Error(codes.InvalidArgument, "empty request") } - var hash tmbytes.HexBytes - var err error - if strings.HasPrefix(req.Hash, "ibc/") { - hash, err = types.ParseHexHash(req.Hash[4:]) - } else { - hash, err = types.ParseHexHash(req.Hash) - } + hash, err := types.ParseHexHash(strings.TrimPrefix(req.Hash, "ibc/")) if err != nil { return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("invalid denom trace hash: %s, error: %s", hash.String(), err)) From ee2405dc8628c7f7f0a406606c42a03a2a8d8625 Mon Sep 17 00:00:00 2001 From: romelukaku Date: Thu, 12 May 2022 07:23:49 +0700 Subject: [PATCH 13/13] update migration doc --- docs/migrations/v3-to-v4.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/migrations/v3-to-v4.md b/docs/migrations/v3-to-v4.md index 5a3d61deaae..5f684581ab2 100644 --- a/docs/migrations/v3-to-v4.md +++ b/docs/migrations/v3-to-v4.md @@ -26,5 +26,6 @@ This is an API breaking change and as such IBC application developers will have The `OnChanOpenInit` application callback has been modified. The return signature now includes the application version as detailed in the latest IBC [spec changes](https://github.com/cosmos/ibc/pull/629). +## Relayers - +When using the `DenomTrace` gRPC, the full IBC denomination with the `ibc/` prefix may now be passed in.