diff --git a/docs/swagger.yml b/docs/swagger.yml index eec815890..005049d23 100644 --- a/docs/swagger.yml +++ b/docs/swagger.yml @@ -2184,181 +2184,9 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } parameters: - name: body in: body @@ -2411,181 +2239,65 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + chain_id: + type: string + intents: + type: string + from_address: + type: string + description: >- + MsgSignalIntent represents a message type for signalling voting + intent for - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + one or more validators. + tags: + - Msg + /quicksilver/tx/v1/interchainstaking/redeem: + post: + summary: |- + RequestRedemption defines a method for requesting burning of qAssets for + native assets. + operationId: RequestRedemption + responses: + '200': + description: A successful response. + schema: + type: object + description: >- + MsgRequestRedemptionResponse defines the MsgRequestRedemption + response type. + 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: body in: body @@ -2593,32 +2305,42 @@ paths: schema: type: object properties: - chain_id: - type: string - intents: + value: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + destination_address: type: string from_address: type: string description: >- - MsgSignalIntent represents a message type for signalling voting - intent for + MsgRequestRedemption represents a message type to request a burn + of qAssets - one or more validators. + for native assets. tags: - Msg - /quicksilver/tx/v1/interchainstaking/redeem: + /quicksilver/tx/v1/interchainstaking/reopen_channel: post: - summary: |- - RequestRedemption defines a method for requesting burning of qAssets for - native assets. - operationId: RequestRedemption + operationId: GovReopenChannel responses: '200': description: A successful response. schema: type: object description: >- - MsgRequestRedemptionResponse defines the MsgRequestRedemption + MsgGovReopenChannelResponse defines the MsgGovReopenChannel response type. default: description: An unexpected error response. @@ -2639,181 +2361,9 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } parameters: - name: body in: body @@ -2821,43 +2371,51 @@ paths: schema: type: object properties: - value: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - destination_address: + title: type: string - from_address: + description: + type: string + connection_id: + type: string + port_id: + type: string + authority: type: string - description: >- - MsgRequestRedemption represents a message type to request a burn - of qAssets - - for native assets. tags: - Msg - /quicksilver/tx/v1/interchainstaking/reopen_channel: - post: - operationId: GovReopenChannel + /quicksilver/interchainstaking/v1/delegator_intents/{delegator_address}: + get: + summary: >- + DelegatorIntents provides data on the intent of the delegator for all + zones + operationId: DelegatorIntents responses: '200': description: A successful response. schema: type: object - description: >- - MsgGovReopenChannelResponse defines the MsgGovReopenChannel - response type. + properties: + intents: + type: array + items: + type: object + properties: + chain_id: + type: string + intent: + type: object + properties: + delegator: + type: string + intents: + type: array + items: + type: object + properties: + valoper_address: + type: string + weight: + type: string default: description: An unexpected error response. schema: @@ -2877,3541 +2435,889 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized + value: + type: string + format: byte + parameters: + - name: delegator_address + in: path + required: true + type: string + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/mapped_addresses/{address}: + get: + summary: >- + MappedAccounts provides data on the mapped accounts for a given user + over different host chains. + operationId: MappedAccounts + responses: + '200': + description: A successful response. + schema: + type: object + properties: + RemoteAddressMap: + type: object + additionalProperties: + type: string + format: byte + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - protocol buffer message. This string must contain at - least + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - one "/" character. The last segment of the URL's path - must represent + corresponding request message has used PageRequest. - the fully qualified name of the type (as in + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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: address + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. - `path/google.protobuf.Duration`). The name should be in - a canonical form + It is less efficient than using key. Only one of offset or key + should - (e.g., leading "." is not accepted). + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include - In practice, teams usually precompile into the binary - all types that they + a count of the total number of items available for pagination in + UIs. - expect it to use in the context of Any. However, for - URLs which use the + count_total is only respected when offset is used. It is ignored + when key - scheme `http`, `https`, or no scheme, one can optionally - set up a type + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. - server that maps type URLs to message definitions as - follows: + + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/users/{user_address}/withdrawal_records: + get: + summary: WithdrawalRecords provides data on the active withdrawals. + operationId: UserWithdrawalRecords + responses: + '200': + description: A successful response. + schema: + type: object + properties: + withdrawals: + type: array + items: + type: object + properties: + chain_id: + type: string + delegator: + type: string + distribution: + type: array + items: + type: object + properties: + valoper: + type: string + amount: + type: string + format: uint64 + recipient: + type: string + amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - * If no scheme is provided, `https` is assumed. + NOTE: The amount field is an Int which implements the + custom method - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) + signatures required by gogoproto. + burn_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - Note: this functionality is not currently available in - the official - protobuf release, and it is not used for type URLs - beginning with + NOTE: The amount field is an Int which implements the + custom method - type.googleapis.com. + signatures required by gogoproto. + txhash: + type: string + status: + type: integer + format: int32 + completion_time: + type: string + format: date-time + requeued: + type: boolean + acknowledged: + type: boolean + epoch_number: + type: string + format: int64 + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - Schemes other than `http`, `https` (or the empty scheme) - might be + corresponding request message has used PageRequest. - used with implementation specific semantics. + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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 - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. + parameters: + - name: user_address + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + It is less efficient than using key. Only one of offset or key + should - Protobuf library provides support to pack/unpack Any values - in the form + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. - of utility functions or additional generated methods of the - Any type. + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + a count of the total number of items available for pagination in + UIs. - Example 1: Pack and unpack a message in C++. + count_total is only respected when offset is used. It is ignored + when key - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. - Example 2: Pack and unpack a message in Java. - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: body - in: body - required: true - schema: - type: object - properties: - title: - type: string - description: - type: string - connection_id: - type: string - port_id: - type: string - authority: - type: string + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean tags: - - Msg - /quicksilver/interchainstaking/v1/delegator_intents/{delegator_address}: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zone/{chain_id}: get: - summary: >- - DelegatorIntents provides data on the intent of the delegator for all - zones - operationId: DelegatorIntents + summary: Zone provides meta data on a specific zone. + operationId: Zone responses: '200': description: A successful response. schema: type: object properties: - intents: - type: array - items: - type: object - properties: - chain_id: - type: string - intent: - type: object - properties: - delegator: - type: string - intents: - type: array - items: - type: object - properties: - valoper_address: - type: string - weight: - type: string - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least + zone: + type: object + properties: + connection_id: + type: string + chain_id: + type: string + deposit_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - one "/" character. The last segment of the URL's path - must represent - the fully qualified name of the type (as in + NOTE: The amount field is an Int which implements + the custom method - `path/google.protobuf.Duration`). The name should be in - a canonical form + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + withdrawal_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - (e.g., leading "." is not accepted). + NOTE: The amount field is an Int which implements + the custom method - In practice, teams usually precompile into the binary - all types that they + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + performance_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - expect it to use in the context of Any. However, for - URLs which use the - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON + NOTE: The amount field is an Int which implements + the custom method - representation, that representation will be embedded adding - a field + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + delegation_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. - `value` which holds the custom JSON in addition to the - `@type` - field. Example (for message [google.protobuf.Duration][]): + NOTE: The amount field is an Int which implements + the custom method - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: delegator_address - in: path - required: true - type: string - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/mapped_addresses/{address}: - get: - summary: >- - MappedAccounts provides data on the mapped accounts for a given user - over different host chains. - operationId: MappedAccounts - responses: - '200': - description: A successful response. - schema: - type: object - properties: - RemoteAddressMap: - type: object - additionalProperties: - type: string - format: byte - pagination: - type: object - properties: - next_key: + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + account_prefix: type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: + local_denom: type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: address - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/users/{user_address}/withdrawal_records: - get: - summary: WithdrawalRecords provides data on the active withdrawals. - operationId: UserWithdrawalRecords - responses: - '200': - description: A successful response. - schema: - type: object - properties: - withdrawals: - type: array - items: - type: object - properties: - chain_id: - type: string - delegator: - type: string - distribution: - type: array - items: - type: object - properties: - valoper: - type: string - amount: - type: string - format: uint64 - recipient: - type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - burn_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - txhash: - type: string - status: - type: integer - format: int32 - completion_time: - type: string - format: date-time - requeued: - type: boolean - acknowledged: - type: boolean - epoch_number: - type: string - format: int64 - pagination: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: user_address - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zone/{chain_id}: - get: - summary: Zone provides meta data on a specific zone. - operationId: Zone - responses: - '200': - description: A successful response. - schema: - type: object - properties: - zone: - type: object - properties: - connection_id: - type: string - chain_id: - type: string - deposit_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - withdrawal_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - performance_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - delegation_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - account_prefix: - type: string - local_denom: - type: string - base_denom: - type: string - redemption_rate: - type: string - last_redemption_rate: - type: string - validators: - type: array - items: - type: object - properties: - valoper_address: - type: string - commission_rate: - type: string - delegator_shares: - type: string - voting_power: - type: string - score: - type: string - status: - type: string - jailed: - type: boolean - tombstoned: - type: boolean - jailed_since: - type: string - format: date-time - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must - contain at least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name - should be in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, - for URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message - definitions as follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup - results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently - available in the official - - protobuf release, and it is not used for type - URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of - the above specified type. - description: >- - `Any` contains an arbitrary serialized protocol - buffer message along with a - - URL that describes the type of the serialized - message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods - of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will - by default use - - 'type.googleapis.com/full.type.name' as the type URL - and the unpack - - methods only use the fully qualified type name after - the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" - will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded - message, with an - - additional field `@type` which contains the type - URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to - the `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - aggregate_intent: - type: array - items: - type: object - properties: - valoper_address: - type: string - weight: - type: string - multi_send: - type: boolean - liquidity_module: - type: boolean - withdrawal_waitgroup: - type: integer - format: int64 - ibc_next_validators_hash: - type: string - format: byte - validator_selection_allocation: - type: string - format: uint64 - holdings_allocation: - type: string - format: uint64 - last_epoch_height: - type: string - format: int64 - tvl: - type: string - unbonding_period: - type: string - format: int64 - messages_per_tx: - type: string - format: int64 - decimals: - type: string - format: int64 - unbonding_enabled: - type: boolean - deposits_enabled: - type: boolean - return_to_sender: - type: boolean - is_118: - type: boolean - subzoneInfo: - type: object - properties: - authority: - type: string - base_chainID: - type: string - stats: - type: object - properties: - chain_id: - type: string - deposited: - type: string - format: int64 - deposits: - type: string - format: int64 - depositors: - type: string - format: int64 - delegated: - type: string - format: int64 - supply: - type: string - format: int64 - distance_to_target: - type: string - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: chain_id - in: path - required: true - type: string - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones: - get: - summary: Zones provides meta data on connected zones. - operationId: Zones - responses: - '200': - description: A successful response. - schema: - type: object - properties: - zones: - type: array - items: - type: object - properties: - connection_id: - type: string - chain_id: - type: string - deposit_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - withdrawal_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - performance_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - delegation_address: - type: object - properties: - address: - type: string - balance: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements - the custom method - - signatures required by gogoproto. - description: >- - balance defines the different coins this balance - holds. - port_name: - type: string - withdrawal_address: - type: string - balance_waitgroup: - type: integer - format: int64 - account_prefix: - type: string - local_denom: - type: string - base_denom: - type: string - redemption_rate: - type: string - last_redemption_rate: - type: string - validators: - type: array - items: - type: object - properties: - valoper_address: - type: string - commission_rate: - type: string - delegator_shares: - type: string - voting_power: - type: string - score: - type: string - status: - type: string - jailed: - type: boolean - tombstoned: - type: boolean - jailed_since: - type: string - format: date-time - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies - the type of the serialized - - protocol buffer message. This string must - contain at least - - one "/" character. The last segment of the - URL's path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name - should be in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. - However, for URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message - definitions as follows: - - - * If no scheme is provided, `https` is - assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup - results based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently - available in the official - - protobuf release, and it is not used for type - URLs beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the - empty scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of - the above specified type. - description: >- - `Any` contains an arbitrary serialized protocol - buffer message along with a - - URL that describes the type of the serialized - message. - - - Protobuf library provides support to pack/unpack - Any values in the form - - of utility functions or additional generated - methods of the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will - by default use - - 'type.googleapis.com/full.type.name' as the type - URL and the unpack - - methods only use the fully qualified type name - after the last '/' - - in the type URL, for example "foo.bar.com/x/y.z" - will yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded - message, with an - - additional field `@type` which contains the type - URL. Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has - a custom JSON - - representation, that representation will be - embedded adding a field - - `value` which holds the custom JSON in addition to - the `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - aggregate_intent: - type: array - items: - type: object - properties: - valoper_address: - type: string - weight: - type: string - multi_send: - type: boolean - liquidity_module: - type: boolean - withdrawal_waitgroup: - type: integer - format: int64 - ibc_next_validators_hash: - type: string - format: byte - validator_selection_allocation: - type: string - format: uint64 - holdings_allocation: - type: string - format: uint64 - last_epoch_height: - type: string - format: int64 - tvl: - type: string - unbonding_period: - type: string - format: int64 - messages_per_tx: - type: string - format: int64 - decimals: - type: string - format: int64 - unbonding_enabled: - type: boolean - deposits_enabled: - type: boolean - return_to_sender: - type: boolean - is_118: - type: boolean - subzoneInfo: - type: object - properties: - authority: - type: string - base_chainID: - type: string - stats: - type: array - items: - type: object - properties: - chain_id: - type: string - deposited: - type: string - format: int64 - deposits: - type: string - format: int64 - depositors: - type: string - format: int64 - delegated: - type: string - format: int64 - supply: - type: string - format: int64 - distance_to_target: - type: string - pagination: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/delegations: - get: - summary: Delegations provides data on the delegations for the given zone. - operationId: Delegations - responses: - '200': - description: A successful response. - schema: - type: object - properties: - delegations: - type: array - items: - type: object - properties: - delegation_address: - type: string - validator_address: - type: string - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - height: - type: string - format: int64 - redelegation_end: - type: string - format: int64 - tvl: - type: string - format: int64 - pagination: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: chain_id - in: path - required: true - type: string - - name: pagination.key - description: |- - key is a value returned in PageResponse.next_key to begin - querying the next page most efficiently. Only one of offset or key - should be set. - in: query - required: false - type: string - format: byte - - name: pagination.offset - description: >- - offset is a numeric offset that can be used when key is unavailable. - - It is less efficient than using key. Only one of offset or key - should - - be set. - in: query - required: false - type: string - format: uint64 - - name: pagination.limit - description: >- - limit is the total number of results to be returned in the result - page. - - If left empty it will default to a value to be set by each app. - in: query - required: false - type: string - format: uint64 - - name: pagination.count_total - description: >- - count_total is set to true to indicate that the result set should - include - - a count of the total number of items available for pagination in - UIs. - - count_total is only respected when offset is used. It is ignored - when key - - is set. - in: query - required: false - type: boolean - - name: pagination.reverse - description: >- - reverse is set to true if results are to be returned in the - descending order. - - - Since: cosmos-sdk 0.43 - in: query - required: false - type: boolean - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/delegator_intent/{delegator_address}: - get: - summary: >- - DelegatorIntent provides data on the intent of the delegator for the - given - - zone. - operationId: DelegatorIntent - responses: - '200': - description: A successful response. - schema: - type: object - properties: - intent: - type: object - properties: - delegator: - type: string - intents: - type: array - items: - type: object - properties: - valoper_address: - type: string - weight: - type: string - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: chain_id - in: path - required: true - type: string - - name: delegator_address - in: path - required: true - type: string - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/deposit_address: - get: - summary: >- - DepositAccount provides data on the deposit address for a connected - zone. - operationId: DepositAccount - responses: - '200': - description: A successful response. - schema: - type: object - properties: - deposit_account_address: - type: string - title: |- - QueryDepositAccountForChainResponse the response type for the - Query/InterchainAccountAddress RPC - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - parameters: - - name: chain_id - in: path - required: true - type: string - tags: - - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/deposits/{tx_hash}: - get: - operationId: TxStatus - responses: - '200': - description: A successful response. - schema: - type: object - properties: - receipt: + base_denom: + type: string + redemption_rate: + type: string + last_redemption_rate: + type: string + validators: + type: array + items: + type: object + properties: + valoper_address: + type: string + commission_rate: + type: string + delegator_shares: + type: string + voting_power: + type: string + score: + type: string + status: + type: string + jailed: + type: boolean + tombstoned: + type: boolean + jailed_since: + type: string + format: date-time + aggregate_intent: + type: array + items: + type: object + properties: + valoper_address: + type: string + weight: + type: string + multi_send: + type: boolean + liquidity_module: + type: boolean + withdrawal_waitgroup: + type: integer + format: int64 + ibc_next_validators_hash: + type: string + format: byte + validator_selection_allocation: + type: string + format: uint64 + holdings_allocation: + type: string + format: uint64 + last_epoch_height: + type: string + format: int64 + tvl: + type: string + unbonding_period: + type: string + format: int64 + messages_per_tx: + type: string + format: int64 + decimals: + type: string + format: int64 + unbonding_enabled: + type: boolean + deposits_enabled: + type: boolean + return_to_sender: + type: boolean + is_118: + type: boolean + subzoneInfo: + type: object + properties: + authority: + type: string + base_chainID: + type: string + stats: type: object properties: chain_id: type: string - sender: + deposited: type: string - txhash: + format: int64 + deposits: type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - first_seen: + format: int64 + depositors: type: string - format: date-time - completed: + format: int64 + delegated: + type: string + format: int64 + supply: + type: string + format: int64 + distance_to_target: type: string - format: date-time 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + 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: chain_id in: path required: true type: string - - name: tx_hash - in: path - required: true - type: string tags: - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/receipts: + /quicksilver/interchainstaking/v1/zones: get: - summary: Delegations provides data on the delegations for the given zone. - operationId: Receipts + summary: Zones provides meta data on connected zones. + operationId: Zones responses: '200': description: A successful response. schema: type: object properties: - receipts: + zones: + type: array + items: + type: object + properties: + connection_id: + type: string + chain_id: + type: string + deposit_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + withdrawal_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + performance_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + delegation_address: + type: object + properties: + address: + type: string + balance: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements + the custom method + + signatures required by gogoproto. + description: >- + balance defines the different coins this balance + holds. + port_name: + type: string + withdrawal_address: + type: string + balance_waitgroup: + type: integer + format: int64 + account_prefix: + type: string + local_denom: + type: string + base_denom: + type: string + redemption_rate: + type: string + last_redemption_rate: + type: string + validators: + type: array + items: + type: object + properties: + valoper_address: + type: string + commission_rate: + type: string + delegator_shares: + type: string + voting_power: + type: string + score: + type: string + status: + type: string + jailed: + type: boolean + tombstoned: + type: boolean + jailed_since: + type: string + format: date-time + aggregate_intent: + type: array + items: + type: object + properties: + valoper_address: + type: string + weight: + type: string + multi_send: + type: boolean + liquidity_module: + type: boolean + withdrawal_waitgroup: + type: integer + format: int64 + ibc_next_validators_hash: + type: string + format: byte + validator_selection_allocation: + type: string + format: uint64 + holdings_allocation: + type: string + format: uint64 + last_epoch_height: + type: string + format: int64 + tvl: + type: string + unbonding_period: + type: string + format: int64 + messages_per_tx: + type: string + format: int64 + decimals: + type: string + format: int64 + unbonding_enabled: + type: boolean + deposits_enabled: + type: boolean + return_to_sender: + type: boolean + is_118: + type: boolean + subzoneInfo: + type: object + properties: + authority: + type: string + base_chainID: + type: string + stats: type: array items: type: object properties: chain_id: type: string - sender: + deposited: type: string - txhash: + format: int64 + deposits: type: string - amount: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an - amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - first_seen: + format: int64 + depositors: type: string - format: date-time - completed: + format: int64 + delegated: + type: string + format: int64 + supply: + type: string + format: int64 + distance_to_target: type: string - format: date-time pagination: type: object properties: @@ -6459,181 +3365,161 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type + parameters: + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. - name "y.z". + It is less efficient than using key. Only one of offset or key + should + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. - JSON + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + a count of the total number of items available for pagination in + UIs. - The JSON representation of an `Any` value uses the regular + count_total is only respected when offset is used. It is ignored + when key - representation of the deserialized, embedded message, with - an + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. - additional field `@type` which contains the type URL. - Example: - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zones/{chain_id}/delegations: + get: + summary: Delegations provides data on the delegations for the given zone. + operationId: Delegations + responses: + '200': + description: A successful response. + schema: + type: object + properties: + delegations: + type: array + items: + type: object + properties: + delegation_address: + type: string + validator_address: + type: string + amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - If the embedded message type is well-known and has a custom - JSON + NOTE: The amount field is an Int which implements the + custom method - representation, that representation will be embedded adding - a field + signatures required by gogoproto. + height: + type: string + format: int64 + redelegation_end: + type: string + format: int64 + tvl: + type: string + format: int64 + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - `value` which holds the custom JSON in addition to the - `@type` + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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: chain_id in: path @@ -6697,34 +3583,230 @@ paths: type: boolean tags: - QueryInterchainStaking - /quicksilver/interchainstaking/v1/zones/{chain_id}/redelegation_records: + /quicksilver/interchainstaking/v1/zones/{chain_id}/delegator_intent/{delegator_address}: + get: + summary: >- + DelegatorIntent provides data on the intent of the delegator for the + given + + zone. + operationId: DelegatorIntent + responses: + '200': + description: A successful response. + schema: + type: object + properties: + intent: + type: object + properties: + delegator: + type: string + intents: + type: array + items: + type: object + properties: + valoper_address: + type: string + weight: + type: string + 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: chain_id + in: path + required: true + type: string + - name: delegator_address + in: path + required: true + type: string + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zones/{chain_id}/deposit_address: + get: + summary: >- + DepositAccount provides data on the deposit address for a connected + zone. + operationId: DepositAccount + responses: + '200': + description: A successful response. + schema: + type: object + properties: + deposit_account_address: + type: string + title: |- + QueryDepositAccountForChainResponse the response type for the + Query/InterchainAccountAddress RPC + 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: chain_id + in: path + required: true + type: string + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zones/{chain_id}/deposits/{tx_hash}: + get: + operationId: TxStatus + responses: + '200': + description: A successful response. + schema: + type: object + properties: + receipt: + type: object + properties: + chain_id: + type: string + sender: + type: string + txhash: + type: string + amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + first_seen: + type: string + format: date-time + completed: + type: string + format: date-time + 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: chain_id + in: path + required: true + type: string + - name: tx_hash + in: path + required: true + type: string + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zones/{chain_id}/receipts: get: - summary: RedelegationRecords provides data on the active unbondings. - operationId: RedelegationRecords + summary: Delegations provides data on the delegations for the given zone. + operationId: Receipts responses: '200': description: A successful response. schema: type: object properties: - redelegations: + receipts: type: array items: type: object properties: chain_id: type: string - epoch_number: - type: string - format: int64 - source: + sender: type: string - destination: + txhash: type: string amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an + amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + first_seen: type: string - format: int64 - completion_time: + format: date-time + completed: type: string format: date-time pagination: @@ -6774,181 +3856,152 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON + parameters: + - name: chain_id + in: path + required: true + type: string + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. + in: query + required: false + type: string + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + It is less efficient than using key. Only one of offset or key + should - The JSON representation of an `Any` value uses the regular + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. - representation of the deserialized, embedded message, with - an + If left empty it will default to a value to be set by each app. + in: query + required: false + type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include - additional field `@type` which contains the type URL. - Example: + a count of the total number of items available for pagination in + UIs. - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + count_total is only respected when offset is used. It is ignored + when key - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. - If the embedded message type is well-known and has a custom - JSON - representation, that representation will be embedded adding - a field + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean + tags: + - QueryInterchainStaking + /quicksilver/interchainstaking/v1/zones/{chain_id}/redelegation_records: + get: + summary: RedelegationRecords provides data on the active unbondings. + operationId: RedelegationRecords + responses: + '200': + description: A successful response. + schema: + type: object + properties: + redelegations: + type: array + items: + type: object + properties: + chain_id: + type: string + epoch_number: + type: string + format: int64 + source: + type: string + destination: + type: string + amount: + type: string + format: int64 + completion_time: + type: string + format: date-time + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - `value` which holds the custom JSON in addition to the - `@type` + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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: chain_id in: path @@ -7084,182 +4137,10 @@ paths: type: object properties: type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + type: string + value: + type: string + format: byte parameters: - name: chain_id in: path @@ -7356,188 +4237,6 @@ paths: jailed_since: type: string format: date-time - consensus_pubkey: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the - type of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's - path must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the - binary all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available - in the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the - regular - - representation of the deserialized, embedded message, - with an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a - custom JSON - - representation, that representation will be embedded - adding a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message - [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } pagination: type: object properties: @@ -7560,206 +4259,34 @@ paths: PageResponse is to be embedded in gRPC response messages where the - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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: chain_id in: path @@ -7882,252 +4409,80 @@ paths: denom: type: string amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - txhash: - type: string - status: - type: integer - format: int32 - completion_time: - type: string - format: date-time - requeued: - type: boolean - acknowledged: - type: boolean - epoch_number: - type: string - format: int64 - pagination: - type: object - properties: - next_key: - type: string - format: byte - description: |- - next_key is the key to be passed to PageRequest.key to - query the next page most efficiently. It will be empty if - there are no more results. - total: - type: string - format: uint64 - title: >- - total is total number of results available if - PageRequest.count_total - - was set, its value is undefined otherwise - description: >- - PageResponse is to be embedded in gRPC response messages where - the - - corresponding request message has used PageRequest. - - message SomeResponse { - repeated Bar results = 1; - PageResponse page = 2; - } - 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 - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + type: string + description: >- + Coin defines a token with a denomination and an amount. - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - If the embedded message type is well-known and has a custom - JSON + NOTE: The amount field is an Int which implements the + custom method - representation, that representation will be embedded adding - a field + signatures required by gogoproto. + txhash: + type: string + status: + type: integer + format: int32 + completion_time: + type: string + format: date-time + requeued: + type: boolean + acknowledged: + type: boolean + epoch_number: + type: string + format: int64 + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - `value` which holds the custom JSON in addition to the - `@type` + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - field. Example (for message [google.protobuf.Duration][]): + corresponding request message has used PageRequest. - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + 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: chain_id in: path @@ -8321,181 +4676,9 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in - a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can optionally - set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results based - on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. - - - Schemes other than `http`, `https` (or the empty scheme) - might be - - used with implementation specific semantics. value: type: string format: byte - description: >- - Must be a valid serialized protocol buffer of the above - specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any values - in the form - - of utility functions or additional generated methods of the - Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and the - unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will yield - type - - name "y.z". - - - JSON - - - The JSON representation of an `Any` value uses the regular - - representation of the deserialized, embedded message, with - an - - additional field `@type` which contains the type URL. - Example: - - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } - - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } - - If the embedded message type is well-known and has a custom - JSON - - representation, that representation will be embedded adding - a field - - `value` which holds the custom JSON in addition to the - `@type` - - field. Example (for message [google.protobuf.Duration][]): - - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } parameters: - name: chain_id in: path diff --git a/proto/quicksilver/interchainstaking/v1/interchainstaking.proto b/proto/quicksilver/interchainstaking/v1/interchainstaking.proto index dd4b4aecc..a9e57afa7 100644 --- a/proto/quicksilver/interchainstaking/v1/interchainstaking.proto +++ b/proto/quicksilver/interchainstaking/v1/interchainstaking.proto @@ -4,7 +4,6 @@ package quicksilver.interchainstaking.v1; import "cosmos/base/v1beta1/coin.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/quicksilver-zone/quicksilver/x/interchainstaking/types"; @@ -158,8 +157,6 @@ message Validator { (gogoproto.nullable) = false, (gogoproto.stdtime) = true ]; - // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. - google.protobuf.Any consensus_pubkey = 10 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; } message DelegatorIntent { diff --git a/x/interchainstaking/keeper/callbacks.go b/x/interchainstaking/keeper/callbacks.go index 8c8e30729..c613c963a 100644 --- a/x/interchainstaking/keeper/callbacks.go +++ b/x/interchainstaking/keeper/callbacks.go @@ -21,6 +21,7 @@ import ( bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" clienttypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" @@ -76,7 +77,8 @@ func (c Callbacks) RegisterCallbacks() icqtypes.QueryCallbacks { AddCallback("perfbalance", Callback(PerfBalanceCallback)). AddCallback("accountbalance", Callback(AccountBalanceCallback)). AddCallback("allbalances", Callback(AllBalancesCallback)). - AddCallback("delegationaccountbalance", Callback(DelegationAccountBalanceCallback)) + AddCallback("delegationaccountbalance", Callback(DelegationAccountBalanceCallback)). + AddCallback("signinginfo", Callback(SigningInfoCallback)) return a.(Callbacks) } @@ -258,6 +260,62 @@ func DepositIntervalCallback(k *Keeper, ctx sdk.Context, args []byte, query icqt return nil } +func SigningInfoCallback(k *Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + zone, found := k.GetZone(ctx, query.GetChainId()) + if !found { + return fmt.Errorf("no registered zone for chain id: %s", zone.ChainId) + } + + k.Logger(ctx).Debug("Validator signing info callback", "zone", zone.ChainId) + + valSigningInfo := slashingtypes.ValidatorSigningInfo{} + if len(args) == 0 { + return errors.New("attempted to unmarshal zero length byte slice (10)") + } + err := k.cdc.Unmarshal(args, &valSigningInfo) + if err != nil { + return err + } + if valSigningInfo.Tombstoned { + consAddr, err := sdk.ConsAddressFromBech32(valSigningInfo.Address) + if err != nil { + return err + } + valAddr, found := k.GetValidatorAddrByConsAddr(ctx, zone.ChainId, consAddr) + if !found { + return fmt.Errorf("can not get validator address from consensus address: %s", valSigningInfo.Address) + } + + k.Logger(ctx).Error("Tombstoned validator found", "valoper", valAddr) + + valAddrBytes, err := addressutils.ValAddressFromBech32(valAddr, zone.GetValoperPrefix()) + if err != nil { + return err + } + val, found := k.GetValidator(ctx, zone.ChainId, valAddrBytes) + if !found { + err := k.SetValidator(ctx, zone.ChainId, types.Validator{ + ValoperAddress: valAddr, + Jailed: true, + Tombstoned: true, + }) + if err != nil { + return err + } + } else { + val.Tombstoned = true + if err = k.SetValidator(ctx, zone.ChainId, val); err != nil { + return err + } + } + k.Logger(ctx).Info("%q on chainID: %q was found to already have been tombstoned, added information", val.ValoperAddress, zone.ChainId) + + return nil + } + + return nil +} + // pulled directly from ibc-go tm light client // checkTrustedHeader checks that consensus state matches trusted fields of Header. func checkTrustedHeader(header *tmclienttypes.Header, consState *tmclienttypes.ConsensusState) error { diff --git a/x/interchainstaking/keeper/callbacks_test.go b/x/interchainstaking/keeper/callbacks_test.go index 015d9afaf..c74840ce1 100644 --- a/x/interchainstaking/keeper/callbacks_test.go +++ b/x/interchainstaking/keeper/callbacks_test.go @@ -13,6 +13,8 @@ import ( "cosmossdk.io/math" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/bech32" "github.com/cosmos/cosmos-sdk/types/query" @@ -20,6 +22,7 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ibctypes "github.com/cosmos/ibc-go/v5/modules/core/02-client/types" @@ -466,6 +469,8 @@ func (suite *KeeperTestSuite) TestHandleValidatorCallback() { func (suite *KeeperTestSuite) TestHandleValidatorCallbackJailedWithSlashing() { completion := time.Now().UTC().Add(time.Hour) + pkAny, err := codectypes.NewAnyWithValue(PKs[0]) + suite.Require().NoError(err) tests := []struct { name string @@ -478,7 +483,7 @@ func (suite *KeeperTestSuite) TestHandleValidatorCallbackJailedWithSlashing() { name: "jailed; single distribution", validator: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *stakingtypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) - return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} + return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, ConsensusPubkey: pkAny, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} }, expected: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *icstypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) @@ -528,7 +533,7 @@ func (suite *KeeperTestSuite) TestHandleValidatorCallbackJailedWithSlashing() { name: "jailed; multi distribution", validator: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *stakingtypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) - return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} + return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, ConsensusPubkey: pkAny, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} }, expected: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *icstypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) @@ -586,7 +591,7 @@ func (suite *KeeperTestSuite) TestHandleValidatorCallbackJailedWithSlashing() { name: "jailed; multi distribution, unrelated validators - no-op", validator: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *stakingtypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) - return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} + return &stakingtypes.Validator{OperatorAddress: vals[0].ValoperAddress, ConsensusPubkey: pkAny, Jailed: true, Status: stakingtypes.Bonded, Tokens: vals[0].VotingPower.Mul(sdk.NewInt(19)).Quo(sdk.NewInt(20)), DelegatorShares: vals[0].DelegatorShares, Commission: stakingtypes.NewCommission(vals[0].CommissionRate, sdk.MustNewDecFromStr("0.5"), sdk.MustNewDecFromStr("0.5"))} }, expected: func(ctx sdk.Context, qs *app.Quicksilver, zone icstypes.Zone) *icstypes.Validator { vals := qs.InterchainstakingKeeper.GetValidators(ctx, zone.ChainId) @@ -1954,6 +1959,215 @@ func (suite *KeeperTestSuite) TestDepositTxCallback() { } } +func (suite *KeeperTestSuite) TestSigningInfoCallback() { + validator := addressutils.GenerateValAddressForTest() + pubKey := simapp.CreateTestPubKeys(1)[0] + + pkAny, err := codectypes.NewAnyWithValue(pubKey) + suite.Require().NoError(err) + + newValidator := stakingtypes.Validator{ + OperatorAddress: validator.String(), + ConsensusPubkey: pkAny, + } + consAddr, err := newValidator.GetConsAddr() + suite.NoError(err) + + bech32ConsAddress := addressutils.MustEncodeAddressToBech32(sdk.Bech32PrefixConsAddr, consAddr) + testCases := []struct { + name string + malleate func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte + query icqtypes.Query + expectErr bool + check func(quicksilver *app.Quicksilver, ctx sdk.Context) + }{ + // successful callback tombstoned validator + { + name: "successful callback not tombstoned validator ", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + info := slashingtypes.ValidatorSigningInfo{ + Tombstoned: false, + } + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: false, + check: func(quicksilver *app.Quicksilver, ctx sdk.Context) { + zone, found := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) + suite.True(found) + + valAddrBytes, err := addressutils.ValAddressFromBech32(validator.String(), zone.GetValoperPrefix()) + suite.NoError(err) + _, found = quicksilver.InterchainstakingKeeper.GetValidator(ctx, zone.ChainId, valAddrBytes) + suite.False(found) + }, + }, + // wrong chain id + { + name: "wrong chain id", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + info := slashingtypes.ValidatorSigningInfo{} + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: "wrong-chain-id", + }, + expectErr: true, + }, + // args has no len + { + name: "args has no len", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + return []byte{} + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: true, + }, + // wrong type args + { + name: "wrong type args", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + return []byte("wrong type") + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: true, + }, + // consaddress decoding err + { + name: "consaddress decoding err", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + info := slashingtypes.ValidatorSigningInfo{ + Address: "wrong bech32 address", + Tombstoned: true, + } + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: true, + }, + // can't get validator address from consensus address + { + name: "can't get validator address from consensus address", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + info := slashingtypes.ValidatorSigningInfo{ + Address: bech32ConsAddress, + Tombstoned: true, + } + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: true, + }, + // success case not found validator + { + name: "success case not found validator", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + zone, found := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) + suite.True(found) + quicksilver.InterchainstakingKeeper.SetValidatorAddrByConsAddr(ctx, zone.ChainId, newValidator.OperatorAddress, consAddr) + info := slashingtypes.ValidatorSigningInfo{ + Address: bech32ConsAddress, + Tombstoned: true, + } + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: false, + check: func(quicksilver *app.Quicksilver, ctx sdk.Context) { + zone, found := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) + suite.True(found) + + valAddrBytes, err := addressutils.ValAddressFromBech32(validator.String(), zone.GetValoperPrefix()) + suite.NoError(err) + newVal, found := quicksilver.InterchainstakingKeeper.GetValidator(ctx, zone.ChainId, valAddrBytes) + suite.True(found) + suite.True(newVal.Jailed) + suite.True(newVal.Tombstoned) + }, + }, + // success case found validator + { + name: "success case found validator", + malleate: func(quicksilver *app.Quicksilver, ctx sdk.Context) []byte { + zone, found := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) + suite.True(found) + quicksilver.InterchainstakingKeeper.SetValidatorAddrByConsAddr(ctx, zone.ChainId, newValidator.OperatorAddress, consAddr) + err := quicksilver.InterchainstakingKeeper.SetValidator(ctx, zone.ChainId, icstypes.Validator{ + ValoperAddress: validator.String(), + Jailed: false, + Tombstoned: false, + }) + suite.NoError(err) + + info := slashingtypes.ValidatorSigningInfo{ + Address: bech32ConsAddress, + Tombstoned: true, + } + cdc := quicksilver.InterchainstakingKeeper.GetCodec() + bz := cdc.MustMarshal(&info) + return bz + }, + query: icqtypes.Query{ + ChainId: suite.chainB.ChainID, + }, + expectErr: false, + check: func(quicksilver *app.Quicksilver, ctx sdk.Context) { + zone, found := quicksilver.InterchainstakingKeeper.GetZone(ctx, suite.chainB.ChainID) + suite.True(found) + + valAddrBytes, err := addressutils.ValAddressFromBech32(validator.String(), zone.GetValoperPrefix()) + suite.NoError(err) + newVal, found := quicksilver.InterchainstakingKeeper.GetValidator(ctx, zone.ChainId, valAddrBytes) + suite.True(found) + suite.False(newVal.Jailed) + suite.True(newVal.Tombstoned) + }, + }, + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.name), func() { + suite.SetupTest() + suite.setupTestZones() + + quicksilver := suite.GetQuicksilverApp(suite.chainA) + quicksilver.InterchainstakingKeeper.CallbackHandler().RegisterCallbacks() + ctx := suite.chainA.GetContext() + + data := tc.malleate(quicksilver, ctx) + err := keeper.SigningInfoCallback(quicksilver.InterchainstakingKeeper, ctx, data, tc.query) + if tc.expectErr { + suite.Error(err) + } else { + suite.NoError(err) + tc.check(quicksilver, ctx) + } + }) + } +} + func (suite *KeeperTestSuite) TestCheckTMHeaderForZone() { testCases := []struct { name string diff --git a/x/interchainstaking/keeper/hooks.go b/x/interchainstaking/keeper/hooks.go index 2911b6522..afcc15529 100644 --- a/x/interchainstaking/keeper/hooks.go +++ b/x/interchainstaking/keeper/hooks.go @@ -28,172 +28,174 @@ func (*Keeper) BeforeEpochStart(_ sdk.Context, _ string, _ int64) error { // and re-queries icq for new zone info. func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNumber int64) error { // every epoch - if epochIdentifier == epochstypes.EpochIdentifierEpoch { - k.Logger(ctx).Info("handling epoch end", "epoch_identifier", epochIdentifier, "epoch_number", epochNumber) - - epochInfo := k.EpochsKeeper.GetEpochInfo(ctx, epochIdentifier) - k.IterateZones(ctx, func(index int64, zone *types.Zone) (stop bool) { - k.IterateZoneRedelegationRecords(ctx, zone.ChainId, func(index int64, key []byte, record types.RedelegationRecord) (stop bool) { - unbondingPeriod := time.Duration(zone.UnbondingPeriod / 1_000_000_000) - redelegationDuration := time.Duration(epochInfo.CurrentEpoch-record.EpochNumber) * epochInfo.Duration - - if redelegationDuration >= unbondingPeriod { - k.DeleteRedelegationRecord(ctx, record.ChainId, record.Source, record.Destination, record.EpochNumber) - } + if epochIdentifier != epochstypes.EpochIdentifierEpoch { + return nil + } + k.Logger(ctx).Info("handling epoch end", "epoch_identifier", epochIdentifier, "epoch_number", epochNumber) - return false - }) + epochInfo := k.EpochsKeeper.GetEpochInfo(ctx, epochIdentifier) + k.IterateZones(ctx, func(index int64, zone *types.Zone) (stop bool) { + k.IterateZoneRedelegationRecords(ctx, zone.ChainId, func(index int64, key []byte, record types.RedelegationRecord) (stop bool) { + unbondingPeriod := time.Duration(zone.UnbondingPeriod / 1_000_000_000) + redelegationDuration := time.Duration(epochInfo.CurrentEpoch-record.EpochNumber) * epochInfo.Duration - if err := k.HandleMaturedUnbondings(ctx, zone); err != nil { - k.Logger(ctx).Error("error in HandleMaturedUnbondings", "error", err.Error()) + if redelegationDuration >= unbondingPeriod { + k.DeleteRedelegationRecord(ctx, record.ChainId, record.Source, record.Destination, record.EpochNumber) } - k.Logger(ctx).Info( - "taking a snapshot of delegator intents", + return false + }) + + if err := k.HandleMaturedUnbondings(ctx, zone); err != nil { + k.Logger(ctx).Error("error in HandleMaturedUnbondings", "error", err.Error()) + } + + k.Logger(ctx).Info( + "taking a snapshot of delegator intents", + "epoch_identifier", epochIdentifier, + "epoch_number", epochNumber, + ) + err := k.AggregateDelegatorIntents(ctx, zone) + if err != nil { + // we can and need not panic here; logging the error is sufficient. + // an error here is not expected, but also not terminal. + // we don't return on failure here as we still want to attempt + // the unrelated tasks below. + k.Logger(ctx).Error( + "encountered a problem aggregating intents; leaving aggregated intents unchanged since last epoch", + "error", err.Error(), + "chain_id", zone.ChainId, "epoch_identifier", epochIdentifier, "epoch_number", epochNumber, ) - err := k.AggregateDelegatorIntents(ctx, zone) - if err != nil { - // we can and need not panic here; logging the error is sufficient. - // an error here is not expected, but also not terminal. - // we don't return on failure here as we still want to attempt - // the unrelated tasks below. - k.Logger(ctx).Error( - "encountered a problem aggregating intents; leaving aggregated intents unchanged since last epoch", - "error", err.Error(), - "chain_id", zone.ChainId, - "epoch_identifier", epochIdentifier, - "epoch_number", epochNumber, - ) - } - - if zone.DelegationAddress == nil { - // we have reached the end of the epoch and the delegation address is nil. - // This shouldn't happen in normal operation, but can if the zone was registered right on the epoch boundary. - return false - } + } - k.IterateZoneStatusWithdrawalRecords(ctx, zone.ChainId, types.WithdrawStatusUnbond, func(idx int64, record types.WithdrawalRecord) bool { - if (record.Status == types.WithdrawStatusUnbond) && !record.Acknowledged && record.EpochNumber < epochNumber { - record.Requeued = true - k.UpdateWithdrawalRecordStatus(ctx, &record, types.WithdrawStatusQueued) - } - return false - }) - - if err := k.HandleQueuedUnbondings(ctx, zone, epochNumber); err != nil { - // we can and need not panic here; logging the error is sufficient. - // an error here is not expected, but also not terminal. - // we don't return on failure here as we still want to attempt - // the unrelated tasks below. - k.Logger(ctx).Error( - "encountered a problem handling queued unbondings", - "error", err.Error(), - "chain_id", zone.ChainId, - "epoch_identifier", epochIdentifier, - "epoch_number", epochNumber, - ) - } - - err = k.Rebalance(ctx, zone, epochNumber) - if err != nil { - // we can and need not panic here; logging the error is sufficient. - // an error here is not expected, but also not terminal. - // we don't return on failure here as we still want to attempt - // the unrelated tasks below. - k.Logger(ctx).Error( - "encountered a problem rebalancing", - "error", err.Error(), - "chain_id", zone.ChainId, - "epoch_identifier", epochIdentifier, - "epoch_number", epochNumber, - ) - } + if zone.DelegationAddress == nil { + // we have reached the end of the epoch and the delegation address is nil. + // This shouldn't happen in normal operation, but can if the zone was registered right on the epoch boundary. + return false + } - if zone.WithdrawalWaitgroup > 0 { - k.Logger(ctx).Error( - "epoch waitgroup was unexpected > 0; this means we did not process the previous epoch!", - "chain_id", zone.ChainId, - "epoch_identifier", epochIdentifier, - "epoch_number", epochNumber, - ) - zone.WithdrawalWaitgroup = 0 + k.IterateZoneStatusWithdrawalRecords(ctx, zone.ChainId, types.WithdrawStatusUnbond, func(idx int64, record types.WithdrawalRecord) bool { + if (record.Status == types.WithdrawStatusUnbond) && !record.Acknowledged && record.EpochNumber < epochNumber { + record.Requeued = true + k.UpdateWithdrawalRecordStatus(ctx, &record, types.WithdrawStatusQueued) } + return false + }) - // OnChanOpenAck calls SetWithdrawalAddress (see ibc_module.go) - k.Logger(ctx).Info( - "withdrawing rewards", + if err := k.HandleQueuedUnbondings(ctx, zone, epochNumber); err != nil { + // we can and need not panic here; logging the error is sufficient. + // an error here is not expected, but also not terminal. + // we don't return on failure here as we still want to attempt + // the unrelated tasks below. + k.Logger(ctx).Error( + "encountered a problem handling queued unbondings", + "error", err.Error(), "chain_id", zone.ChainId, "epoch_identifier", epochIdentifier, "epoch_number", epochNumber, ) - - vals := k.GetValidators(ctx, zone.ChainId) - delegationQuery := stakingtypes.QueryDelegatorDelegationsRequest{DelegatorAddr: zone.DelegationAddress.Address, Pagination: &query.PageRequest{Limit: uint64(len(vals))}} - bz := k.cdc.MustMarshal(&delegationQuery) - - k.ICQKeeper.MakeRequest( - ctx, - zone.ConnectionId, - zone.ChainId, - "cosmos.staking.v1beta1.Query/DelegatorDelegations", - bz, - sdk.NewInt(-1), - types.ModuleName, - "delegations", - 0, - ) - - addressBytes, err := addressutils.AccAddressFromBech32(zone.DelegationAddress.Address, zone.AccountPrefix) - if err != nil { - k.Logger(ctx).Error("cannot decode bech32 delegation addr") - return false - } - k.ICQKeeper.MakeRequest( - ctx, - zone.ConnectionId, - zone.ChainId, - types.BankStoreKey, - append(banktypes.CreateAccountBalancesPrefix(addressBytes), []byte(zone.BaseDenom)...), - sdk.NewInt(-1), - types.ModuleName, - "delegationaccountbalance", - 0, - ) - // increment waitgroup; decremented in delegationaccountbalance callback - zone.WithdrawalWaitgroup++ - - rewardsQuery := distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: zone.DelegationAddress.Address} - bz = k.cdc.MustMarshal(&rewardsQuery) - - k.ICQKeeper.MakeRequest( - ctx, - zone.ConnectionId, - zone.ChainId, - "cosmos.distribution.v1beta1.Query/DelegationTotalRewards", - bz, - sdk.NewInt(-1), - types.ModuleName, - "rewards", - 0, + } + + err = k.Rebalance(ctx, zone, epochNumber) + if err != nil { + // we can and need not panic here; logging the error is sufficient. + // an error here is not expected, but also not terminal. + // we don't return on failure here as we still want to attempt + // the unrelated tasks below. + k.Logger(ctx).Error( + "encountered a problem rebalancing", + "error", err.Error(), + "chain_id", zone.ChainId, + "epoch_identifier", epochIdentifier, + "epoch_number", epochNumber, ) + } - // increment the WithdrawalWaitgroup - // this allows us to track the response for every protocol delegator - // WithdrawalWaitgroup is decremented in RewardsCallback - zone.WithdrawalWaitgroup++ - k.Logger(ctx).Info("Incrementing waitgroup for delegation", - "value", zone.WithdrawalWaitgroup, + if zone.WithdrawalWaitgroup > 0 { + k.Logger(ctx).Error( + "epoch waitgroup was unexpected > 0; this means we did not process the previous epoch!", "chain_id", zone.ChainId, "epoch_identifier", epochIdentifier, "epoch_number", epochNumber, ) - k.SetZone(ctx, zone) - + zone.WithdrawalWaitgroup = 0 + } + + // OnChanOpenAck calls SetWithdrawalAddress (see ibc_module.go) + k.Logger(ctx).Info( + "withdrawing rewards", + "chain_id", zone.ChainId, + "epoch_identifier", epochIdentifier, + "epoch_number", epochNumber, + ) + + vals := k.GetValidators(ctx, zone.ChainId) + delegationQuery := stakingtypes.QueryDelegatorDelegationsRequest{DelegatorAddr: zone.DelegationAddress.Address, Pagination: &query.PageRequest{Limit: uint64(len(vals))}} + bz := k.cdc.MustMarshal(&delegationQuery) + + k.ICQKeeper.MakeRequest( + ctx, + zone.ConnectionId, + zone.ChainId, + "cosmos.staking.v1beta1.Query/DelegatorDelegations", + bz, + sdk.NewInt(-1), + types.ModuleName, + "delegations", + 0, + ) + + addressBytes, err := addressutils.AccAddressFromBech32(zone.DelegationAddress.Address, zone.AccountPrefix) + if err != nil { + k.Logger(ctx).Error("cannot decode bech32 delegation addr") return false - }) - } + } + k.ICQKeeper.MakeRequest( + ctx, + zone.ConnectionId, + zone.ChainId, + types.BankStoreKey, + append(banktypes.CreateAccountBalancesPrefix(addressBytes), []byte(zone.BaseDenom)...), + sdk.NewInt(-1), + types.ModuleName, + "delegationaccountbalance", + 0, + ) + // increment waitgroup; decremented in delegationaccountbalance callback + zone.WithdrawalWaitgroup++ + + rewardsQuery := distrtypes.QueryDelegationTotalRewardsRequest{DelegatorAddress: zone.DelegationAddress.Address} + bz = k.cdc.MustMarshal(&rewardsQuery) + + k.ICQKeeper.MakeRequest( + ctx, + zone.ConnectionId, + zone.ChainId, + "cosmos.distribution.v1beta1.Query/DelegationTotalRewards", + bz, + sdk.NewInt(-1), + types.ModuleName, + "rewards", + 0, + ) + + // increment the WithdrawalWaitgroup + // this allows us to track the response for every protocol delegator + // WithdrawalWaitgroup is decremented in RewardsCallback + zone.WithdrawalWaitgroup++ + k.Logger(ctx).Info("Incrementing waitgroup for delegation", + "value", zone.WithdrawalWaitgroup, + "chain_id", zone.ChainId, + "epoch_identifier", epochIdentifier, + "epoch_number", epochNumber, + ) + k.SetZone(ctx, zone) + + return false + }) + return nil } diff --git a/x/interchainstaking/keeper/ibc_packet_handlers.go b/x/interchainstaking/keeper/ibc_packet_handlers.go index 35d035523..21c29d62c 100644 --- a/x/interchainstaking/keeper/ibc_packet_handlers.go +++ b/x/interchainstaking/keeper/ibc_packet_handlers.go @@ -138,7 +138,7 @@ func (k *Keeper) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.Pack return err } continue - case "/cosmos.staking.v1beta1.MsgRedeemTokensforShares": + case "/liquidstaking.staking.v1beta1.MsgRedeemTokensforShares": // TODO: handle this before LSM if !success { return nil @@ -157,7 +157,7 @@ func (k *Keeper) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.Pack return err } continue - case "/cosmos.staking.v1beta1.MsgTokenizeShares": + case "/liquidstaking.staking.v1beta1.MsgTokenizeShares": // TODO: handle this before LSM if !success { return nil diff --git a/x/interchainstaking/keeper/keeper.go b/x/interchainstaking/keeper/keeper.go index 7b6f3eb60..390e23e5b 100644 --- a/x/interchainstaking/keeper/keeper.go +++ b/x/interchainstaking/keeper/keeper.go @@ -23,6 +23,7 @@ import ( capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" icacontrollerkeeper "github.com/cosmos/ibc-go/v5/modules/apps/27-interchain-accounts/controller/keeper" @@ -269,7 +270,23 @@ func (k *Keeper) SetValidatorForZone(ctx sdk.Context, zone *types.Zone, data []b jailTime := time.Time{} if validator.IsJailed() { + consAddr, err := validator.GetConsAddr() + if err != nil { + return err + } + k.SetValidatorAddrByConsAddr(ctx, zone.ChainId, validator.OperatorAddress, consAddr) jailTime = ctx.BlockTime() + + err = k.EmitSigningInfoQuery(ctx, zone.ConnectionId, zone.ChainId, validator) + if err != nil { + return err + } + } + _, found := k.GetValidator(ctx, zone.ChainId, valAddrBytes) + // if found is true, it means that validator was tombstoned because we set it's information in SigningInfoCallback func + if found { + k.Logger(ctx).Info("%q on chainID: %q have been tombstoned", validator.OperatorAddress, zone.ChainId) + return nil } if err := k.SetValidator(ctx, zone.ChainId, types.Validator{ ValoperAddress: validator.OperatorAddress, @@ -287,11 +304,30 @@ func (k *Keeper) SetValidatorForZone(ctx sdk.Context, zone *types.Zone, data []b if err := k.MakePerformanceDelegation(ctx, zone, validator.OperatorAddress); err != nil { return err } - } else { + if val.Tombstoned { + k.Logger(ctx).Info("%q on chainID: %q was found to already have been tombstoned", validator.OperatorAddress, zone.ChainId) + return nil + } + if !val.Jailed && validator.IsJailed() { k.Logger(ctx).Info("Transitioning validator to jailed state", "valoper", validator.OperatorAddress, "old_vp", val.VotingPower, "new_vp", validator.Tokens, "new_shares", validator.DelegatorShares, "old_shares", val.DelegatorShares) + consAddr, err := validator.GetConsAddr() + if err != nil { + return err + } + k.SetValidatorAddrByConsAddr(ctx, zone.ChainId, validator.OperatorAddress, consAddr) + + err = k.EmitSigningInfoQuery(ctx, zone.ConnectionId, zone.ChainId, validator) + if err != nil { + return err + } + val, _ := k.GetValidator(ctx, zone.ChainId, valAddrBytes) + if val.Tombstoned { + return nil + } + val.Jailed = true val.JailedSince = ctx.BlockTime() if !val.VotingPower.IsPositive() { @@ -537,6 +573,27 @@ func (k *Keeper) EmitDepositIntervalQuery(ctx sdk.Context, zone *types.Zone) { ) } +func (k *Keeper) EmitSigningInfoQuery(ctx sdk.Context, connectionID, chainID string, validator stakingtypes.Validator) error { + _, addr, err := bech32.DecodeAndConvert(validator.OperatorAddress) + if err != nil { + return err + } + data := slashingtypes.ValidatorSigningInfoKey(addr) + k.ICQKeeper.MakeRequest( + ctx, + connectionID, + chainID, + "store/slashing/key", + data, + sdk.NewInt(-1), + types.ModuleName, + "signinginfo", + 0, + ) + + return nil +} + func (k *Keeper) GetDelegationsInProcess(ctx sdk.Context, chainID string) sdkmath.Int { delegationsInProcess := sdkmath.ZeroInt() k.IterateZoneReceipts(ctx, chainID, func(_ int64, receipt types.Receipt) (stop bool) { diff --git a/x/interchainstaking/keeper/validator_test.go b/x/interchainstaking/keeper/validator_test.go index 93680b0b5..fd88180a4 100644 --- a/x/interchainstaking/keeper/validator_test.go +++ b/x/interchainstaking/keeper/validator_test.go @@ -77,19 +77,15 @@ func (suite *KeeperTestSuite) TestStoreGetDeleteValidatorByConsAddr() { pkAny, err := codectypes.NewAnyWithValue(PKs[0]) suite.Require().NoError(err) - newValidator := types.Validator{ - ValoperAddress: validator.String(), - CommissionRate: sdk.NewDec(5.0), - DelegatorShares: sdk.NewDec(1000.0), - VotingPower: sdk.NewInt(1000), - Status: stakingtypes.BondStatusBonded, - Score: sdk.NewDec(0), + newValidator := stakingtypes.Validator{ + OperatorAddress: validator.String(), ConsensusPubkey: pkAny, } - - err = app.InterchainstakingKeeper.SetValidatorAddrByConsAddr(ctx, zone.ChainId, newValidator) + consAddr, err := newValidator.GetConsAddr() suite.NoError(err) + app.InterchainstakingKeeper.SetValidatorAddrByConsAddr(ctx, zone.ChainId, newValidator.OperatorAddress, consAddr) + _, found = app.InterchainstakingKeeper.GetValidatorAddrByConsAddr(ctx, zone.ChainId, sdk.ConsAddress(PKs[0].Address())) suite.True(found) diff --git a/x/interchainstaking/keeper/validators.go b/x/interchainstaking/keeper/validators.go index 25198023b..6282b45bb 100644 --- a/x/interchainstaking/keeper/validators.go +++ b/x/interchainstaking/keeper/validators.go @@ -105,14 +105,9 @@ func (k Keeper) GetValidatorAddrByConsAddr(ctx sdk.Context, chainID string, cons } // SetValidatorAddrByConsAddr set validator address by Consensus address. -func (k Keeper) SetValidatorAddrByConsAddr(ctx sdk.Context, chainID string, val types.Validator) error { +func (k Keeper) SetValidatorAddrByConsAddr(ctx sdk.Context, chainID string, valAddr string, consAddr sdk.ConsAddress) { store := prefix.NewStore(ctx.KVStore(k.storeKey), types.GetZoneValidatorAddrsByConsAddrKey(chainID)) - consPk, err := val.GetConsAddr() - if err != nil { - return err - } - store.Set(consPk, []byte(val.ValoperAddress)) - return nil + store.Set(consAddr, []byte(valAddr)) } // DeleteValidatorAddrByConsAddr delete validator address by Consensus address. diff --git a/x/interchainstaking/types/interchainstaking.pb.go b/x/interchainstaking/types/interchainstaking.pb.go index f560a8994..195e6bb04 100644 --- a/x/interchainstaking/types/interchainstaking.pb.go +++ b/x/interchainstaking/types/interchainstaking.pb.go @@ -6,7 +6,6 @@ package types import ( fmt "fmt" _ "github.com/cosmos/cosmos-proto" - types1 "github.com/cosmos/cosmos-sdk/codec/types" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" @@ -799,8 +798,6 @@ type Validator struct { Jailed bool `protobuf:"varint,7,opt,name=jailed,proto3" json:"jailed,omitempty"` Tombstoned bool `protobuf:"varint,8,opt,name=tombstoned,proto3" json:"tombstoned,omitempty"` JailedSince time.Time `protobuf:"bytes,9,opt,name=jailed_since,json=jailedSince,proto3,stdtime" json:"jailed_since"` - // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. - ConsensusPubkey *types1.Any `protobuf:"bytes,10,opt,name=consensus_pubkey,json=consensusPubkey,proto3" json:"consensus_pubkey,omitempty"` } func (m *Validator) Reset() { *m = Validator{} } @@ -871,13 +868,6 @@ func (m *Validator) GetJailedSince() time.Time { return time.Time{} } -func (m *Validator) GetConsensusPubkey() *types1.Any { - if m != nil { - return m.ConsensusPubkey - } - return nil -} - type DelegatorIntent struct { Delegator string `protobuf:"bytes,1,opt,name=delegator,proto3" json:"delegator,omitempty"` Intents ValidatorIntents `protobuf:"bytes,2,rep,name=intents,proto3,castrepeated=ValidatorIntents" json:"intents,omitempty"` @@ -1202,132 +1192,129 @@ func init() { } var fileDescriptor_0d755cfd37ef9fee = []byte{ - // 1993 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4f, 0x6f, 0x1b, 0xc7, - 0x15, 0xf7, 0xea, 0x0f, 0x45, 0x3e, 0x52, 0x22, 0x35, 0x96, 0x9d, 0xb5, 0x63, 0x8b, 0x0c, 0x9b, - 0xa4, 0x2c, 0x6c, 0x91, 0xa1, 0x03, 0xb4, 0x6e, 0x50, 0x14, 0x15, 0x2d, 0x23, 0x11, 0x52, 0xbb, - 0xc2, 0x4a, 0x69, 0x90, 0x04, 0xc5, 0x62, 0xb8, 0x3b, 0x22, 0xa7, 0xde, 0x9d, 0xa1, 0x77, 0x66, - 0x25, 0x31, 0x9f, 0x22, 0x1f, 0xa1, 0xb7, 0x02, 0x46, 0xd1, 0x93, 0x8f, 0xbd, 0x37, 0xe8, 0x29, - 0xf0, 0xa9, 0x28, 0x0a, 0xb9, 0xb0, 0x6f, 0x02, 0x7a, 0xe9, 0x27, 0x28, 0x66, 0x76, 0x76, 0xb9, - 0xfa, 0x53, 0x53, 0x76, 0x94, 0x9e, 0xc8, 0x79, 0x7f, 0x7e, 0xf3, 0x66, 0xe6, 0xcd, 0x7b, 0xbf, - 0x59, 0xb8, 0xfb, 0x38, 0xa6, 0xde, 0x23, 0x41, 0x83, 0x3d, 0x12, 0x75, 0x28, 0x93, 0x24, 0xf2, - 0x86, 0x98, 0x32, 0x21, 0xf1, 0x23, 0xca, 0x06, 0x9d, 0xbd, 0xee, 0x69, 0x61, 0x7b, 0x14, 0x71, - 0xc9, 0x51, 0x23, 0xe7, 0xd9, 0x3e, 0x6d, 0xb4, 0xd7, 0xbd, 0xbe, 0xea, 0x71, 0x11, 0x72, 0xd1, - 0xe9, 0x63, 0x41, 0x3a, 0x7b, 0xdd, 0x3e, 0x91, 0xb8, 0xdb, 0xf1, 0x38, 0x65, 0x09, 0xc2, 0xf5, - 0x6b, 0x89, 0xde, 0xd5, 0xa3, 0x4e, 0x32, 0x30, 0xaa, 0x95, 0x01, 0x1f, 0xf0, 0x44, 0xae, 0xfe, - 0xa5, 0x0e, 0x03, 0xce, 0x07, 0x01, 0xe9, 0xe8, 0x51, 0x3f, 0xde, 0xed, 0x60, 0x36, 0x36, 0xaa, - 0xfa, 0x49, 0x95, 0xa4, 0x21, 0x11, 0x12, 0x87, 0xa3, 0xc4, 0xa0, 0xf9, 0xa4, 0x0a, 0x73, 0x5f, - 0x72, 0x46, 0xd0, 0x8f, 0x60, 0xd1, 0xe3, 0x8c, 0x11, 0x4f, 0x52, 0xce, 0x5c, 0xea, 0xdb, 0x56, - 0xc3, 0x6a, 0x95, 0x9c, 0xca, 0x44, 0xb8, 0xe9, 0xa3, 0x6b, 0x50, 0xd4, 0xab, 0x51, 0xfa, 0x19, - 0xad, 0x5f, 0xd0, 0xe3, 0x4d, 0x1f, 0x7d, 0x06, 0x55, 0x9f, 0x8c, 0xb8, 0xa0, 0xd2, 0xc5, 0xbe, - 0x1f, 0x11, 0x21, 0xec, 0xd9, 0x86, 0xd5, 0x2a, 0xdf, 0xb9, 0xdd, 0x9e, 0xb6, 0x23, 0xed, 0xcd, - 0x7b, 0xeb, 0xeb, 0x9e, 0xc7, 0x63, 0x26, 0x9d, 0x25, 0x03, 0xb2, 0x9e, 0x60, 0xa0, 0xaf, 0x00, - 0xed, 0x53, 0x39, 0xf4, 0x23, 0xbc, 0x8f, 0x83, 0x0c, 0x79, 0xee, 0x0d, 0x90, 0x97, 0x27, 0x38, - 0x29, 0xf8, 0xef, 0xe0, 0xf2, 0x88, 0x44, 0xbb, 0x3c, 0x0a, 0x31, 0xf3, 0x48, 0x86, 0x3e, 0xff, - 0x06, 0xe8, 0x28, 0x07, 0x94, 0x8b, 0xdd, 0x27, 0x01, 0x19, 0x60, 0xbd, 0xa5, 0x29, 0x7a, 0xe1, - 0x4d, 0x62, 0x9f, 0xe0, 0xa4, 0xe0, 0xef, 0xc1, 0x12, 0x4e, 0xb4, 0xee, 0x28, 0x22, 0xbb, 0xf4, - 0xc0, 0x5e, 0xd0, 0x07, 0xb2, 0x68, 0xa4, 0x5b, 0x5a, 0x88, 0xea, 0x50, 0x0e, 0xb8, 0x87, 0x03, - 0xd7, 0x27, 0x8c, 0x87, 0x76, 0x51, 0xdb, 0x80, 0x16, 0x6d, 0x28, 0x09, 0xba, 0x09, 0xa0, 0x12, - 0xd1, 0xe8, 0x4b, 0x5a, 0x5f, 0x52, 0x92, 0x44, 0x4d, 0xa0, 0x1a, 0x11, 0x9f, 0x84, 0x23, 0xbd, - 0x86, 0x08, 0x4b, 0x62, 0x83, 0xb2, 0xe9, 0xfd, 0xe2, 0xdb, 0xc3, 0xfa, 0xa5, 0x7f, 0x1c, 0xd6, - 0xdf, 0x1f, 0x50, 0x39, 0x8c, 0xfb, 0x6d, 0x8f, 0x87, 0x26, 0x57, 0xcd, 0xcf, 0x9a, 0xf0, 0x1f, - 0x75, 0xe4, 0x78, 0x44, 0x44, 0x7b, 0x83, 0x78, 0xcf, 0x9e, 0xae, 0x81, 0x49, 0xe5, 0x0d, 0xe2, - 0x39, 0x4b, 0x13, 0x50, 0x07, 0x4b, 0x82, 0x18, 0xac, 0x04, 0x58, 0x48, 0xf7, 0xe4, 0x5c, 0xe5, - 0x0b, 0x98, 0x0b, 0x29, 0x64, 0xe7, 0xf8, 0x7c, 0x9f, 0x02, 0xec, 0xe1, 0x80, 0xfa, 0x58, 0xf2, - 0x48, 0xd8, 0x95, 0xc6, 0x6c, 0xab, 0x7c, 0xe7, 0xd6, 0xf4, 0x23, 0xf9, 0x6d, 0xea, 0xe3, 0xe4, - 0xdc, 0x51, 0x04, 0x35, 0x3c, 0x18, 0x44, 0xea, 0x80, 0x88, 0xab, 0xfc, 0x98, 0xb4, 0x17, 0x35, - 0x64, 0xf7, 0x35, 0x20, 0x37, 0xb5, 0x63, 0x6f, 0xe5, 0xc9, 0xf3, 0x7a, 0xed, 0x84, 0x50, 0x38, - 0xd5, 0x6c, 0x82, 0x44, 0xa2, 0x8e, 0x2d, 0x8c, 0x03, 0x49, 0x5d, 0x41, 0x98, 0x6f, 0x2f, 0x35, - 0xac, 0x56, 0xd1, 0x29, 0x69, 0xc9, 0x36, 0x61, 0x3e, 0xfa, 0x09, 0xd4, 0x02, 0xfa, 0x38, 0xa6, - 0x3e, 0x95, 0x63, 0x37, 0xe4, 0x7e, 0x1c, 0x10, 0xbb, 0xaa, 0x8d, 0xaa, 0x99, 0xfc, 0x81, 0x16, - 0xa3, 0x2e, 0xac, 0xe4, 0x6e, 0xd8, 0x3e, 0xa6, 0x72, 0x10, 0xf1, 0x78, 0x64, 0xd7, 0x1a, 0x56, - 0x6b, 0xd1, 0xb9, 0x3c, 0xd1, 0x7d, 0x9e, 0xaa, 0xd0, 0xcf, 0xc0, 0xa6, 0x7d, 0xcf, 0x65, 0xe4, - 0x40, 0xba, 0x93, 0x7d, 0x70, 0x87, 0x58, 0x0c, 0xed, 0xe5, 0x86, 0xd5, 0xaa, 0x38, 0x57, 0x68, - 0xdf, 0x7b, 0x48, 0x0e, 0x64, 0xb6, 0x10, 0xf1, 0x09, 0x16, 0x43, 0x34, 0x86, 0xd5, 0xcc, 0xde, - 0x15, 0x24, 0x30, 0xd5, 0x06, 0x07, 0x2a, 0x21, 0xd5, 0x5f, 0x1b, 0x35, 0xac, 0xd6, 0x5c, 0xef, - 0xc3, 0xa3, 0xc3, 0x7a, 0xe7, 0xd5, 0x96, 0xb7, 0x85, 0x8c, 0x28, 0x1b, 0xdc, 0xe6, 0x21, 0x95, - 0xea, 0x64, 0xc7, 0xce, 0x8d, 0xcc, 0x61, 0x3b, 0xb5, 0x5f, 0xcf, 0xcc, 0xd1, 0x17, 0x70, 0x79, - 0xc8, 0x03, 0x9f, 0xb2, 0x81, 0xc8, 0xcf, 0x77, 0x59, 0xcf, 0xd7, 0x3a, 0x3a, 0xac, 0xbf, 0x7b, - 0x86, 0xfa, 0xf4, 0x24, 0x28, 0xb5, 0xca, 0x41, 0x3b, 0xb0, 0xac, 0x93, 0x97, 0x8c, 0xb8, 0x37, - 0x74, 0x87, 0x84, 0x0e, 0x86, 0xd2, 0x5e, 0x69, 0x58, 0xad, 0xd9, 0xde, 0xfb, 0x47, 0x87, 0xf5, - 0xe6, 0x29, 0xe5, 0x69, 0xd8, 0xaa, 0xb2, 0xb9, 0xaf, 0x4c, 0x3e, 0xd1, 0x16, 0xe8, 0x21, 0xcc, - 0xca, 0xbd, 0xc0, 0xbe, 0x72, 0x01, 0xf9, 0xaf, 0x80, 0xd0, 0x16, 0xd4, 0x62, 0xd6, 0xe7, 0x4c, - 0xc5, 0xee, 0x8e, 0x48, 0x44, 0xb9, 0x6f, 0x5f, 0xd5, 0x21, 0xbe, 0x77, 0x74, 0x58, 0x7f, 0xe7, - 0xa4, 0xee, 0x8c, 0x08, 0x33, 0x93, 0x2d, 0x6d, 0x81, 0x7e, 0x0d, 0xd5, 0x90, 0x08, 0x81, 0x07, - 0x44, 0x28, 0x27, 0x57, 0x1e, 0xd8, 0x6f, 0x69, 0xc0, 0x77, 0x8f, 0x0e, 0xeb, 0x8d, 0x13, 0xaa, - 0xd3, 0x78, 0x8b, 0xa9, 0xc5, 0x16, 0x89, 0x76, 0x0e, 0xd0, 0xcf, 0xa1, 0xe8, 0x13, 0x8f, 0x86, - 0x38, 0x10, 0xb6, 0xad, 0x61, 0x6e, 0x1e, 0x1d, 0xd6, 0xaf, 0xa5, 0xb2, 0xd3, 0xfe, 0x99, 0x39, - 0xba, 0x05, 0xcb, 0x93, 0xf0, 0x09, 0xc3, 0xfd, 0x80, 0xf8, 0xf6, 0x35, 0x9d, 0xec, 0x93, 0x35, - 0xdf, 0x4f, 0xe4, 0xea, 0x62, 0x98, 0x0e, 0x23, 0x32, 0xdb, 0xeb, 0xc9, 0xc5, 0x48, 0xe5, 0xa9, - 0x69, 0x0b, 0x6a, 0x11, 0x91, 0x71, 0xc4, 0x5c, 0xc9, 0xf5, 0x35, 0x23, 0x91, 0xfd, 0xb6, 0x36, - 0x5d, 0x4a, 0xe4, 0x3b, 0x7c, 0x5b, 0x4b, 0xd1, 0x15, 0x28, 0x50, 0xe1, 0x76, 0xbb, 0x77, 0xed, - 0x1b, 0x5a, 0x3f, 0x4f, 0x45, 0xb7, 0x7b, 0x17, 0xfd, 0x06, 0xca, 0x22, 0xee, 0x7f, 0xcd, 0x19, - 0xd9, 0x64, 0xbb, 0xdc, 0xbe, 0xa9, 0x0b, 0xff, 0xda, 0xf4, 0x92, 0xb0, 0x3d, 0x71, 0x72, 0xf2, - 0x08, 0xcd, 0x87, 0x50, 0xce, 0xe9, 0xd0, 0x0d, 0x28, 0xe1, 0x58, 0x0e, 0x79, 0x44, 0xe5, 0xd8, - 0xb4, 0xeb, 0x89, 0x00, 0xbd, 0x03, 0x15, 0x5d, 0xd8, 0x93, 0x06, 0xbd, 0x61, 0xfa, 0x75, 0x59, - 0xc9, 0xee, 0x25, 0xa2, 0xe6, 0x1f, 0x66, 0x00, 0x26, 0x5d, 0x06, 0xdd, 0x81, 0x85, 0xb4, 0x49, - 0x69, 0xb4, 0x9e, 0xfd, 0xec, 0xe9, 0xda, 0x8a, 0xc9, 0x24, 0xd3, 0x77, 0xb6, 0xf5, 0x39, 0x38, - 0xa9, 0x21, 0x22, 0xb0, 0xd0, 0xc7, 0x81, 0xea, 0x7a, 0xf6, 0x8c, 0x2e, 0x79, 0xd7, 0xda, 0xc6, - 0x41, 0x4d, 0xd4, 0x36, 0xf4, 0xa6, 0x7d, 0x8f, 0x53, 0xd6, 0xfb, 0x40, 0xa5, 0xf1, 0x93, 0xe7, - 0xf5, 0xd6, 0x39, 0xd2, 0x58, 0x39, 0x08, 0x27, 0xc5, 0x46, 0x6f, 0x43, 0x69, 0xc4, 0x23, 0xe9, - 0x32, 0x1c, 0x12, 0xcd, 0x2b, 0x4a, 0x4e, 0x51, 0x09, 0x1e, 0xe2, 0x90, 0xa0, 0xb5, 0xff, 0xc9, - 0x11, 0x4a, 0x67, 0x75, 0xfd, 0x5b, 0xb0, 0x6c, 0x60, 0x73, 0xd5, 0x6e, 0x5e, 0x57, 0xbb, 0x9a, - 0x51, 0x64, 0xa5, 0xae, 0xf9, 0x2b, 0xa8, 0x6c, 0x50, 0x95, 0x7c, 0xfd, 0x58, 0xdf, 0x75, 0x1b, - 0x16, 0xf6, 0x70, 0xc0, 0x47, 0x24, 0x32, 0x3b, 0x9e, 0x0e, 0xd1, 0x55, 0x28, 0xe0, 0x50, 0xed, - 0xa3, 0xde, 0xe9, 0x39, 0xc7, 0x8c, 0x9a, 0x4f, 0xe7, 0xa1, 0xf6, 0x79, 0x16, 0x84, 0x43, 0x3c, - 0x1e, 0x1d, 0x27, 0x52, 0xd6, 0x71, 0x22, 0xf5, 0x53, 0x28, 0x99, 0x6e, 0xcf, 0xa3, 0xe4, 0xd0, - 0x5e, 0x71, 0x0e, 0x13, 0x53, 0xe4, 0x40, 0xc5, 0xcf, 0x45, 0x6a, 0xcf, 0xea, 0xe3, 0x68, 0x4f, - 0x4f, 0xb7, 0xfc, 0xfa, 0x9c, 0x63, 0x18, 0x2a, 0x96, 0x88, 0x78, 0x74, 0x44, 0x55, 0x4b, 0x9b, - 0x9b, 0x16, 0x4b, 0x66, 0x8a, 0xbc, 0x6c, 0x2f, 0xe6, 0x2f, 0x3e, 0x29, 0x0c, 0x34, 0xfa, 0x1a, - 0xca, 0x7d, 0x75, 0x3b, 0xcd, 0x4c, 0x09, 0xaf, 0x7a, 0xc5, 0x4c, 0xbf, 0x34, 0x55, 0xf4, 0xc7, - 0xe7, 0x9c, 0xe9, 0xd9, 0xd3, 0xb5, 0xb2, 0x01, 0x53, 0x43, 0x07, 0xd4, 0x6c, 0xeb, 0xc9, 0xdc, - 0x57, 0xa1, 0x20, 0x0f, 0x74, 0xbf, 0x4b, 0x58, 0x97, 0x19, 0x29, 0xb9, 0x90, 0x58, 0xc6, 0x42, - 0x33, 0xad, 0x79, 0xc7, 0x8c, 0xd0, 0x03, 0xa8, 0x7a, 0x3c, 0x1c, 0x05, 0x44, 0x77, 0x31, 0x45, - 0xc2, 0x35, 0xd5, 0x2a, 0xdf, 0xb9, 0xde, 0x4e, 0x18, 0x7a, 0x3b, 0x65, 0xe8, 0xed, 0x9d, 0x94, - 0xa1, 0xf7, 0x8a, 0x2a, 0xe0, 0x6f, 0x9e, 0xd7, 0x2d, 0x67, 0x69, 0xe2, 0xac, 0xd4, 0xe8, 0x3a, - 0x14, 0x23, 0xf2, 0x38, 0x26, 0x31, 0xf1, 0x35, 0x1d, 0x2b, 0x3a, 0xd9, 0x18, 0x35, 0xa1, 0x82, - 0xbd, 0x47, 0x8c, 0xef, 0x07, 0xc4, 0x1f, 0x10, 0x5f, 0x53, 0xa8, 0xa2, 0x73, 0x4c, 0xa6, 0x6a, - 0x43, 0xd2, 0x8f, 0x58, 0x1c, 0xf6, 0x49, 0x64, 0x57, 0x54, 0xc5, 0x75, 0xca, 0x5a, 0xf6, 0x50, - 0x8b, 0x9a, 0x7f, 0xb6, 0xa0, 0xfa, 0x59, 0x5a, 0x3d, 0xa7, 0x67, 0xed, 0x49, 0xc4, 0x99, 0x53, - 0x88, 0x2a, 0x99, 0xb2, 0x0e, 0x9d, 0xdc, 0xe1, 0x57, 0x25, 0x53, 0x66, 0xaa, 0x98, 0x6e, 0x44, - 0x02, 0x2c, 0x89, 0xef, 0x9a, 0x3d, 0x9f, 0x6b, 0xcc, 0x2a, 0xa6, 0x6b, 0xa4, 0x3b, 0x5a, 0xd8, - 0xfc, 0xe3, 0x0c, 0x20, 0xc5, 0xf2, 0x52, 0xa2, 0x7c, 0x21, 0x31, 0x7f, 0x00, 0x05, 0xc1, 0xe3, - 0xc8, 0x23, 0x53, 0x03, 0x36, 0x76, 0xe8, 0x23, 0x28, 0xfb, 0x44, 0x48, 0xca, 0x12, 0x7e, 0x31, - 0xed, 0xd2, 0xe4, 0x8d, 0x73, 0x25, 0x64, 0x5e, 0x87, 0x92, 0x66, 0xfa, 0x19, 0xd9, 0x53, 0x78, - 0xf3, 0xec, 0x69, 0xfe, 0xdb, 0x82, 0xa5, 0x9d, 0x08, 0x33, 0xb1, 0x4b, 0x22, 0xb3, 0x4b, 0x6a, - 0x9d, 0x49, 0x87, 0xb3, 0xa6, 0xae, 0x33, 0xe9, 0x79, 0xc7, 0x4a, 0xc3, 0xcc, 0xf9, 0x4b, 0xc3, - 0xe3, 0x6c, 0x8d, 0xb3, 0x3f, 0xf4, 0x85, 0x4d, 0x2b, 0xf0, 0x5f, 0xe7, 0xa1, 0x94, 0x11, 0x51, - 0xb4, 0x0e, 0x55, 0x53, 0xb2, 0xdd, 0xf3, 0x76, 0xbb, 0x25, 0xe3, 0xb0, 0x9e, 0x35, 0x3d, 0x75, - 0x1e, 0x21, 0x15, 0x22, 0x7b, 0xa8, 0xcc, 0x5c, 0xc4, 0xa3, 0x68, 0x02, 0xaa, 0x1f, 0x29, 0x03, - 0xc5, 0x55, 0x4c, 0x79, 0x77, 0xc5, 0x10, 0x47, 0x44, 0x98, 0x34, 0xfc, 0x7e, 0xf3, 0x54, 0x33, - 0xd4, 0x6d, 0x0d, 0x8a, 0x5c, 0xa8, 0xec, 0x71, 0xa9, 0xd9, 0x1f, 0xdf, 0x27, 0x91, 0x49, 0xda, - 0xd7, 0x99, 0x64, 0x93, 0xc9, 0xdc, 0x24, 0x9b, 0x4c, 0x3a, 0xe5, 0x04, 0x71, 0x4b, 0x01, 0x22, - 0x07, 0xe6, 0x85, 0xc7, 0x23, 0xa2, 0xf3, 0xfa, 0xfb, 0x86, 0x9f, 0x40, 0xe5, 0x4a, 0x6d, 0x21, - 0x29, 0xc1, 0xa6, 0xd4, 0x5e, 0x85, 0xc2, 0xef, 0x31, 0x55, 0xbc, 0x6e, 0x41, 0x57, 0x3e, 0x33, - 0x42, 0xab, 0x00, 0x92, 0x87, 0x7d, 0x21, 0x39, 0x23, 0xbe, 0x2e, 0xcf, 0x45, 0x27, 0x27, 0x41, - 0x1f, 0x43, 0x25, 0xb1, 0x74, 0x05, 0x55, 0x74, 0xe6, 0x75, 0xea, 0x73, 0x39, 0xf1, 0xdc, 0x56, - 0x8e, 0xe8, 0x0b, 0xa8, 0x79, 0x9c, 0x09, 0xc2, 0x44, 0x2c, 0xdc, 0x51, 0xdc, 0x7f, 0x44, 0xc6, - 0xba, 0x48, 0x97, 0xef, 0xac, 0x9c, 0x02, 0x5b, 0x67, 0xe3, 0x9e, 0xfd, 0xb7, 0x49, 0xde, 0x79, - 0xd1, 0x78, 0x24, 0x79, 0x7b, 0x2b, 0xee, 0x7f, 0x4a, 0xc6, 0x4e, 0x35, 0xc3, 0xd9, 0xd2, 0x30, - 0xcd, 0x3f, 0x59, 0x50, 0xdd, 0x48, 0x0f, 0xcf, 0xbc, 0x04, 0x8f, 0xf1, 0x05, 0xeb, 0xfc, 0x7c, - 0x01, 0xc3, 0x42, 0xf2, 0x56, 0x15, 0x86, 0xb9, 0x5d, 0xd8, 0x63, 0x35, 0xc5, 0x6d, 0xfe, 0xc5, - 0x82, 0xea, 0x09, 0x2d, 0xea, 0xbd, 0xfe, 0xf5, 0x3b, 0xe9, 0x80, 0x08, 0x14, 0xf6, 0x93, 0x57, - 0x56, 0x72, 0xed, 0x1e, 0xbc, 0x5e, 0x3e, 0xfd, 0xe7, 0xb0, 0xbe, 0x38, 0xc6, 0x61, 0xf0, 0x51, - 0x33, 0x41, 0x69, 0x9e, 0x48, 0xb0, 0x42, 0x2a, 0x9e, 0x01, 0xd8, 0xc8, 0xfa, 0x09, 0xfa, 0xf8, - 0xcc, 0xcf, 0x39, 0xd3, 0x82, 0x3f, 0xe3, 0xd3, 0xcd, 0x7d, 0x58, 0x9e, 0xbc, 0x6d, 0x53, 0x9c, - 0x69, 0x25, 0xb4, 0x96, 0xb9, 0xa4, 0x30, 0xff, 0xff, 0x4a, 0xaa, 0xee, 0x96, 0x79, 0xde, 0xce, - 0x25, 0x0d, 0x2a, 0x19, 0xa9, 0x57, 0x55, 0x94, 0x6b, 0xbd, 0x2e, 0x61, 0xbe, 0x69, 0x61, 0xd5, - 0xbc, 0xfc, 0x3e, 0xf3, 0x9b, 0xdb, 0x70, 0x79, 0x8b, 0x47, 0xf2, 0x5e, 0xf6, 0x59, 0x71, 0x27, - 0x1e, 0x05, 0xe7, 0xfc, 0xfc, 0xf8, 0x16, 0x2c, 0xe8, 0x57, 0x40, 0xf6, 0xf5, 0xb1, 0xa0, 0x86, - 0x9b, 0x7e, 0xf3, 0x9f, 0x33, 0xb0, 0xe0, 0x10, 0x8f, 0xd0, 0x91, 0x7c, 0x55, 0xc3, 0x9f, 0x74, - 0xb9, 0x99, 0x73, 0x76, 0xb9, 0x09, 0xcf, 0x9b, 0x3d, 0xc6, 0xf3, 0x26, 0x04, 0x77, 0xee, 0x87, - 0x23, 0xb8, 0xf7, 0x00, 0x76, 0x69, 0x24, 0xa4, 0x2b, 0x08, 0x61, 0xe6, 0xab, 0xe4, 0xb4, 0x7a, - 0x64, 0xe9, 0x7a, 0x54, 0xd2, 0x7e, 0xdb, 0x84, 0x30, 0xd4, 0x83, 0x92, 0x69, 0xff, 0xc4, 0x3f, - 0x27, 0x6b, 0x30, 0x18, 0x99, 0x5b, 0xef, 0xab, 0x6f, 0x5f, 0xac, 0x5a, 0xdf, 0xbd, 0x58, 0xb5, - 0xfe, 0xf5, 0x62, 0xd5, 0xfa, 0xe6, 0xe5, 0xea, 0xa5, 0xef, 0x5e, 0xae, 0x5e, 0xfa, 0xfb, 0xcb, - 0xd5, 0x4b, 0x5f, 0xae, 0xe7, 0x16, 0x95, 0xab, 0x1e, 0x6b, 0xea, 0x8d, 0x9a, 0x17, 0x74, 0x0e, - 0xce, 0xf8, 0x8a, 0xae, 0xd7, 0xdc, 0x2f, 0xe8, 0x28, 0x3e, 0xfc, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x16, 0x0f, 0xb7, 0x23, 0x73, 0x17, 0x00, 0x00, + // 1939 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdd, 0x6e, 0x1b, 0xc7, + 0xf5, 0xf7, 0x52, 0x12, 0x45, 0x1e, 0x52, 0xa2, 0x34, 0x92, 0x9d, 0x95, 0x62, 0x8b, 0x0c, 0xff, + 0x49, 0xfe, 0x2c, 0x6c, 0x91, 0xa1, 0x03, 0xb4, 0x6e, 0x50, 0x14, 0x15, 0x25, 0x23, 0x11, 0x5a, + 0xab, 0xc2, 0x4a, 0x69, 0xd0, 0x04, 0xc5, 0x62, 0xb8, 0x3b, 0x22, 0xa7, 0xde, 0xdd, 0xa1, 0x67, + 0x86, 0xfa, 0xc8, 0x53, 0xe4, 0x11, 0x7a, 0x57, 0xc0, 0x28, 0x7a, 0xe5, 0xcb, 0x3e, 0x40, 0x2e, + 0x03, 0x5f, 0x15, 0x45, 0x21, 0x17, 0xf6, 0x9d, 0xd0, 0xde, 0xf4, 0x09, 0x8a, 0x99, 0x9d, 0x5d, + 0xae, 0x3e, 0x2a, 0x4a, 0x8e, 0xd2, 0x2b, 0x72, 0x7e, 0xe7, 0x9c, 0xdf, 0x9c, 0x99, 0x39, 0x73, + 0xce, 0x99, 0x85, 0x47, 0xcf, 0x86, 0xd4, 0x7b, 0x2a, 0x68, 0xb0, 0x4f, 0x78, 0x8b, 0x46, 0x92, + 0x70, 0xaf, 0x8f, 0x69, 0x24, 0x24, 0x7e, 0x4a, 0xa3, 0x5e, 0x6b, 0xbf, 0x7d, 0x1e, 0x6c, 0x0e, + 0x38, 0x93, 0x0c, 0xd5, 0x32, 0x96, 0xcd, 0xf3, 0x4a, 0xfb, 0xed, 0xe5, 0x15, 0x8f, 0x89, 0x90, + 0x89, 0x56, 0x17, 0x0b, 0xd2, 0xda, 0x6f, 0x77, 0x89, 0xc4, 0xed, 0x96, 0xc7, 0x68, 0x14, 0x33, + 0x2c, 0x2f, 0xc5, 0x72, 0x57, 0x8f, 0x5a, 0xf1, 0xc0, 0x88, 0x16, 0x7b, 0xac, 0xc7, 0x62, 0x5c, + 0xfd, 0x33, 0x68, 0xb5, 0xc7, 0x58, 0x2f, 0x20, 0x2d, 0x3d, 0xea, 0x0e, 0xf7, 0x5a, 0x92, 0x86, + 0x44, 0x48, 0x1c, 0x0e, 0x62, 0x85, 0xfa, 0xf3, 0x0a, 0x4c, 0x7e, 0xc9, 0x22, 0x82, 0xfe, 0x0f, + 0x66, 0x3c, 0x16, 0x45, 0xc4, 0x93, 0x94, 0x45, 0x2e, 0xf5, 0x6d, 0xab, 0x66, 0x35, 0x8a, 0x4e, + 0x79, 0x04, 0x6e, 0xfa, 0x68, 0x09, 0x0a, 0xda, 0x65, 0x25, 0xcf, 0x69, 0xf9, 0xb4, 0x1e, 0x6f, + 0xfa, 0xe8, 0x73, 0xa8, 0xf8, 0x64, 0xc0, 0x04, 0x95, 0x2e, 0xf6, 0x7d, 0x4e, 0x84, 0xb0, 0x27, + 0x6a, 0x56, 0xa3, 0xf4, 0xf0, 0x41, 0x73, 0xdc, 0xb2, 0x9b, 0x9b, 0xeb, 0x6b, 0x6b, 0x9e, 0xc7, + 0x86, 0x91, 0x74, 0x66, 0x0d, 0xc9, 0x5a, 0xcc, 0x81, 0xbe, 0x02, 0x74, 0x40, 0x65, 0xdf, 0xe7, + 0xf8, 0x00, 0x07, 0x29, 0xf3, 0xe4, 0x5b, 0x30, 0xcf, 0x8f, 0x78, 0x12, 0xf2, 0xdf, 0xc1, 0xc2, + 0x80, 0xf0, 0x3d, 0xc6, 0x43, 0x1c, 0x79, 0x24, 0x65, 0x9f, 0x7a, 0x0b, 0x76, 0x94, 0x21, 0xca, + 0xf8, 0xee, 0x93, 0x80, 0xf4, 0xb0, 0xde, 0xd2, 0x84, 0x3d, 0xff, 0x36, 0xbe, 0x8f, 0x78, 0x12, + 0xf2, 0x0f, 0x60, 0x16, 0xc7, 0x52, 0x77, 0xc0, 0xc9, 0x1e, 0x3d, 0xb4, 0xa7, 0xf5, 0x81, 0xcc, + 0x18, 0x74, 0x5b, 0x83, 0xa8, 0x0a, 0xa5, 0x80, 0x79, 0x38, 0x70, 0x7d, 0x12, 0xb1, 0xd0, 0x2e, + 0x68, 0x1d, 0xd0, 0xd0, 0x86, 0x42, 0xd0, 0x3d, 0x00, 0x15, 0x6d, 0x46, 0x5e, 0xd4, 0xf2, 0xa2, + 0x42, 0x62, 0x31, 0x81, 0x0a, 0x27, 0x3e, 0x09, 0x07, 0x7a, 0x0d, 0x1c, 0x4b, 0x62, 0x83, 0xd2, + 0xe9, 0xfc, 0xec, 0xdb, 0xe3, 0xea, 0xad, 0xbf, 0x1d, 0x57, 0x3f, 0xec, 0x51, 0xd9, 0x1f, 0x76, + 0x9b, 0x1e, 0x0b, 0x4d, 0x40, 0x9a, 0x9f, 0x55, 0xe1, 0x3f, 0x6d, 0xc9, 0xa3, 0x01, 0x11, 0xcd, + 0x0d, 0xe2, 0xbd, 0x7c, 0xb1, 0x0a, 0x26, 0x5e, 0x37, 0x88, 0xe7, 0xcc, 0x8e, 0x48, 0x1d, 0x2c, + 0x09, 0x8a, 0x60, 0x31, 0xc0, 0x42, 0xba, 0x67, 0xe7, 0x2a, 0xdd, 0xc0, 0x5c, 0x48, 0x31, 0x3b, + 0xa7, 0xe7, 0xfb, 0x25, 0xc0, 0x3e, 0x0e, 0xa8, 0x8f, 0x25, 0xe3, 0xc2, 0x2e, 0xd7, 0x26, 0x1a, + 0xa5, 0x87, 0xf7, 0xc7, 0x1f, 0xc9, 0x6f, 0x12, 0x1b, 0x27, 0x63, 0x8e, 0x38, 0xcc, 0xe1, 0x5e, + 0x8f, 0xab, 0x03, 0x22, 0xae, 0xb2, 0x8b, 0xa4, 0x3d, 0xa3, 0x29, 0xdb, 0xd7, 0xa0, 0xdc, 0xd4, + 0x86, 0x9d, 0xc5, 0xe7, 0xaf, 0xaa, 0x73, 0x67, 0x40, 0xe1, 0x54, 0xd2, 0x09, 0x62, 0x44, 0x1d, + 0x5b, 0x38, 0x0c, 0x24, 0x75, 0x05, 0x89, 0x7c, 0x7b, 0xb6, 0x66, 0x35, 0x0a, 0x4e, 0x51, 0x23, + 0x3b, 0x24, 0xf2, 0xd1, 0x8f, 0x60, 0x2e, 0xa0, 0xcf, 0x86, 0xd4, 0xa7, 0xf2, 0xc8, 0x0d, 0x99, + 0x3f, 0x0c, 0x88, 0x5d, 0xd1, 0x4a, 0x95, 0x14, 0x7f, 0xa2, 0x61, 0xd4, 0x86, 0xc5, 0xcc, 0x0d, + 0x3b, 0xc0, 0x54, 0xf6, 0x38, 0x1b, 0x0e, 0xec, 0xb9, 0x9a, 0xd5, 0x98, 0x71, 0x16, 0x46, 0xb2, + 0x2f, 0x12, 0x11, 0xfa, 0x09, 0xd8, 0xb4, 0xeb, 0xb9, 0x11, 0x39, 0x94, 0xee, 0x68, 0x1f, 0xdc, + 0x3e, 0x16, 0x7d, 0x7b, 0xbe, 0x66, 0x35, 0xca, 0xce, 0x6d, 0xda, 0xf5, 0xb6, 0xc8, 0xa1, 0x4c, + 0x17, 0x22, 0x3e, 0xc3, 0xa2, 0x8f, 0x8e, 0x60, 0x25, 0xd5, 0x77, 0x05, 0x09, 0x4c, 0xb6, 0xc1, + 0x81, 0x0a, 0x48, 0xf5, 0xd7, 0x46, 0x35, 0xab, 0x31, 0xd9, 0xf9, 0xf8, 0xe4, 0xb8, 0xda, 0xba, + 0x5c, 0xf3, 0x81, 0x90, 0x9c, 0x46, 0xbd, 0x07, 0x2c, 0xa4, 0x52, 0x9d, 0xec, 0x91, 0x73, 0x37, + 0x35, 0xd8, 0x49, 0xf4, 0xd7, 0x52, 0x75, 0xf4, 0x5b, 0x58, 0xe8, 0xb3, 0xc0, 0xa7, 0x51, 0x4f, + 0x64, 0xe7, 0x5b, 0xd0, 0xf3, 0x35, 0x4e, 0x8e, 0xab, 0xef, 0x5f, 0x20, 0x3e, 0x3f, 0x09, 0x4a, + 0xb4, 0x32, 0xd4, 0x0e, 0xcc, 0xeb, 0xe0, 0x25, 0x03, 0xe6, 0xf5, 0xdd, 0x3e, 0xa1, 0xbd, 0xbe, + 0xb4, 0x17, 0x6b, 0x56, 0x63, 0xa2, 0xf3, 0xe1, 0xc9, 0x71, 0xb5, 0x7e, 0x4e, 0x78, 0x9e, 0xb6, + 0xa2, 0x74, 0x1e, 0x2b, 0x95, 0xcf, 0xb4, 0x06, 0xda, 0x82, 0x09, 0xb9, 0x1f, 0xd8, 0xb7, 0x6f, + 0x20, 0xfe, 0x15, 0x11, 0xda, 0x86, 0xb9, 0x61, 0xd4, 0x65, 0x91, 0xf2, 0xdd, 0x1d, 0x10, 0x4e, + 0x99, 0x6f, 0xdf, 0xd1, 0x2e, 0x7e, 0x70, 0x72, 0x5c, 0x7d, 0xef, 0xac, 0xec, 0x02, 0x0f, 0x53, + 0x95, 0x6d, 0xad, 0x81, 0x7e, 0x05, 0x95, 0x90, 0x08, 0x81, 0x7b, 0x44, 0x28, 0x23, 0x57, 0x1e, + 0xda, 0xef, 0x68, 0xc2, 0xf7, 0x4f, 0x8e, 0xab, 0xb5, 0x33, 0xa2, 0xf3, 0x7c, 0x33, 0x89, 0xc6, + 0x36, 0xe1, 0xbb, 0x87, 0xe8, 0xa7, 0x50, 0xf0, 0x89, 0x47, 0x43, 0x1c, 0x08, 0xdb, 0xd6, 0x34, + 0xf7, 0x4e, 0x8e, 0xab, 0x4b, 0x09, 0x76, 0xde, 0x3e, 0x55, 0x47, 0xf7, 0x61, 0x7e, 0xe4, 0x3e, + 0x89, 0x70, 0x37, 0x20, 0xbe, 0xbd, 0xa4, 0x83, 0x7d, 0xb4, 0xe6, 0xc7, 0x31, 0xae, 0x2e, 0x86, + 0xa9, 0x30, 0x22, 0xd5, 0x5d, 0x8e, 0x2f, 0x46, 0x82, 0x27, 0xaa, 0x0d, 0x98, 0xe3, 0x44, 0x0e, + 0x79, 0xe4, 0x4a, 0xa6, 0xaf, 0x19, 0xe1, 0xf6, 0xbb, 0x5a, 0x75, 0x36, 0xc6, 0x77, 0xd9, 0x8e, + 0x46, 0xd1, 0x6d, 0xc8, 0x53, 0xe1, 0xb6, 0xdb, 0x8f, 0xec, 0xbb, 0x5a, 0x3e, 0x45, 0x45, 0xbb, + 0xfd, 0x08, 0xfd, 0x1a, 0x4a, 0x62, 0xd8, 0xfd, 0x9a, 0x45, 0x64, 0x33, 0xda, 0x63, 0xf6, 0x3d, + 0x9d, 0xf8, 0x57, 0xc7, 0xa7, 0x84, 0x9d, 0x91, 0x91, 0x93, 0x65, 0xa8, 0x6f, 0x41, 0x29, 0x23, + 0x43, 0x77, 0xa1, 0x88, 0x87, 0xb2, 0xcf, 0x38, 0x95, 0x47, 0xa6, 0x5c, 0x8f, 0x00, 0xf4, 0x1e, + 0x94, 0x75, 0x62, 0x8f, 0x0b, 0xf4, 0x86, 0xa9, 0xd7, 0x25, 0x85, 0xad, 0xc7, 0x50, 0xfd, 0x0f, + 0x39, 0x80, 0x51, 0x95, 0x41, 0x0f, 0x61, 0x3a, 0x29, 0x52, 0x9a, 0xad, 0x63, 0xbf, 0x7c, 0xb1, + 0xba, 0x68, 0x22, 0xc9, 0xd4, 0x9d, 0x1d, 0x7d, 0x0e, 0x4e, 0xa2, 0x88, 0x08, 0x4c, 0x77, 0x71, + 0xa0, 0xaa, 0x9e, 0x9d, 0xd3, 0x29, 0x6f, 0xa9, 0x69, 0x0c, 0xd4, 0x44, 0x4d, 0xd3, 0xc3, 0x34, + 0xd7, 0x19, 0x8d, 0x3a, 0x1f, 0xa9, 0x30, 0x7e, 0xfe, 0xaa, 0xda, 0xb8, 0x42, 0x18, 0x2b, 0x03, + 0xe1, 0x24, 0xdc, 0xe8, 0x5d, 0x28, 0x0e, 0x18, 0x97, 0x6e, 0x84, 0x43, 0xa2, 0xfb, 0x8a, 0xa2, + 0x53, 0x50, 0xc0, 0x16, 0x0e, 0x09, 0x5a, 0xfd, 0xaf, 0x3d, 0x42, 0xf1, 0xa2, 0xaa, 0x7f, 0x1f, + 0xe6, 0x0d, 0x6d, 0x26, 0xdb, 0x4d, 0xe9, 0x6c, 0x37, 0x67, 0x04, 0x69, 0xaa, 0xab, 0xff, 0x02, + 0xca, 0x1b, 0x54, 0x05, 0x5f, 0x77, 0xa8, 0xef, 0xba, 0x0d, 0xd3, 0xfb, 0x38, 0x60, 0x03, 0xc2, + 0xcd, 0x8e, 0x27, 0x43, 0x74, 0x07, 0xf2, 0x38, 0x54, 0xfb, 0xa8, 0x77, 0x7a, 0xd2, 0x31, 0xa3, + 0xfa, 0x8b, 0x29, 0x98, 0xfb, 0x22, 0x75, 0xc2, 0x21, 0x1e, 0xe3, 0xa7, 0x1b, 0x29, 0xeb, 0x74, + 0x23, 0xf5, 0x63, 0x28, 0x9a, 0x6a, 0xcf, 0x78, 0x7c, 0x68, 0x97, 0x9c, 0xc3, 0x48, 0x15, 0x39, + 0x50, 0xf6, 0x33, 0x9e, 0xda, 0x13, 0xfa, 0x38, 0x9a, 0xe3, 0xc3, 0x2d, 0xbb, 0x3e, 0xe7, 0x14, + 0x87, 0xf2, 0x85, 0x13, 0x8f, 0x0e, 0xa8, 0x2a, 0x69, 0x93, 0xe3, 0x7c, 0x49, 0x55, 0x91, 0x97, + 0xee, 0xc5, 0xd4, 0xcd, 0x07, 0x85, 0xa1, 0x46, 0x5f, 0x43, 0xa9, 0xab, 0x6e, 0xa7, 0x99, 0x29, + 0xee, 0xab, 0x2e, 0x99, 0xe9, 0xe7, 0x26, 0x8b, 0xfe, 0xff, 0x15, 0x67, 0x7a, 0xf9, 0x62, 0xb5, + 0x64, 0xc8, 0xd4, 0xd0, 0x01, 0x35, 0xdb, 0x5a, 0x3c, 0xf7, 0x1d, 0xc8, 0xcb, 0x43, 0x5d, 0xef, + 0xe2, 0xae, 0xcb, 0x8c, 0x14, 0x2e, 0x24, 0x96, 0x43, 0xa1, 0x3b, 0xad, 0x29, 0xc7, 0x8c, 0xd0, + 0x13, 0xa8, 0x78, 0x2c, 0x1c, 0x04, 0x44, 0x57, 0x31, 0xd5, 0x84, 0xeb, 0x56, 0xab, 0xf4, 0x70, + 0xb9, 0x19, 0x77, 0xe8, 0xcd, 0xa4, 0x43, 0x6f, 0xee, 0x26, 0x1d, 0x7a, 0xa7, 0xa0, 0x1c, 0xfe, + 0xe6, 0x55, 0xd5, 0x72, 0x66, 0x47, 0xc6, 0x4a, 0x8c, 0x96, 0xa1, 0xc0, 0xc9, 0xb3, 0x21, 0x19, + 0x12, 0x5f, 0xb7, 0x63, 0x05, 0x27, 0x1d, 0xa3, 0x3a, 0x94, 0xb1, 0xf7, 0x34, 0x62, 0x07, 0x01, + 0xf1, 0x7b, 0xc4, 0xd7, 0x2d, 0x54, 0xc1, 0x39, 0x85, 0xa9, 0xdc, 0x10, 0xd7, 0xa3, 0x68, 0x18, + 0x76, 0x09, 0xb7, 0xcb, 0x2a, 0xe3, 0x3a, 0x25, 0x8d, 0x6d, 0x69, 0xa8, 0xfe, 0x67, 0x0b, 0x2a, + 0x9f, 0x27, 0xd9, 0x73, 0x7c, 0xd4, 0x9e, 0x65, 0xcc, 0x9d, 0x63, 0x54, 0xc1, 0x94, 0x56, 0xe8, + 0xf8, 0x0e, 0x5f, 0x16, 0x4c, 0xa9, 0xaa, 0xea, 0x74, 0x39, 0x09, 0xb0, 0x24, 0xbe, 0x6b, 0xf6, + 0x7c, 0xb2, 0x36, 0xa1, 0x3a, 0x5d, 0x83, 0xee, 0x6a, 0xb0, 0xfe, 0xc7, 0x1c, 0x20, 0xd5, 0xe5, + 0x25, 0x8d, 0xf2, 0x8d, 0xf8, 0xfc, 0x11, 0xe4, 0x05, 0x1b, 0x72, 0x8f, 0x8c, 0x75, 0xd8, 0xe8, + 0xa1, 0x4f, 0xa0, 0xe4, 0x13, 0x21, 0x69, 0x14, 0xf7, 0x17, 0xe3, 0x2e, 0x4d, 0x56, 0x39, 0x93, + 0x42, 0xa6, 0xb4, 0x2b, 0x49, 0xa4, 0x5f, 0x10, 0x3d, 0xf9, 0xb7, 0x8f, 0x9e, 0xfa, 0xbf, 0x2c, + 0x98, 0xdd, 0xe5, 0x38, 0x12, 0x7b, 0x84, 0x9b, 0x5d, 0x52, 0xeb, 0x8c, 0x2b, 0x9c, 0x35, 0x76, + 0x9d, 0x71, 0xcd, 0x3b, 0x95, 0x1a, 0x72, 0x57, 0x4f, 0x0d, 0xcf, 0xd2, 0x35, 0x4e, 0xfc, 0xd0, + 0x17, 0x36, 0xc9, 0xc0, 0xff, 0x9c, 0x84, 0x62, 0xda, 0x88, 0xa2, 0x35, 0xa8, 0x98, 0x94, 0xed, + 0x5e, 0xb5, 0xda, 0xcd, 0x1a, 0x83, 0xb5, 0xb4, 0xe8, 0xa9, 0xf3, 0x08, 0xa9, 0x10, 0xe9, 0x43, + 0x25, 0x77, 0x13, 0x8f, 0xa2, 0x11, 0xa9, 0x7e, 0xa4, 0xf4, 0x54, 0xaf, 0x62, 0xd2, 0xbb, 0x2b, + 0xfa, 0x98, 0x13, 0x61, 0xc2, 0xf0, 0xfb, 0xcd, 0x53, 0x49, 0x59, 0x77, 0x34, 0x29, 0x72, 0xa1, + 0xbc, 0xcf, 0xa4, 0xee, 0xfe, 0xd8, 0x01, 0xe1, 0x26, 0x68, 0xaf, 0x33, 0xc9, 0x66, 0x24, 0x33, + 0x93, 0x6c, 0x46, 0xd2, 0x29, 0xc5, 0x8c, 0xdb, 0x8a, 0x10, 0x39, 0x30, 0x25, 0x3c, 0xc6, 0x89, + 0x8e, 0xeb, 0xef, 0xeb, 0x7e, 0x4c, 0x95, 0x49, 0xb5, 0xf9, 0x38, 0x05, 0x9b, 0x54, 0x7b, 0x07, + 0xf2, 0xbf, 0xc7, 0x54, 0xf5, 0x75, 0xd3, 0x3a, 0xf3, 0x99, 0x11, 0x5a, 0x01, 0x90, 0x2c, 0xec, + 0x0a, 0xc9, 0x22, 0xe2, 0xeb, 0xf4, 0x5c, 0x70, 0x32, 0x08, 0xfa, 0x14, 0xca, 0xb1, 0xa6, 0x2b, + 0xa8, 0x6a, 0x67, 0xae, 0x93, 0x9f, 0x4b, 0xb1, 0xe5, 0x8e, 0x32, 0xac, 0xff, 0xc9, 0x82, 0xca, + 0x46, 0xb2, 0xc3, 0xe6, 0xb9, 0x76, 0xaa, 0xa8, 0x5b, 0x57, 0x2f, 0xea, 0x18, 0xa6, 0xe3, 0x07, + 0xa5, 0x30, 0xed, 0xd5, 0x8d, 0xbd, 0x28, 0x13, 0xde, 0xfa, 0x5f, 0x2c, 0xa8, 0x9c, 0x91, 0xa2, + 0xce, 0xf5, 0xef, 0xc8, 0x59, 0x03, 0x44, 0x20, 0x7f, 0x10, 0x3f, 0x85, 0xe2, 0xbb, 0xf1, 0xe4, + 0x7a, 0x87, 0xfe, 0xef, 0xe3, 0xea, 0xcc, 0x11, 0x0e, 0x83, 0x4f, 0xea, 0x31, 0x4b, 0xfd, 0x4c, + 0x14, 0xe4, 0x13, 0x38, 0x07, 0xb0, 0x91, 0x26, 0x7d, 0xf4, 0xe9, 0x85, 0xdf, 0x5c, 0xc6, 0x39, + 0x7f, 0xc1, 0xf7, 0x95, 0xc7, 0x30, 0x3f, 0x7a, 0x80, 0x26, 0x3c, 0xe3, 0xf2, 0xdc, 0x5c, 0x6a, + 0x92, 0xd0, 0xfc, 0xef, 0xd3, 0x9d, 0xba, 0x00, 0xe6, 0x0d, 0x3a, 0x19, 0x57, 0x91, 0x78, 0xa4, + 0x9e, 0x3e, 0x3c, 0x53, 0x1f, 0x5d, 0x12, 0xf9, 0xa6, 0xce, 0x54, 0xb2, 0xf8, 0xe3, 0xc8, 0xaf, + 0xef, 0xc0, 0xc2, 0x36, 0xe3, 0x72, 0x3d, 0xfd, 0xf6, 0xb7, 0x3b, 0x1c, 0x04, 0x57, 0xfc, 0x46, + 0xf8, 0x0e, 0x4c, 0xeb, 0x56, 0x3d, 0xfd, 0x44, 0x98, 0x57, 0xc3, 0x4d, 0xbf, 0xfe, 0xf7, 0x1c, + 0x4c, 0x3b, 0xc4, 0x23, 0x74, 0x20, 0x2f, 0xab, 0xca, 0xa3, 0x52, 0x94, 0xbb, 0x62, 0x29, 0x1a, + 0x35, 0x63, 0x13, 0xa7, 0x9a, 0xb1, 0x51, 0x17, 0x3a, 0xf9, 0xc3, 0x75, 0xa1, 0xeb, 0x00, 0x7b, + 0x94, 0x0b, 0xe9, 0x0a, 0x42, 0x22, 0xf3, 0xe9, 0x70, 0x5c, 0xd2, 0xb0, 0x74, 0xd2, 0x28, 0x6a, + 0xbb, 0x1d, 0x42, 0x22, 0xd4, 0x81, 0xa2, 0xa9, 0xd1, 0xc4, 0xbf, 0x62, 0x69, 0x37, 0x1c, 0xa9, + 0x59, 0xe7, 0xab, 0x6f, 0x5f, 0xaf, 0x58, 0xdf, 0xbd, 0x5e, 0xb1, 0xfe, 0xf1, 0x7a, 0xc5, 0xfa, + 0xe6, 0xcd, 0xca, 0xad, 0xef, 0xde, 0xac, 0xdc, 0xfa, 0xeb, 0x9b, 0x95, 0x5b, 0x5f, 0xae, 0x65, + 0x16, 0x95, 0xc9, 0x1e, 0xab, 0xea, 0x21, 0x99, 0x05, 0x5a, 0x87, 0x17, 0x7c, 0xcf, 0xd6, 0x6b, + 0xee, 0xe6, 0xb5, 0x17, 0x1f, 0xff, 0x27, 0x00, 0x00, 0xff, 0xff, 0xef, 0x4a, 0xe1, 0x5d, 0xfd, + 0x16, 0x00, 0x00, } func (m *Zone) Marshal() (dAtA []byte, err error) { @@ -2078,24 +2065,12 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.ConsensusPubkey != nil { - { - size, err := m.ConsensusPubkey.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintInterchainstaking(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } - n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JailedSince, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JailedSince):]) - if err11 != nil { - return 0, err11 + n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.JailedSince, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.JailedSince):]) + if err10 != nil { + return 0, err10 } - i -= n11 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n11)) + i -= n10 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n10)) i-- dAtA[i] = 0x4a if m.Tombstoned { @@ -2374,22 +2349,22 @@ func (m *Receipt) MarshalToSizedBuffer(dAtA []byte) (int, error) { var l int _ = l if m.Completed != nil { - n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed):]) - if err13 != nil { - return 0, err13 + n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.Completed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.Completed):]) + if err12 != nil { + return 0, err12 } - i -= n13 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n13)) + i -= n12 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n12)) i-- dAtA[i] = 0x32 } if m.FirstSeen != nil { - n14, err14 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.FirstSeen, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.FirstSeen):]) - if err14 != nil { - return 0, err14 + n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.FirstSeen, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.FirstSeen):]) + if err13 != nil { + return 0, err13 } - i -= n14 - i = encodeVarintInterchainstaking(dAtA, i, uint64(n14)) + i -= n13 + i = encodeVarintInterchainstaking(dAtA, i, uint64(n13)) i-- dAtA[i] = 0x2a } @@ -2772,10 +2747,6 @@ func (m *Validator) Size() (n int) { } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.JailedSince) n += 1 + l + sovInterchainstaking(uint64(l)) - if m.ConsensusPubkey != nil { - l = m.ConsensusPubkey.Size() - n += 1 + l + sovInterchainstaking(uint64(l)) - } return n } @@ -5378,42 +5349,6 @@ func (m *Validator) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConsensusPubkey", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowInterchainstaking - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthInterchainstaking - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthInterchainstaking - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.ConsensusPubkey == nil { - m.ConsensusPubkey = &types1.Any{} - } - if err := m.ConsensusPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipInterchainstaking(dAtA[iNdEx:]) diff --git a/x/interchainstaking/types/validator.go b/x/interchainstaking/types/validator.go index 1b86e537e..4ffab9e0b 100644 --- a/x/interchainstaking/types/validator.go +++ b/x/interchainstaking/types/validator.go @@ -1,13 +1,10 @@ package types import ( - sdkioerrors "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/bech32" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) func (v Validator) GetAddressBytes() ([]byte, error) { @@ -43,16 +40,6 @@ func (v Validator) SharesToTokens(shares sdk.Dec) sdkmath.Int { return sdk.NewDecFromInt(v.VotingPower).Quo(v.DelegatorShares).Mul(shares).TruncateInt() } -// GetConsAddr extracts Consensus key address -func (v Validator) GetConsAddr() (sdk.ConsAddress, error) { - pk, ok := v.ConsensusPubkey.GetCachedValue().(cryptotypes.PubKey) - if !ok { - return nil, sdkioerrors.Wrapf(sdkerrors.ErrInvalidType, "expecting cryptotypes.PubKey, got %T", pk) - } - - return sdk.ConsAddress(pk.Address()), nil -} - func (di DelegatorIntent) AddOrdinal(multiplier sdk.Dec, intents ValidatorIntents) DelegatorIntent { if len(intents) == 0 { return di diff --git a/x/mint/keeper/hooks.go b/x/mint/keeper/hooks.go index bd732964d..e1fad7c97 100644 --- a/x/mint/keeper/hooks.go +++ b/x/mint/keeper/hooks.go @@ -18,56 +18,57 @@ func (k Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNumb params := k.GetParams(ctx) k.Logger(ctx).Info("Mint AfterEpochEnd", "Params", params) - if epochIdentifier == params.EpochIdentifier { - // not distribute rewards if it's not time yet for rewards distribution - if epochNumber < params.MintingRewardsDistributionStartEpoch { - return nil - } else if epochNumber == params.MintingRewardsDistributionStartEpoch { - k.SetLastReductionEpochNum(ctx, epochNumber) - } - // fetch stored minter & params - minter := k.GetMinter(ctx) - params := k.GetParams(ctx) - - // Check if we have hit an epoch where we update the inflation parameter. - // Since epochs only update based on BFT time data, it is safe to store the "reductioning period time" - // in terms of the number of epochs that have transpired. - if epochNumber >= k.GetParams(ctx).ReductionPeriodInEpochs+k.GetLastReductionEpochNum(ctx) { - // reduction the reward per reduction period - minter.EpochProvisions = minter.NextEpochProvisions(params) - k.SetMinter(ctx, minter) - k.SetLastReductionEpochNum(ctx, epochNumber) - } - - // mint coins, update supply - mintedCoin := minter.EpochProvision(params) - mintedCoins := sdk.NewCoins(mintedCoin) - - // We over-allocate by the developer vesting portion, and burn this later - err := k.MintCoins(ctx, mintedCoins) - if err != nil { - return err - } - - // send the minted coins to the fee collector account - err = k.DistributeMintedCoin(ctx, mintedCoin) - if err != nil { - return err - } - - if mintedCoin.Amount.IsInt64() { - defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens") - } - - ctx.EventManager().EmitEvent( - sdk.NewEvent( - types.EventTypeMint, - sdk.NewAttribute(types.AttributeEpochNumber, fmt.Sprintf("%d", epochNumber)), - sdk.NewAttribute(types.AttributeKeyEpochProvisions, minter.EpochProvisions.String()), - sdk.NewAttribute(sdk.AttributeKeyAmount, mintedCoin.Amount.String()), - ), - ) + if epochIdentifier != params.EpochIdentifier { + return nil } + + // not distribute rewards if it's not time yet for rewards distribution + if epochNumber < params.MintingRewardsDistributionStartEpoch { + return nil + } else if epochNumber == params.MintingRewardsDistributionStartEpoch { + k.SetLastReductionEpochNum(ctx, epochNumber) + } + // fetch stored minter & params + minter := k.GetMinter(ctx) + + // Check if we have hit an epoch where we update the inflation parameter. + // Since epochs only update based on BFT time data, it is safe to store the "reductioning period time" + // in terms of the number of epochs that have transpired. + if epochNumber >= params.ReductionPeriodInEpochs+k.GetLastReductionEpochNum(ctx) { + // reduction the reward per reduction period + minter.EpochProvisions = minter.NextEpochProvisions(params) + k.SetMinter(ctx, minter) + k.SetLastReductionEpochNum(ctx, epochNumber) + } + + // mint coins, update supply + mintedCoin := minter.EpochProvision(params) + mintedCoins := sdk.NewCoins(mintedCoin) + + // We over-allocate by the developer vesting portion, and burn this later + err := k.MintCoins(ctx, mintedCoins) + if err != nil { + return err + } + + // send the minted coins to the fee collector account + err = k.DistributeMintedCoin(ctx, mintedCoin) + if err != nil { + return err + } + + if mintedCoin.Amount.IsInt64() { + defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens") + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeMint, + sdk.NewAttribute(types.AttributeEpochNumber, fmt.Sprintf("%d", epochNumber)), + sdk.NewAttribute(types.AttributeKeyEpochProvisions, minter.EpochProvisions.String()), + sdk.NewAttribute(sdk.AttributeKeyAmount, mintedCoin.Amount.String()), + ), + ) return nil } diff --git a/x/participationrewards/keeper/hooks.go b/x/participationrewards/keeper/hooks.go index 8fac2803b..28daa67eb 100644 --- a/x/participationrewards/keeper/hooks.go +++ b/x/participationrewards/keeper/hooks.go @@ -16,78 +16,80 @@ func (*Keeper) BeforeEpochStart(_ sdk.Context, _ string, _ int64) error { } func (k *Keeper) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, _ int64) error { - if epochIdentifier == epochstypes.EpochIdentifierEpoch { - k.IteratePrefixedProtocolDatas(ctx, types.GetPrefixProtocolDataKey(types.ProtocolDataTypeConnection), func(index int64, _ []byte, data types.ProtocolData) (stop bool) { - blockQuery := tmservice.GetLatestBlockRequest{} - bz := k.cdc.MustMarshal(&blockQuery) - - iConnectionData, err := types.UnmarshalProtocolData(types.ProtocolDataTypeConnection, data.Data) - if err != nil { - k.Logger(ctx).Error("Error unmarshalling protocol data") - } - connectionData, _ := iConnectionData.(*types.ConnectionProtocolData) - if connectionData.ChainID == ctx.ChainID() { - return false - } - - k.IcqKeeper.MakeRequest( - ctx, - connectionData.ConnectionID, - connectionData.ChainID, - "cosmos.base.tendermint.v1beta1.Service/GetLatestBlock", - bz, - sdk.NewInt(-1), - types.ModuleName, - SetEpochBlockCallbackID, - 0, - ) - return false - }) + if epochIdentifier != epochstypes.EpochIdentifierEpoch { + return nil + } - k.Logger(ctx).Info("setting self connection data...") - err := k.UpdateSelfConnectionData(ctx) + k.IteratePrefixedProtocolDatas(ctx, types.GetPrefixProtocolDataKey(types.ProtocolDataTypeConnection), func(index int64, _ []byte, data types.ProtocolData) (stop bool) { + blockQuery := tmservice.GetLatestBlockRequest{} + bz := k.cdc.MustMarshal(&blockQuery) + + iConnectionData, err := types.UnmarshalProtocolData(types.ProtocolDataTypeConnection, data.Data) if err != nil { - panic(err) + k.Logger(ctx).Error("Error unmarshalling protocol data") + } + connectionData, _ := iConnectionData.(*types.ConnectionProtocolData) + if connectionData.ChainID == ctx.ChainID() { + return false } - k.Logger(ctx).Info("distribute participation rewards...") - - allocation, err := types.GetRewardsAllocations( - k.GetModuleBalance(ctx), - k.GetParams(ctx).DistributionProportions, + k.IcqKeeper.MakeRequest( + ctx, + connectionData.ConnectionID, + connectionData.ChainID, + "cosmos.base.tendermint.v1beta1.Service/GetLatestBlock", + bz, + sdk.NewInt(-1), + types.ModuleName, + SetEpochBlockCallbackID, + 0, ) - if err != nil { - k.Logger(ctx).Error(err.Error()) - } + return false + }) - k.Logger(ctx).Info("Triggering submodule hooks") - for _, sub := range k.prSubmodules { - sub.Hooks(ctx, k) - } + k.Logger(ctx).Info("setting self connection data...") + err := k.UpdateSelfConnectionData(ctx) + if err != nil { + panic(err) + } - tvs, err := k.CalcTokenValues(ctx) - if err != nil { - k.Logger(ctx).Error("unable to calculate token values", "error", err.Error()) - return nil - } + k.Logger(ctx).Info("distribute participation rewards...") - if allocation == nil { - // if allocation is unset, then return early to avoid panic - k.Logger(ctx).Error("nil allocation", "error", err.Error()) - return nil - } + allocation, err := types.GetRewardsAllocations( + k.GetModuleBalance(ctx), + k.GetParams(ctx).DistributionProportions, + ) + if err != nil { + k.Logger(ctx).Error(err.Error()) + } - if err := k.AllocateZoneRewards(ctx, tvs, *allocation); err != nil { - k.Logger(ctx).Error("unable to allocate: tvl is zero", "error", err.Error()) - return nil - } + k.Logger(ctx).Info("Triggering submodule hooks") + for _, sub := range k.prSubmodules { + sub.Hooks(ctx, k) + } + + tvs, err := k.CalcTokenValues(ctx) + if err != nil { + k.Logger(ctx).Error("unable to calculate token values", "error", err.Error()) + return nil + } + + if allocation == nil { + // if allocation is unset, then return early to avoid panic + k.Logger(ctx).Error("nil allocation", "error", err.Error()) + return nil + } - if !allocation.Lockup.IsZero() { - // at genesis lockup will be disabled, and enabled when ICS is used. - if err := k.AllocateLockupRewards(ctx, allocation.Lockup); err != nil { - k.Logger(ctx).Error(err.Error()) - return err - } + if err := k.AllocateZoneRewards(ctx, tvs, *allocation); err != nil { + k.Logger(ctx).Error("unable to allocate: tvl is zero", "error", err.Error()) + return nil + } + + if !allocation.Lockup.IsZero() { + // at genesis lockup will be disabled, and enabled when ICS is used. + if err := k.AllocateLockupRewards(ctx, allocation.Lockup); err != nil { + k.Logger(ctx).Error(err.Error()) + return err } } return nil