diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1b84e25730c..dfafb5096b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -100,6 +100,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
diff --git a/docs/client/swagger-ui/swagger.yaml b/docs/client/swagger-ui/swagger.yaml
index 2952a69748d..b11b1e21c36 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/owners/{owner}/connections/{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 c57a41eb184..c9e6f7c47e0 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/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/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..24135bf4818 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 [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),
+ 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 {
+ return err
+ }
+
+ queryClient := types.NewQueryClient(clientCtx)
+ req := &types.QueryInterchainAccountRequest{
+ Owner: args[0],
+ ConnectionId: 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.go b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go
index c44e30018e4..41e0f83374c 100644
--- a/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go
+++ b/modules/apps/27-interchain-accounts/controller/keeper/grpc_query.go
@@ -4,16 +4,41 @@ 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) {
+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,
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..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
@@ -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 req *types.QueryInterchainAccountRequest
+
+ testCases := []struct {
+ name string
+ malleate func()
+ expPass bool
+ }{
+ {
+ "success",
+ func() {},
+ true,
+ },
+ {
+ "empty request",
+ func() {
+ req = nil
+ },
+ false,
+ },
+ {
+ "empty owner address",
+ func() {
+ req.Owner = ""
+ },
+ false,
+ },
+ {
+ "invalid connection, account address not found",
+ func() {
+ req.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)
+
+ req = &types.QueryInterchainAccountRequest{
+ ConnectionId: ibctesting.FirstConnectionID,
+ Owner: ibctesting.TestAccAddress,
+ }
+
+ tc.malleate()
+
+ 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)
+
+ 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..92869099e91 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,37 @@ 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,
+ // 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, 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.
@@ -156,6 +267,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 +281,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 +301,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 +311,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 +322,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 +362,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 +375,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 +511,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 +569,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..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
@@ -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, 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)))
)
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..4bc7ffe4d2d 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/owners/{owner}/connections/{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 {}