From 6ca5333e625a732a421ca020b229dc7df8852209 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Tue, 6 Sep 2022 10:02:57 +0200 Subject: [PATCH 1/8] adding interchain account address query to ica controller --- docs/client/swagger-ui/swagger.yaml | 58 +++ docs/ibc/proto-docs.md | 34 ++ .../controller/keeper/grpc_query.go | 25 + .../controller/keeper/grpc_query_test.go | 69 +++ .../controller/types/query.pb.go | 487 +++++++++++++++++- .../controller/types/query.pb.gw.go | 120 +++++ .../controller/v1/query.proto | 18 + 7 files changed, 788 insertions(+), 23 deletions(-) diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml index 2952a69748d..f4c0507b37d 100644 --- a/docs/client/swagger-ui/swagger.yaml +++ b/docs/client/swagger-ui/swagger.yaml @@ -365,6 +365,56 @@ paths: format: byte tags: - Query + '/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}': + get: + summary: >- + InterchainAccount returns the interchain account address for a given + owner address on a given connection + operationId: InterchainAccount + responses: + '200': + description: A successful response. + schema: + type: object + properties: + address: + type: string + description: >- + QueryInterchainAccountResponse the response type for the + Query/InterchainAccount RPC method. + default: + description: An unexpected error response + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: owner + in: path + required: true + type: string + - name: connection_id + in: path + required: true + type: string + tags: + - Query /ibc/apps/interchain_accounts/controller/v1/params: get: summary: Params queries all parameters of the ICA controller submodule. @@ -13384,6 +13434,14 @@ definitions: description: |- Params defines the set of on-chain interchain accounts parameters. The following parameters may be used to disable the controller submodule. + ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse: + type: object + properties: + address: + type: string + description: >- + QueryInterchainAccountResponse the response type for the + Query/InterchainAccount RPC method. ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse: type: object properties: diff --git a/docs/ibc/proto-docs.md b/docs/ibc/proto-docs.md index d88d3fd001c..86a14a81b2e 100644 --- a/docs/ibc/proto-docs.md +++ b/docs/ibc/proto-docs.md @@ -84,6 +84,8 @@ - [Params](#ibc.applications.interchain_accounts.controller.v1.Params) - [ibc/applications/interchain_accounts/controller/v1/query.proto](#ibc/applications/interchain_accounts/controller/v1/query.proto) + - [QueryInterchainAccountRequest](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountRequest) + - [QueryInterchainAccountResponse](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse) - [QueryParamsRequest](#ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest) - [QueryParamsResponse](#ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse) @@ -1475,6 +1477,37 @@ The following parameters may be used to disable the controller submodule. + + +### QueryInterchainAccountRequest +QueryInterchainAccountRequest is the request type for the Query/InterchainAccount RPC method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `owner` | [string](#string) | | | +| `connection_id` | [string](#string) | | | + + + + + + + + +### QueryInterchainAccountResponse +QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| `address` | [string](#string) | | | + + + + + + ### QueryParamsRequest @@ -1513,6 +1546,7 @@ Query provides defines the gRPC querier service. | Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | | ----------- | ------------ | ------------- | ------------| ------- | -------- | +| `InterchainAccount` | [QueryInterchainAccountRequest](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountRequest) | [QueryInterchainAccountResponse](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse) | InterchainAccount returns the interchain account address for a given owner address on a given connection | GET|/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}| | `Params` | [QueryParamsRequest](#ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse) | Params queries all parameters of the ICA controller submodule. | GET|/ibc/apps/interchain_accounts/controller/v1/params| diff --git a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go index c44e30018e4..aad2aecf199 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go @@ -4,12 +4,37 @@ import ( "context" sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" + icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types" ) var _ types.QueryServer = Keeper{} +// InterchainAccount implements the Query/InterchainAccount gRPC method +func (k Keeper) InterchainAccount(goCtx context.Context, req *types.QueryInterchainAccountRequest) (*types.QueryInterchainAccountResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + portID, err := icatypes.NewControllerPortID(req.Owner) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "failed to generate portID from owner address: %s", err) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + addr, found := k.GetInterchainAccountAddress(ctx, req.ConnectionId, portID) + if !found { + return nil, status.Errorf(codes.NotFound, "failed to retrieve account address for %s on connection %s", portID, req.ConnectionId) + } + + return &types.QueryInterchainAccountResponse{ + Address: addr, + }, nil +} + // Params implements the Query/Params gRPC method func (q Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { ctx := sdk.UnwrapSDKContext(c) diff --git a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go index f60d348bc34..d8249db5c0b 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go @@ -4,8 +4,77 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" + icatypes "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/types" + ibctesting "github.com/cosmos/ibc-go/v5/testing" ) +func (suite *KeeperTestSuite) TestQueryInterchainAccount() { + var msg *types.QueryInterchainAccountRequest + + testCases := []struct { + name string + malleate func() + expPass bool + }{ + { + "success", + func() {}, + true, + }, + { + "empty request", + func() { + msg = nil + }, + false, + }, + { + "empty owner address", + func() { + msg.Owner = "" + }, + false, + }, + { + "invalid connection, account address not found", + func() { + msg.ConnectionId = "invalid-connection-id" + }, + false, + }, + } + + for _, tc := range testCases { + suite.Run(tc.name, func() { + suite.SetupTest() + + path := NewICAPath(suite.chainA, suite.chainB) + suite.coordinator.SetupConnections(path) + + err := SetupICAPath(path, ibctesting.TestAccAddress) + suite.Require().NoError(err) + + msg = &types.QueryInterchainAccountRequest{ + ConnectionId: ibctesting.FirstConnectionID, + Owner: ibctesting.TestAccAddress, + } + + tc.malleate() + + res, err := suite.chainA.GetSimApp().ICAControllerKeeper.InterchainAccount(sdk.WrapSDKContext(suite.chainA.GetContext()), msg) + + if tc.expPass { + expAddress := icatypes.GenerateAddress(suite.chainA.GetSimApp().AccountKeeper.GetModuleAddress(icatypes.ModuleName), path.EndpointB.ConnectionID, path.EndpointA.ChannelConfig.PortID) + + suite.Require().NoError(err) + suite.Require().Equal(expAddress.String(), res.Address) + } else { + suite.Require().Error(err) + } + }) + } +} + func (suite *KeeperTestSuite) TestQueryParams() { ctx := sdk.WrapSDKContext(suite.chainA.GetContext()) expParams := types.DefaultParams() diff --git a/modules/apps/27-interchain-accounts/controller/types/query.pb.go b/modules/apps/27-interchain-accounts/controller/types/query.pb.go index 75d8a0667c3..5b100408493 100644 --- a/modules/apps/27-interchain-accounts/controller/types/query.pb.go +++ b/modules/apps/27-interchain-accounts/controller/types/query.pb.go @@ -6,6 +6,7 @@ package types import ( context "context" fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" grpc1 "github.com/gogo/protobuf/grpc" proto "github.com/gogo/protobuf/proto" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -28,6 +29,104 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryInterchainAccountRequest is the request type for the Query/InterchainAccount RPC method. +type QueryInterchainAccountRequest struct { + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` +} + +func (m *QueryInterchainAccountRequest) Reset() { *m = QueryInterchainAccountRequest{} } +func (m *QueryInterchainAccountRequest) String() string { return proto.CompactTextString(m) } +func (*QueryInterchainAccountRequest) ProtoMessage() {} +func (*QueryInterchainAccountRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_df0d8b259d72854e, []int{0} +} +func (m *QueryInterchainAccountRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInterchainAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInterchainAccountRequest.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 *QueryInterchainAccountRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInterchainAccountRequest.Merge(m, src) +} +func (m *QueryInterchainAccountRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryInterchainAccountRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInterchainAccountRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInterchainAccountRequest proto.InternalMessageInfo + +func (m *QueryInterchainAccountRequest) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *QueryInterchainAccountRequest) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +// QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method. +type QueryInterchainAccountResponse struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryInterchainAccountResponse) Reset() { *m = QueryInterchainAccountResponse{} } +func (m *QueryInterchainAccountResponse) String() string { return proto.CompactTextString(m) } +func (*QueryInterchainAccountResponse) ProtoMessage() {} +func (*QueryInterchainAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_df0d8b259d72854e, []int{1} +} +func (m *QueryInterchainAccountResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInterchainAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInterchainAccountResponse.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 *QueryInterchainAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInterchainAccountResponse.Merge(m, src) +} +func (m *QueryInterchainAccountResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryInterchainAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInterchainAccountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInterchainAccountResponse proto.InternalMessageInfo + +func (m *QueryInterchainAccountResponse) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + // QueryParamsRequest is the request type for the Query/Params RPC method. type QueryParamsRequest struct { } @@ -36,7 +135,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_df0d8b259d72854e, []int{0} + return fileDescriptor_df0d8b259d72854e, []int{2} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,7 +174,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_df0d8b259d72854e, []int{1} + return fileDescriptor_df0d8b259d72854e, []int{3} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -112,6 +211,8 @@ func (m *QueryParamsResponse) GetParams() *Params { } func init() { + proto.RegisterType((*QueryInterchainAccountRequest)(nil), "ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountRequest") + proto.RegisterType((*QueryInterchainAccountResponse)(nil), "ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse") proto.RegisterType((*QueryParamsRequest)(nil), "ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse") } @@ -121,27 +222,36 @@ func init() { } var fileDescriptor_df0d8b259d72854e = []byte{ - // 315 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x91, 0x31, 0x4b, 0x33, 0x31, - 0x1c, 0xc6, 0x9b, 0x17, 0xde, 0x0e, 0x71, 0x8b, 0x0e, 0x52, 0x24, 0x48, 0x27, 0x97, 0x26, 0xf4, - 0x54, 0x84, 0x0e, 0x0e, 0x0a, 0xba, 0xd6, 0x8e, 0x2e, 0x92, 0x8b, 0xe1, 0x1a, 0xb9, 0xcb, 0x3f, - 0x4d, 0x72, 0x85, 0xae, 0x7e, 0x02, 0xc1, 0x2f, 0xe5, 0x58, 0x10, 0xc1, 0x4d, 0xb9, 0xf3, 0x83, - 0x48, 0xef, 0x0e, 0x5a, 0xb1, 0x83, 0xd6, 0x35, 0x7f, 0x9e, 0xdf, 0x2f, 0x0f, 0x0f, 0x3e, 0xd5, - 0xb1, 0xe4, 0xc2, 0xda, 0x54, 0x4b, 0x11, 0x34, 0x18, 0xcf, 0xb5, 0x09, 0xca, 0xc9, 0xb1, 0xd0, - 0xe6, 0x46, 0x48, 0x09, 0xb9, 0x09, 0x9e, 0x4b, 0x30, 0xc1, 0x41, 0x9a, 0x2a, 0xc7, 0xa7, 0x7d, - 0x3e, 0xc9, 0x95, 0x9b, 0x31, 0xeb, 0x20, 0x00, 0x89, 0x74, 0x2c, 0xd9, 0x6a, 0x9e, 0xad, 0xc9, - 0xb3, 0x65, 0x9e, 0x4d, 0xfb, 0x9d, 0xf3, 0x0d, 0x9c, 0x2b, 0x84, 0x4a, 0xdc, 0xd9, 0x4b, 0x00, - 0x92, 0x54, 0x71, 0x61, 0x35, 0x17, 0xc6, 0x40, 0x68, 0xf4, 0xd5, 0xb5, 0xbb, 0x83, 0xc9, 0xd5, - 0xe2, 0x97, 0x43, 0xe1, 0x44, 0xe6, 0x47, 0x6a, 0x92, 0x2b, 0x1f, 0xba, 0x1a, 0x6f, 0x7f, 0x79, - 0xf5, 0x16, 0x8c, 0x57, 0x64, 0x84, 0xdb, 0xb6, 0x7a, 0xd9, 0x45, 0xfb, 0xe8, 0x60, 0x2b, 0x1a, - 0xb0, 0xdf, 0x97, 0x62, 0x0d, 0xb3, 0x21, 0x45, 0x6f, 0x08, 0xff, 0xaf, 0x5c, 0xe4, 0x05, 0xe1, - 0x76, 0x7d, 0x24, 0x17, 0x9b, 0x80, 0xbf, 0xf7, 0xe8, 0x5c, 0xfe, 0x99, 0x53, 0x37, 0xef, 0x0e, - 0xee, 0x9f, 0x3f, 0x1e, 0xff, 0x1d, 0x91, 0x88, 0x37, 0x93, 0xfc, 0x64, 0x8a, 0xba, 0xe1, 0xd9, - 0xdd, 0x53, 0x41, 0xd1, 0xbc, 0xa0, 0xe8, 0xbd, 0xa0, 0xe8, 0xa1, 0xa4, 0xad, 0x79, 0x49, 0x5b, - 0xaf, 0x25, 0x6d, 0x5d, 0x0f, 0x13, 0x1d, 0xc6, 0x79, 0xcc, 0x24, 0x64, 0x5c, 0x82, 0xcf, 0xc0, - 0x2f, 0xf0, 0xbd, 0x04, 0xf8, 0xf4, 0x98, 0x67, 0x70, 0x9b, 0xa7, 0xca, 0xd7, 0xb2, 0xe8, 0xa4, - 0xb7, 0xf4, 0xf5, 0xd6, 0xf9, 0xc2, 0xcc, 0x2a, 0x1f, 0xb7, 0xab, 0x55, 0x0f, 0x3f, 0x03, 0x00, - 0x00, 0xff, 0xff, 0xeb, 0xaf, 0xdb, 0x2b, 0xae, 0x02, 0x00, 0x00, + // 463 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x41, 0x8b, 0x13, 0x31, + 0x14, 0xc7, 0x3b, 0x95, 0xad, 0x18, 0xf5, 0x60, 0xec, 0xa1, 0x14, 0x1d, 0x65, 0x4e, 0x5e, 0x9a, + 0xb0, 0xa3, 0x22, 0x14, 0x14, 0x5c, 0x41, 0xd9, 0xdb, 0xee, 0x20, 0x1e, 0x44, 0x58, 0xd2, 0x4c, + 0x98, 0x8d, 0xcc, 0xe4, 0xcd, 0x26, 0x99, 0x4a, 0x59, 0xf6, 0xe2, 0x27, 0x10, 0xbc, 0xf8, 0x91, + 0x3c, 0x2e, 0x88, 0xe0, 0x49, 0xa4, 0xf5, 0x13, 0x78, 0xf4, 0x24, 0x93, 0x89, 0x76, 0x07, 0x57, + 0xb1, 0x75, 0x4f, 0x93, 0xf7, 0x1e, 0xef, 0xff, 0x7b, 0x2f, 0xff, 0x0c, 0x7a, 0x20, 0x27, 0x9c, + 0xb2, 0xb2, 0xcc, 0x25, 0x67, 0x56, 0x82, 0x32, 0x54, 0x2a, 0x2b, 0x34, 0xdf, 0x67, 0x52, 0xed, + 0x31, 0xce, 0xa1, 0x52, 0xd6, 0x50, 0x0e, 0xca, 0x6a, 0xc8, 0x73, 0xa1, 0xe9, 0x74, 0x93, 0x1e, + 0x54, 0x42, 0xcf, 0x48, 0xa9, 0xc1, 0x02, 0x8e, 0xe5, 0x84, 0x93, 0x93, 0xfd, 0xe4, 0x94, 0x7e, + 0xb2, 0xec, 0x27, 0xd3, 0xcd, 0xe1, 0xa3, 0x35, 0x98, 0x27, 0x14, 0x1c, 0x78, 0xd8, 0xcf, 0x20, + 0x03, 0x77, 0xa4, 0xf5, 0xc9, 0x67, 0xaf, 0x65, 0x00, 0x59, 0x2e, 0x28, 0x2b, 0x25, 0x65, 0x4a, + 0x81, 0xf5, 0x43, 0xb9, 0x6a, 0x64, 0xd1, 0xf5, 0xdd, 0x7a, 0xf6, 0xed, 0x5f, 0xb8, 0x87, 0x0d, + 0x2d, 0x11, 0x07, 0x95, 0x30, 0x16, 0xf7, 0xd1, 0x06, 0xbc, 0x52, 0x42, 0x0f, 0x82, 0x9b, 0xc1, + 0xad, 0x0b, 0x49, 0x13, 0xe0, 0xfb, 0xe8, 0x32, 0x07, 0xa5, 0x04, 0xaf, 0xb5, 0xf6, 0x64, 0x3a, + 0xe8, 0xd6, 0xd5, 0xad, 0xc1, 0xb7, 0xcf, 0x37, 0xfa, 0x33, 0x56, 0xe4, 0xe3, 0xa8, 0x55, 0x8e, + 0x92, 0x4b, 0xcb, 0x78, 0x3b, 0x8d, 0xc6, 0x28, 0xfc, 0x13, 0xd5, 0x94, 0xa0, 0x8c, 0xc0, 0x03, + 0x74, 0x9e, 0xa5, 0xa9, 0x16, 0xc6, 0x78, 0xf0, 0xcf, 0x30, 0xea, 0x23, 0xec, 0x7a, 0x77, 0x98, + 0x66, 0x85, 0xf1, 0x63, 0x46, 0x12, 0x5d, 0x6d, 0x65, 0xbd, 0x4c, 0x82, 0x7a, 0xa5, 0xcb, 0x38, + 0x95, 0x8b, 0xf1, 0x98, 0xac, 0x6e, 0x0e, 0xf1, 0x9a, 0x5e, 0x29, 0xfe, 0x7e, 0x0e, 0x6d, 0x38, + 0x16, 0x7e, 0xd7, 0x45, 0x57, 0x7e, 0x5b, 0x01, 0xef, 0xae, 0xc3, 0xf8, 0xab, 0x09, 0xc3, 0xe4, + 0x2c, 0x25, 0x9b, 0xab, 0x89, 0x5e, 0xbc, 0xfe, 0xf0, 0xf5, 0x6d, 0xf7, 0x19, 0x7e, 0x4a, 0xfd, + 0xdb, 0xfb, 0x97, 0x37, 0xe7, 0xdc, 0xa7, 0x87, 0xee, 0x73, 0x44, 0x97, 0x9e, 0xd2, 0xc3, 0x96, + 0xdf, 0x47, 0xf8, 0x63, 0x80, 0x7a, 0xcd, 0xbd, 0xe1, 0xc7, 0x6b, 0x0f, 0xdf, 0xb2, 0x78, 0xf8, + 0xe4, 0xbf, 0x75, 0xfc, 0xe6, 0x63, 0xb7, 0xf9, 0x1d, 0x1c, 0xaf, 0xb2, 0x79, 0x63, 0xfe, 0xd6, + 0xcb, 0xf7, 0xf3, 0x30, 0x38, 0x9e, 0x87, 0xc1, 0x97, 0x79, 0x18, 0xbc, 0x59, 0x84, 0x9d, 0xe3, + 0x45, 0xd8, 0xf9, 0xb4, 0x08, 0x3b, 0xcf, 0x77, 0x32, 0x69, 0xf7, 0xab, 0x09, 0xe1, 0x50, 0x50, + 0x0e, 0xa6, 0x00, 0x53, 0xcb, 0x8f, 0x32, 0xa0, 0xd3, 0xbb, 0xb4, 0x80, 0xb4, 0xca, 0x85, 0x69, + 0x60, 0xf1, 0xbd, 0xd1, 0x92, 0x37, 0x3a, 0x8d, 0x67, 0x67, 0xa5, 0x30, 0x93, 0x9e, 0xfb, 0x45, + 0x6f, 0xff, 0x08, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xa9, 0x09, 0x3f, 0x91, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -156,6 +266,8 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type QueryClient interface { + // InterchainAccount returns the interchain account address for a given owner address on a given connection + InterchainAccount(ctx context.Context, in *QueryInterchainAccountRequest, opts ...grpc.CallOption) (*QueryInterchainAccountResponse, error) // Params queries all parameters of the ICA controller submodule. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) } @@ -168,6 +280,15 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { return &queryClient{cc} } +func (c *queryClient) InterchainAccount(ctx context.Context, in *QueryInterchainAccountRequest, opts ...grpc.CallOption) (*QueryInterchainAccountResponse, error) { + out := new(QueryInterchainAccountResponse) + err := c.cc.Invoke(ctx, "/ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) err := c.cc.Invoke(ctx, "/ibc.applications.interchain_accounts.controller.v1.Query/Params", in, out, opts...) @@ -179,6 +300,8 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . // QueryServer is the server API for Query service. type QueryServer interface { + // InterchainAccount returns the interchain account address for a given owner address on a given connection + InterchainAccount(context.Context, *QueryInterchainAccountRequest) (*QueryInterchainAccountResponse, error) // Params queries all parameters of the ICA controller submodule. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) } @@ -187,6 +310,9 @@ type QueryServer interface { type UnimplementedQueryServer struct { } +func (*UnimplementedQueryServer) InterchainAccount(ctx context.Context, req *QueryInterchainAccountRequest) (*QueryInterchainAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InterchainAccount not implemented") +} func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } @@ -195,6 +321,24 @@ func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) } +func _Query_InterchainAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryInterchainAccountRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).InterchainAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).InterchainAccount(ctx, req.(*QueryInterchainAccountRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryParamsRequest) if err := dec(in); err != nil { @@ -217,6 +361,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "ibc.applications.interchain_accounts.controller.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "InterchainAccount", + Handler: _Query_InterchainAccount_Handler, + }, { MethodName: "Params", Handler: _Query_Params_Handler, @@ -226,6 +374,73 @@ var _Query_serviceDesc = grpc.ServiceDesc{ Metadata: "ibc/applications/interchain_accounts/controller/v1/query.proto", } +func (m *QueryInterchainAccountRequest) 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 *QueryInterchainAccountRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInterchainAccountRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryInterchainAccountResponse) 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 *QueryInterchainAccountResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInterchainAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -295,6 +510,36 @@ func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } +func (m *QueryInterchainAccountRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryInterchainAccountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + func (m *QueryParamsRequest) Size() (n int) { if m == nil { return 0 @@ -323,6 +568,202 @@ func sovQuery(x uint64) (n int) { func sozQuery(x uint64) (n int) { return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (m *QueryInterchainAccountRequest) 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 ErrIntOverflowQuery + } + 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: QueryInterchainAccountRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInterchainAccountRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInterchainAccountResponse) 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 ErrIntOverflowQuery + } + 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: QueryInterchainAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInterchainAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + 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 ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go b/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go index a9ac1bc03bb..aef8cbe350f 100644 --- a/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go +++ b/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go @@ -31,6 +31,82 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +func request_Query_InterchainAccount_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryInterchainAccountRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["connection_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "connection_id") + } + + protoReq.ConnectionId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "connection_id", err) + } + + msg, err := client.InterchainAccount(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_InterchainAccount_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryInterchainAccountRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["owner"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "owner") + } + + protoReq.Owner, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "owner", err) + } + + val, ok = pathParams["connection_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "connection_id") + } + + protoReq.ConnectionId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "connection_id", err) + } + + msg, err := server.InterchainAccount(ctx, &protoReq) + return msg, metadata, err + +} + func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryParamsRequest var metadata runtime.ServerMetadata @@ -55,6 +131,26 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal // Note that using this registration option will cause many gRPC library features (such as grpc.SendHeader, etc) to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + mux.Handle("GET", pattern_Query_InterchainAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_InterchainAccount_0(rctx, inboundMarshaler, server, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_InterchainAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -116,6 +212,26 @@ func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc // "QueryClient" to call the correct interceptors. func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + mux.Handle("GET", pattern_Query_InterchainAccount_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_InterchainAccount_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_InterchainAccount_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -140,9 +256,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( + pattern_Query_InterchainAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"ibc", "apps", "interchain_accounts", "controller", "v1", "owner", "connection", "connection_id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"ibc", "apps", "interchain_accounts", "controller", "v1", "params"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( + forward_Query_InterchainAccount_0 = runtime.ForwardResponseMessage + forward_Query_Params_0 = runtime.ForwardResponseMessage ) diff --git a/proto/ibc/applications/interchain_accounts/controller/v1/query.proto b/proto/ibc/applications/interchain_accounts/controller/v1/query.proto index 5b0d0b407c5..ca4d3ea5ad0 100644 --- a/proto/ibc/applications/interchain_accounts/controller/v1/query.proto +++ b/proto/ibc/applications/interchain_accounts/controller/v1/query.proto @@ -5,16 +5,34 @@ package ibc.applications.interchain_accounts.controller.v1; option go_package = "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types"; import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; +import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; // Query provides defines the gRPC querier service. service Query { + // InterchainAccount returns the interchain account address for a given owner address on a given connection + rpc InterchainAccount(QueryInterchainAccountRequest) returns (QueryInterchainAccountResponse) { + option (google.api.http).get = + "/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}"; + } + // Params queries all parameters of the ICA controller submodule. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { option (google.api.http).get = "/ibc/apps/interchain_accounts/controller/v1/params"; } } +// QueryInterchainAccountRequest is the request type for the Query/InterchainAccount RPC method. +message QueryInterchainAccountRequest { + string owner = 1; + string connection_id = 2 [(gogoproto.moretags) = "yaml:\"connection_id\""]; +} + +// QueryInterchainAccountResponse the response type for the Query/InterchainAccount RPC method. +message QueryInterchainAccountResponse { + string address = 1; +} + // QueryParamsRequest is the request type for the Query/Params RPC method. message QueryParamsRequest {} From 758e99a499c3106df1cfcc97f00017f9c718d8f1 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Tue, 6 Sep 2022 10:11:41 +0200 Subject: [PATCH 2/8] adding basic cli query --- .../controller/client/cli/cli.go | 1 + .../controller/client/cli/query.go | 34 +++++++++++++++++++ .../controller/keeper/grpc_query_test.go | 12 +++---- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/client/cli/cli.go b/modules/apps/27-interchain-accounts/controller/client/cli/cli.go index 0d2f54bd59b..7aa86cc0e46 100644 --- a/modules/apps/27-interchain-accounts/controller/client/cli/cli.go +++ b/modules/apps/27-interchain-accounts/controller/client/cli/cli.go @@ -14,6 +14,7 @@ func GetQueryCmd() *cobra.Command { } queryCmd.AddCommand( + GetCmdQueryInterchainAccount(), GetCmdParams(), ) diff --git a/modules/apps/27-interchain-accounts/controller/client/cli/query.go b/modules/apps/27-interchain-accounts/controller/client/cli/query.go index 4b53a21cae4..4962a79ef1a 100644 --- a/modules/apps/27-interchain-accounts/controller/client/cli/query.go +++ b/modules/apps/27-interchain-accounts/controller/client/cli/query.go @@ -11,6 +11,40 @@ import ( "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/types" ) +// GetCmdQueryInterchainAccount returns the command handler for the controller submodule parameter querying. +func GetCmdQueryInterchainAccount() *cobra.Command { + cmd := &cobra.Command{ + Use: "interchain-account [connection-id] [owner]", + Short: "Query the interchain account address for a given owner on a particular connection", + Long: "Query the controller submodule for the interchain account address for a given owner on a particular connection", + Args: cobra.ExactArgs(2), + Example: fmt.Sprintf("%s query interchain-accounts controller interchain-account connection-0 cosmos1layxcsmyye0dc0har9sdfzwckaz8sjwlfsj8zs", version.AppName), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + req := &types.QueryInterchainAccountRequest{ + ConnectionId: args[0], + Owner: args[1], + } + + res, err := queryClient.InterchainAccount(cmd.Context(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + // GetCmdParams returns the command handler for the controller submodule parameter querying. func GetCmdParams() *cobra.Command { cmd := &cobra.Command{ diff --git a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go index d8249db5c0b..6d52afd9c74 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query_test.go @@ -9,7 +9,7 @@ import ( ) func (suite *KeeperTestSuite) TestQueryInterchainAccount() { - var msg *types.QueryInterchainAccountRequest + var req *types.QueryInterchainAccountRequest testCases := []struct { name string @@ -24,21 +24,21 @@ func (suite *KeeperTestSuite) TestQueryInterchainAccount() { { "empty request", func() { - msg = nil + req = nil }, false, }, { "empty owner address", func() { - msg.Owner = "" + req.Owner = "" }, false, }, { "invalid connection, account address not found", func() { - msg.ConnectionId = "invalid-connection-id" + req.ConnectionId = "invalid-connection-id" }, false, }, @@ -54,14 +54,14 @@ func (suite *KeeperTestSuite) TestQueryInterchainAccount() { err := SetupICAPath(path, ibctesting.TestAccAddress) suite.Require().NoError(err) - msg = &types.QueryInterchainAccountRequest{ + req = &types.QueryInterchainAccountRequest{ ConnectionId: ibctesting.FirstConnectionID, Owner: ibctesting.TestAccAddress, } tc.malleate() - res, err := suite.chainA.GetSimApp().ICAControllerKeeper.InterchainAccount(sdk.WrapSDKContext(suite.chainA.GetContext()), msg) + res, err := suite.chainA.GetSimApp().ICAControllerKeeper.InterchainAccount(sdk.WrapSDKContext(suite.chainA.GetContext()), req) if tc.expPass { expAddress := icatypes.GenerateAddress(suite.chainA.GetSimApp().AccountKeeper.GetModuleAddress(icatypes.ModuleName), path.EndpointB.ConnectionID, path.EndpointA.ChannelConfig.PortID) From 62e15627fcbb70b0b08a3ef4a31258f8e4389cbf Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Tue, 6 Sep 2022 10:16:42 +0200 Subject: [PATCH 3/8] satisfy linter, aligning recvr var naming --- .../27-interchain-accounts/controller/keeper/grpc_query.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go index aad2aecf199..41e0f83374c 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go @@ -36,9 +36,9 @@ func (k Keeper) InterchainAccount(goCtx context.Context, req *types.QueryInterch } // Params implements the Query/Params gRPC method -func (q Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { ctx := sdk.UnwrapSDKContext(c) - params := q.GetParams(ctx) + params := k.GetParams(ctx) return &types.QueryParamsResponse{ Params: ¶ms, From 4159e4a6db952683c1f1789498e07c46cba802c5 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 7 Sep 2022 18:44:39 +0200 Subject: [PATCH 4/8] Apply suggestions from code review Co-authored-by: Carlos Rodriguez --- .../apps/27-interchain-accounts/controller/client/cli/query.go | 2 +- .../applications/interchain_accounts/controller/v1/query.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/client/cli/query.go b/modules/apps/27-interchain-accounts/controller/client/cli/query.go index 4962a79ef1a..5d4a5983de5 100644 --- a/modules/apps/27-interchain-accounts/controller/client/cli/query.go +++ b/modules/apps/27-interchain-accounts/controller/client/cli/query.go @@ -14,7 +14,7 @@ import ( // GetCmdQueryInterchainAccount returns the command handler for the controller submodule parameter querying. func GetCmdQueryInterchainAccount() *cobra.Command { cmd := &cobra.Command{ - Use: "interchain-account [connection-id] [owner]", + Use: "interchain-account [owner] [connection-id]", Short: "Query the interchain account address for a given owner on a particular connection", Long: "Query the controller submodule for the interchain account address for a given owner on a particular connection", Args: cobra.ExactArgs(2), diff --git a/proto/ibc/applications/interchain_accounts/controller/v1/query.proto b/proto/ibc/applications/interchain_accounts/controller/v1/query.proto index ca4d3ea5ad0..4bc7ffe4d2d 100644 --- a/proto/ibc/applications/interchain_accounts/controller/v1/query.proto +++ b/proto/ibc/applications/interchain_accounts/controller/v1/query.proto @@ -13,7 +13,7 @@ service Query { // InterchainAccount returns the interchain account address for a given owner address on a given connection rpc InterchainAccount(QueryInterchainAccountRequest) returns (QueryInterchainAccountResponse) { option (google.api.http).get = - "/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}"; + "/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}"; } // Params queries all parameters of the ICA controller submodule. From 6f9699a5c1b57abb67fcc46f7e5726f65d9ad26e Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 7 Sep 2022 18:50:47 +0200 Subject: [PATCH 5/8] reordering cli args --- .../27-interchain-accounts/controller/client/cli/query.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/apps/27-interchain-accounts/controller/client/cli/query.go b/modules/apps/27-interchain-accounts/controller/client/cli/query.go index 5d4a5983de5..799dfeac78b 100644 --- a/modules/apps/27-interchain-accounts/controller/client/cli/query.go +++ b/modules/apps/27-interchain-accounts/controller/client/cli/query.go @@ -27,8 +27,8 @@ func GetCmdQueryInterchainAccount() *cobra.Command { queryClient := types.NewQueryClient(clientCtx) req := &types.QueryInterchainAccountRequest{ - ConnectionId: args[0], - Owner: args[1], + Owner: args[0], + ConnectionId: args[1], } res, err := queryClient.InterchainAccount(cmd.Context(), req) From f6bc6503138b0692b849031e4928a2b0665ef302 Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 7 Sep 2022 18:51:05 +0200 Subject: [PATCH 6/8] regenerate protobufs and swagger docs post review suggestions --- docs/client/swagger-ui/swagger.yaml | 2 +- docs/ibc/proto-docs.md | 2 +- .../controller/types/query.pb.go | 57 ++++++++++--------- .../controller/types/query.pb.gw.go | 2 +- 4 files changed, 32 insertions(+), 31 deletions(-) diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml index f4c0507b37d..b11b1e21c36 100644 --- a/docs/client/swagger-ui/swagger.yaml +++ b/docs/client/swagger-ui/swagger.yaml @@ -365,7 +365,7 @@ paths: format: byte tags: - Query - '/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}': + '/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}': get: summary: >- InterchainAccount returns the interchain account address for a given diff --git a/docs/ibc/proto-docs.md b/docs/ibc/proto-docs.md index 86a14a81b2e..1d301619be9 100644 --- a/docs/ibc/proto-docs.md +++ b/docs/ibc/proto-docs.md @@ -1546,7 +1546,7 @@ Query provides defines the gRPC querier service. | Method Name | Request Type | Response Type | Description | HTTP Verb | Endpoint | | ----------- | ------------ | ------------- | ------------| ------- | -------- | -| `InterchainAccount` | [QueryInterchainAccountRequest](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountRequest) | [QueryInterchainAccountResponse](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse) | InterchainAccount returns the interchain account address for a given owner address on a given connection | GET|/ibc/apps/interchain_accounts/controller/v1/owner/{owner}/connection/{connection_id}| +| `InterchainAccount` | [QueryInterchainAccountRequest](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountRequest) | [QueryInterchainAccountResponse](#ibc.applications.interchain_accounts.controller.v1.QueryInterchainAccountResponse) | InterchainAccount returns the interchain account address for a given owner address on a given connection | GET|/ibc/apps/interchain_accounts/controller/v1/owners/{owner}/connections/{connection_id}| | `Params` | [QueryParamsRequest](#ibc.applications.interchain_accounts.controller.v1.QueryParamsRequest) | [QueryParamsResponse](#ibc.applications.interchain_accounts.controller.v1.QueryParamsResponse) | Params queries all parameters of the ICA controller submodule. | GET|/ibc/apps/interchain_accounts/controller/v1/params| diff --git a/modules/apps/27-interchain-accounts/controller/types/query.pb.go b/modules/apps/27-interchain-accounts/controller/types/query.pb.go index 5b100408493..92869099e91 100644 --- a/modules/apps/27-interchain-accounts/controller/types/query.pb.go +++ b/modules/apps/27-interchain-accounts/controller/types/query.pb.go @@ -222,36 +222,37 @@ func init() { } var fileDescriptor_df0d8b259d72854e = []byte{ - // 463 bytes of a gzipped FileDescriptorProto + // 465 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x41, 0x8b, 0x13, 0x31, 0x14, 0xc7, 0x3b, 0x95, 0xad, 0x18, 0xf5, 0x60, 0xec, 0xa1, 0x14, 0x1d, 0x65, 0x4e, 0x5e, 0x9a, - 0xb0, 0xa3, 0x22, 0x14, 0x14, 0x5c, 0x41, 0xd9, 0xdb, 0xee, 0x20, 0x1e, 0x44, 0x58, 0xd2, 0x4c, - 0x98, 0x8d, 0xcc, 0xe4, 0xcd, 0x26, 0x99, 0x4a, 0x59, 0xf6, 0xe2, 0x27, 0x10, 0xbc, 0xf8, 0x91, - 0x3c, 0x2e, 0x88, 0xe0, 0x49, 0xa4, 0xf5, 0x13, 0x78, 0xf4, 0x24, 0x93, 0x89, 0x76, 0x07, 0x57, - 0xb1, 0x75, 0x4f, 0x93, 0xf7, 0x1e, 0xef, 0xff, 0x7b, 0x2f, 0xff, 0x0c, 0x7a, 0x20, 0x27, 0x9c, - 0xb2, 0xb2, 0xcc, 0x25, 0x67, 0x56, 0x82, 0x32, 0x54, 0x2a, 0x2b, 0x34, 0xdf, 0x67, 0x52, 0xed, - 0x31, 0xce, 0xa1, 0x52, 0xd6, 0x50, 0x0e, 0xca, 0x6a, 0xc8, 0x73, 0xa1, 0xe9, 0x74, 0x93, 0x1e, - 0x54, 0x42, 0xcf, 0x48, 0xa9, 0xc1, 0x02, 0x8e, 0xe5, 0x84, 0x93, 0x93, 0xfd, 0xe4, 0x94, 0x7e, - 0xb2, 0xec, 0x27, 0xd3, 0xcd, 0xe1, 0xa3, 0x35, 0x98, 0x27, 0x14, 0x1c, 0x78, 0xd8, 0xcf, 0x20, - 0x03, 0x77, 0xa4, 0xf5, 0xc9, 0x67, 0xaf, 0x65, 0x00, 0x59, 0x2e, 0x28, 0x2b, 0x25, 0x65, 0x4a, - 0x81, 0xf5, 0x43, 0xb9, 0x6a, 0x64, 0xd1, 0xf5, 0xdd, 0x7a, 0xf6, 0xed, 0x5f, 0xb8, 0x87, 0x0d, - 0x2d, 0x11, 0x07, 0x95, 0x30, 0x16, 0xf7, 0xd1, 0x06, 0xbc, 0x52, 0x42, 0x0f, 0x82, 0x9b, 0xc1, - 0xad, 0x0b, 0x49, 0x13, 0xe0, 0xfb, 0xe8, 0x32, 0x07, 0xa5, 0x04, 0xaf, 0xb5, 0xf6, 0x64, 0x3a, - 0xe8, 0xd6, 0xd5, 0xad, 0xc1, 0xb7, 0xcf, 0x37, 0xfa, 0x33, 0x56, 0xe4, 0xe3, 0xa8, 0x55, 0x8e, - 0x92, 0x4b, 0xcb, 0x78, 0x3b, 0x8d, 0xc6, 0x28, 0xfc, 0x13, 0xd5, 0x94, 0xa0, 0x8c, 0xc0, 0x03, - 0x74, 0x9e, 0xa5, 0xa9, 0x16, 0xc6, 0x78, 0xf0, 0xcf, 0x30, 0xea, 0x23, 0xec, 0x7a, 0x77, 0x98, - 0x66, 0x85, 0xf1, 0x63, 0x46, 0x12, 0x5d, 0x6d, 0x65, 0xbd, 0x4c, 0x82, 0x7a, 0xa5, 0xcb, 0x38, - 0x95, 0x8b, 0xf1, 0x98, 0xac, 0x6e, 0x0e, 0xf1, 0x9a, 0x5e, 0x29, 0xfe, 0x7e, 0x0e, 0x6d, 0x38, - 0x16, 0x7e, 0xd7, 0x45, 0x57, 0x7e, 0x5b, 0x01, 0xef, 0xae, 0xc3, 0xf8, 0xab, 0x09, 0xc3, 0xe4, - 0x2c, 0x25, 0x9b, 0xab, 0x89, 0x5e, 0xbc, 0xfe, 0xf0, 0xf5, 0x6d, 0xf7, 0x19, 0x7e, 0x4a, 0xfd, - 0xdb, 0xfb, 0x97, 0x37, 0xe7, 0xdc, 0xa7, 0x87, 0xee, 0x73, 0x44, 0x97, 0x9e, 0xd2, 0xc3, 0x96, - 0xdf, 0x47, 0xf8, 0x63, 0x80, 0x7a, 0xcd, 0xbd, 0xe1, 0xc7, 0x6b, 0x0f, 0xdf, 0xb2, 0x78, 0xf8, - 0xe4, 0xbf, 0x75, 0xfc, 0xe6, 0x63, 0xb7, 0xf9, 0x1d, 0x1c, 0xaf, 0xb2, 0x79, 0x63, 0xfe, 0xd6, - 0xcb, 0xf7, 0xf3, 0x30, 0x38, 0x9e, 0x87, 0xc1, 0x97, 0x79, 0x18, 0xbc, 0x59, 0x84, 0x9d, 0xe3, - 0x45, 0xd8, 0xf9, 0xb4, 0x08, 0x3b, 0xcf, 0x77, 0x32, 0x69, 0xf7, 0xab, 0x09, 0xe1, 0x50, 0x50, - 0x0e, 0xa6, 0x00, 0x53, 0xcb, 0x8f, 0x32, 0xa0, 0xd3, 0xbb, 0xb4, 0x80, 0xb4, 0xca, 0x85, 0x69, - 0x60, 0xf1, 0xbd, 0xd1, 0x92, 0x37, 0x3a, 0x8d, 0x67, 0x67, 0xa5, 0x30, 0x93, 0x9e, 0xfb, 0x45, - 0x6f, 0xff, 0x08, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xa9, 0x09, 0x3f, 0x91, 0x04, 0x00, 0x00, + 0xb0, 0xa3, 0x22, 0x14, 0x14, 0x5c, 0x41, 0xd9, 0xdb, 0xee, 0x1c, 0x44, 0x3c, 0xb8, 0xa4, 0x99, + 0x30, 0x1b, 0x99, 0xc9, 0x9b, 0x4d, 0x32, 0x95, 0xb2, 0xec, 0xc5, 0x4f, 0x20, 0x78, 0xf3, 0x13, + 0x79, 0x5c, 0x10, 0xc1, 0x93, 0x48, 0xeb, 0x27, 0xf0, 0xec, 0x41, 0x26, 0x13, 0xed, 0x0e, 0xae, + 0x62, 0xeb, 0x9e, 0x26, 0xef, 0x3d, 0xde, 0xff, 0xf7, 0x5e, 0xfe, 0x19, 0xf4, 0x40, 0x4e, 0x38, + 0x65, 0x65, 0x99, 0x4b, 0xce, 0xac, 0x04, 0x65, 0xa8, 0x54, 0x56, 0x68, 0xbe, 0xcf, 0xa4, 0xda, + 0x63, 0x9c, 0x43, 0xa5, 0xac, 0xa1, 0x1c, 0x94, 0xd5, 0x90, 0xe7, 0x42, 0xd3, 0xe9, 0x26, 0x3d, + 0xa8, 0x84, 0x9e, 0x91, 0x52, 0x83, 0x05, 0x1c, 0xcb, 0x09, 0x27, 0x27, 0xfb, 0xc9, 0x29, 0xfd, + 0x64, 0xd9, 0x4f, 0xa6, 0x9b, 0xc3, 0x47, 0x6b, 0x30, 0x4f, 0x28, 0x38, 0xf0, 0xb0, 0x9f, 0x41, + 0x06, 0xee, 0x48, 0xeb, 0x93, 0xcf, 0x5e, 0xcb, 0x00, 0xb2, 0x5c, 0x50, 0x56, 0x4a, 0xca, 0x94, + 0x02, 0xeb, 0x87, 0x72, 0xd5, 0xc8, 0xa2, 0xeb, 0xbb, 0xf5, 0xec, 0xdb, 0xbf, 0x70, 0x0f, 0x1b, + 0x5a, 0x22, 0x0e, 0x2a, 0x61, 0x2c, 0xee, 0xa3, 0x0d, 0x78, 0xa5, 0x84, 0x1e, 0x04, 0x37, 0x83, + 0x5b, 0x17, 0x92, 0x26, 0xc0, 0xf7, 0xd1, 0x65, 0x0e, 0x4a, 0x09, 0x5e, 0x6b, 0xed, 0xc9, 0x74, + 0xd0, 0xad, 0xab, 0x5b, 0x83, 0x6f, 0x9f, 0x6f, 0xf4, 0x67, 0xac, 0xc8, 0xc7, 0x51, 0xab, 0x1c, + 0x25, 0x97, 0x96, 0xf1, 0x76, 0x1a, 0x8d, 0x51, 0xf8, 0x27, 0xaa, 0x29, 0x41, 0x19, 0x81, 0x07, + 0xe8, 0x3c, 0x4b, 0x53, 0x2d, 0x8c, 0xf1, 0xe0, 0x9f, 0x61, 0xd4, 0x47, 0xd8, 0xf5, 0xee, 0x30, + 0xcd, 0x0a, 0xe3, 0xc7, 0x8c, 0x24, 0xba, 0xda, 0xca, 0x7a, 0x99, 0x04, 0xf5, 0x4a, 0x97, 0x71, + 0x2a, 0x17, 0xe3, 0x31, 0x59, 0xdd, 0x1c, 0xe2, 0x35, 0xbd, 0x52, 0xfc, 0xfd, 0x1c, 0xda, 0x70, + 0x2c, 0xfc, 0xae, 0x8b, 0xae, 0xfc, 0xb6, 0x02, 0xde, 0x5d, 0x87, 0xf1, 0x57, 0x13, 0x86, 0xc9, + 0x59, 0x4a, 0x36, 0x57, 0x13, 0xbd, 0x78, 0xfd, 0xe1, 0xeb, 0xdb, 0xee, 0x33, 0xfc, 0x94, 0xfa, + 0xb7, 0xf7, 0x2f, 0x6f, 0xce, 0xb9, 0x6f, 0xe8, 0xa1, 0xfb, 0x1e, 0xd1, 0xa5, 0xa9, 0x86, 0x1e, + 0xb6, 0x1c, 0x3f, 0xc2, 0x1f, 0x03, 0xd4, 0x6b, 0x6e, 0x0e, 0x3f, 0x5e, 0x7b, 0xfc, 0x96, 0xc9, + 0xc3, 0x27, 0xff, 0xad, 0xe3, 0x77, 0x1f, 0xbb, 0xdd, 0xef, 0xe0, 0x78, 0x95, 0xdd, 0x1b, 0xfb, + 0xb7, 0x5e, 0xbe, 0x9f, 0x87, 0xc1, 0xf1, 0x3c, 0x0c, 0xbe, 0xcc, 0xc3, 0xe0, 0xcd, 0x22, 0xec, + 0x1c, 0x2f, 0xc2, 0xce, 0xa7, 0x45, 0xd8, 0x79, 0xbe, 0x93, 0x49, 0xbb, 0x5f, 0x4d, 0x08, 0x87, + 0x82, 0x72, 0x30, 0x05, 0x98, 0x5a, 0x7e, 0x94, 0x01, 0x9d, 0xde, 0xa5, 0x05, 0xa4, 0x55, 0x2e, + 0x4c, 0x03, 0x8b, 0xef, 0x8d, 0x96, 0xbc, 0xd1, 0x69, 0x3c, 0x3b, 0x2b, 0x85, 0x99, 0xf4, 0xdc, + 0x4f, 0x7a, 0xfb, 0x47, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xe5, 0x7f, 0xa8, 0x93, 0x04, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go b/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go index aef8cbe350f..776716ffa61 100644 --- a/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go +++ b/modules/apps/27-interchain-accounts/controller/types/query.pb.gw.go @@ -256,7 +256,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_InterchainAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"ibc", "apps", "interchain_accounts", "controller", "v1", "owner", "connection", "connection_id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_InterchainAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "apps", "interchain_accounts", "controller", "v1", "owners", "owner", "connections", "connection_id"}, "", runtime.AssumeColonVerbOpt(true))) pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"ibc", "apps", "interchain_accounts", "controller", "v1", "params"}, "", runtime.AssumeColonVerbOpt(true))) ) From 36718dda12ea6fa5b1357a790225f36890bb43cc Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Wed, 7 Sep 2022 18:53:08 +0200 Subject: [PATCH 7/8] adding changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a84e94470a0..422ed22b11c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -98,6 +98,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Features * (apps/27-interchain-accounts) [\#2147](https://github.com/cosmos/ibc-go/pull/2147) Adding a `SubmitTx` gRPC endpoint for the ICS27 Controller module which allows owners of interchain accounts to submit transactions. This replaces the previously existing need for authentication modules to implement this standard functionality. +* (apps/27-interchain-accounts) [\#2193](https://github.com/cosmos/ibc-go/pull/2193) Adding `InterchainAccount` gRPC query endpont to ICS27 `controller` submodule to allow users to retrieve registered interchain account addresses. ### Bug Fixes From 138d0c061193c507a97199dcb67302b65c477b7c Mon Sep 17 00:00:00 2001 From: Damian Nolan Date: Thu, 8 Sep 2022 11:53:43 +0200 Subject: [PATCH 8/8] Update modules/apps/27-interchain-accounts/controller/client/cli/query.go --- .../apps/27-interchain-accounts/controller/client/cli/query.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/apps/27-interchain-accounts/controller/client/cli/query.go b/modules/apps/27-interchain-accounts/controller/client/cli/query.go index 799dfeac78b..24135bf4818 100644 --- a/modules/apps/27-interchain-accounts/controller/client/cli/query.go +++ b/modules/apps/27-interchain-accounts/controller/client/cli/query.go @@ -18,7 +18,7 @@ func GetCmdQueryInterchainAccount() *cobra.Command { Short: "Query the interchain account address for a given owner on a particular connection", Long: "Query the controller submodule for the interchain account address for a given owner on a particular connection", Args: cobra.ExactArgs(2), - Example: fmt.Sprintf("%s query interchain-accounts controller interchain-account connection-0 cosmos1layxcsmyye0dc0har9sdfzwckaz8sjwlfsj8zs", version.AppName), + Example: fmt.Sprintf("%s query interchain-accounts controller interchain-account cosmos1layxcsmyye0dc0har9sdfzwckaz8sjwlfsj8zs connection-0", version.AppName), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientQueryContext(cmd) if err != nil {