ibc_proto/prost/
interchain_security.ccv.provider.v1.rs

1// This file is @generated by prost-build.
2/// WARNING: This message is deprecated in favor of `MsgCreateConsumer`.
3/// ConsumerAdditionProposal is a governance proposal on the provider chain to
4/// spawn a new consumer chain. If it passes, then all validators on the provider
5/// chain are expected to validate the consumer chain at spawn time or get
6/// slashed. It is recommended that spawn time occurs after the proposal end
7/// time.
8/// Use MsgConsumerAddition to submit this proposal type.
9#[derive(Clone, PartialEq, ::prost::Message)]
10pub struct ConsumerAdditionProposal {
11    /// the title of the proposal
12    #[prost(string, tag = "1")]
13    pub title: ::prost::alloc::string::String,
14    /// the description of the proposal
15    #[prost(string, tag = "2")]
16    pub description: ::prost::alloc::string::String,
17    /// the proposed chain-id of the new consumer chain, must be different from all
18    /// other consumer chain ids of the executing provider chain.
19    #[prost(string, tag = "3")]
20    pub chain_id: ::prost::alloc::string::String,
21    /// the proposed initial height of new consumer chain.
22    /// For a completely new chain, this will be {0,1}. However, it may be
23    /// different if this is a chain that is converting to a consumer chain.
24    #[prost(message, optional, tag = "4")]
25    pub initial_height: ::core::option::Option<
26        super::super::super::super::ibc::core::client::v1::Height,
27    >,
28    /// The hash of the consumer chain genesis state without the consumer CCV
29    /// module genesis params. It is used for off-chain confirmation of
30    /// genesis.json validity by validators and other parties.
31    #[prost(bytes = "vec", tag = "5")]
32    pub genesis_hash: ::prost::alloc::vec::Vec<u8>,
33    /// The hash of the consumer chain binary that should be run by validators on
34    /// chain initialization. It is used for off-chain confirmation of binary
35    /// validity by validators and other parties.
36    #[prost(bytes = "vec", tag = "6")]
37    pub binary_hash: ::prost::alloc::vec::Vec<u8>,
38    /// spawn time is the time on the provider chain at which the consumer chain
39    /// genesis is finalized and all validators will be responsible for starting
40    /// their consumer chain validator node.
41    #[prost(message, optional, tag = "7")]
42    pub spawn_time: ::core::option::Option<
43        ::tendermint_proto::google::protobuf::Timestamp,
44    >,
45    /// Unbonding period for the consumer,
46    /// which should be smaller than that of the provider in general.
47    #[prost(message, optional, tag = "8")]
48    pub unbonding_period: ::core::option::Option<
49        ::tendermint_proto::google::protobuf::Duration,
50    >,
51    /// Sent CCV related IBC packets will timeout after this duration
52    #[prost(message, optional, tag = "9")]
53    pub ccv_timeout_period: ::core::option::Option<
54        ::tendermint_proto::google::protobuf::Duration,
55    >,
56    /// Sent transfer related IBC packets will timeout after this duration
57    #[prost(message, optional, tag = "10")]
58    pub transfer_timeout_period: ::core::option::Option<
59        ::tendermint_proto::google::protobuf::Duration,
60    >,
61    /// The fraction of tokens allocated to the consumer redistribution address
62    /// during distribution events. The fraction is a string representing a
63    /// decimal number. For example "0.75" would represent 75%.
64    #[prost(string, tag = "11")]
65    pub consumer_redistribution_fraction: ::prost::alloc::string::String,
66    /// BlocksPerDistributionTransmission is the number of blocks between
67    /// ibc-token-transfers from the consumer chain to the provider chain. On
68    /// sending transmission event, `consumer_redistribution_fraction` of the
69    /// accumulated tokens are sent to the consumer redistribution address.
70    #[prost(int64, tag = "12")]
71    pub blocks_per_distribution_transmission: i64,
72    /// The number of historical info entries to persist in store.
73    /// This param is a part of the cosmos sdk staking module. In the case of
74    /// a ccv enabled consumer chain, the ccv module acts as the staking module.
75    #[prost(int64, tag = "13")]
76    pub historical_entries: i64,
77    /// The ID of a token transfer channel used for the Reward Distribution
78    /// sub-protocol. If DistributionTransmissionChannel == "", a new transfer
79    /// channel is created on top of the same connection as the CCV channel.
80    /// Note that transfer_channel_id is the ID of the channel end on the consumer
81    /// chain. it is most relevant for chains performing a sovereign to consumer
82    /// changeover in order to maintain the existing ibc transfer channel
83    #[prost(string, tag = "14")]
84    pub distribution_transmission_channel: ::prost::alloc::string::String,
85    /// Corresponds to the percentage of validators that have to validate the chain under the Top N case.
86    /// For example, 53 corresponds to a Top 53% chain, meaning that the top 53% provider validators by voting power
87    /// have to validate the proposed consumer chain. top_N can either be 0 or any value in \[50, 100\].
88    /// A chain can join with top_N == 0 as an Opt In chain, or with top_N ∈ \[50, 100\] as a Top N chain.
89    #[prost(uint32, tag = "15")]
90    pub top_n: u32,
91    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain. For instance, if
92    /// `validators_power_cap` is set to 32, it means that no validator can have more than 32% of the voting power on the
93    /// consumer chain. Note that this might not be feasible. For example, think of a consumer chain with only
94    /// 5 validators and with `validators_power_cap` set to 10%. In such a scenario, at least one validator would need
95    /// to have more than 20% of the total voting power. Therefore, `validators_power_cap` operates on a best-effort basis.
96    #[prost(uint32, tag = "16")]
97    pub validators_power_cap: u32,
98    /// Corresponds to the maximum number of validators that can validate a consumer chain.
99    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
100    #[prost(uint32, tag = "17")]
101    pub validator_set_cap: u32,
102    /// Corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate
103    /// the consumer chain.
104    #[prost(string, repeated, tag = "18")]
105    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
106    /// Corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain.
107    #[prost(string, repeated, tag = "19")]
108    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
109    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
110    #[prost(uint64, tag = "20")]
111    pub min_stake: u64,
112    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
113    #[prost(bool, tag = "21")]
114    pub allow_inactive_vals: bool,
115}
116impl ::prost::Name for ConsumerAdditionProposal {
117    const NAME: &'static str = "ConsumerAdditionProposal";
118    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
119    fn full_name() -> ::prost::alloc::string::String {
120        "interchain_security.ccv.provider.v1.ConsumerAdditionProposal".into()
121    }
122    fn type_url() -> ::prost::alloc::string::String {
123        "/interchain_security.ccv.provider.v1.ConsumerAdditionProposal".into()
124    }
125}
126/// WARNING: This message is deprecated in favor of `MsgRemoveConsumer`.
127/// ConsumerRemovalProposal is a governance proposal on the provider chain to
128/// remove (and stop) a consumer chain. If it passes, all the consumer chain's
129/// state is removed from the provider chain. The outstanding unbonding operation
130/// funds are released.
131/// Use MsgConsumerRemoval to submit this proposal type.
132#[derive(Clone, PartialEq, ::prost::Message)]
133pub struct ConsumerRemovalProposal {
134    /// the title of the proposal
135    #[prost(string, tag = "1")]
136    pub title: ::prost::alloc::string::String,
137    /// the description of the proposal
138    #[prost(string, tag = "2")]
139    pub description: ::prost::alloc::string::String,
140    /// the chain-id of the consumer chain to be stopped
141    #[prost(string, tag = "3")]
142    pub chain_id: ::prost::alloc::string::String,
143    /// the time on the provider chain at which all validators are responsible to
144    /// stop their consumer chain validator node
145    #[prost(message, optional, tag = "4")]
146    pub stop_time: ::core::option::Option<
147        ::tendermint_proto::google::protobuf::Timestamp,
148    >,
149}
150impl ::prost::Name for ConsumerRemovalProposal {
151    const NAME: &'static str = "ConsumerRemovalProposal";
152    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
153    fn full_name() -> ::prost::alloc::string::String {
154        "interchain_security.ccv.provider.v1.ConsumerRemovalProposal".into()
155    }
156    fn type_url() -> ::prost::alloc::string::String {
157        "/interchain_security.ccv.provider.v1.ConsumerRemovalProposal".into()
158    }
159}
160/// WARNING: This message is deprecated in favor of `MsgUpdateConsumer`.
161/// ConsumerModificationProposal is a governance proposal on the provider chain to modify parameters of a running
162/// consumer chain. If it passes, the consumer chain's state is updated to take into account the newest params.
163#[derive(Clone, PartialEq, ::prost::Message)]
164pub struct ConsumerModificationProposal {
165    /// the title of the proposal
166    #[prost(string, tag = "1")]
167    pub title: ::prost::alloc::string::String,
168    /// the description of the proposal
169    #[prost(string, tag = "2")]
170    pub description: ::prost::alloc::string::String,
171    /// the chain-id of the consumer chain to be modified
172    #[prost(string, tag = "3")]
173    pub chain_id: ::prost::alloc::string::String,
174    /// Corresponds to the percentage of validators that have to validate the chain under the Top N case.
175    /// For example, 53 corresponds to a Top 53% chain, meaning that the top 53% provider validators by voting power
176    /// have to validate the proposed consumer chain. top_N can either be 0 or any value in \[50, 100\].
177    /// A chain can join with top_N == 0 as an Opt In chain, or with top_N ∈ \[50, 100\] as a Top N chain.
178    #[prost(uint32, tag = "4")]
179    pub top_n: u32,
180    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain. For instance, if
181    /// `validators_power_cap` is set to 32, it means that no validator can have more than 32% of the voting power on the
182    /// consumer chain. Note that this might not be feasible. For example, think of a consumer chain with only
183    /// 5 validators and with `validators_power_cap` set to 10%. In such a scenario, at least one validator would need
184    /// to have more than 20% of the total voting power. Therefore, `validators_power_cap` operates on a best-effort basis.
185    #[prost(uint32, tag = "5")]
186    pub validators_power_cap: u32,
187    /// Corresponds to the maximum number of validators that can validate a consumer chain.
188    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
189    #[prost(uint32, tag = "6")]
190    pub validator_set_cap: u32,
191    /// Corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate
192    /// the consumer chain.
193    #[prost(string, repeated, tag = "7")]
194    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
195    /// Corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain.
196    #[prost(string, repeated, tag = "8")]
197    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
198    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
199    #[prost(uint64, tag = "9")]
200    pub min_stake: u64,
201    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
202    #[prost(bool, tag = "10")]
203    pub allow_inactive_vals: bool,
204}
205impl ::prost::Name for ConsumerModificationProposal {
206    const NAME: &'static str = "ConsumerModificationProposal";
207    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
208    fn full_name() -> ::prost::alloc::string::String {
209        "interchain_security.ccv.provider.v1.ConsumerModificationProposal".into()
210    }
211    fn type_url() -> ::prost::alloc::string::String {
212        "/interchain_security.ccv.provider.v1.ConsumerModificationProposal".into()
213    }
214}
215/// EquivocationProposal is a governance proposal on the provider chain to
216/// punish a validator for equivocation on a consumer chain.
217///
218/// This type is only used internally to the consumer CCV module.
219/// WARNING: This message is deprecated now that equivocations can be submitted
220/// and verified automatically on the provider. (see SubmitConsumerDoubleVoting in proto/interchain-security/ccv/provider/v1/tx.proto).
221#[derive(Clone, PartialEq, ::prost::Message)]
222pub struct EquivocationProposal {
223    /// the title of the proposal
224    #[prost(string, tag = "1")]
225    pub title: ::prost::alloc::string::String,
226    /// the description of the proposal
227    #[prost(string, tag = "2")]
228    pub description: ::prost::alloc::string::String,
229    /// the list of equivocations that will be processed
230    #[prost(message, repeated, tag = "3")]
231    pub equivocations: ::prost::alloc::vec::Vec<
232        super::super::super::super::cosmos::evidence::v1beta1::Equivocation,
233    >,
234}
235impl ::prost::Name for EquivocationProposal {
236    const NAME: &'static str = "EquivocationProposal";
237    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
238    fn full_name() -> ::prost::alloc::string::String {
239        "interchain_security.ccv.provider.v1.EquivocationProposal".into()
240    }
241    fn type_url() -> ::prost::alloc::string::String {
242        "/interchain_security.ccv.provider.v1.EquivocationProposal".into()
243    }
244}
245/// ChangeRewardDenomsProposal is a governance proposal on the provider chain to
246/// mutate the set of denoms accepted by the provider as rewards.
247/// Use MsgChangeRewardDenoms to submit this proposal type.
248#[derive(Clone, PartialEq, ::prost::Message)]
249pub struct ChangeRewardDenomsProposal {
250    /// the title of the proposal
251    #[prost(string, tag = "1")]
252    pub title: ::prost::alloc::string::String,
253    /// the description of the proposal
254    #[prost(string, tag = "2")]
255    pub description: ::prost::alloc::string::String,
256    /// the list of consumer reward denoms to add
257    #[prost(string, repeated, tag = "3")]
258    pub denoms_to_add: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
259    /// the list of consumer reward denoms to remove
260    #[prost(string, repeated, tag = "4")]
261    pub denoms_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
262}
263impl ::prost::Name for ChangeRewardDenomsProposal {
264    const NAME: &'static str = "ChangeRewardDenomsProposal";
265    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
266    fn full_name() -> ::prost::alloc::string::String {
267        "interchain_security.ccv.provider.v1.ChangeRewardDenomsProposal".into()
268    }
269    fn type_url() -> ::prost::alloc::string::String {
270        "/interchain_security.ccv.provider.v1.ChangeRewardDenomsProposal".into()
271    }
272}
273/// A persisted queue entry indicating that a slash packet data instance needs to
274/// be handled. This type belongs in the "global" queue, to coordinate slash
275/// packet handling times between consumers.
276#[derive(Clone, PartialEq, ::prost::Message)]
277pub struct GlobalSlashEntry {
278    /// Block time that slash packet was received by provider chain.
279    /// This field is used for store key iteration ordering.
280    #[prost(message, optional, tag = "1")]
281    pub recv_time: ::core::option::Option<
282        ::tendermint_proto::google::protobuf::Timestamp,
283    >,
284    /// The consumer that sent a slash packet.
285    #[prost(string, tag = "2")]
286    pub consumer_chain_id: ::prost::alloc::string::String,
287    /// The IBC sequence number of the recv packet.
288    /// This field is used in the store key to ensure uniqueness.
289    #[prost(uint64, tag = "3")]
290    pub ibc_seq_num: u64,
291    /// The provider's consensus address of the validator being slashed.
292    /// This field is used to obtain validator power in HandleThrottleQueues.
293    ///
294    /// This field is not used in the store key, but is persisted in value bytes,
295    /// see QueueGlobalSlashEntry.
296    #[prost(bytes = "vec", tag = "4")]
297    pub provider_val_cons_addr: ::prost::alloc::vec::Vec<u8>,
298}
299impl ::prost::Name for GlobalSlashEntry {
300    const NAME: &'static str = "GlobalSlashEntry";
301    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
302    fn full_name() -> ::prost::alloc::string::String {
303        "interchain_security.ccv.provider.v1.GlobalSlashEntry".into()
304    }
305    fn type_url() -> ::prost::alloc::string::String {
306        "/interchain_security.ccv.provider.v1.GlobalSlashEntry".into()
307    }
308}
309/// Params defines the parameters for CCV Provider module
310#[derive(Clone, PartialEq, ::prost::Message)]
311pub struct Params {
312    #[prost(message, optional, tag = "1")]
313    pub template_client: ::core::option::Option<
314        super::super::super::super::ibc::lightclients::tendermint::v1::ClientState,
315    >,
316    /// TrustingPeriodFraction is used to compute the consumer and provider IBC
317    /// client's TrustingPeriod from the chain defined UnbondingPeriod
318    #[prost(string, tag = "2")]
319    pub trusting_period_fraction: ::prost::alloc::string::String,
320    /// Sent IBC packets will timeout after this duration
321    #[prost(message, optional, tag = "3")]
322    pub ccv_timeout_period: ::core::option::Option<
323        ::tendermint_proto::google::protobuf::Duration,
324    >,
325    /// The period for which the slash meter is replenished
326    #[prost(message, optional, tag = "6")]
327    pub slash_meter_replenish_period: ::core::option::Option<
328        ::tendermint_proto::google::protobuf::Duration,
329    >,
330    /// The fraction of total voting power that is replenished to the slash meter
331    /// every replenish period. This param also serves as a maximum fraction of
332    /// total voting power that the slash meter can hold.
333    #[prost(string, tag = "7")]
334    pub slash_meter_replenish_fraction: ::prost::alloc::string::String,
335    /// The fee required to be paid to add a reward denom
336    #[prost(message, optional, tag = "9")]
337    pub consumer_reward_denom_registration_fee: ::core::option::Option<
338        super::super::super::super::cosmos::base::v1beta1::Coin,
339    >,
340    /// The number of blocks that comprise an epoch.
341    #[prost(int64, tag = "10")]
342    pub blocks_per_epoch: i64,
343    /// The number of epochs a validator has to validate a consumer chain in order to start receiving rewards from that chain.
344    #[prost(int64, tag = "11")]
345    pub number_of_epochs_to_start_receiving_rewards: i64,
346    /// The maximal number of validators that will be passed
347    /// to the consensus engine on the provider.
348    #[prost(int64, tag = "12")]
349    pub max_provider_consensus_validators: i64,
350}
351impl ::prost::Name for Params {
352    const NAME: &'static str = "Params";
353    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
354    fn full_name() -> ::prost::alloc::string::String {
355        "interchain_security.ccv.provider.v1.Params".into()
356    }
357    fn type_url() -> ::prost::alloc::string::String {
358        "/interchain_security.ccv.provider.v1.Params".into()
359    }
360}
361/// SlashAcks contains cons addresses of consumer chain validators
362/// successfully slashed on the provider chain.
363#[derive(Clone, PartialEq, ::prost::Message)]
364pub struct SlashAcks {
365    #[prost(string, repeated, tag = "1")]
366    pub addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
367}
368impl ::prost::Name for SlashAcks {
369    const NAME: &'static str = "SlashAcks";
370    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
371    fn full_name() -> ::prost::alloc::string::String {
372        "interchain_security.ccv.provider.v1.SlashAcks".into()
373    }
374    fn type_url() -> ::prost::alloc::string::String {
375        "/interchain_security.ccv.provider.v1.SlashAcks".into()
376    }
377}
378/// ConsumerAdditionProposals holds pending governance proposals on the provider
379/// chain to spawn a new chain.
380#[derive(Clone, PartialEq, ::prost::Message)]
381pub struct ConsumerAdditionProposals {
382    /// proposals waiting for spawn_time to pass
383    #[prost(message, repeated, tag = "1")]
384    pub pending: ::prost::alloc::vec::Vec<ConsumerAdditionProposal>,
385}
386impl ::prost::Name for ConsumerAdditionProposals {
387    const NAME: &'static str = "ConsumerAdditionProposals";
388    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
389    fn full_name() -> ::prost::alloc::string::String {
390        "interchain_security.ccv.provider.v1.ConsumerAdditionProposals".into()
391    }
392    fn type_url() -> ::prost::alloc::string::String {
393        "/interchain_security.ccv.provider.v1.ConsumerAdditionProposals".into()
394    }
395}
396/// ConsumerRemovalProposals holds pending governance proposals on the provider
397/// chain to remove (and stop) a consumer chain.
398#[derive(Clone, PartialEq, ::prost::Message)]
399pub struct ConsumerRemovalProposals {
400    /// proposals waiting for stop_time to pass
401    #[prost(message, repeated, tag = "1")]
402    pub pending: ::prost::alloc::vec::Vec<ConsumerRemovalProposal>,
403}
404impl ::prost::Name for ConsumerRemovalProposals {
405    const NAME: &'static str = "ConsumerRemovalProposals";
406    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
407    fn full_name() -> ::prost::alloc::string::String {
408        "interchain_security.ccv.provider.v1.ConsumerRemovalProposals".into()
409    }
410    fn type_url() -> ::prost::alloc::string::String {
411        "/interchain_security.ccv.provider.v1.ConsumerRemovalProposals".into()
412    }
413}
414/// AddressList contains a list of consensus addresses
415#[derive(Clone, PartialEq, ::prost::Message)]
416pub struct AddressList {
417    #[prost(bytes = "vec", repeated, tag = "1")]
418    pub addresses: ::prost::alloc::vec::Vec<::prost::alloc::vec::Vec<u8>>,
419}
420impl ::prost::Name for AddressList {
421    const NAME: &'static str = "AddressList";
422    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
423    fn full_name() -> ::prost::alloc::string::String {
424        "interchain_security.ccv.provider.v1.AddressList".into()
425    }
426    fn type_url() -> ::prost::alloc::string::String {
427        "/interchain_security.ccv.provider.v1.AddressList".into()
428    }
429}
430/// WARNING: This message is deprecated and is not used.
431/// ChannelToChain is used to map a CCV channel ID to the consumer chainID
432#[derive(Clone, PartialEq, ::prost::Message)]
433pub struct ChannelToChain {
434    #[prost(string, tag = "1")]
435    pub channel_id: ::prost::alloc::string::String,
436    #[prost(string, tag = "2")]
437    pub chain_id: ::prost::alloc::string::String,
438}
439impl ::prost::Name for ChannelToChain {
440    const NAME: &'static str = "ChannelToChain";
441    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
442    fn full_name() -> ::prost::alloc::string::String {
443        "interchain_security.ccv.provider.v1.ChannelToChain".into()
444    }
445    fn type_url() -> ::prost::alloc::string::String {
446        "/interchain_security.ccv.provider.v1.ChannelToChain".into()
447    }
448}
449/// ValidatorSetChangePackets is a pb list of ccv.ValidatorSetChangePacketData.
450#[derive(Clone, PartialEq, ::prost::Message)]
451pub struct ValidatorSetChangePackets {
452    #[prost(message, repeated, tag = "1")]
453    pub list: ::prost::alloc::vec::Vec<super::super::v1::ValidatorSetChangePacketData>,
454}
455impl ::prost::Name for ValidatorSetChangePackets {
456    const NAME: &'static str = "ValidatorSetChangePackets";
457    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
458    fn full_name() -> ::prost::alloc::string::String {
459        "interchain_security.ccv.provider.v1.ValidatorSetChangePackets".into()
460    }
461    fn type_url() -> ::prost::alloc::string::String {
462        "/interchain_security.ccv.provider.v1.ValidatorSetChangePackets".into()
463    }
464}
465#[derive(Clone, PartialEq, ::prost::Message)]
466pub struct KeyAssignmentReplacement {
467    #[prost(bytes = "vec", tag = "1")]
468    pub provider_addr: ::prost::alloc::vec::Vec<u8>,
469    #[prost(message, optional, tag = "2")]
470    pub prev_c_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>,
471    #[prost(int64, tag = "3")]
472    pub power: i64,
473}
474impl ::prost::Name for KeyAssignmentReplacement {
475    const NAME: &'static str = "KeyAssignmentReplacement";
476    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
477    fn full_name() -> ::prost::alloc::string::String {
478        "interchain_security.ccv.provider.v1.KeyAssignmentReplacement".into()
479    }
480    fn type_url() -> ::prost::alloc::string::String {
481        "/interchain_security.ccv.provider.v1.KeyAssignmentReplacement".into()
482    }
483}
484/// Used to serialize the ValidatorConsumerPubKey index from key assignment
485/// ValidatorConsumerPubKey: (chainID, providerAddr consAddr) -> consumerKey
486/// tmprotocrypto.PublicKey
487#[derive(Clone, PartialEq, ::prost::Message)]
488pub struct ValidatorConsumerPubKey {
489    #[prost(string, tag = "1")]
490    pub chain_id: ::prost::alloc::string::String,
491    #[prost(bytes = "vec", tag = "2")]
492    pub provider_addr: ::prost::alloc::vec::Vec<u8>,
493    #[prost(message, optional, tag = "3")]
494    pub consumer_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>,
495}
496impl ::prost::Name for ValidatorConsumerPubKey {
497    const NAME: &'static str = "ValidatorConsumerPubKey";
498    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
499    fn full_name() -> ::prost::alloc::string::String {
500        "interchain_security.ccv.provider.v1.ValidatorConsumerPubKey".into()
501    }
502    fn type_url() -> ::prost::alloc::string::String {
503        "/interchain_security.ccv.provider.v1.ValidatorConsumerPubKey".into()
504    }
505}
506/// Used to serialize the ValidatorConsumerAddr index from key assignment
507/// ValidatorByConsumerAddr: (chainID, consumerAddr consAddr) -> providerAddr
508/// consAddr
509#[derive(Clone, PartialEq, ::prost::Message)]
510pub struct ValidatorByConsumerAddr {
511    #[prost(string, tag = "1")]
512    pub chain_id: ::prost::alloc::string::String,
513    #[prost(bytes = "vec", tag = "2")]
514    pub consumer_addr: ::prost::alloc::vec::Vec<u8>,
515    #[prost(bytes = "vec", tag = "3")]
516    pub provider_addr: ::prost::alloc::vec::Vec<u8>,
517}
518impl ::prost::Name for ValidatorByConsumerAddr {
519    const NAME: &'static str = "ValidatorByConsumerAddr";
520    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
521    fn full_name() -> ::prost::alloc::string::String {
522        "interchain_security.ccv.provider.v1.ValidatorByConsumerAddr".into()
523    }
524    fn type_url() -> ::prost::alloc::string::String {
525        "/interchain_security.ccv.provider.v1.ValidatorByConsumerAddr".into()
526    }
527}
528/// Used to serialize the ConsumerAddrsToPruneV2 index from key assignment
529/// ConsumerAddrsToPruneV2: (chainID, pruneTs time.Time) -> consumerAddrs AddressList
530#[derive(Clone, PartialEq, ::prost::Message)]
531pub struct ConsumerAddrsToPruneV2 {
532    #[prost(string, tag = "1")]
533    pub chain_id: ::prost::alloc::string::String,
534    #[prost(message, optional, tag = "2")]
535    pub prune_ts: ::core::option::Option<
536        ::tendermint_proto::google::protobuf::Timestamp,
537    >,
538    #[prost(message, optional, tag = "3")]
539    pub consumer_addrs: ::core::option::Option<AddressList>,
540}
541impl ::prost::Name for ConsumerAddrsToPruneV2 {
542    const NAME: &'static str = "ConsumerAddrsToPruneV2";
543    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
544    fn full_name() -> ::prost::alloc::string::String {
545        "interchain_security.ccv.provider.v1.ConsumerAddrsToPruneV2".into()
546    }
547    fn type_url() -> ::prost::alloc::string::String {
548        "/interchain_security.ccv.provider.v1.ConsumerAddrsToPruneV2".into()
549    }
550}
551/// ConsensusValidator is used to express a validator that
552/// should be validating on a chain.
553/// It contains relevant info for
554/// a validator that is expected to validate on
555/// either the provider or a consumer chain.
556#[derive(Clone, PartialEq, ::prost::Message)]
557pub struct ConsensusValidator {
558    /// validator's consensus address on the provider chain
559    #[prost(bytes = "vec", tag = "1")]
560    pub provider_cons_addr: ::prost::alloc::vec::Vec<u8>,
561    /// voting power the validator has during this epoch
562    #[prost(int64, tag = "2")]
563    pub power: i64,
564    /// public key the validator uses on the consumer chain during this epoch
565    #[prost(message, optional, tag = "3")]
566    pub public_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>,
567    /// height the validator had when it FIRST became a consumer validator
568    /// If a validator becomes a consumer validator at height `H` and is continuously a consumer validator for all the upcoming
569    /// epochs, then the height of the validator SHOULD remain `H`. This height only resets to a different height if a validator
570    /// stops being a consumer validator during an epoch and later becomes again a consumer validator.
571    #[prost(int64, tag = "4")]
572    pub join_height: i64,
573}
574impl ::prost::Name for ConsensusValidator {
575    const NAME: &'static str = "ConsensusValidator";
576    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
577    fn full_name() -> ::prost::alloc::string::String {
578        "interchain_security.ccv.provider.v1.ConsensusValidator".into()
579    }
580    fn type_url() -> ::prost::alloc::string::String {
581        "/interchain_security.ccv.provider.v1.ConsensusValidator".into()
582    }
583}
584/// ConsumerRewardsAllocation stores the rewards allocated by a consumer chain
585/// to the consumer rewards pool. It is used to allocate the tokens to the consumer
586/// opted-in validators and the community pool during BeginBlock.
587#[derive(Clone, PartialEq, ::prost::Message)]
588pub struct ConsumerRewardsAllocation {
589    #[prost(message, repeated, tag = "1")]
590    pub rewards: ::prost::alloc::vec::Vec<
591        super::super::super::super::cosmos::base::v1beta1::DecCoin,
592    >,
593}
594impl ::prost::Name for ConsumerRewardsAllocation {
595    const NAME: &'static str = "ConsumerRewardsAllocation";
596    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
597    fn full_name() -> ::prost::alloc::string::String {
598        "interchain_security.ccv.provider.v1.ConsumerRewardsAllocation".into()
599    }
600    fn type_url() -> ::prost::alloc::string::String {
601        "/interchain_security.ccv.provider.v1.ConsumerRewardsAllocation".into()
602    }
603}
604/// ConsumerMetadata contains general information about the registered chain
605#[derive(Clone, PartialEq, ::prost::Message)]
606pub struct ConsumerMetadata {
607    /// the name of the chain
608    #[prost(string, tag = "1")]
609    pub name: ::prost::alloc::string::String,
610    /// the description of the chain
611    #[prost(string, tag = "2")]
612    pub description: ::prost::alloc::string::String,
613    /// the metadata (e.g., GitHub repository URL) of the chain
614    #[prost(string, tag = "3")]
615    pub metadata: ::prost::alloc::string::String,
616}
617impl ::prost::Name for ConsumerMetadata {
618    const NAME: &'static str = "ConsumerMetadata";
619    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
620    fn full_name() -> ::prost::alloc::string::String {
621        "interchain_security.ccv.provider.v1.ConsumerMetadata".into()
622    }
623    fn type_url() -> ::prost::alloc::string::String {
624        "/interchain_security.ccv.provider.v1.ConsumerMetadata".into()
625    }
626}
627/// ConsumerInitializationParameters are the parameters needed to launch a chain
628///
629/// ---------- ---------- ----------
630/// Following fields are used when the consumer chain launches and are not needed by the provider afterwards.
631/// ---------- ---------- ----------
632#[derive(Clone, PartialEq, ::prost::Message)]
633pub struct ConsumerInitializationParameters {
634    /// the proposed initial height of new consumer chain.
635    /// For a completely new chain, this will be {0,1}. However, it may be
636    /// different if this is a chain that is converting to a consumer chain.
637    #[prost(message, optional, tag = "1")]
638    pub initial_height: ::core::option::Option<
639        super::super::super::super::ibc::core::client::v1::Height,
640    >,
641    /// The hash of the consumer chain genesis state without the consumer CCV
642    /// module genesis params. It is used for off-chain confirmation of
643    /// genesis.json validity by validators and other parties.
644    #[prost(bytes = "vec", tag = "2")]
645    pub genesis_hash: ::prost::alloc::vec::Vec<u8>,
646    /// The hash of the consumer chain binary that should be run by validators on
647    /// chain initialization. It is used for off-chain confirmation of binary
648    /// validity by validators and other parties.
649    #[prost(bytes = "vec", tag = "3")]
650    pub binary_hash: ::prost::alloc::vec::Vec<u8>,
651    /// spawn time is the time on the provider chain at which the consumer chain
652    /// genesis is finalized and all validators will be responsible for starting
653    /// their consumer chain validator node.
654    #[prost(message, optional, tag = "4")]
655    pub spawn_time: ::core::option::Option<
656        ::tendermint_proto::google::protobuf::Timestamp,
657    >,
658    /// Unbonding period for the consumer,
659    /// which should be smaller than that of the provider in general.
660    #[prost(message, optional, tag = "5")]
661    pub unbonding_period: ::core::option::Option<
662        ::tendermint_proto::google::protobuf::Duration,
663    >,
664    /// Sent CCV related IBC packets will timeout after this duration
665    #[prost(message, optional, tag = "6")]
666    pub ccv_timeout_period: ::core::option::Option<
667        ::tendermint_proto::google::protobuf::Duration,
668    >,
669    /// Sent transfer related IBC packets will timeout after this duration
670    #[prost(message, optional, tag = "7")]
671    pub transfer_timeout_period: ::core::option::Option<
672        ::tendermint_proto::google::protobuf::Duration,
673    >,
674    /// The fraction of tokens allocated to the consumer redistribution address
675    /// during distribution events. The fraction is a string representing a
676    /// decimal number. For example "0.75" would represent 75%.
677    #[prost(string, tag = "8")]
678    pub consumer_redistribution_fraction: ::prost::alloc::string::String,
679    /// BlocksPerDistributionTransmission is the number of blocks between
680    /// ibc-token-transfers from the consumer chain to the provider chain. On
681    /// sending transmission event, `consumer_redistribution_fraction` of the
682    /// accumulated tokens are sent to the consumer redistribution address.
683    #[prost(int64, tag = "9")]
684    pub blocks_per_distribution_transmission: i64,
685    /// The number of historical info entries to persist in store.
686    /// This param is a part of the cosmos sdk staking module. In the case of
687    /// a ccv enabled consumer chain, the ccv module acts as the staking module.
688    #[prost(int64, tag = "10")]
689    pub historical_entries: i64,
690    /// The ID of a token transfer channel used for the Reward Distribution
691    /// sub-protocol. If DistributionTransmissionChannel == "", a new transfer
692    /// channel is created on top of the same connection as the CCV channel.
693    /// Note that transfer_channel_id is the ID of the channel end on the consumer
694    /// chain. it is most relevant for chains performing a sovereign to consumer
695    /// changeover in order to maintain the existing ibc transfer channel
696    #[prost(string, tag = "11")]
697    pub distribution_transmission_channel: ::prost::alloc::string::String,
698}
699impl ::prost::Name for ConsumerInitializationParameters {
700    const NAME: &'static str = "ConsumerInitializationParameters";
701    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
702    fn full_name() -> ::prost::alloc::string::String {
703        "interchain_security.ccv.provider.v1.ConsumerInitializationParameters".into()
704    }
705    fn type_url() -> ::prost::alloc::string::String {
706        "/interchain_security.ccv.provider.v1.ConsumerInitializationParameters".into()
707    }
708}
709/// PowerShapingParameters contains parameters that shape the validator set that we send to the consumer chain
710#[derive(Clone, PartialEq, ::prost::Message)]
711pub struct PowerShapingParameters {
712    /// Corresponds to the percentage of validators that have to validate the chain under the Top N case.
713    /// For example, 53 corresponds to a Top 53% chain, meaning that the top 53% provider validators by voting power
714    /// have to validate the proposed consumer chain. top_N can either be 0 or any value in \[50, 100\].
715    /// A chain can join with top_N == 0 as an Opt In chain, or with top_N ∈ \[50, 100\] as a Top N chain.
716    #[prost(uint32, tag = "1")]
717    pub top_n: u32,
718    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain. For instance, if
719    /// `validators_power_cap` is set to 32, it means that no validator can have more than 32% of the voting power on the
720    /// consumer chain. Note that this might not be feasible. For example, think of a consumer chain with only
721    /// 5 validators and with `validators_power_cap` set to 10%. In such a scenario, at least one validator would need
722    /// to have more than 20% of the total voting power. Therefore, `validators_power_cap` operates on a best-effort basis.
723    #[prost(uint32, tag = "2")]
724    pub validators_power_cap: u32,
725    /// Corresponds to the maximum number of validators that can validate a consumer chain.
726    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
727    #[prost(uint32, tag = "3")]
728    pub validator_set_cap: u32,
729    /// corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate the consumer chain
730    #[prost(string, repeated, tag = "4")]
731    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
732    /// corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain
733    #[prost(string, repeated, tag = "5")]
734    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
735    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
736    #[prost(uint64, tag = "6")]
737    pub min_stake: u64,
738    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
739    #[prost(bool, tag = "7")]
740    pub allow_inactive_vals: bool,
741}
742impl ::prost::Name for PowerShapingParameters {
743    const NAME: &'static str = "PowerShapingParameters";
744    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
745    fn full_name() -> ::prost::alloc::string::String {
746        "interchain_security.ccv.provider.v1.PowerShapingParameters".into()
747    }
748    fn type_url() -> ::prost::alloc::string::String {
749        "/interchain_security.ccv.provider.v1.PowerShapingParameters".into()
750    }
751}
752/// ConsumerIds contains consumer ids of chains
753/// Used so we can easily (de)serialize slices of strings
754#[derive(Clone, PartialEq, ::prost::Message)]
755pub struct ConsumerIds {
756    #[prost(string, repeated, tag = "1")]
757    pub ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
758}
759impl ::prost::Name for ConsumerIds {
760    const NAME: &'static str = "ConsumerIds";
761    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
762    fn full_name() -> ::prost::alloc::string::String {
763        "interchain_security.ccv.provider.v1.ConsumerIds".into()
764    }
765    fn type_url() -> ::prost::alloc::string::String {
766        "/interchain_security.ccv.provider.v1.ConsumerIds".into()
767    }
768}
769/// ConsumerPhase indicates the phases of a consumer chain according to ADR 019
770#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
771#[repr(i32)]
772pub enum ConsumerPhase {
773    /// UNSPECIFIED defines an empty phase.
774    Unspecified = 0,
775    /// REGISTERED defines the phase in which a consumer chain has been assigned a unique consumer id.
776    /// A chain in this phase cannot yet launch.
777    Registered = 1,
778    /// INITIALIZED defines the phase in which a consumer chain has set all the needed parameters to launch but
779    /// has not yet launched (e.g., because the `spawnTime` of the consumer chain has not yet been reached).
780    Initialized = 2,
781    /// LAUNCHED defines the phase in which a consumer chain is running and consuming a subset of the validator
782    /// set of the provider.
783    Launched = 3,
784    /// STOPPED defines the phase in which a previously-launched chain has stopped.
785    Stopped = 4,
786    /// DELETED defines the phase in which the state of a stopped chain has been deleted.
787    Deleted = 5,
788}
789impl ConsumerPhase {
790    /// String value of the enum field names used in the ProtoBuf definition.
791    ///
792    /// The values are not transformed in any way and thus are considered stable
793    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
794    pub fn as_str_name(&self) -> &'static str {
795        match self {
796            Self::Unspecified => "CONSUMER_PHASE_UNSPECIFIED",
797            Self::Registered => "CONSUMER_PHASE_REGISTERED",
798            Self::Initialized => "CONSUMER_PHASE_INITIALIZED",
799            Self::Launched => "CONSUMER_PHASE_LAUNCHED",
800            Self::Stopped => "CONSUMER_PHASE_STOPPED",
801            Self::Deleted => "CONSUMER_PHASE_DELETED",
802        }
803    }
804    /// Creates an enum from field names used in the ProtoBuf definition.
805    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
806        match value {
807            "CONSUMER_PHASE_UNSPECIFIED" => Some(Self::Unspecified),
808            "CONSUMER_PHASE_REGISTERED" => Some(Self::Registered),
809            "CONSUMER_PHASE_INITIALIZED" => Some(Self::Initialized),
810            "CONSUMER_PHASE_LAUNCHED" => Some(Self::Launched),
811            "CONSUMER_PHASE_STOPPED" => Some(Self::Stopped),
812            "CONSUMER_PHASE_DELETED" => Some(Self::Deleted),
813            _ => None,
814        }
815    }
816}
817#[derive(Clone, PartialEq, ::prost::Message)]
818pub struct MsgAssignConsumerKey {
819    /// \[DEPRECATED\] use `consumer_id` instead
820    #[deprecated]
821    #[prost(string, tag = "1")]
822    pub chain_id: ::prost::alloc::string::String,
823    /// The validator address on the provider
824    #[prost(string, tag = "2")]
825    pub provider_addr: ::prost::alloc::string::String,
826    /// The consensus public key to use on the consumer.
827    /// in json string format corresponding to proto-any, ex:
828    /// `{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is="}`
829    #[prost(string, tag = "3")]
830    pub consumer_key: ::prost::alloc::string::String,
831    #[prost(string, tag = "4")]
832    pub signer: ::prost::alloc::string::String,
833    /// the consumer id of the consumer chain to assign a consensus public key to
834    #[prost(string, tag = "5")]
835    pub consumer_id: ::prost::alloc::string::String,
836}
837impl ::prost::Name for MsgAssignConsumerKey {
838    const NAME: &'static str = "MsgAssignConsumerKey";
839    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
840    fn full_name() -> ::prost::alloc::string::String {
841        "interchain_security.ccv.provider.v1.MsgAssignConsumerKey".into()
842    }
843    fn type_url() -> ::prost::alloc::string::String {
844        "/interchain_security.ccv.provider.v1.MsgAssignConsumerKey".into()
845    }
846}
847#[derive(Clone, Copy, PartialEq, ::prost::Message)]
848pub struct MsgAssignConsumerKeyResponse {}
849impl ::prost::Name for MsgAssignConsumerKeyResponse {
850    const NAME: &'static str = "MsgAssignConsumerKeyResponse";
851    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
852    fn full_name() -> ::prost::alloc::string::String {
853        "interchain_security.ccv.provider.v1.MsgAssignConsumerKeyResponse".into()
854    }
855    fn type_url() -> ::prost::alloc::string::String {
856        "/interchain_security.ccv.provider.v1.MsgAssignConsumerKeyResponse".into()
857    }
858}
859/// MsgSubmitConsumerMisbehaviour defines a message that reports a light client attack,
860/// also known as a misbehaviour, observed on a consumer chain
861#[derive(Clone, PartialEq, ::prost::Message)]
862pub struct MsgSubmitConsumerMisbehaviour {
863    #[prost(string, tag = "1")]
864    pub submitter: ::prost::alloc::string::String,
865    /// The Misbehaviour of the consumer chain wrapping
866    /// two conflicting IBC headers
867    #[prost(message, optional, tag = "2")]
868    pub misbehaviour: ::core::option::Option<
869        super::super::super::super::ibc::lightclients::tendermint::v1::Misbehaviour,
870    >,
871    /// the consumer id of the consumer chain where the misbehaviour occurred
872    #[prost(string, tag = "3")]
873    pub consumer_id: ::prost::alloc::string::String,
874}
875impl ::prost::Name for MsgSubmitConsumerMisbehaviour {
876    const NAME: &'static str = "MsgSubmitConsumerMisbehaviour";
877    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
878    fn full_name() -> ::prost::alloc::string::String {
879        "interchain_security.ccv.provider.v1.MsgSubmitConsumerMisbehaviour".into()
880    }
881    fn type_url() -> ::prost::alloc::string::String {
882        "/interchain_security.ccv.provider.v1.MsgSubmitConsumerMisbehaviour".into()
883    }
884}
885#[derive(Clone, Copy, PartialEq, ::prost::Message)]
886pub struct MsgSubmitConsumerMisbehaviourResponse {}
887impl ::prost::Name for MsgSubmitConsumerMisbehaviourResponse {
888    const NAME: &'static str = "MsgSubmitConsumerMisbehaviourResponse";
889    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
890    fn full_name() -> ::prost::alloc::string::String {
891        "interchain_security.ccv.provider.v1.MsgSubmitConsumerMisbehaviourResponse"
892            .into()
893    }
894    fn type_url() -> ::prost::alloc::string::String {
895        "/interchain_security.ccv.provider.v1.MsgSubmitConsumerMisbehaviourResponse"
896            .into()
897    }
898}
899/// MsgSubmitConsumerDoubleVoting defines a message that reports
900/// a double signing infraction observed on a consumer chain
901#[derive(Clone, PartialEq, ::prost::Message)]
902pub struct MsgSubmitConsumerDoubleVoting {
903    #[prost(string, tag = "1")]
904    pub submitter: ::prost::alloc::string::String,
905    /// The equivocation of the consumer chain wrapping
906    /// an evidence of a validator that signed two conflicting votes
907    #[prost(message, optional, tag = "2")]
908    pub duplicate_vote_evidence: ::core::option::Option<
909        ::tendermint_proto::types::DuplicateVoteEvidence,
910    >,
911    /// The light client header of the infraction block
912    #[prost(message, optional, tag = "3")]
913    pub infraction_block_header: ::core::option::Option<
914        super::super::super::super::ibc::lightclients::tendermint::v1::Header,
915    >,
916    /// the consumer id of the consumer chain where the double-voting took place
917    #[prost(string, tag = "4")]
918    pub consumer_id: ::prost::alloc::string::String,
919}
920impl ::prost::Name for MsgSubmitConsumerDoubleVoting {
921    const NAME: &'static str = "MsgSubmitConsumerDoubleVoting";
922    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
923    fn full_name() -> ::prost::alloc::string::String {
924        "interchain_security.ccv.provider.v1.MsgSubmitConsumerDoubleVoting".into()
925    }
926    fn type_url() -> ::prost::alloc::string::String {
927        "/interchain_security.ccv.provider.v1.MsgSubmitConsumerDoubleVoting".into()
928    }
929}
930#[derive(Clone, Copy, PartialEq, ::prost::Message)]
931pub struct MsgSubmitConsumerDoubleVotingResponse {}
932impl ::prost::Name for MsgSubmitConsumerDoubleVotingResponse {
933    const NAME: &'static str = "MsgSubmitConsumerDoubleVotingResponse";
934    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
935    fn full_name() -> ::prost::alloc::string::String {
936        "interchain_security.ccv.provider.v1.MsgSubmitConsumerDoubleVotingResponse"
937            .into()
938    }
939    fn type_url() -> ::prost::alloc::string::String {
940        "/interchain_security.ccv.provider.v1.MsgSubmitConsumerDoubleVotingResponse"
941            .into()
942    }
943}
944/// MsgUpdateParams is the Msg/UpdateParams request type
945#[derive(Clone, PartialEq, ::prost::Message)]
946pub struct MsgUpdateParams {
947    /// authority is the address of the governance account.
948    #[prost(string, tag = "1")]
949    pub authority: ::prost::alloc::string::String,
950    /// params defines the x/provider parameters to update.
951    #[prost(message, optional, tag = "2")]
952    pub params: ::core::option::Option<Params>,
953}
954impl ::prost::Name for MsgUpdateParams {
955    const NAME: &'static str = "MsgUpdateParams";
956    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
957    fn full_name() -> ::prost::alloc::string::String {
958        "interchain_security.ccv.provider.v1.MsgUpdateParams".into()
959    }
960    fn type_url() -> ::prost::alloc::string::String {
961        "/interchain_security.ccv.provider.v1.MsgUpdateParams".into()
962    }
963}
964#[derive(Clone, Copy, PartialEq, ::prost::Message)]
965pub struct MsgUpdateParamsResponse {}
966impl ::prost::Name for MsgUpdateParamsResponse {
967    const NAME: &'static str = "MsgUpdateParamsResponse";
968    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
969    fn full_name() -> ::prost::alloc::string::String {
970        "interchain_security.ccv.provider.v1.MsgUpdateParamsResponse".into()
971    }
972    fn type_url() -> ::prost::alloc::string::String {
973        "/interchain_security.ccv.provider.v1.MsgUpdateParamsResponse".into()
974    }
975}
976/// \[DEPRECATED\] Use `MsgCreateConsumer` instead
977#[derive(Clone, PartialEq, ::prost::Message)]
978pub struct MsgConsumerAddition {
979    /// the proposed chain-id of the new consumer chain, must be different from all
980    /// other consumer chain ids of the executing provider chain.
981    #[prost(string, tag = "1")]
982    pub chain_id: ::prost::alloc::string::String,
983    /// the proposed initial height of new consumer chain.
984    /// For a completely new chain, this will be {0,1}. However, it may be
985    /// different if this is a chain that is converting to a consumer chain.
986    #[prost(message, optional, tag = "2")]
987    pub initial_height: ::core::option::Option<
988        super::super::super::super::ibc::core::client::v1::Height,
989    >,
990    /// The hash of the consumer chain genesis state without the consumer CCV
991    /// module genesis params. It is used for off-chain confirmation of
992    /// genesis.json validity by validators and other parties.
993    #[prost(bytes = "vec", tag = "3")]
994    pub genesis_hash: ::prost::alloc::vec::Vec<u8>,
995    /// The hash of the consumer chain binary that should be run by validators on
996    /// chain initialization. It is used for off-chain confirmation of binary
997    /// validity by validators and other parties.
998    #[prost(bytes = "vec", tag = "4")]
999    pub binary_hash: ::prost::alloc::vec::Vec<u8>,
1000    /// spawn time is the time on the provider chain at which the consumer chain
1001    /// genesis is finalized and all validators will be responsible for starting
1002    /// their consumer chain validator node.
1003    #[prost(message, optional, tag = "5")]
1004    pub spawn_time: ::core::option::Option<
1005        ::tendermint_proto::google::protobuf::Timestamp,
1006    >,
1007    /// Unbonding period for the consumer,
1008    /// which should be smaller than that of the provider in general.
1009    #[prost(message, optional, tag = "6")]
1010    pub unbonding_period: ::core::option::Option<
1011        ::tendermint_proto::google::protobuf::Duration,
1012    >,
1013    /// Sent CCV related IBC packets will timeout after this duration
1014    #[prost(message, optional, tag = "7")]
1015    pub ccv_timeout_period: ::core::option::Option<
1016        ::tendermint_proto::google::protobuf::Duration,
1017    >,
1018    /// Sent transfer related IBC packets will timeout after this duration
1019    #[prost(message, optional, tag = "8")]
1020    pub transfer_timeout_period: ::core::option::Option<
1021        ::tendermint_proto::google::protobuf::Duration,
1022    >,
1023    /// The fraction of tokens allocated to the consumer redistribution address
1024    /// during distribution events. The fraction is a string representing a
1025    /// decimal number. For example "0.75" would represent 75%.
1026    #[prost(string, tag = "9")]
1027    pub consumer_redistribution_fraction: ::prost::alloc::string::String,
1028    /// BlocksPerDistributionTransmission is the number of blocks between
1029    /// ibc-token-transfers from the consumer chain to the provider chain. On
1030    /// sending transmission event, `consumer_redistribution_fraction` of the
1031    /// accumulated tokens are sent to the consumer redistribution address.
1032    #[prost(int64, tag = "10")]
1033    pub blocks_per_distribution_transmission: i64,
1034    /// The number of historical info entries to persist in store.
1035    /// This param is a part of the cosmos sdk staking module. In the case of
1036    /// a ccv enabled consumer chain, the ccv module acts as the staking module.
1037    #[prost(int64, tag = "11")]
1038    pub historical_entries: i64,
1039    /// The ID of a token transfer channel used for the Reward Distribution
1040    /// sub-protocol. If DistributionTransmissionChannel == "", a new transfer
1041    /// channel is created on top of the same connection as the CCV channel.
1042    /// Note that transfer_channel_id is the ID of the channel end on the consumer
1043    /// chain. it is most relevant for chains performing a sovereign to consumer
1044    /// changeover in order to maintain the existing ibc transfer channel
1045    #[prost(string, tag = "12")]
1046    pub distribution_transmission_channel: ::prost::alloc::string::String,
1047    /// Corresponds to the percentage of validators that have to validate the chain under the Top N case.
1048    /// For example, 53 corresponds to a Top 53% chain, meaning that the top 53% provider validators by voting power
1049    /// have to validate the proposed consumer chain. top_N can either be 0 or any value in \[50, 100\].
1050    /// A chain can join with top_N == 0 as an Opt In chain, or with top_N ∈ \[50, 100\] as a Top N chain.
1051    #[prost(uint32, tag = "13")]
1052    pub top_n: u32,
1053    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain. For instance, if
1054    /// `validators_power_cap` is set to 32, it means that no validator can have more than 32% of the voting power on the
1055    /// consumer chain. Note that this might not be feasible. For example, think of a consumer chain with only
1056    /// 5 validators and with `validators_power_cap` set to 10%. In such a scenario, at least one validator would need
1057    /// to have more than 20% of the total voting power. Therefore, `validators_power_cap` operates on a best-effort basis.
1058    #[prost(uint32, tag = "14")]
1059    pub validators_power_cap: u32,
1060    /// Corresponds to the maximum number of validators that can validate a consumer chain.
1061    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
1062    #[prost(uint32, tag = "15")]
1063    pub validator_set_cap: u32,
1064    /// Corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate
1065    /// the consumer chain.
1066    #[prost(string, repeated, tag = "16")]
1067    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1068    /// Corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain.
1069    #[prost(string, repeated, tag = "17")]
1070    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1071    /// signer address
1072    #[prost(string, tag = "18")]
1073    pub authority: ::prost::alloc::string::String,
1074    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
1075    #[prost(uint64, tag = "19")]
1076    pub min_stake: u64,
1077    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
1078    #[prost(bool, tag = "20")]
1079    pub allow_inactive_vals: bool,
1080}
1081impl ::prost::Name for MsgConsumerAddition {
1082    const NAME: &'static str = "MsgConsumerAddition";
1083    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1084    fn full_name() -> ::prost::alloc::string::String {
1085        "interchain_security.ccv.provider.v1.MsgConsumerAddition".into()
1086    }
1087    fn type_url() -> ::prost::alloc::string::String {
1088        "/interchain_security.ccv.provider.v1.MsgConsumerAddition".into()
1089    }
1090}
1091/// \[DEPRECATED\] Use `MsgRemoveConsumer` instead
1092#[derive(Clone, PartialEq, ::prost::Message)]
1093pub struct MsgConsumerRemoval {
1094    /// the chain-id of the consumer chain to be stopped
1095    #[prost(string, tag = "1")]
1096    pub chain_id: ::prost::alloc::string::String,
1097    /// the time on the provider chain at which all validators are responsible to
1098    /// stop their consumer chain validator node
1099    #[prost(message, optional, tag = "2")]
1100    pub stop_time: ::core::option::Option<
1101        ::tendermint_proto::google::protobuf::Timestamp,
1102    >,
1103    /// signer address
1104    #[prost(string, tag = "3")]
1105    pub authority: ::prost::alloc::string::String,
1106}
1107impl ::prost::Name for MsgConsumerRemoval {
1108    const NAME: &'static str = "MsgConsumerRemoval";
1109    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1110    fn full_name() -> ::prost::alloc::string::String {
1111        "interchain_security.ccv.provider.v1.MsgConsumerRemoval".into()
1112    }
1113    fn type_url() -> ::prost::alloc::string::String {
1114        "/interchain_security.ccv.provider.v1.MsgConsumerRemoval".into()
1115    }
1116}
1117/// MsgRemoveConsumer defines the message used to remove (and stop) a consumer chain.
1118/// If it passes, all the consumer chain's state is eventually removed from the provider chain.
1119#[derive(Clone, PartialEq, ::prost::Message)]
1120pub struct MsgRemoveConsumer {
1121    /// the consumer id of the consumer chain to be stopped
1122    #[prost(string, tag = "1")]
1123    pub consumer_id: ::prost::alloc::string::String,
1124    /// the address of the owner of the consumer chain to be stopped
1125    #[prost(string, tag = "2")]
1126    pub owner: ::prost::alloc::string::String,
1127}
1128impl ::prost::Name for MsgRemoveConsumer {
1129    const NAME: &'static str = "MsgRemoveConsumer";
1130    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1131    fn full_name() -> ::prost::alloc::string::String {
1132        "interchain_security.ccv.provider.v1.MsgRemoveConsumer".into()
1133    }
1134    fn type_url() -> ::prost::alloc::string::String {
1135        "/interchain_security.ccv.provider.v1.MsgRemoveConsumer".into()
1136    }
1137}
1138/// MsgRemoveConsumerResponse defines response type for MsgRemoveConsumer messages
1139#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1140pub struct MsgRemoveConsumerResponse {}
1141impl ::prost::Name for MsgRemoveConsumerResponse {
1142    const NAME: &'static str = "MsgRemoveConsumerResponse";
1143    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1144    fn full_name() -> ::prost::alloc::string::String {
1145        "interchain_security.ccv.provider.v1.MsgRemoveConsumerResponse".into()
1146    }
1147    fn type_url() -> ::prost::alloc::string::String {
1148        "/interchain_security.ccv.provider.v1.MsgRemoveConsumerResponse".into()
1149    }
1150}
1151/// ChangeRewardDenomsProposal is a governance proposal on the provider chain to
1152/// mutate the set of denoms accepted by the provider as rewards.
1153///
1154/// Note: this replaces ChangeRewardDenomsProposal which is deprecated and will be removed soon
1155#[derive(Clone, PartialEq, ::prost::Message)]
1156pub struct MsgChangeRewardDenoms {
1157    /// the list of consumer reward denoms to add
1158    #[prost(string, repeated, tag = "1")]
1159    pub denoms_to_add: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1160    /// the list of consumer reward denoms to remove
1161    #[prost(string, repeated, tag = "2")]
1162    pub denoms_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1163    /// authority is the address of the governance account
1164    #[prost(string, tag = "3")]
1165    pub authority: ::prost::alloc::string::String,
1166}
1167impl ::prost::Name for MsgChangeRewardDenoms {
1168    const NAME: &'static str = "MsgChangeRewardDenoms";
1169    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1170    fn full_name() -> ::prost::alloc::string::String {
1171        "interchain_security.ccv.provider.v1.MsgChangeRewardDenoms".into()
1172    }
1173    fn type_url() -> ::prost::alloc::string::String {
1174        "/interchain_security.ccv.provider.v1.MsgChangeRewardDenoms".into()
1175    }
1176}
1177/// MsgChangeRewardDenomsResponse defines response type for MsgChangeRewardDenoms messages
1178#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1179pub struct MsgChangeRewardDenomsResponse {}
1180impl ::prost::Name for MsgChangeRewardDenomsResponse {
1181    const NAME: &'static str = "MsgChangeRewardDenomsResponse";
1182    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1183    fn full_name() -> ::prost::alloc::string::String {
1184        "interchain_security.ccv.provider.v1.MsgChangeRewardDenomsResponse".into()
1185    }
1186    fn type_url() -> ::prost::alloc::string::String {
1187        "/interchain_security.ccv.provider.v1.MsgChangeRewardDenomsResponse".into()
1188    }
1189}
1190#[derive(Clone, PartialEq, ::prost::Message)]
1191pub struct MsgOptIn {
1192    /// \[DEPRECATED\] use `consumer_id` instead
1193    #[deprecated]
1194    #[prost(string, tag = "1")]
1195    pub chain_id: ::prost::alloc::string::String,
1196    /// the validator address on the provider
1197    #[prost(string, tag = "2")]
1198    pub provider_addr: ::prost::alloc::string::String,
1199    /// (optional) The consensus public key to use on the consumer in json string format corresponding to proto-any,
1200    /// for example `{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is="}`.
1201    /// This field is optional and can remain empty (i.e., `consumer_key = ""`). A validator can always change the
1202    /// consumer public key at a later stage by issuing a `MsgAssignConsumerKey` message.
1203    #[prost(string, tag = "3")]
1204    pub consumer_key: ::prost::alloc::string::String,
1205    /// submitter address
1206    #[prost(string, tag = "4")]
1207    pub signer: ::prost::alloc::string::String,
1208    /// the consumer id of the consumer chain to opt in to
1209    #[prost(string, tag = "5")]
1210    pub consumer_id: ::prost::alloc::string::String,
1211}
1212impl ::prost::Name for MsgOptIn {
1213    const NAME: &'static str = "MsgOptIn";
1214    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1215    fn full_name() -> ::prost::alloc::string::String {
1216        "interchain_security.ccv.provider.v1.MsgOptIn".into()
1217    }
1218    fn type_url() -> ::prost::alloc::string::String {
1219        "/interchain_security.ccv.provider.v1.MsgOptIn".into()
1220    }
1221}
1222#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1223pub struct MsgOptInResponse {}
1224impl ::prost::Name for MsgOptInResponse {
1225    const NAME: &'static str = "MsgOptInResponse";
1226    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1227    fn full_name() -> ::prost::alloc::string::String {
1228        "interchain_security.ccv.provider.v1.MsgOptInResponse".into()
1229    }
1230    fn type_url() -> ::prost::alloc::string::String {
1231        "/interchain_security.ccv.provider.v1.MsgOptInResponse".into()
1232    }
1233}
1234#[derive(Clone, PartialEq, ::prost::Message)]
1235pub struct MsgOptOut {
1236    /// \[DEPRECATED\] use `consumer_id` instead
1237    #[deprecated]
1238    #[prost(string, tag = "1")]
1239    pub chain_id: ::prost::alloc::string::String,
1240    /// the validator address on the provider
1241    #[prost(string, tag = "2")]
1242    pub provider_addr: ::prost::alloc::string::String,
1243    /// submitter address
1244    #[prost(string, tag = "3")]
1245    pub signer: ::prost::alloc::string::String,
1246    /// the consumer id of the consumer chain to opt out from
1247    #[prost(string, tag = "4")]
1248    pub consumer_id: ::prost::alloc::string::String,
1249}
1250impl ::prost::Name for MsgOptOut {
1251    const NAME: &'static str = "MsgOptOut";
1252    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1253    fn full_name() -> ::prost::alloc::string::String {
1254        "interchain_security.ccv.provider.v1.MsgOptOut".into()
1255    }
1256    fn type_url() -> ::prost::alloc::string::String {
1257        "/interchain_security.ccv.provider.v1.MsgOptOut".into()
1258    }
1259}
1260#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1261pub struct MsgOptOutResponse {}
1262impl ::prost::Name for MsgOptOutResponse {
1263    const NAME: &'static str = "MsgOptOutResponse";
1264    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1265    fn full_name() -> ::prost::alloc::string::String {
1266        "interchain_security.ccv.provider.v1.MsgOptOutResponse".into()
1267    }
1268    fn type_url() -> ::prost::alloc::string::String {
1269        "/interchain_security.ccv.provider.v1.MsgOptOutResponse".into()
1270    }
1271}
1272/// MsgSetConsumerCommissionRate allows validators to set
1273/// a per-consumer chain commission rate
1274#[derive(Clone, PartialEq, ::prost::Message)]
1275pub struct MsgSetConsumerCommissionRate {
1276    /// The validator address on the provider
1277    #[prost(string, tag = "1")]
1278    pub provider_addr: ::prost::alloc::string::String,
1279    /// \[DEPRECATED\] use `consumer_id` instead
1280    #[deprecated]
1281    #[prost(string, tag = "2")]
1282    pub chain_id: ::prost::alloc::string::String,
1283    /// The rate to charge delegators on the consumer chain, as a fraction
1284    /// TODO: migrate rate from sdk.Dec to math.LegacyDec
1285    #[prost(string, tag = "3")]
1286    pub rate: ::prost::alloc::string::String,
1287    /// submitter address
1288    #[prost(string, tag = "4")]
1289    pub signer: ::prost::alloc::string::String,
1290    /// the consumer id of the consumer chain to set the commission rate
1291    #[prost(string, tag = "5")]
1292    pub consumer_id: ::prost::alloc::string::String,
1293}
1294impl ::prost::Name for MsgSetConsumerCommissionRate {
1295    const NAME: &'static str = "MsgSetConsumerCommissionRate";
1296    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1297    fn full_name() -> ::prost::alloc::string::String {
1298        "interchain_security.ccv.provider.v1.MsgSetConsumerCommissionRate".into()
1299    }
1300    fn type_url() -> ::prost::alloc::string::String {
1301        "/interchain_security.ccv.provider.v1.MsgSetConsumerCommissionRate".into()
1302    }
1303}
1304#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1305pub struct MsgSetConsumerCommissionRateResponse {}
1306impl ::prost::Name for MsgSetConsumerCommissionRateResponse {
1307    const NAME: &'static str = "MsgSetConsumerCommissionRateResponse";
1308    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1309    fn full_name() -> ::prost::alloc::string::String {
1310        "interchain_security.ccv.provider.v1.MsgSetConsumerCommissionRateResponse".into()
1311    }
1312    fn type_url() -> ::prost::alloc::string::String {
1313        "/interchain_security.ccv.provider.v1.MsgSetConsumerCommissionRateResponse"
1314            .into()
1315    }
1316}
1317/// \[DEPRECATED\] Use `MsgUpdateConsumer` instead
1318#[derive(Clone, PartialEq, ::prost::Message)]
1319pub struct MsgConsumerModification {
1320    /// the title of the proposal
1321    #[prost(string, tag = "1")]
1322    pub title: ::prost::alloc::string::String,
1323    /// the description of the proposal
1324    #[prost(string, tag = "2")]
1325    pub description: ::prost::alloc::string::String,
1326    /// the chain-id of the consumer chain to be modified
1327    #[prost(string, tag = "3")]
1328    pub chain_id: ::prost::alloc::string::String,
1329    /// Corresponds to the percentage of validators that have to validate the chain under the Top N case.
1330    /// For example, 53 corresponds to a Top 53% chain, meaning that the top 53% provider validators by voting power
1331    /// have to validate the proposed consumer chain. top_N can either be 0 or any value in \[50, 100\].
1332    /// A chain can join with top_N == 0 as an Opt In chain, or with top_N ∈ \[50, 100\] as a Top N chain.
1333    #[prost(uint32, tag = "4")]
1334    pub top_n: u32,
1335    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain. For instance, if
1336    /// `validators_power_cap` is set to 32, it means that no validator can have more than 32% of the voting power on the
1337    /// consumer chain. Note that this might not be feasible. For example, think of a consumer chain with only
1338    /// 5 validators and with `validators_power_cap` set to 10%. In such a scenario, at least one validator would need
1339    /// to have more than 20% of the total voting power. Therefore, `validators_power_cap` operates on a best-effort basis.
1340    #[prost(uint32, tag = "5")]
1341    pub validators_power_cap: u32,
1342    /// Corresponds to the maximum number of validators that can validate a consumer chain.
1343    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
1344    #[prost(uint32, tag = "6")]
1345    pub validator_set_cap: u32,
1346    /// Corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate
1347    /// the consumer chain.
1348    #[prost(string, repeated, tag = "7")]
1349    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1350    /// Corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain.
1351    #[prost(string, repeated, tag = "8")]
1352    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
1353    /// signer address
1354    #[prost(string, tag = "9")]
1355    pub authority: ::prost::alloc::string::String,
1356    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
1357    #[prost(uint64, tag = "10")]
1358    pub min_stake: u64,
1359    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
1360    #[prost(bool, tag = "11")]
1361    pub allow_inactive_vals: bool,
1362}
1363impl ::prost::Name for MsgConsumerModification {
1364    const NAME: &'static str = "MsgConsumerModification";
1365    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1366    fn full_name() -> ::prost::alloc::string::String {
1367        "interchain_security.ccv.provider.v1.MsgConsumerModification".into()
1368    }
1369    fn type_url() -> ::prost::alloc::string::String {
1370        "/interchain_security.ccv.provider.v1.MsgConsumerModification".into()
1371    }
1372}
1373#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1374pub struct MsgConsumerModificationResponse {}
1375impl ::prost::Name for MsgConsumerModificationResponse {
1376    const NAME: &'static str = "MsgConsumerModificationResponse";
1377    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1378    fn full_name() -> ::prost::alloc::string::String {
1379        "interchain_security.ccv.provider.v1.MsgConsumerModificationResponse".into()
1380    }
1381    fn type_url() -> ::prost::alloc::string::String {
1382        "/interchain_security.ccv.provider.v1.MsgConsumerModificationResponse".into()
1383    }
1384}
1385/// MsgCreateConsumer defines the message that creates a consumer chain
1386#[derive(Clone, PartialEq, ::prost::Message)]
1387pub struct MsgCreateConsumer {
1388    /// Submitter address. If the message is successfully handled, the ownership of
1389    /// the consumer chain will given to this address.
1390    #[prost(string, tag = "1")]
1391    pub submitter: ::prost::alloc::string::String,
1392    /// the chain id of the new consumer chain
1393    #[prost(string, tag = "2")]
1394    pub chain_id: ::prost::alloc::string::String,
1395    #[prost(message, optional, tag = "3")]
1396    pub metadata: ::core::option::Option<ConsumerMetadata>,
1397    #[prost(message, optional, tag = "4")]
1398    pub initialization_parameters: ::core::option::Option<
1399        ConsumerInitializationParameters,
1400    >,
1401    #[prost(message, optional, tag = "5")]
1402    pub power_shaping_parameters: ::core::option::Option<PowerShapingParameters>,
1403}
1404impl ::prost::Name for MsgCreateConsumer {
1405    const NAME: &'static str = "MsgCreateConsumer";
1406    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1407    fn full_name() -> ::prost::alloc::string::String {
1408        "interchain_security.ccv.provider.v1.MsgCreateConsumer".into()
1409    }
1410    fn type_url() -> ::prost::alloc::string::String {
1411        "/interchain_security.ccv.provider.v1.MsgCreateConsumer".into()
1412    }
1413}
1414/// MsgCreateConsumerResponse defines response type for MsgCreateConsumer
1415#[derive(Clone, PartialEq, ::prost::Message)]
1416pub struct MsgCreateConsumerResponse {
1417    #[prost(string, tag = "1")]
1418    pub consumer_id: ::prost::alloc::string::String,
1419}
1420impl ::prost::Name for MsgCreateConsumerResponse {
1421    const NAME: &'static str = "MsgCreateConsumerResponse";
1422    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1423    fn full_name() -> ::prost::alloc::string::String {
1424        "interchain_security.ccv.provider.v1.MsgCreateConsumerResponse".into()
1425    }
1426    fn type_url() -> ::prost::alloc::string::String {
1427        "/interchain_security.ccv.provider.v1.MsgCreateConsumerResponse".into()
1428    }
1429}
1430/// MsgUpdateConsumer defines the message used to modify a consumer chain.
1431#[derive(Clone, PartialEq, ::prost::Message)]
1432pub struct MsgUpdateConsumer {
1433    /// the address of the owner of the consumer chain to be updated
1434    #[prost(string, tag = "1")]
1435    pub owner: ::prost::alloc::string::String,
1436    /// the consumer id of the consumer chain to be updated
1437    #[prost(string, tag = "2")]
1438    pub consumer_id: ::prost::alloc::string::String,
1439    /// the new owner of the consumer when updated
1440    #[prost(string, tag = "3")]
1441    pub new_owner_address: ::prost::alloc::string::String,
1442    /// the metadata of the consumer when updated
1443    #[prost(message, optional, tag = "4")]
1444    pub metadata: ::core::option::Option<ConsumerMetadata>,
1445    /// initialization parameters can only be updated before a chain has launched
1446    #[prost(message, optional, tag = "5")]
1447    pub initialization_parameters: ::core::option::Option<
1448        ConsumerInitializationParameters,
1449    >,
1450    /// the power-shaping parameters of the consumer when updated
1451    #[prost(message, optional, tag = "6")]
1452    pub power_shaping_parameters: ::core::option::Option<PowerShapingParameters>,
1453}
1454impl ::prost::Name for MsgUpdateConsumer {
1455    const NAME: &'static str = "MsgUpdateConsumer";
1456    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1457    fn full_name() -> ::prost::alloc::string::String {
1458        "interchain_security.ccv.provider.v1.MsgUpdateConsumer".into()
1459    }
1460    fn type_url() -> ::prost::alloc::string::String {
1461        "/interchain_security.ccv.provider.v1.MsgUpdateConsumer".into()
1462    }
1463}
1464/// MsgUpdateConsumerResponse defines response type for MsgUpdateConsumer messages
1465#[derive(Clone, Copy, PartialEq, ::prost::Message)]
1466pub struct MsgUpdateConsumerResponse {}
1467impl ::prost::Name for MsgUpdateConsumerResponse {
1468    const NAME: &'static str = "MsgUpdateConsumerResponse";
1469    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
1470    fn full_name() -> ::prost::alloc::string::String {
1471        "interchain_security.ccv.provider.v1.MsgUpdateConsumerResponse".into()
1472    }
1473    fn type_url() -> ::prost::alloc::string::String {
1474        "/interchain_security.ccv.provider.v1.MsgUpdateConsumerResponse".into()
1475    }
1476}
1477/// Generated client implementations.
1478#[cfg(feature = "client")]
1479pub mod msg_client {
1480    #![allow(
1481        unused_variables,
1482        dead_code,
1483        missing_docs,
1484        clippy::wildcard_imports,
1485        clippy::let_unit_value,
1486    )]
1487    use tonic::codegen::*;
1488    use tonic::codegen::http::Uri;
1489    /// Msg defines the Msg service.
1490    #[derive(Debug, Clone)]
1491    pub struct MsgClient<T> {
1492        inner: tonic::client::Grpc<T>,
1493    }
1494    #[cfg(feature = "transport")]
1495    impl MsgClient<tonic::transport::Channel> {
1496        /// Attempt to create a new client by connecting to a given endpoint.
1497        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
1498        where
1499            D: TryInto<tonic::transport::Endpoint>,
1500            D::Error: Into<StdError>,
1501        {
1502            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
1503            Ok(Self::new(conn))
1504        }
1505    }
1506    impl<T> MsgClient<T>
1507    where
1508        T: tonic::client::GrpcService<tonic::body::Body>,
1509        T::Error: Into<StdError>,
1510        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
1511        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
1512    {
1513        pub fn new(inner: T) -> Self {
1514            let inner = tonic::client::Grpc::new(inner);
1515            Self { inner }
1516        }
1517        pub fn with_origin(inner: T, origin: Uri) -> Self {
1518            let inner = tonic::client::Grpc::with_origin(inner, origin);
1519            Self { inner }
1520        }
1521        pub fn with_interceptor<F>(
1522            inner: T,
1523            interceptor: F,
1524        ) -> MsgClient<InterceptedService<T, F>>
1525        where
1526            F: tonic::service::Interceptor,
1527            T::ResponseBody: Default,
1528            T: tonic::codegen::Service<
1529                http::Request<tonic::body::Body>,
1530                Response = http::Response<
1531                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
1532                >,
1533            >,
1534            <T as tonic::codegen::Service<
1535                http::Request<tonic::body::Body>,
1536            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
1537        {
1538            MsgClient::new(InterceptedService::new(inner, interceptor))
1539        }
1540        /// Compress requests with the given encoding.
1541        ///
1542        /// This requires the server to support it otherwise it might respond with an
1543        /// error.
1544        #[must_use]
1545        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
1546            self.inner = self.inner.send_compressed(encoding);
1547            self
1548        }
1549        /// Enable decompressing responses.
1550        #[must_use]
1551        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
1552            self.inner = self.inner.accept_compressed(encoding);
1553            self
1554        }
1555        /// Limits the maximum size of a decoded message.
1556        ///
1557        /// Default: `4MB`
1558        #[must_use]
1559        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
1560            self.inner = self.inner.max_decoding_message_size(limit);
1561            self
1562        }
1563        /// Limits the maximum size of an encoded message.
1564        ///
1565        /// Default: `usize::MAX`
1566        #[must_use]
1567        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
1568            self.inner = self.inner.max_encoding_message_size(limit);
1569            self
1570        }
1571        pub async fn assign_consumer_key(
1572            &mut self,
1573            request: impl tonic::IntoRequest<super::MsgAssignConsumerKey>,
1574        ) -> std::result::Result<
1575            tonic::Response<super::MsgAssignConsumerKeyResponse>,
1576            tonic::Status,
1577        > {
1578            self.inner
1579                .ready()
1580                .await
1581                .map_err(|e| {
1582                    tonic::Status::unknown(
1583                        format!("Service was not ready: {}", e.into()),
1584                    )
1585                })?;
1586            let codec = tonic::codec::ProstCodec::default();
1587            let path = http::uri::PathAndQuery::from_static(
1588                "/interchain_security.ccv.provider.v1.Msg/AssignConsumerKey",
1589            );
1590            let mut req = request.into_request();
1591            req.extensions_mut()
1592                .insert(
1593                    GrpcMethod::new(
1594                        "interchain_security.ccv.provider.v1.Msg",
1595                        "AssignConsumerKey",
1596                    ),
1597                );
1598            self.inner.unary(req, path, codec).await
1599        }
1600        pub async fn submit_consumer_misbehaviour(
1601            &mut self,
1602            request: impl tonic::IntoRequest<super::MsgSubmitConsumerMisbehaviour>,
1603        ) -> std::result::Result<
1604            tonic::Response<super::MsgSubmitConsumerMisbehaviourResponse>,
1605            tonic::Status,
1606        > {
1607            self.inner
1608                .ready()
1609                .await
1610                .map_err(|e| {
1611                    tonic::Status::unknown(
1612                        format!("Service was not ready: {}", e.into()),
1613                    )
1614                })?;
1615            let codec = tonic::codec::ProstCodec::default();
1616            let path = http::uri::PathAndQuery::from_static(
1617                "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerMisbehaviour",
1618            );
1619            let mut req = request.into_request();
1620            req.extensions_mut()
1621                .insert(
1622                    GrpcMethod::new(
1623                        "interchain_security.ccv.provider.v1.Msg",
1624                        "SubmitConsumerMisbehaviour",
1625                    ),
1626                );
1627            self.inner.unary(req, path, codec).await
1628        }
1629        pub async fn submit_consumer_double_voting(
1630            &mut self,
1631            request: impl tonic::IntoRequest<super::MsgSubmitConsumerDoubleVoting>,
1632        ) -> std::result::Result<
1633            tonic::Response<super::MsgSubmitConsumerDoubleVotingResponse>,
1634            tonic::Status,
1635        > {
1636            self.inner
1637                .ready()
1638                .await
1639                .map_err(|e| {
1640                    tonic::Status::unknown(
1641                        format!("Service was not ready: {}", e.into()),
1642                    )
1643                })?;
1644            let codec = tonic::codec::ProstCodec::default();
1645            let path = http::uri::PathAndQuery::from_static(
1646                "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerDoubleVoting",
1647            );
1648            let mut req = request.into_request();
1649            req.extensions_mut()
1650                .insert(
1651                    GrpcMethod::new(
1652                        "interchain_security.ccv.provider.v1.Msg",
1653                        "SubmitConsumerDoubleVoting",
1654                    ),
1655                );
1656            self.inner.unary(req, path, codec).await
1657        }
1658        pub async fn create_consumer(
1659            &mut self,
1660            request: impl tonic::IntoRequest<super::MsgCreateConsumer>,
1661        ) -> std::result::Result<
1662            tonic::Response<super::MsgCreateConsumerResponse>,
1663            tonic::Status,
1664        > {
1665            self.inner
1666                .ready()
1667                .await
1668                .map_err(|e| {
1669                    tonic::Status::unknown(
1670                        format!("Service was not ready: {}", e.into()),
1671                    )
1672                })?;
1673            let codec = tonic::codec::ProstCodec::default();
1674            let path = http::uri::PathAndQuery::from_static(
1675                "/interchain_security.ccv.provider.v1.Msg/CreateConsumer",
1676            );
1677            let mut req = request.into_request();
1678            req.extensions_mut()
1679                .insert(
1680                    GrpcMethod::new(
1681                        "interchain_security.ccv.provider.v1.Msg",
1682                        "CreateConsumer",
1683                    ),
1684                );
1685            self.inner.unary(req, path, codec).await
1686        }
1687        pub async fn update_consumer(
1688            &mut self,
1689            request: impl tonic::IntoRequest<super::MsgUpdateConsumer>,
1690        ) -> std::result::Result<
1691            tonic::Response<super::MsgUpdateConsumerResponse>,
1692            tonic::Status,
1693        > {
1694            self.inner
1695                .ready()
1696                .await
1697                .map_err(|e| {
1698                    tonic::Status::unknown(
1699                        format!("Service was not ready: {}", e.into()),
1700                    )
1701                })?;
1702            let codec = tonic::codec::ProstCodec::default();
1703            let path = http::uri::PathAndQuery::from_static(
1704                "/interchain_security.ccv.provider.v1.Msg/UpdateConsumer",
1705            );
1706            let mut req = request.into_request();
1707            req.extensions_mut()
1708                .insert(
1709                    GrpcMethod::new(
1710                        "interchain_security.ccv.provider.v1.Msg",
1711                        "UpdateConsumer",
1712                    ),
1713                );
1714            self.inner.unary(req, path, codec).await
1715        }
1716        pub async fn remove_consumer(
1717            &mut self,
1718            request: impl tonic::IntoRequest<super::MsgRemoveConsumer>,
1719        ) -> std::result::Result<
1720            tonic::Response<super::MsgRemoveConsumerResponse>,
1721            tonic::Status,
1722        > {
1723            self.inner
1724                .ready()
1725                .await
1726                .map_err(|e| {
1727                    tonic::Status::unknown(
1728                        format!("Service was not ready: {}", e.into()),
1729                    )
1730                })?;
1731            let codec = tonic::codec::ProstCodec::default();
1732            let path = http::uri::PathAndQuery::from_static(
1733                "/interchain_security.ccv.provider.v1.Msg/RemoveConsumer",
1734            );
1735            let mut req = request.into_request();
1736            req.extensions_mut()
1737                .insert(
1738                    GrpcMethod::new(
1739                        "interchain_security.ccv.provider.v1.Msg",
1740                        "RemoveConsumer",
1741                    ),
1742                );
1743            self.inner.unary(req, path, codec).await
1744        }
1745        pub async fn update_params(
1746            &mut self,
1747            request: impl tonic::IntoRequest<super::MsgUpdateParams>,
1748        ) -> std::result::Result<
1749            tonic::Response<super::MsgUpdateParamsResponse>,
1750            tonic::Status,
1751        > {
1752            self.inner
1753                .ready()
1754                .await
1755                .map_err(|e| {
1756                    tonic::Status::unknown(
1757                        format!("Service was not ready: {}", e.into()),
1758                    )
1759                })?;
1760            let codec = tonic::codec::ProstCodec::default();
1761            let path = http::uri::PathAndQuery::from_static(
1762                "/interchain_security.ccv.provider.v1.Msg/UpdateParams",
1763            );
1764            let mut req = request.into_request();
1765            req.extensions_mut()
1766                .insert(
1767                    GrpcMethod::new(
1768                        "interchain_security.ccv.provider.v1.Msg",
1769                        "UpdateParams",
1770                    ),
1771                );
1772            self.inner.unary(req, path, codec).await
1773        }
1774        pub async fn opt_in(
1775            &mut self,
1776            request: impl tonic::IntoRequest<super::MsgOptIn>,
1777        ) -> std::result::Result<
1778            tonic::Response<super::MsgOptInResponse>,
1779            tonic::Status,
1780        > {
1781            self.inner
1782                .ready()
1783                .await
1784                .map_err(|e| {
1785                    tonic::Status::unknown(
1786                        format!("Service was not ready: {}", e.into()),
1787                    )
1788                })?;
1789            let codec = tonic::codec::ProstCodec::default();
1790            let path = http::uri::PathAndQuery::from_static(
1791                "/interchain_security.ccv.provider.v1.Msg/OptIn",
1792            );
1793            let mut req = request.into_request();
1794            req.extensions_mut()
1795                .insert(
1796                    GrpcMethod::new("interchain_security.ccv.provider.v1.Msg", "OptIn"),
1797                );
1798            self.inner.unary(req, path, codec).await
1799        }
1800        pub async fn opt_out(
1801            &mut self,
1802            request: impl tonic::IntoRequest<super::MsgOptOut>,
1803        ) -> std::result::Result<
1804            tonic::Response<super::MsgOptOutResponse>,
1805            tonic::Status,
1806        > {
1807            self.inner
1808                .ready()
1809                .await
1810                .map_err(|e| {
1811                    tonic::Status::unknown(
1812                        format!("Service was not ready: {}", e.into()),
1813                    )
1814                })?;
1815            let codec = tonic::codec::ProstCodec::default();
1816            let path = http::uri::PathAndQuery::from_static(
1817                "/interchain_security.ccv.provider.v1.Msg/OptOut",
1818            );
1819            let mut req = request.into_request();
1820            req.extensions_mut()
1821                .insert(
1822                    GrpcMethod::new("interchain_security.ccv.provider.v1.Msg", "OptOut"),
1823                );
1824            self.inner.unary(req, path, codec).await
1825        }
1826        pub async fn set_consumer_commission_rate(
1827            &mut self,
1828            request: impl tonic::IntoRequest<super::MsgSetConsumerCommissionRate>,
1829        ) -> std::result::Result<
1830            tonic::Response<super::MsgSetConsumerCommissionRateResponse>,
1831            tonic::Status,
1832        > {
1833            self.inner
1834                .ready()
1835                .await
1836                .map_err(|e| {
1837                    tonic::Status::unknown(
1838                        format!("Service was not ready: {}", e.into()),
1839                    )
1840                })?;
1841            let codec = tonic::codec::ProstCodec::default();
1842            let path = http::uri::PathAndQuery::from_static(
1843                "/interchain_security.ccv.provider.v1.Msg/SetConsumerCommissionRate",
1844            );
1845            let mut req = request.into_request();
1846            req.extensions_mut()
1847                .insert(
1848                    GrpcMethod::new(
1849                        "interchain_security.ccv.provider.v1.Msg",
1850                        "SetConsumerCommissionRate",
1851                    ),
1852                );
1853            self.inner.unary(req, path, codec).await
1854        }
1855        pub async fn change_reward_denoms(
1856            &mut self,
1857            request: impl tonic::IntoRequest<super::MsgChangeRewardDenoms>,
1858        ) -> std::result::Result<
1859            tonic::Response<super::MsgChangeRewardDenomsResponse>,
1860            tonic::Status,
1861        > {
1862            self.inner
1863                .ready()
1864                .await
1865                .map_err(|e| {
1866                    tonic::Status::unknown(
1867                        format!("Service was not ready: {}", e.into()),
1868                    )
1869                })?;
1870            let codec = tonic::codec::ProstCodec::default();
1871            let path = http::uri::PathAndQuery::from_static(
1872                "/interchain_security.ccv.provider.v1.Msg/ChangeRewardDenoms",
1873            );
1874            let mut req = request.into_request();
1875            req.extensions_mut()
1876                .insert(
1877                    GrpcMethod::new(
1878                        "interchain_security.ccv.provider.v1.Msg",
1879                        "ChangeRewardDenoms",
1880                    ),
1881                );
1882            self.inner.unary(req, path, codec).await
1883        }
1884    }
1885}
1886/// Generated server implementations.
1887#[cfg(feature = "server")]
1888pub mod msg_server {
1889    #![allow(
1890        unused_variables,
1891        dead_code,
1892        missing_docs,
1893        clippy::wildcard_imports,
1894        clippy::let_unit_value,
1895    )]
1896    use tonic::codegen::*;
1897    /// Generated trait containing gRPC methods that should be implemented for use with MsgServer.
1898    #[async_trait]
1899    pub trait Msg: std::marker::Send + std::marker::Sync + 'static {
1900        async fn assign_consumer_key(
1901            &self,
1902            request: tonic::Request<super::MsgAssignConsumerKey>,
1903        ) -> std::result::Result<
1904            tonic::Response<super::MsgAssignConsumerKeyResponse>,
1905            tonic::Status,
1906        >;
1907        async fn submit_consumer_misbehaviour(
1908            &self,
1909            request: tonic::Request<super::MsgSubmitConsumerMisbehaviour>,
1910        ) -> std::result::Result<
1911            tonic::Response<super::MsgSubmitConsumerMisbehaviourResponse>,
1912            tonic::Status,
1913        >;
1914        async fn submit_consumer_double_voting(
1915            &self,
1916            request: tonic::Request<super::MsgSubmitConsumerDoubleVoting>,
1917        ) -> std::result::Result<
1918            tonic::Response<super::MsgSubmitConsumerDoubleVotingResponse>,
1919            tonic::Status,
1920        >;
1921        async fn create_consumer(
1922            &self,
1923            request: tonic::Request<super::MsgCreateConsumer>,
1924        ) -> std::result::Result<
1925            tonic::Response<super::MsgCreateConsumerResponse>,
1926            tonic::Status,
1927        >;
1928        async fn update_consumer(
1929            &self,
1930            request: tonic::Request<super::MsgUpdateConsumer>,
1931        ) -> std::result::Result<
1932            tonic::Response<super::MsgUpdateConsumerResponse>,
1933            tonic::Status,
1934        >;
1935        async fn remove_consumer(
1936            &self,
1937            request: tonic::Request<super::MsgRemoveConsumer>,
1938        ) -> std::result::Result<
1939            tonic::Response<super::MsgRemoveConsumerResponse>,
1940            tonic::Status,
1941        >;
1942        async fn update_params(
1943            &self,
1944            request: tonic::Request<super::MsgUpdateParams>,
1945        ) -> std::result::Result<
1946            tonic::Response<super::MsgUpdateParamsResponse>,
1947            tonic::Status,
1948        >;
1949        async fn opt_in(
1950            &self,
1951            request: tonic::Request<super::MsgOptIn>,
1952        ) -> std::result::Result<
1953            tonic::Response<super::MsgOptInResponse>,
1954            tonic::Status,
1955        >;
1956        async fn opt_out(
1957            &self,
1958            request: tonic::Request<super::MsgOptOut>,
1959        ) -> std::result::Result<
1960            tonic::Response<super::MsgOptOutResponse>,
1961            tonic::Status,
1962        >;
1963        async fn set_consumer_commission_rate(
1964            &self,
1965            request: tonic::Request<super::MsgSetConsumerCommissionRate>,
1966        ) -> std::result::Result<
1967            tonic::Response<super::MsgSetConsumerCommissionRateResponse>,
1968            tonic::Status,
1969        >;
1970        async fn change_reward_denoms(
1971            &self,
1972            request: tonic::Request<super::MsgChangeRewardDenoms>,
1973        ) -> std::result::Result<
1974            tonic::Response<super::MsgChangeRewardDenomsResponse>,
1975            tonic::Status,
1976        >;
1977    }
1978    /// Msg defines the Msg service.
1979    #[derive(Debug)]
1980    pub struct MsgServer<T> {
1981        inner: Arc<T>,
1982        accept_compression_encodings: EnabledCompressionEncodings,
1983        send_compression_encodings: EnabledCompressionEncodings,
1984        max_decoding_message_size: Option<usize>,
1985        max_encoding_message_size: Option<usize>,
1986    }
1987    impl<T> MsgServer<T> {
1988        pub fn new(inner: T) -> Self {
1989            Self::from_arc(Arc::new(inner))
1990        }
1991        pub fn from_arc(inner: Arc<T>) -> Self {
1992            Self {
1993                inner,
1994                accept_compression_encodings: Default::default(),
1995                send_compression_encodings: Default::default(),
1996                max_decoding_message_size: None,
1997                max_encoding_message_size: None,
1998            }
1999        }
2000        pub fn with_interceptor<F>(
2001            inner: T,
2002            interceptor: F,
2003        ) -> InterceptedService<Self, F>
2004        where
2005            F: tonic::service::Interceptor,
2006        {
2007            InterceptedService::new(Self::new(inner), interceptor)
2008        }
2009        /// Enable decompressing requests with the given encoding.
2010        #[must_use]
2011        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2012            self.accept_compression_encodings.enable(encoding);
2013            self
2014        }
2015        /// Compress responses with the given encoding, if the client supports it.
2016        #[must_use]
2017        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2018            self.send_compression_encodings.enable(encoding);
2019            self
2020        }
2021        /// Limits the maximum size of a decoded message.
2022        ///
2023        /// Default: `4MB`
2024        #[must_use]
2025        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2026            self.max_decoding_message_size = Some(limit);
2027            self
2028        }
2029        /// Limits the maximum size of an encoded message.
2030        ///
2031        /// Default: `usize::MAX`
2032        #[must_use]
2033        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2034            self.max_encoding_message_size = Some(limit);
2035            self
2036        }
2037    }
2038    impl<T, B> tonic::codegen::Service<http::Request<B>> for MsgServer<T>
2039    where
2040        T: Msg,
2041        B: Body + std::marker::Send + 'static,
2042        B::Error: Into<StdError> + std::marker::Send + 'static,
2043    {
2044        type Response = http::Response<tonic::body::Body>;
2045        type Error = std::convert::Infallible;
2046        type Future = BoxFuture<Self::Response, Self::Error>;
2047        fn poll_ready(
2048            &mut self,
2049            _cx: &mut Context<'_>,
2050        ) -> Poll<std::result::Result<(), Self::Error>> {
2051            Poll::Ready(Ok(()))
2052        }
2053        fn call(&mut self, req: http::Request<B>) -> Self::Future {
2054            match req.uri().path() {
2055                "/interchain_security.ccv.provider.v1.Msg/AssignConsumerKey" => {
2056                    #[allow(non_camel_case_types)]
2057                    struct AssignConsumerKeySvc<T: Msg>(pub Arc<T>);
2058                    impl<T: Msg> tonic::server::UnaryService<super::MsgAssignConsumerKey>
2059                    for AssignConsumerKeySvc<T> {
2060                        type Response = super::MsgAssignConsumerKeyResponse;
2061                        type Future = BoxFuture<
2062                            tonic::Response<Self::Response>,
2063                            tonic::Status,
2064                        >;
2065                        fn call(
2066                            &mut self,
2067                            request: tonic::Request<super::MsgAssignConsumerKey>,
2068                        ) -> Self::Future {
2069                            let inner = Arc::clone(&self.0);
2070                            let fut = async move {
2071                                <T as Msg>::assign_consumer_key(&inner, request).await
2072                            };
2073                            Box::pin(fut)
2074                        }
2075                    }
2076                    let accept_compression_encodings = self.accept_compression_encodings;
2077                    let send_compression_encodings = self.send_compression_encodings;
2078                    let max_decoding_message_size = self.max_decoding_message_size;
2079                    let max_encoding_message_size = self.max_encoding_message_size;
2080                    let inner = self.inner.clone();
2081                    let fut = async move {
2082                        let method = AssignConsumerKeySvc(inner);
2083                        let codec = tonic::codec::ProstCodec::default();
2084                        let mut grpc = tonic::server::Grpc::new(codec)
2085                            .apply_compression_config(
2086                                accept_compression_encodings,
2087                                send_compression_encodings,
2088                            )
2089                            .apply_max_message_size_config(
2090                                max_decoding_message_size,
2091                                max_encoding_message_size,
2092                            );
2093                        let res = grpc.unary(method, req).await;
2094                        Ok(res)
2095                    };
2096                    Box::pin(fut)
2097                }
2098                "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerMisbehaviour" => {
2099                    #[allow(non_camel_case_types)]
2100                    struct SubmitConsumerMisbehaviourSvc<T: Msg>(pub Arc<T>);
2101                    impl<
2102                        T: Msg,
2103                    > tonic::server::UnaryService<super::MsgSubmitConsumerMisbehaviour>
2104                    for SubmitConsumerMisbehaviourSvc<T> {
2105                        type Response = super::MsgSubmitConsumerMisbehaviourResponse;
2106                        type Future = BoxFuture<
2107                            tonic::Response<Self::Response>,
2108                            tonic::Status,
2109                        >;
2110                        fn call(
2111                            &mut self,
2112                            request: tonic::Request<super::MsgSubmitConsumerMisbehaviour>,
2113                        ) -> Self::Future {
2114                            let inner = Arc::clone(&self.0);
2115                            let fut = async move {
2116                                <T as Msg>::submit_consumer_misbehaviour(&inner, request)
2117                                    .await
2118                            };
2119                            Box::pin(fut)
2120                        }
2121                    }
2122                    let accept_compression_encodings = self.accept_compression_encodings;
2123                    let send_compression_encodings = self.send_compression_encodings;
2124                    let max_decoding_message_size = self.max_decoding_message_size;
2125                    let max_encoding_message_size = self.max_encoding_message_size;
2126                    let inner = self.inner.clone();
2127                    let fut = async move {
2128                        let method = SubmitConsumerMisbehaviourSvc(inner);
2129                        let codec = tonic::codec::ProstCodec::default();
2130                        let mut grpc = tonic::server::Grpc::new(codec)
2131                            .apply_compression_config(
2132                                accept_compression_encodings,
2133                                send_compression_encodings,
2134                            )
2135                            .apply_max_message_size_config(
2136                                max_decoding_message_size,
2137                                max_encoding_message_size,
2138                            );
2139                        let res = grpc.unary(method, req).await;
2140                        Ok(res)
2141                    };
2142                    Box::pin(fut)
2143                }
2144                "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerDoubleVoting" => {
2145                    #[allow(non_camel_case_types)]
2146                    struct SubmitConsumerDoubleVotingSvc<T: Msg>(pub Arc<T>);
2147                    impl<
2148                        T: Msg,
2149                    > tonic::server::UnaryService<super::MsgSubmitConsumerDoubleVoting>
2150                    for SubmitConsumerDoubleVotingSvc<T> {
2151                        type Response = super::MsgSubmitConsumerDoubleVotingResponse;
2152                        type Future = BoxFuture<
2153                            tonic::Response<Self::Response>,
2154                            tonic::Status,
2155                        >;
2156                        fn call(
2157                            &mut self,
2158                            request: tonic::Request<super::MsgSubmitConsumerDoubleVoting>,
2159                        ) -> Self::Future {
2160                            let inner = Arc::clone(&self.0);
2161                            let fut = async move {
2162                                <T as Msg>::submit_consumer_double_voting(&inner, request)
2163                                    .await
2164                            };
2165                            Box::pin(fut)
2166                        }
2167                    }
2168                    let accept_compression_encodings = self.accept_compression_encodings;
2169                    let send_compression_encodings = self.send_compression_encodings;
2170                    let max_decoding_message_size = self.max_decoding_message_size;
2171                    let max_encoding_message_size = self.max_encoding_message_size;
2172                    let inner = self.inner.clone();
2173                    let fut = async move {
2174                        let method = SubmitConsumerDoubleVotingSvc(inner);
2175                        let codec = tonic::codec::ProstCodec::default();
2176                        let mut grpc = tonic::server::Grpc::new(codec)
2177                            .apply_compression_config(
2178                                accept_compression_encodings,
2179                                send_compression_encodings,
2180                            )
2181                            .apply_max_message_size_config(
2182                                max_decoding_message_size,
2183                                max_encoding_message_size,
2184                            );
2185                        let res = grpc.unary(method, req).await;
2186                        Ok(res)
2187                    };
2188                    Box::pin(fut)
2189                }
2190                "/interchain_security.ccv.provider.v1.Msg/CreateConsumer" => {
2191                    #[allow(non_camel_case_types)]
2192                    struct CreateConsumerSvc<T: Msg>(pub Arc<T>);
2193                    impl<T: Msg> tonic::server::UnaryService<super::MsgCreateConsumer>
2194                    for CreateConsumerSvc<T> {
2195                        type Response = super::MsgCreateConsumerResponse;
2196                        type Future = BoxFuture<
2197                            tonic::Response<Self::Response>,
2198                            tonic::Status,
2199                        >;
2200                        fn call(
2201                            &mut self,
2202                            request: tonic::Request<super::MsgCreateConsumer>,
2203                        ) -> Self::Future {
2204                            let inner = Arc::clone(&self.0);
2205                            let fut = async move {
2206                                <T as Msg>::create_consumer(&inner, request).await
2207                            };
2208                            Box::pin(fut)
2209                        }
2210                    }
2211                    let accept_compression_encodings = self.accept_compression_encodings;
2212                    let send_compression_encodings = self.send_compression_encodings;
2213                    let max_decoding_message_size = self.max_decoding_message_size;
2214                    let max_encoding_message_size = self.max_encoding_message_size;
2215                    let inner = self.inner.clone();
2216                    let fut = async move {
2217                        let method = CreateConsumerSvc(inner);
2218                        let codec = tonic::codec::ProstCodec::default();
2219                        let mut grpc = tonic::server::Grpc::new(codec)
2220                            .apply_compression_config(
2221                                accept_compression_encodings,
2222                                send_compression_encodings,
2223                            )
2224                            .apply_max_message_size_config(
2225                                max_decoding_message_size,
2226                                max_encoding_message_size,
2227                            );
2228                        let res = grpc.unary(method, req).await;
2229                        Ok(res)
2230                    };
2231                    Box::pin(fut)
2232                }
2233                "/interchain_security.ccv.provider.v1.Msg/UpdateConsumer" => {
2234                    #[allow(non_camel_case_types)]
2235                    struct UpdateConsumerSvc<T: Msg>(pub Arc<T>);
2236                    impl<T: Msg> tonic::server::UnaryService<super::MsgUpdateConsumer>
2237                    for UpdateConsumerSvc<T> {
2238                        type Response = super::MsgUpdateConsumerResponse;
2239                        type Future = BoxFuture<
2240                            tonic::Response<Self::Response>,
2241                            tonic::Status,
2242                        >;
2243                        fn call(
2244                            &mut self,
2245                            request: tonic::Request<super::MsgUpdateConsumer>,
2246                        ) -> Self::Future {
2247                            let inner = Arc::clone(&self.0);
2248                            let fut = async move {
2249                                <T as Msg>::update_consumer(&inner, request).await
2250                            };
2251                            Box::pin(fut)
2252                        }
2253                    }
2254                    let accept_compression_encodings = self.accept_compression_encodings;
2255                    let send_compression_encodings = self.send_compression_encodings;
2256                    let max_decoding_message_size = self.max_decoding_message_size;
2257                    let max_encoding_message_size = self.max_encoding_message_size;
2258                    let inner = self.inner.clone();
2259                    let fut = async move {
2260                        let method = UpdateConsumerSvc(inner);
2261                        let codec = tonic::codec::ProstCodec::default();
2262                        let mut grpc = tonic::server::Grpc::new(codec)
2263                            .apply_compression_config(
2264                                accept_compression_encodings,
2265                                send_compression_encodings,
2266                            )
2267                            .apply_max_message_size_config(
2268                                max_decoding_message_size,
2269                                max_encoding_message_size,
2270                            );
2271                        let res = grpc.unary(method, req).await;
2272                        Ok(res)
2273                    };
2274                    Box::pin(fut)
2275                }
2276                "/interchain_security.ccv.provider.v1.Msg/RemoveConsumer" => {
2277                    #[allow(non_camel_case_types)]
2278                    struct RemoveConsumerSvc<T: Msg>(pub Arc<T>);
2279                    impl<T: Msg> tonic::server::UnaryService<super::MsgRemoveConsumer>
2280                    for RemoveConsumerSvc<T> {
2281                        type Response = super::MsgRemoveConsumerResponse;
2282                        type Future = BoxFuture<
2283                            tonic::Response<Self::Response>,
2284                            tonic::Status,
2285                        >;
2286                        fn call(
2287                            &mut self,
2288                            request: tonic::Request<super::MsgRemoveConsumer>,
2289                        ) -> Self::Future {
2290                            let inner = Arc::clone(&self.0);
2291                            let fut = async move {
2292                                <T as Msg>::remove_consumer(&inner, request).await
2293                            };
2294                            Box::pin(fut)
2295                        }
2296                    }
2297                    let accept_compression_encodings = self.accept_compression_encodings;
2298                    let send_compression_encodings = self.send_compression_encodings;
2299                    let max_decoding_message_size = self.max_decoding_message_size;
2300                    let max_encoding_message_size = self.max_encoding_message_size;
2301                    let inner = self.inner.clone();
2302                    let fut = async move {
2303                        let method = RemoveConsumerSvc(inner);
2304                        let codec = tonic::codec::ProstCodec::default();
2305                        let mut grpc = tonic::server::Grpc::new(codec)
2306                            .apply_compression_config(
2307                                accept_compression_encodings,
2308                                send_compression_encodings,
2309                            )
2310                            .apply_max_message_size_config(
2311                                max_decoding_message_size,
2312                                max_encoding_message_size,
2313                            );
2314                        let res = grpc.unary(method, req).await;
2315                        Ok(res)
2316                    };
2317                    Box::pin(fut)
2318                }
2319                "/interchain_security.ccv.provider.v1.Msg/UpdateParams" => {
2320                    #[allow(non_camel_case_types)]
2321                    struct UpdateParamsSvc<T: Msg>(pub Arc<T>);
2322                    impl<T: Msg> tonic::server::UnaryService<super::MsgUpdateParams>
2323                    for UpdateParamsSvc<T> {
2324                        type Response = super::MsgUpdateParamsResponse;
2325                        type Future = BoxFuture<
2326                            tonic::Response<Self::Response>,
2327                            tonic::Status,
2328                        >;
2329                        fn call(
2330                            &mut self,
2331                            request: tonic::Request<super::MsgUpdateParams>,
2332                        ) -> Self::Future {
2333                            let inner = Arc::clone(&self.0);
2334                            let fut = async move {
2335                                <T as Msg>::update_params(&inner, request).await
2336                            };
2337                            Box::pin(fut)
2338                        }
2339                    }
2340                    let accept_compression_encodings = self.accept_compression_encodings;
2341                    let send_compression_encodings = self.send_compression_encodings;
2342                    let max_decoding_message_size = self.max_decoding_message_size;
2343                    let max_encoding_message_size = self.max_encoding_message_size;
2344                    let inner = self.inner.clone();
2345                    let fut = async move {
2346                        let method = UpdateParamsSvc(inner);
2347                        let codec = tonic::codec::ProstCodec::default();
2348                        let mut grpc = tonic::server::Grpc::new(codec)
2349                            .apply_compression_config(
2350                                accept_compression_encodings,
2351                                send_compression_encodings,
2352                            )
2353                            .apply_max_message_size_config(
2354                                max_decoding_message_size,
2355                                max_encoding_message_size,
2356                            );
2357                        let res = grpc.unary(method, req).await;
2358                        Ok(res)
2359                    };
2360                    Box::pin(fut)
2361                }
2362                "/interchain_security.ccv.provider.v1.Msg/OptIn" => {
2363                    #[allow(non_camel_case_types)]
2364                    struct OptInSvc<T: Msg>(pub Arc<T>);
2365                    impl<T: Msg> tonic::server::UnaryService<super::MsgOptIn>
2366                    for OptInSvc<T> {
2367                        type Response = super::MsgOptInResponse;
2368                        type Future = BoxFuture<
2369                            tonic::Response<Self::Response>,
2370                            tonic::Status,
2371                        >;
2372                        fn call(
2373                            &mut self,
2374                            request: tonic::Request<super::MsgOptIn>,
2375                        ) -> Self::Future {
2376                            let inner = Arc::clone(&self.0);
2377                            let fut = async move {
2378                                <T as Msg>::opt_in(&inner, request).await
2379                            };
2380                            Box::pin(fut)
2381                        }
2382                    }
2383                    let accept_compression_encodings = self.accept_compression_encodings;
2384                    let send_compression_encodings = self.send_compression_encodings;
2385                    let max_decoding_message_size = self.max_decoding_message_size;
2386                    let max_encoding_message_size = self.max_encoding_message_size;
2387                    let inner = self.inner.clone();
2388                    let fut = async move {
2389                        let method = OptInSvc(inner);
2390                        let codec = tonic::codec::ProstCodec::default();
2391                        let mut grpc = tonic::server::Grpc::new(codec)
2392                            .apply_compression_config(
2393                                accept_compression_encodings,
2394                                send_compression_encodings,
2395                            )
2396                            .apply_max_message_size_config(
2397                                max_decoding_message_size,
2398                                max_encoding_message_size,
2399                            );
2400                        let res = grpc.unary(method, req).await;
2401                        Ok(res)
2402                    };
2403                    Box::pin(fut)
2404                }
2405                "/interchain_security.ccv.provider.v1.Msg/OptOut" => {
2406                    #[allow(non_camel_case_types)]
2407                    struct OptOutSvc<T: Msg>(pub Arc<T>);
2408                    impl<T: Msg> tonic::server::UnaryService<super::MsgOptOut>
2409                    for OptOutSvc<T> {
2410                        type Response = super::MsgOptOutResponse;
2411                        type Future = BoxFuture<
2412                            tonic::Response<Self::Response>,
2413                            tonic::Status,
2414                        >;
2415                        fn call(
2416                            &mut self,
2417                            request: tonic::Request<super::MsgOptOut>,
2418                        ) -> Self::Future {
2419                            let inner = Arc::clone(&self.0);
2420                            let fut = async move {
2421                                <T as Msg>::opt_out(&inner, request).await
2422                            };
2423                            Box::pin(fut)
2424                        }
2425                    }
2426                    let accept_compression_encodings = self.accept_compression_encodings;
2427                    let send_compression_encodings = self.send_compression_encodings;
2428                    let max_decoding_message_size = self.max_decoding_message_size;
2429                    let max_encoding_message_size = self.max_encoding_message_size;
2430                    let inner = self.inner.clone();
2431                    let fut = async move {
2432                        let method = OptOutSvc(inner);
2433                        let codec = tonic::codec::ProstCodec::default();
2434                        let mut grpc = tonic::server::Grpc::new(codec)
2435                            .apply_compression_config(
2436                                accept_compression_encodings,
2437                                send_compression_encodings,
2438                            )
2439                            .apply_max_message_size_config(
2440                                max_decoding_message_size,
2441                                max_encoding_message_size,
2442                            );
2443                        let res = grpc.unary(method, req).await;
2444                        Ok(res)
2445                    };
2446                    Box::pin(fut)
2447                }
2448                "/interchain_security.ccv.provider.v1.Msg/SetConsumerCommissionRate" => {
2449                    #[allow(non_camel_case_types)]
2450                    struct SetConsumerCommissionRateSvc<T: Msg>(pub Arc<T>);
2451                    impl<
2452                        T: Msg,
2453                    > tonic::server::UnaryService<super::MsgSetConsumerCommissionRate>
2454                    for SetConsumerCommissionRateSvc<T> {
2455                        type Response = super::MsgSetConsumerCommissionRateResponse;
2456                        type Future = BoxFuture<
2457                            tonic::Response<Self::Response>,
2458                            tonic::Status,
2459                        >;
2460                        fn call(
2461                            &mut self,
2462                            request: tonic::Request<super::MsgSetConsumerCommissionRate>,
2463                        ) -> Self::Future {
2464                            let inner = Arc::clone(&self.0);
2465                            let fut = async move {
2466                                <T as Msg>::set_consumer_commission_rate(&inner, request)
2467                                    .await
2468                            };
2469                            Box::pin(fut)
2470                        }
2471                    }
2472                    let accept_compression_encodings = self.accept_compression_encodings;
2473                    let send_compression_encodings = self.send_compression_encodings;
2474                    let max_decoding_message_size = self.max_decoding_message_size;
2475                    let max_encoding_message_size = self.max_encoding_message_size;
2476                    let inner = self.inner.clone();
2477                    let fut = async move {
2478                        let method = SetConsumerCommissionRateSvc(inner);
2479                        let codec = tonic::codec::ProstCodec::default();
2480                        let mut grpc = tonic::server::Grpc::new(codec)
2481                            .apply_compression_config(
2482                                accept_compression_encodings,
2483                                send_compression_encodings,
2484                            )
2485                            .apply_max_message_size_config(
2486                                max_decoding_message_size,
2487                                max_encoding_message_size,
2488                            );
2489                        let res = grpc.unary(method, req).await;
2490                        Ok(res)
2491                    };
2492                    Box::pin(fut)
2493                }
2494                "/interchain_security.ccv.provider.v1.Msg/ChangeRewardDenoms" => {
2495                    #[allow(non_camel_case_types)]
2496                    struct ChangeRewardDenomsSvc<T: Msg>(pub Arc<T>);
2497                    impl<
2498                        T: Msg,
2499                    > tonic::server::UnaryService<super::MsgChangeRewardDenoms>
2500                    for ChangeRewardDenomsSvc<T> {
2501                        type Response = super::MsgChangeRewardDenomsResponse;
2502                        type Future = BoxFuture<
2503                            tonic::Response<Self::Response>,
2504                            tonic::Status,
2505                        >;
2506                        fn call(
2507                            &mut self,
2508                            request: tonic::Request<super::MsgChangeRewardDenoms>,
2509                        ) -> Self::Future {
2510                            let inner = Arc::clone(&self.0);
2511                            let fut = async move {
2512                                <T as Msg>::change_reward_denoms(&inner, request).await
2513                            };
2514                            Box::pin(fut)
2515                        }
2516                    }
2517                    let accept_compression_encodings = self.accept_compression_encodings;
2518                    let send_compression_encodings = self.send_compression_encodings;
2519                    let max_decoding_message_size = self.max_decoding_message_size;
2520                    let max_encoding_message_size = self.max_encoding_message_size;
2521                    let inner = self.inner.clone();
2522                    let fut = async move {
2523                        let method = ChangeRewardDenomsSvc(inner);
2524                        let codec = tonic::codec::ProstCodec::default();
2525                        let mut grpc = tonic::server::Grpc::new(codec)
2526                            .apply_compression_config(
2527                                accept_compression_encodings,
2528                                send_compression_encodings,
2529                            )
2530                            .apply_max_message_size_config(
2531                                max_decoding_message_size,
2532                                max_encoding_message_size,
2533                            );
2534                        let res = grpc.unary(method, req).await;
2535                        Ok(res)
2536                    };
2537                    Box::pin(fut)
2538                }
2539                _ => {
2540                    Box::pin(async move {
2541                        let mut response = http::Response::new(
2542                            tonic::body::Body::default(),
2543                        );
2544                        let headers = response.headers_mut();
2545                        headers
2546                            .insert(
2547                                tonic::Status::GRPC_STATUS,
2548                                (tonic::Code::Unimplemented as i32).into(),
2549                            );
2550                        headers
2551                            .insert(
2552                                http::header::CONTENT_TYPE,
2553                                tonic::metadata::GRPC_CONTENT_TYPE,
2554                            );
2555                        Ok(response)
2556                    })
2557                }
2558            }
2559        }
2560    }
2561    impl<T> Clone for MsgServer<T> {
2562        fn clone(&self) -> Self {
2563            let inner = self.inner.clone();
2564            Self {
2565                inner,
2566                accept_compression_encodings: self.accept_compression_encodings,
2567                send_compression_encodings: self.send_compression_encodings,
2568                max_decoding_message_size: self.max_decoding_message_size,
2569                max_encoding_message_size: self.max_encoding_message_size,
2570            }
2571        }
2572    }
2573    /// Generated gRPC service name
2574    pub const SERVICE_NAME: &str = "interchain_security.ccv.provider.v1.Msg";
2575    impl<T> tonic::server::NamedService for MsgServer<T> {
2576        const NAME: &'static str = SERVICE_NAME;
2577    }
2578}
2579#[derive(Clone, PartialEq, ::prost::Message)]
2580pub struct QueryConsumerGenesisRequest {
2581    #[prost(string, tag = "1")]
2582    pub consumer_id: ::prost::alloc::string::String,
2583}
2584impl ::prost::Name for QueryConsumerGenesisRequest {
2585    const NAME: &'static str = "QueryConsumerGenesisRequest";
2586    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2587    fn full_name() -> ::prost::alloc::string::String {
2588        "interchain_security.ccv.provider.v1.QueryConsumerGenesisRequest".into()
2589    }
2590    fn type_url() -> ::prost::alloc::string::String {
2591        "/interchain_security.ccv.provider.v1.QueryConsumerGenesisRequest".into()
2592    }
2593}
2594#[derive(Clone, PartialEq, ::prost::Message)]
2595pub struct QueryConsumerGenesisResponse {
2596    #[prost(message, optional, tag = "1")]
2597    pub genesis_state: ::core::option::Option<super::super::v1::ConsumerGenesisState>,
2598}
2599impl ::prost::Name for QueryConsumerGenesisResponse {
2600    const NAME: &'static str = "QueryConsumerGenesisResponse";
2601    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2602    fn full_name() -> ::prost::alloc::string::String {
2603        "interchain_security.ccv.provider.v1.QueryConsumerGenesisResponse".into()
2604    }
2605    fn type_url() -> ::prost::alloc::string::String {
2606        "/interchain_security.ccv.provider.v1.QueryConsumerGenesisResponse".into()
2607    }
2608}
2609#[derive(Clone, PartialEq, ::prost::Message)]
2610pub struct QueryConsumerChainsRequest {
2611    /// The phase of the consumer chains returned (optional)
2612    /// Registered=1|Initialized=2|Launched=3|Stopped=4|Deleted=5
2613    #[prost(enumeration = "ConsumerPhase", tag = "1")]
2614    pub phase: i32,
2615    #[prost(message, optional, tag = "2")]
2616    pub pagination: ::core::option::Option<
2617        super::super::super::super::cosmos::base::query::v1beta1::PageRequest,
2618    >,
2619}
2620impl ::prost::Name for QueryConsumerChainsRequest {
2621    const NAME: &'static str = "QueryConsumerChainsRequest";
2622    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2623    fn full_name() -> ::prost::alloc::string::String {
2624        "interchain_security.ccv.provider.v1.QueryConsumerChainsRequest".into()
2625    }
2626    fn type_url() -> ::prost::alloc::string::String {
2627        "/interchain_security.ccv.provider.v1.QueryConsumerChainsRequest".into()
2628    }
2629}
2630#[derive(Clone, PartialEq, ::prost::Message)]
2631pub struct QueryConsumerChainsResponse {
2632    #[prost(message, repeated, tag = "1")]
2633    pub chains: ::prost::alloc::vec::Vec<Chain>,
2634    #[prost(message, optional, tag = "2")]
2635    pub pagination: ::core::option::Option<
2636        super::super::super::super::cosmos::base::query::v1beta1::PageResponse,
2637    >,
2638}
2639impl ::prost::Name for QueryConsumerChainsResponse {
2640    const NAME: &'static str = "QueryConsumerChainsResponse";
2641    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2642    fn full_name() -> ::prost::alloc::string::String {
2643        "interchain_security.ccv.provider.v1.QueryConsumerChainsResponse".into()
2644    }
2645    fn type_url() -> ::prost::alloc::string::String {
2646        "/interchain_security.ccv.provider.v1.QueryConsumerChainsResponse".into()
2647    }
2648}
2649#[derive(Clone, PartialEq, ::prost::Message)]
2650pub struct Chain {
2651    #[prost(string, tag = "1")]
2652    pub chain_id: ::prost::alloc::string::String,
2653    #[prost(string, tag = "2")]
2654    pub client_id: ::prost::alloc::string::String,
2655    #[prost(uint32, tag = "3")]
2656    pub top_n: u32,
2657    /// If the chain is a Top-N chain, this is the minimum power required to be in the top N.
2658    /// Otherwise, this is -1.
2659    #[prost(int64, tag = "4")]
2660    pub min_power_in_top_n: i64,
2661    /// Corresponds to the maximum power (percentage-wise) a validator can have on the consumer chain.
2662    #[prost(uint32, tag = "5")]
2663    pub validators_power_cap: u32,
2664    /// Corresponds to the maximum number of validators that can validate a consumer chain.
2665    /// Only applicable to Opt In chains. Setting `validator_set_cap` on a Top N chain is a no-op.
2666    #[prost(uint32, tag = "6")]
2667    pub validator_set_cap: u32,
2668    /// Corresponds to a list of provider consensus addresses of validators that are the ONLY ones that can validate
2669    /// the consumer chain.
2670    #[prost(string, repeated, tag = "7")]
2671    pub allowlist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2672    /// Corresponds to a list of provider consensus addresses of validators that CANNOT validate the consumer chain.
2673    #[prost(string, repeated, tag = "8")]
2674    pub denylist: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2675    /// The phase the consumer chain
2676    #[prost(string, tag = "9")]
2677    pub phase: ::prost::alloc::string::String,
2678    /// The metadata of the consumer chain
2679    #[prost(message, optional, tag = "10")]
2680    pub metadata: ::core::option::Option<ConsumerMetadata>,
2681    /// Corresponds to the minimal amount of (provider chain) stake required to validate on the consumer chain.
2682    #[prost(uint64, tag = "11")]
2683    pub min_stake: u64,
2684    /// Corresponds to whether inactive validators are allowed to validate the consumer chain.
2685    #[prost(bool, tag = "12")]
2686    pub allow_inactive_vals: bool,
2687    #[prost(string, tag = "13")]
2688    pub consumer_id: ::prost::alloc::string::String,
2689}
2690impl ::prost::Name for Chain {
2691    const NAME: &'static str = "Chain";
2692    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2693    fn full_name() -> ::prost::alloc::string::String {
2694        "interchain_security.ccv.provider.v1.Chain".into()
2695    }
2696    fn type_url() -> ::prost::alloc::string::String {
2697        "/interchain_security.ccv.provider.v1.Chain".into()
2698    }
2699}
2700#[derive(Clone, PartialEq, ::prost::Message)]
2701pub struct QueryValidatorConsumerAddrRequest {
2702    /// The consensus address of the validator on the provider chain
2703    #[prost(string, tag = "1")]
2704    pub provider_address: ::prost::alloc::string::String,
2705    /// The id of the consumer chain
2706    #[prost(string, tag = "2")]
2707    pub consumer_id: ::prost::alloc::string::String,
2708}
2709impl ::prost::Name for QueryValidatorConsumerAddrRequest {
2710    const NAME: &'static str = "QueryValidatorConsumerAddrRequest";
2711    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2712    fn full_name() -> ::prost::alloc::string::String {
2713        "interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrRequest".into()
2714    }
2715    fn type_url() -> ::prost::alloc::string::String {
2716        "/interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrRequest".into()
2717    }
2718}
2719#[derive(Clone, PartialEq, ::prost::Message)]
2720pub struct QueryValidatorConsumerAddrResponse {
2721    /// The address of the validator on the consumer chain
2722    #[prost(string, tag = "1")]
2723    pub consumer_address: ::prost::alloc::string::String,
2724}
2725impl ::prost::Name for QueryValidatorConsumerAddrResponse {
2726    const NAME: &'static str = "QueryValidatorConsumerAddrResponse";
2727    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2728    fn full_name() -> ::prost::alloc::string::String {
2729        "interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrResponse".into()
2730    }
2731    fn type_url() -> ::prost::alloc::string::String {
2732        "/interchain_security.ccv.provider.v1.QueryValidatorConsumerAddrResponse".into()
2733    }
2734}
2735#[derive(Clone, PartialEq, ::prost::Message)]
2736pub struct QueryValidatorProviderAddrRequest {
2737    /// The consensus address of the validator on the consumer chain
2738    #[prost(string, tag = "1")]
2739    pub consumer_address: ::prost::alloc::string::String,
2740    /// The id of the consumer chain
2741    #[prost(string, tag = "2")]
2742    pub consumer_id: ::prost::alloc::string::String,
2743}
2744impl ::prost::Name for QueryValidatorProviderAddrRequest {
2745    const NAME: &'static str = "QueryValidatorProviderAddrRequest";
2746    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2747    fn full_name() -> ::prost::alloc::string::String {
2748        "interchain_security.ccv.provider.v1.QueryValidatorProviderAddrRequest".into()
2749    }
2750    fn type_url() -> ::prost::alloc::string::String {
2751        "/interchain_security.ccv.provider.v1.QueryValidatorProviderAddrRequest".into()
2752    }
2753}
2754#[derive(Clone, PartialEq, ::prost::Message)]
2755pub struct QueryValidatorProviderAddrResponse {
2756    /// The address of the validator on the provider chain
2757    #[prost(string, tag = "1")]
2758    pub provider_address: ::prost::alloc::string::String,
2759}
2760impl ::prost::Name for QueryValidatorProviderAddrResponse {
2761    const NAME: &'static str = "QueryValidatorProviderAddrResponse";
2762    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2763    fn full_name() -> ::prost::alloc::string::String {
2764        "interchain_security.ccv.provider.v1.QueryValidatorProviderAddrResponse".into()
2765    }
2766    fn type_url() -> ::prost::alloc::string::String {
2767        "/interchain_security.ccv.provider.v1.QueryValidatorProviderAddrResponse".into()
2768    }
2769}
2770#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2771pub struct QueryThrottleStateRequest {}
2772impl ::prost::Name for QueryThrottleStateRequest {
2773    const NAME: &'static str = "QueryThrottleStateRequest";
2774    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2775    fn full_name() -> ::prost::alloc::string::String {
2776        "interchain_security.ccv.provider.v1.QueryThrottleStateRequest".into()
2777    }
2778    fn type_url() -> ::prost::alloc::string::String {
2779        "/interchain_security.ccv.provider.v1.QueryThrottleStateRequest".into()
2780    }
2781}
2782#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2783pub struct QueryThrottleStateResponse {
2784    /// current slash_meter state
2785    #[prost(int64, tag = "1")]
2786    pub slash_meter: i64,
2787    /// allowance of voting power units (int) that the slash meter is given per
2788    /// replenish period this also serves as the max value for the meter.
2789    #[prost(int64, tag = "2")]
2790    pub slash_meter_allowance: i64,
2791    /// next time the slash meter could potentially be replenished, iff it's not
2792    /// full
2793    #[prost(message, optional, tag = "3")]
2794    pub next_replenish_candidate: ::core::option::Option<
2795        ::tendermint_proto::google::protobuf::Timestamp,
2796    >,
2797}
2798impl ::prost::Name for QueryThrottleStateResponse {
2799    const NAME: &'static str = "QueryThrottleStateResponse";
2800    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2801    fn full_name() -> ::prost::alloc::string::String {
2802        "interchain_security.ccv.provider.v1.QueryThrottleStateResponse".into()
2803    }
2804    fn type_url() -> ::prost::alloc::string::String {
2805        "/interchain_security.ccv.provider.v1.QueryThrottleStateResponse".into()
2806    }
2807}
2808#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2809pub struct QueryRegisteredConsumerRewardDenomsRequest {}
2810impl ::prost::Name for QueryRegisteredConsumerRewardDenomsRequest {
2811    const NAME: &'static str = "QueryRegisteredConsumerRewardDenomsRequest";
2812    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2813    fn full_name() -> ::prost::alloc::string::String {
2814        "interchain_security.ccv.provider.v1.QueryRegisteredConsumerRewardDenomsRequest"
2815            .into()
2816    }
2817    fn type_url() -> ::prost::alloc::string::String {
2818        "/interchain_security.ccv.provider.v1.QueryRegisteredConsumerRewardDenomsRequest"
2819            .into()
2820    }
2821}
2822#[derive(Clone, PartialEq, ::prost::Message)]
2823pub struct QueryRegisteredConsumerRewardDenomsResponse {
2824    #[prost(string, repeated, tag = "1")]
2825    pub denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
2826}
2827impl ::prost::Name for QueryRegisteredConsumerRewardDenomsResponse {
2828    const NAME: &'static str = "QueryRegisteredConsumerRewardDenomsResponse";
2829    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2830    fn full_name() -> ::prost::alloc::string::String {
2831        "interchain_security.ccv.provider.v1.QueryRegisteredConsumerRewardDenomsResponse"
2832            .into()
2833    }
2834    fn type_url() -> ::prost::alloc::string::String {
2835        "/interchain_security.ccv.provider.v1.QueryRegisteredConsumerRewardDenomsResponse"
2836            .into()
2837    }
2838}
2839#[derive(Clone, PartialEq, ::prost::Message)]
2840pub struct QueryAllPairsValConsAddrByConsumerRequest {
2841    /// The id of the consumer chain
2842    #[prost(string, tag = "1")]
2843    pub consumer_id: ::prost::alloc::string::String,
2844}
2845impl ::prost::Name for QueryAllPairsValConsAddrByConsumerRequest {
2846    const NAME: &'static str = "QueryAllPairsValConsAddrByConsumerRequest";
2847    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2848    fn full_name() -> ::prost::alloc::string::String {
2849        "interchain_security.ccv.provider.v1.QueryAllPairsValConsAddrByConsumerRequest"
2850            .into()
2851    }
2852    fn type_url() -> ::prost::alloc::string::String {
2853        "/interchain_security.ccv.provider.v1.QueryAllPairsValConsAddrByConsumerRequest"
2854            .into()
2855    }
2856}
2857#[derive(Clone, PartialEq, ::prost::Message)]
2858pub struct QueryAllPairsValConsAddrByConsumerResponse {
2859    #[prost(message, repeated, tag = "1")]
2860    pub pair_val_con_addr: ::prost::alloc::vec::Vec<PairValConAddrProviderAndConsumer>,
2861}
2862impl ::prost::Name for QueryAllPairsValConsAddrByConsumerResponse {
2863    const NAME: &'static str = "QueryAllPairsValConsAddrByConsumerResponse";
2864    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2865    fn full_name() -> ::prost::alloc::string::String {
2866        "interchain_security.ccv.provider.v1.QueryAllPairsValConsAddrByConsumerResponse"
2867            .into()
2868    }
2869    fn type_url() -> ::prost::alloc::string::String {
2870        "/interchain_security.ccv.provider.v1.QueryAllPairsValConsAddrByConsumerResponse"
2871            .into()
2872    }
2873}
2874#[derive(Clone, PartialEq, ::prost::Message)]
2875pub struct PairValConAddrProviderAndConsumer {
2876    /// The consensus address of the validator on the provider chain
2877    #[prost(string, tag = "1")]
2878    pub provider_address: ::prost::alloc::string::String,
2879    /// The consensus address of the validator on the consumer chain
2880    #[prost(string, tag = "2")]
2881    pub consumer_address: ::prost::alloc::string::String,
2882    #[prost(message, optional, tag = "3")]
2883    pub consumer_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>,
2884}
2885impl ::prost::Name for PairValConAddrProviderAndConsumer {
2886    const NAME: &'static str = "PairValConAddrProviderAndConsumer";
2887    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2888    fn full_name() -> ::prost::alloc::string::String {
2889        "interchain_security.ccv.provider.v1.PairValConAddrProviderAndConsumer".into()
2890    }
2891    fn type_url() -> ::prost::alloc::string::String {
2892        "/interchain_security.ccv.provider.v1.PairValConAddrProviderAndConsumer".into()
2893    }
2894}
2895#[derive(Clone, Copy, PartialEq, ::prost::Message)]
2896pub struct QueryParamsRequest {}
2897impl ::prost::Name for QueryParamsRequest {
2898    const NAME: &'static str = "QueryParamsRequest";
2899    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2900    fn full_name() -> ::prost::alloc::string::String {
2901        "interchain_security.ccv.provider.v1.QueryParamsRequest".into()
2902    }
2903    fn type_url() -> ::prost::alloc::string::String {
2904        "/interchain_security.ccv.provider.v1.QueryParamsRequest".into()
2905    }
2906}
2907#[derive(Clone, PartialEq, ::prost::Message)]
2908pub struct QueryParamsResponse {
2909    #[prost(message, optional, tag = "1")]
2910    pub params: ::core::option::Option<Params>,
2911}
2912impl ::prost::Name for QueryParamsResponse {
2913    const NAME: &'static str = "QueryParamsResponse";
2914    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2915    fn full_name() -> ::prost::alloc::string::String {
2916        "interchain_security.ccv.provider.v1.QueryParamsResponse".into()
2917    }
2918    fn type_url() -> ::prost::alloc::string::String {
2919        "/interchain_security.ccv.provider.v1.QueryParamsResponse".into()
2920    }
2921}
2922#[derive(Clone, PartialEq, ::prost::Message)]
2923pub struct QueryConsumerChainOptedInValidatorsRequest {
2924    #[prost(string, tag = "1")]
2925    pub consumer_id: ::prost::alloc::string::String,
2926}
2927impl ::prost::Name for QueryConsumerChainOptedInValidatorsRequest {
2928    const NAME: &'static str = "QueryConsumerChainOptedInValidatorsRequest";
2929    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2930    fn full_name() -> ::prost::alloc::string::String {
2931        "interchain_security.ccv.provider.v1.QueryConsumerChainOptedInValidatorsRequest"
2932            .into()
2933    }
2934    fn type_url() -> ::prost::alloc::string::String {
2935        "/interchain_security.ccv.provider.v1.QueryConsumerChainOptedInValidatorsRequest"
2936            .into()
2937    }
2938}
2939#[derive(Clone, PartialEq, ::prost::Message)]
2940pub struct QueryConsumerChainOptedInValidatorsResponse {
2941    /// The consensus addresses of the validators on the provider chain
2942    #[prost(string, repeated, tag = "1")]
2943    pub validators_provider_addresses: ::prost::alloc::vec::Vec<
2944        ::prost::alloc::string::String,
2945    >,
2946}
2947impl ::prost::Name for QueryConsumerChainOptedInValidatorsResponse {
2948    const NAME: &'static str = "QueryConsumerChainOptedInValidatorsResponse";
2949    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2950    fn full_name() -> ::prost::alloc::string::String {
2951        "interchain_security.ccv.provider.v1.QueryConsumerChainOptedInValidatorsResponse"
2952            .into()
2953    }
2954    fn type_url() -> ::prost::alloc::string::String {
2955        "/interchain_security.ccv.provider.v1.QueryConsumerChainOptedInValidatorsResponse"
2956            .into()
2957    }
2958}
2959#[derive(Clone, PartialEq, ::prost::Message)]
2960pub struct QueryConsumerValidatorsRequest {
2961    #[prost(string, tag = "1")]
2962    pub consumer_id: ::prost::alloc::string::String,
2963}
2964impl ::prost::Name for QueryConsumerValidatorsRequest {
2965    const NAME: &'static str = "QueryConsumerValidatorsRequest";
2966    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
2967    fn full_name() -> ::prost::alloc::string::String {
2968        "interchain_security.ccv.provider.v1.QueryConsumerValidatorsRequest".into()
2969    }
2970    fn type_url() -> ::prost::alloc::string::String {
2971        "/interchain_security.ccv.provider.v1.QueryConsumerValidatorsRequest".into()
2972    }
2973}
2974#[derive(Clone, PartialEq, ::prost::Message)]
2975pub struct QueryConsumerValidatorsValidator {
2976    /// The consensus address of the validator on the provider chain
2977    #[prost(string, tag = "1")]
2978    pub provider_address: ::prost::alloc::string::String,
2979    /// The consumer public key of the validator used on the consumer chain
2980    #[prost(message, optional, tag = "2")]
2981    pub consumer_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>,
2982    /// \[DEPRECATED\] use `consumer_power` instead
2983    #[deprecated]
2984    #[prost(int64, tag = "3")]
2985    pub power: i64,
2986    /// \[DEPRECATED\] use `consumer_commission_rate` instead
2987    #[deprecated]
2988    #[prost(string, tag = "4")]
2989    pub rate: ::prost::alloc::string::String,
2990    /// The power of the validator used on the consumer chain
2991    #[prost(int64, tag = "5")]
2992    pub consumer_power: i64,
2993    /// The rate to charge delegators on the consumer chain, as a fraction
2994    #[prost(string, tag = "6")]
2995    pub consumer_commission_rate: ::prost::alloc::string::String,
2996    /// The rate to charge delegators on the provider chain, as a fraction
2997    #[prost(string, tag = "7")]
2998    pub provider_commission_rate: ::prost::alloc::string::String,
2999    /// description defines the description terms for the validator
3000    #[prost(message, optional, tag = "8")]
3001    pub description: ::core::option::Option<
3002        super::super::super::super::cosmos::staking::v1beta1::Description,
3003    >,
3004    /// provider_operator_address defines the address of the validator's operator
3005    #[prost(string, tag = "9")]
3006    pub provider_operator_address: ::prost::alloc::string::String,
3007    /// jailed defined whether the validator has been jailed from bonded status or not.
3008    #[prost(bool, tag = "10")]
3009    pub jailed: bool,
3010    /// status is the validator status (bonded/unbonding/unbonded).
3011    #[prost(
3012        enumeration = "super::super::super::super::cosmos::staking::v1beta1::BondStatus",
3013        tag = "11"
3014    )]
3015    pub status: i32,
3016    /// provider_tokens defines the delegated tokens (incl. self-delegation).
3017    #[prost(string, tag = "12")]
3018    pub provider_tokens: ::prost::alloc::string::String,
3019    /// The power of the validator used on the provider chain
3020    #[prost(int64, tag = "13")]
3021    pub provider_power: i64,
3022    /// validates_current_epoch defines whether the validator has to validate for the current epoch or not
3023    #[prost(bool, tag = "14")]
3024    pub validates_current_epoch: bool,
3025}
3026impl ::prost::Name for QueryConsumerValidatorsValidator {
3027    const NAME: &'static str = "QueryConsumerValidatorsValidator";
3028    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3029    fn full_name() -> ::prost::alloc::string::String {
3030        "interchain_security.ccv.provider.v1.QueryConsumerValidatorsValidator".into()
3031    }
3032    fn type_url() -> ::prost::alloc::string::String {
3033        "/interchain_security.ccv.provider.v1.QueryConsumerValidatorsValidator".into()
3034    }
3035}
3036#[derive(Clone, PartialEq, ::prost::Message)]
3037pub struct QueryConsumerValidatorsResponse {
3038    #[prost(message, repeated, tag = "1")]
3039    pub validators: ::prost::alloc::vec::Vec<QueryConsumerValidatorsValidator>,
3040}
3041impl ::prost::Name for QueryConsumerValidatorsResponse {
3042    const NAME: &'static str = "QueryConsumerValidatorsResponse";
3043    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3044    fn full_name() -> ::prost::alloc::string::String {
3045        "interchain_security.ccv.provider.v1.QueryConsumerValidatorsResponse".into()
3046    }
3047    fn type_url() -> ::prost::alloc::string::String {
3048        "/interchain_security.ccv.provider.v1.QueryConsumerValidatorsResponse".into()
3049    }
3050}
3051#[derive(Clone, PartialEq, ::prost::Message)]
3052pub struct QueryConsumerChainsValidatorHasToValidateRequest {
3053    /// The consensus address of the validator on the provider chain
3054    #[prost(string, tag = "1")]
3055    pub provider_address: ::prost::alloc::string::String,
3056}
3057impl ::prost::Name for QueryConsumerChainsValidatorHasToValidateRequest {
3058    const NAME: &'static str = "QueryConsumerChainsValidatorHasToValidateRequest";
3059    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3060    fn full_name() -> ::prost::alloc::string::String {
3061        "interchain_security.ccv.provider.v1.QueryConsumerChainsValidatorHasToValidateRequest"
3062            .into()
3063    }
3064    fn type_url() -> ::prost::alloc::string::String {
3065        "/interchain_security.ccv.provider.v1.QueryConsumerChainsValidatorHasToValidateRequest"
3066            .into()
3067    }
3068}
3069#[derive(Clone, PartialEq, ::prost::Message)]
3070pub struct QueryConsumerChainsValidatorHasToValidateResponse {
3071    #[prost(string, repeated, tag = "1")]
3072    pub consumer_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3073}
3074impl ::prost::Name for QueryConsumerChainsValidatorHasToValidateResponse {
3075    const NAME: &'static str = "QueryConsumerChainsValidatorHasToValidateResponse";
3076    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3077    fn full_name() -> ::prost::alloc::string::String {
3078        "interchain_security.ccv.provider.v1.QueryConsumerChainsValidatorHasToValidateResponse"
3079            .into()
3080    }
3081    fn type_url() -> ::prost::alloc::string::String {
3082        "/interchain_security.ccv.provider.v1.QueryConsumerChainsValidatorHasToValidateResponse"
3083            .into()
3084    }
3085}
3086#[derive(Clone, PartialEq, ::prost::Message)]
3087pub struct QueryValidatorConsumerCommissionRateRequest {
3088    #[prost(string, tag = "1")]
3089    pub consumer_id: ::prost::alloc::string::String,
3090    /// The consensus address of the validator on the provider chain
3091    #[prost(string, tag = "2")]
3092    pub provider_address: ::prost::alloc::string::String,
3093}
3094impl ::prost::Name for QueryValidatorConsumerCommissionRateRequest {
3095    const NAME: &'static str = "QueryValidatorConsumerCommissionRateRequest";
3096    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3097    fn full_name() -> ::prost::alloc::string::String {
3098        "interchain_security.ccv.provider.v1.QueryValidatorConsumerCommissionRateRequest"
3099            .into()
3100    }
3101    fn type_url() -> ::prost::alloc::string::String {
3102        "/interchain_security.ccv.provider.v1.QueryValidatorConsumerCommissionRateRequest"
3103            .into()
3104    }
3105}
3106#[derive(Clone, PartialEq, ::prost::Message)]
3107pub struct QueryValidatorConsumerCommissionRateResponse {
3108    /// The rate to charge delegators on the consumer chain, as a fraction
3109    #[prost(string, tag = "1")]
3110    pub rate: ::prost::alloc::string::String,
3111}
3112impl ::prost::Name for QueryValidatorConsumerCommissionRateResponse {
3113    const NAME: &'static str = "QueryValidatorConsumerCommissionRateResponse";
3114    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3115    fn full_name() -> ::prost::alloc::string::String {
3116        "interchain_security.ccv.provider.v1.QueryValidatorConsumerCommissionRateResponse"
3117            .into()
3118    }
3119    fn type_url() -> ::prost::alloc::string::String {
3120        "/interchain_security.ccv.provider.v1.QueryValidatorConsumerCommissionRateResponse"
3121            .into()
3122    }
3123}
3124#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3125pub struct QueryBlocksUntilNextEpochRequest {}
3126impl ::prost::Name for QueryBlocksUntilNextEpochRequest {
3127    const NAME: &'static str = "QueryBlocksUntilNextEpochRequest";
3128    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3129    fn full_name() -> ::prost::alloc::string::String {
3130        "interchain_security.ccv.provider.v1.QueryBlocksUntilNextEpochRequest".into()
3131    }
3132    fn type_url() -> ::prost::alloc::string::String {
3133        "/interchain_security.ccv.provider.v1.QueryBlocksUntilNextEpochRequest".into()
3134    }
3135}
3136#[derive(Clone, Copy, PartialEq, ::prost::Message)]
3137pub struct QueryBlocksUntilNextEpochResponse {
3138    /// The number of blocks until the next epoch starts
3139    #[prost(uint64, tag = "1")]
3140    pub blocks_until_next_epoch: u64,
3141}
3142impl ::prost::Name for QueryBlocksUntilNextEpochResponse {
3143    const NAME: &'static str = "QueryBlocksUntilNextEpochResponse";
3144    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3145    fn full_name() -> ::prost::alloc::string::String {
3146        "interchain_security.ccv.provider.v1.QueryBlocksUntilNextEpochResponse".into()
3147    }
3148    fn type_url() -> ::prost::alloc::string::String {
3149        "/interchain_security.ccv.provider.v1.QueryBlocksUntilNextEpochResponse".into()
3150    }
3151}
3152#[derive(Clone, PartialEq, ::prost::Message)]
3153pub struct QueryConsumerIdFromClientIdRequest {
3154    /// the client id (on the provider) that is tracking the consumer chain
3155    /// the client id can be found from the consumer chain by querying (i.e., `query ccvconsumer provider-info`)
3156    #[prost(string, tag = "1")]
3157    pub client_id: ::prost::alloc::string::String,
3158}
3159impl ::prost::Name for QueryConsumerIdFromClientIdRequest {
3160    const NAME: &'static str = "QueryConsumerIdFromClientIdRequest";
3161    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3162    fn full_name() -> ::prost::alloc::string::String {
3163        "interchain_security.ccv.provider.v1.QueryConsumerIdFromClientIdRequest".into()
3164    }
3165    fn type_url() -> ::prost::alloc::string::String {
3166        "/interchain_security.ccv.provider.v1.QueryConsumerIdFromClientIdRequest".into()
3167    }
3168}
3169#[derive(Clone, PartialEq, ::prost::Message)]
3170pub struct QueryConsumerIdFromClientIdResponse {
3171    /// the consumer id of the chain associated with this client id
3172    #[prost(string, tag = "1")]
3173    pub consumer_id: ::prost::alloc::string::String,
3174}
3175impl ::prost::Name for QueryConsumerIdFromClientIdResponse {
3176    const NAME: &'static str = "QueryConsumerIdFromClientIdResponse";
3177    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3178    fn full_name() -> ::prost::alloc::string::String {
3179        "interchain_security.ccv.provider.v1.QueryConsumerIdFromClientIdResponse".into()
3180    }
3181    fn type_url() -> ::prost::alloc::string::String {
3182        "/interchain_security.ccv.provider.v1.QueryConsumerIdFromClientIdResponse".into()
3183    }
3184}
3185#[derive(Clone, PartialEq, ::prost::Message)]
3186pub struct QueryConsumerChainRequest {
3187    #[prost(string, tag = "1")]
3188    pub consumer_id: ::prost::alloc::string::String,
3189}
3190impl ::prost::Name for QueryConsumerChainRequest {
3191    const NAME: &'static str = "QueryConsumerChainRequest";
3192    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3193    fn full_name() -> ::prost::alloc::string::String {
3194        "interchain_security.ccv.provider.v1.QueryConsumerChainRequest".into()
3195    }
3196    fn type_url() -> ::prost::alloc::string::String {
3197        "/interchain_security.ccv.provider.v1.QueryConsumerChainRequest".into()
3198    }
3199}
3200#[derive(Clone, PartialEq, ::prost::Message)]
3201pub struct QueryConsumerChainResponse {
3202    #[prost(string, tag = "1")]
3203    pub consumer_id: ::prost::alloc::string::String,
3204    #[prost(string, tag = "2")]
3205    pub chain_id: ::prost::alloc::string::String,
3206    #[prost(string, tag = "3")]
3207    pub owner_address: ::prost::alloc::string::String,
3208    #[prost(string, tag = "4")]
3209    pub phase: ::prost::alloc::string::String,
3210    #[prost(message, optional, tag = "5")]
3211    pub metadata: ::core::option::Option<ConsumerMetadata>,
3212    #[prost(message, optional, tag = "6")]
3213    pub init_params: ::core::option::Option<ConsumerInitializationParameters>,
3214    #[prost(message, optional, tag = "7")]
3215    pub power_shaping_params: ::core::option::Option<PowerShapingParameters>,
3216}
3217impl ::prost::Name for QueryConsumerChainResponse {
3218    const NAME: &'static str = "QueryConsumerChainResponse";
3219    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
3220    fn full_name() -> ::prost::alloc::string::String {
3221        "interchain_security.ccv.provider.v1.QueryConsumerChainResponse".into()
3222    }
3223    fn type_url() -> ::prost::alloc::string::String {
3224        "/interchain_security.ccv.provider.v1.QueryConsumerChainResponse".into()
3225    }
3226}
3227/// Generated client implementations.
3228#[cfg(feature = "client")]
3229pub mod query_client {
3230    #![allow(
3231        unused_variables,
3232        dead_code,
3233        missing_docs,
3234        clippy::wildcard_imports,
3235        clippy::let_unit_value,
3236    )]
3237    use tonic::codegen::*;
3238    use tonic::codegen::http::Uri;
3239    #[derive(Debug, Clone)]
3240    pub struct QueryClient<T> {
3241        inner: tonic::client::Grpc<T>,
3242    }
3243    #[cfg(feature = "transport")]
3244    impl QueryClient<tonic::transport::Channel> {
3245        /// Attempt to create a new client by connecting to a given endpoint.
3246        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
3247        where
3248            D: TryInto<tonic::transport::Endpoint>,
3249            D::Error: Into<StdError>,
3250        {
3251            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
3252            Ok(Self::new(conn))
3253        }
3254    }
3255    impl<T> QueryClient<T>
3256    where
3257        T: tonic::client::GrpcService<tonic::body::Body>,
3258        T::Error: Into<StdError>,
3259        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
3260        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
3261    {
3262        pub fn new(inner: T) -> Self {
3263            let inner = tonic::client::Grpc::new(inner);
3264            Self { inner }
3265        }
3266        pub fn with_origin(inner: T, origin: Uri) -> Self {
3267            let inner = tonic::client::Grpc::with_origin(inner, origin);
3268            Self { inner }
3269        }
3270        pub fn with_interceptor<F>(
3271            inner: T,
3272            interceptor: F,
3273        ) -> QueryClient<InterceptedService<T, F>>
3274        where
3275            F: tonic::service::Interceptor,
3276            T::ResponseBody: Default,
3277            T: tonic::codegen::Service<
3278                http::Request<tonic::body::Body>,
3279                Response = http::Response<
3280                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
3281                >,
3282            >,
3283            <T as tonic::codegen::Service<
3284                http::Request<tonic::body::Body>,
3285            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
3286        {
3287            QueryClient::new(InterceptedService::new(inner, interceptor))
3288        }
3289        /// Compress requests with the given encoding.
3290        ///
3291        /// This requires the server to support it otherwise it might respond with an
3292        /// error.
3293        #[must_use]
3294        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
3295            self.inner = self.inner.send_compressed(encoding);
3296            self
3297        }
3298        /// Enable decompressing responses.
3299        #[must_use]
3300        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
3301            self.inner = self.inner.accept_compressed(encoding);
3302            self
3303        }
3304        /// Limits the maximum size of a decoded message.
3305        ///
3306        /// Default: `4MB`
3307        #[must_use]
3308        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
3309            self.inner = self.inner.max_decoding_message_size(limit);
3310            self
3311        }
3312        /// Limits the maximum size of an encoded message.
3313        ///
3314        /// Default: `usize::MAX`
3315        #[must_use]
3316        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
3317            self.inner = self.inner.max_encoding_message_size(limit);
3318            self
3319        }
3320        /// ConsumerGenesis queries the genesis state needed to start a consumer chain
3321        /// whose proposal has been accepted
3322        pub async fn query_consumer_genesis(
3323            &mut self,
3324            request: impl tonic::IntoRequest<super::QueryConsumerGenesisRequest>,
3325        ) -> std::result::Result<
3326            tonic::Response<super::QueryConsumerGenesisResponse>,
3327            tonic::Status,
3328        > {
3329            self.inner
3330                .ready()
3331                .await
3332                .map_err(|e| {
3333                    tonic::Status::unknown(
3334                        format!("Service was not ready: {}", e.into()),
3335                    )
3336                })?;
3337            let codec = tonic::codec::ProstCodec::default();
3338            let path = http::uri::PathAndQuery::from_static(
3339                "/interchain_security.ccv.provider.v1.Query/QueryConsumerGenesis",
3340            );
3341            let mut req = request.into_request();
3342            req.extensions_mut()
3343                .insert(
3344                    GrpcMethod::new(
3345                        "interchain_security.ccv.provider.v1.Query",
3346                        "QueryConsumerGenesis",
3347                    ),
3348                );
3349            self.inner.unary(req, path, codec).await
3350        }
3351        /// ConsumerChains queries active consumer chains supported by the provider
3352        /// chain
3353        pub async fn query_consumer_chains(
3354            &mut self,
3355            request: impl tonic::IntoRequest<super::QueryConsumerChainsRequest>,
3356        ) -> std::result::Result<
3357            tonic::Response<super::QueryConsumerChainsResponse>,
3358            tonic::Status,
3359        > {
3360            self.inner
3361                .ready()
3362                .await
3363                .map_err(|e| {
3364                    tonic::Status::unknown(
3365                        format!("Service was not ready: {}", e.into()),
3366                    )
3367                })?;
3368            let codec = tonic::codec::ProstCodec::default();
3369            let path = http::uri::PathAndQuery::from_static(
3370                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChains",
3371            );
3372            let mut req = request.into_request();
3373            req.extensions_mut()
3374                .insert(
3375                    GrpcMethod::new(
3376                        "interchain_security.ccv.provider.v1.Query",
3377                        "QueryConsumerChains",
3378                    ),
3379                );
3380            self.inner.unary(req, path, codec).await
3381        }
3382        /// QueryValidatorConsumerAddr queries the address
3383        /// assigned by a validator for a consumer chain.
3384        pub async fn query_validator_consumer_addr(
3385            &mut self,
3386            request: impl tonic::IntoRequest<super::QueryValidatorConsumerAddrRequest>,
3387        ) -> std::result::Result<
3388            tonic::Response<super::QueryValidatorConsumerAddrResponse>,
3389            tonic::Status,
3390        > {
3391            self.inner
3392                .ready()
3393                .await
3394                .map_err(|e| {
3395                    tonic::Status::unknown(
3396                        format!("Service was not ready: {}", e.into()),
3397                    )
3398                })?;
3399            let codec = tonic::codec::ProstCodec::default();
3400            let path = http::uri::PathAndQuery::from_static(
3401                "/interchain_security.ccv.provider.v1.Query/QueryValidatorConsumerAddr",
3402            );
3403            let mut req = request.into_request();
3404            req.extensions_mut()
3405                .insert(
3406                    GrpcMethod::new(
3407                        "interchain_security.ccv.provider.v1.Query",
3408                        "QueryValidatorConsumerAddr",
3409                    ),
3410                );
3411            self.inner.unary(req, path, codec).await
3412        }
3413        /// QueryProviderAddr returns the provider chain validator
3414        /// given a consumer chain validator address
3415        pub async fn query_validator_provider_addr(
3416            &mut self,
3417            request: impl tonic::IntoRequest<super::QueryValidatorProviderAddrRequest>,
3418        ) -> std::result::Result<
3419            tonic::Response<super::QueryValidatorProviderAddrResponse>,
3420            tonic::Status,
3421        > {
3422            self.inner
3423                .ready()
3424                .await
3425                .map_err(|e| {
3426                    tonic::Status::unknown(
3427                        format!("Service was not ready: {}", e.into()),
3428                    )
3429                })?;
3430            let codec = tonic::codec::ProstCodec::default();
3431            let path = http::uri::PathAndQuery::from_static(
3432                "/interchain_security.ccv.provider.v1.Query/QueryValidatorProviderAddr",
3433            );
3434            let mut req = request.into_request();
3435            req.extensions_mut()
3436                .insert(
3437                    GrpcMethod::new(
3438                        "interchain_security.ccv.provider.v1.Query",
3439                        "QueryValidatorProviderAddr",
3440                    ),
3441                );
3442            self.inner.unary(req, path, codec).await
3443        }
3444        /// QueryThrottleState returns the main on-chain state relevant to currently
3445        /// throttled slash packets
3446        pub async fn query_throttle_state(
3447            &mut self,
3448            request: impl tonic::IntoRequest<super::QueryThrottleStateRequest>,
3449        ) -> std::result::Result<
3450            tonic::Response<super::QueryThrottleStateResponse>,
3451            tonic::Status,
3452        > {
3453            self.inner
3454                .ready()
3455                .await
3456                .map_err(|e| {
3457                    tonic::Status::unknown(
3458                        format!("Service was not ready: {}", e.into()),
3459                    )
3460                })?;
3461            let codec = tonic::codec::ProstCodec::default();
3462            let path = http::uri::PathAndQuery::from_static(
3463                "/interchain_security.ccv.provider.v1.Query/QueryThrottleState",
3464            );
3465            let mut req = request.into_request();
3466            req.extensions_mut()
3467                .insert(
3468                    GrpcMethod::new(
3469                        "interchain_security.ccv.provider.v1.Query",
3470                        "QueryThrottleState",
3471                    ),
3472                );
3473            self.inner.unary(req, path, codec).await
3474        }
3475        /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward
3476        /// denoms that are registered
3477        pub async fn query_registered_consumer_reward_denoms(
3478            &mut self,
3479            request: impl tonic::IntoRequest<
3480                super::QueryRegisteredConsumerRewardDenomsRequest,
3481            >,
3482        ) -> std::result::Result<
3483            tonic::Response<super::QueryRegisteredConsumerRewardDenomsResponse>,
3484            tonic::Status,
3485        > {
3486            self.inner
3487                .ready()
3488                .await
3489                .map_err(|e| {
3490                    tonic::Status::unknown(
3491                        format!("Service was not ready: {}", e.into()),
3492                    )
3493                })?;
3494            let codec = tonic::codec::ProstCodec::default();
3495            let path = http::uri::PathAndQuery::from_static(
3496                "/interchain_security.ccv.provider.v1.Query/QueryRegisteredConsumerRewardDenoms",
3497            );
3498            let mut req = request.into_request();
3499            req.extensions_mut()
3500                .insert(
3501                    GrpcMethod::new(
3502                        "interchain_security.ccv.provider.v1.Query",
3503                        "QueryRegisteredConsumerRewardDenoms",
3504                    ),
3505                );
3506            self.inner.unary(req, path, codec).await
3507        }
3508        /// QueryAllPairsValConsAddrByConsumer returns a list of pair valconsensus address
3509        /// between provider and consumer chain
3510        pub async fn query_all_pairs_val_cons_addr_by_consumer(
3511            &mut self,
3512            request: impl tonic::IntoRequest<
3513                super::QueryAllPairsValConsAddrByConsumerRequest,
3514            >,
3515        ) -> std::result::Result<
3516            tonic::Response<super::QueryAllPairsValConsAddrByConsumerResponse>,
3517            tonic::Status,
3518        > {
3519            self.inner
3520                .ready()
3521                .await
3522                .map_err(|e| {
3523                    tonic::Status::unknown(
3524                        format!("Service was not ready: {}", e.into()),
3525                    )
3526                })?;
3527            let codec = tonic::codec::ProstCodec::default();
3528            let path = http::uri::PathAndQuery::from_static(
3529                "/interchain_security.ccv.provider.v1.Query/QueryAllPairsValConsAddrByConsumer",
3530            );
3531            let mut req = request.into_request();
3532            req.extensions_mut()
3533                .insert(
3534                    GrpcMethod::new(
3535                        "interchain_security.ccv.provider.v1.Query",
3536                        "QueryAllPairsValConsAddrByConsumer",
3537                    ),
3538                );
3539            self.inner.unary(req, path, codec).await
3540        }
3541        /// QueryParams returns all current values of provider parameters
3542        pub async fn query_params(
3543            &mut self,
3544            request: impl tonic::IntoRequest<super::QueryParamsRequest>,
3545        ) -> std::result::Result<
3546            tonic::Response<super::QueryParamsResponse>,
3547            tonic::Status,
3548        > {
3549            self.inner
3550                .ready()
3551                .await
3552                .map_err(|e| {
3553                    tonic::Status::unknown(
3554                        format!("Service was not ready: {}", e.into()),
3555                    )
3556                })?;
3557            let codec = tonic::codec::ProstCodec::default();
3558            let path = http::uri::PathAndQuery::from_static(
3559                "/interchain_security.ccv.provider.v1.Query/QueryParams",
3560            );
3561            let mut req = request.into_request();
3562            req.extensions_mut()
3563                .insert(
3564                    GrpcMethod::new(
3565                        "interchain_security.ccv.provider.v1.Query",
3566                        "QueryParams",
3567                    ),
3568                );
3569            self.inner.unary(req, path, codec).await
3570        }
3571        /// QueryConsumerChainOptedInValidators returns a list of validators consensus addresses
3572        /// that opted-in to the given consumer chain
3573        pub async fn query_consumer_chain_opted_in_validators(
3574            &mut self,
3575            request: impl tonic::IntoRequest<
3576                super::QueryConsumerChainOptedInValidatorsRequest,
3577            >,
3578        ) -> std::result::Result<
3579            tonic::Response<super::QueryConsumerChainOptedInValidatorsResponse>,
3580            tonic::Status,
3581        > {
3582            self.inner
3583                .ready()
3584                .await
3585                .map_err(|e| {
3586                    tonic::Status::unknown(
3587                        format!("Service was not ready: {}", e.into()),
3588                    )
3589                })?;
3590            let codec = tonic::codec::ProstCodec::default();
3591            let path = http::uri::PathAndQuery::from_static(
3592                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainOptedInValidators",
3593            );
3594            let mut req = request.into_request();
3595            req.extensions_mut()
3596                .insert(
3597                    GrpcMethod::new(
3598                        "interchain_security.ccv.provider.v1.Query",
3599                        "QueryConsumerChainOptedInValidators",
3600                    ),
3601                );
3602            self.inner.unary(req, path, codec).await
3603        }
3604        /// QueryConsumerChainsValidatorHasToValidate returns a list of consumer chains
3605        /// that a given validator must validate
3606        pub async fn query_consumer_chains_validator_has_to_validate(
3607            &mut self,
3608            request: impl tonic::IntoRequest<
3609                super::QueryConsumerChainsValidatorHasToValidateRequest,
3610            >,
3611        ) -> std::result::Result<
3612            tonic::Response<super::QueryConsumerChainsValidatorHasToValidateResponse>,
3613            tonic::Status,
3614        > {
3615            self.inner
3616                .ready()
3617                .await
3618                .map_err(|e| {
3619                    tonic::Status::unknown(
3620                        format!("Service was not ready: {}", e.into()),
3621                    )
3622                })?;
3623            let codec = tonic::codec::ProstCodec::default();
3624            let path = http::uri::PathAndQuery::from_static(
3625                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainsValidatorHasToValidate",
3626            );
3627            let mut req = request.into_request();
3628            req.extensions_mut()
3629                .insert(
3630                    GrpcMethod::new(
3631                        "interchain_security.ccv.provider.v1.Query",
3632                        "QueryConsumerChainsValidatorHasToValidate",
3633                    ),
3634                );
3635            self.inner.unary(req, path, codec).await
3636        }
3637        /// QueryValidatorConsumerCommissionRate returns the commission rate a given
3638        /// validator charges on a given consumer chain
3639        pub async fn query_validator_consumer_commission_rate(
3640            &mut self,
3641            request: impl tonic::IntoRequest<
3642                super::QueryValidatorConsumerCommissionRateRequest,
3643            >,
3644        ) -> std::result::Result<
3645            tonic::Response<super::QueryValidatorConsumerCommissionRateResponse>,
3646            tonic::Status,
3647        > {
3648            self.inner
3649                .ready()
3650                .await
3651                .map_err(|e| {
3652                    tonic::Status::unknown(
3653                        format!("Service was not ready: {}", e.into()),
3654                    )
3655                })?;
3656            let codec = tonic::codec::ProstCodec::default();
3657            let path = http::uri::PathAndQuery::from_static(
3658                "/interchain_security.ccv.provider.v1.Query/QueryValidatorConsumerCommissionRate",
3659            );
3660            let mut req = request.into_request();
3661            req.extensions_mut()
3662                .insert(
3663                    GrpcMethod::new(
3664                        "interchain_security.ccv.provider.v1.Query",
3665                        "QueryValidatorConsumerCommissionRate",
3666                    ),
3667                );
3668            self.inner.unary(req, path, codec).await
3669        }
3670        /// QueryConsumerValidators returns the latest set consumer-validator set for a given consumer ID
3671        /// Note that this does not necessarily mean that the consumer chain is using this validator set at this exact moment
3672        /// because a VSCPacket could be delayed to be delivered on the consumer chain.
3673        pub async fn query_consumer_validators(
3674            &mut self,
3675            request: impl tonic::IntoRequest<super::QueryConsumerValidatorsRequest>,
3676        ) -> std::result::Result<
3677            tonic::Response<super::QueryConsumerValidatorsResponse>,
3678            tonic::Status,
3679        > {
3680            self.inner
3681                .ready()
3682                .await
3683                .map_err(|e| {
3684                    tonic::Status::unknown(
3685                        format!("Service was not ready: {}", e.into()),
3686                    )
3687                })?;
3688            let codec = tonic::codec::ProstCodec::default();
3689            let path = http::uri::PathAndQuery::from_static(
3690                "/interchain_security.ccv.provider.v1.Query/QueryConsumerValidators",
3691            );
3692            let mut req = request.into_request();
3693            req.extensions_mut()
3694                .insert(
3695                    GrpcMethod::new(
3696                        "interchain_security.ccv.provider.v1.Query",
3697                        "QueryConsumerValidators",
3698                    ),
3699                );
3700            self.inner.unary(req, path, codec).await
3701        }
3702        /// QueryBlocksUntilNextEpoch returns the number of blocks until the next epoch
3703        /// starts and validator updates are sent to the consumer chains
3704        pub async fn query_blocks_until_next_epoch(
3705            &mut self,
3706            request: impl tonic::IntoRequest<super::QueryBlocksUntilNextEpochRequest>,
3707        ) -> std::result::Result<
3708            tonic::Response<super::QueryBlocksUntilNextEpochResponse>,
3709            tonic::Status,
3710        > {
3711            self.inner
3712                .ready()
3713                .await
3714                .map_err(|e| {
3715                    tonic::Status::unknown(
3716                        format!("Service was not ready: {}", e.into()),
3717                    )
3718                })?;
3719            let codec = tonic::codec::ProstCodec::default();
3720            let path = http::uri::PathAndQuery::from_static(
3721                "/interchain_security.ccv.provider.v1.Query/QueryBlocksUntilNextEpoch",
3722            );
3723            let mut req = request.into_request();
3724            req.extensions_mut()
3725                .insert(
3726                    GrpcMethod::new(
3727                        "interchain_security.ccv.provider.v1.Query",
3728                        "QueryBlocksUntilNextEpoch",
3729                    ),
3730                );
3731            self.inner.unary(req, path, codec).await
3732        }
3733        /// QueryConsumerIdFromClientId returns the consumer id of the chain
3734        /// associated with the provided client id
3735        pub async fn query_consumer_id_from_client_id(
3736            &mut self,
3737            request: impl tonic::IntoRequest<super::QueryConsumerIdFromClientIdRequest>,
3738        ) -> std::result::Result<
3739            tonic::Response<super::QueryConsumerIdFromClientIdResponse>,
3740            tonic::Status,
3741        > {
3742            self.inner
3743                .ready()
3744                .await
3745                .map_err(|e| {
3746                    tonic::Status::unknown(
3747                        format!("Service was not ready: {}", e.into()),
3748                    )
3749                })?;
3750            let codec = tonic::codec::ProstCodec::default();
3751            let path = http::uri::PathAndQuery::from_static(
3752                "/interchain_security.ccv.provider.v1.Query/QueryConsumerIdFromClientId",
3753            );
3754            let mut req = request.into_request();
3755            req.extensions_mut()
3756                .insert(
3757                    GrpcMethod::new(
3758                        "interchain_security.ccv.provider.v1.Query",
3759                        "QueryConsumerIdFromClientId",
3760                    ),
3761                );
3762            self.inner.unary(req, path, codec).await
3763        }
3764        /// QueryConsumerChain returns the consumer chain
3765        /// associated with the provided consumer id
3766        pub async fn query_consumer_chain(
3767            &mut self,
3768            request: impl tonic::IntoRequest<super::QueryConsumerChainRequest>,
3769        ) -> std::result::Result<
3770            tonic::Response<super::QueryConsumerChainResponse>,
3771            tonic::Status,
3772        > {
3773            self.inner
3774                .ready()
3775                .await
3776                .map_err(|e| {
3777                    tonic::Status::unknown(
3778                        format!("Service was not ready: {}", e.into()),
3779                    )
3780                })?;
3781            let codec = tonic::codec::ProstCodec::default();
3782            let path = http::uri::PathAndQuery::from_static(
3783                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChain",
3784            );
3785            let mut req = request.into_request();
3786            req.extensions_mut()
3787                .insert(
3788                    GrpcMethod::new(
3789                        "interchain_security.ccv.provider.v1.Query",
3790                        "QueryConsumerChain",
3791                    ),
3792                );
3793            self.inner.unary(req, path, codec).await
3794        }
3795    }
3796}
3797/// Generated server implementations.
3798#[cfg(feature = "server")]
3799pub mod query_server {
3800    #![allow(
3801        unused_variables,
3802        dead_code,
3803        missing_docs,
3804        clippy::wildcard_imports,
3805        clippy::let_unit_value,
3806    )]
3807    use tonic::codegen::*;
3808    /// Generated trait containing gRPC methods that should be implemented for use with QueryServer.
3809    #[async_trait]
3810    pub trait Query: std::marker::Send + std::marker::Sync + 'static {
3811        /// ConsumerGenesis queries the genesis state needed to start a consumer chain
3812        /// whose proposal has been accepted
3813        async fn query_consumer_genesis(
3814            &self,
3815            request: tonic::Request<super::QueryConsumerGenesisRequest>,
3816        ) -> std::result::Result<
3817            tonic::Response<super::QueryConsumerGenesisResponse>,
3818            tonic::Status,
3819        >;
3820        /// ConsumerChains queries active consumer chains supported by the provider
3821        /// chain
3822        async fn query_consumer_chains(
3823            &self,
3824            request: tonic::Request<super::QueryConsumerChainsRequest>,
3825        ) -> std::result::Result<
3826            tonic::Response<super::QueryConsumerChainsResponse>,
3827            tonic::Status,
3828        >;
3829        /// QueryValidatorConsumerAddr queries the address
3830        /// assigned by a validator for a consumer chain.
3831        async fn query_validator_consumer_addr(
3832            &self,
3833            request: tonic::Request<super::QueryValidatorConsumerAddrRequest>,
3834        ) -> std::result::Result<
3835            tonic::Response<super::QueryValidatorConsumerAddrResponse>,
3836            tonic::Status,
3837        >;
3838        /// QueryProviderAddr returns the provider chain validator
3839        /// given a consumer chain validator address
3840        async fn query_validator_provider_addr(
3841            &self,
3842            request: tonic::Request<super::QueryValidatorProviderAddrRequest>,
3843        ) -> std::result::Result<
3844            tonic::Response<super::QueryValidatorProviderAddrResponse>,
3845            tonic::Status,
3846        >;
3847        /// QueryThrottleState returns the main on-chain state relevant to currently
3848        /// throttled slash packets
3849        async fn query_throttle_state(
3850            &self,
3851            request: tonic::Request<super::QueryThrottleStateRequest>,
3852        ) -> std::result::Result<
3853            tonic::Response<super::QueryThrottleStateResponse>,
3854            tonic::Status,
3855        >;
3856        /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward
3857        /// denoms that are registered
3858        async fn query_registered_consumer_reward_denoms(
3859            &self,
3860            request: tonic::Request<super::QueryRegisteredConsumerRewardDenomsRequest>,
3861        ) -> std::result::Result<
3862            tonic::Response<super::QueryRegisteredConsumerRewardDenomsResponse>,
3863            tonic::Status,
3864        >;
3865        /// QueryAllPairsValConsAddrByConsumer returns a list of pair valconsensus address
3866        /// between provider and consumer chain
3867        async fn query_all_pairs_val_cons_addr_by_consumer(
3868            &self,
3869            request: tonic::Request<super::QueryAllPairsValConsAddrByConsumerRequest>,
3870        ) -> std::result::Result<
3871            tonic::Response<super::QueryAllPairsValConsAddrByConsumerResponse>,
3872            tonic::Status,
3873        >;
3874        /// QueryParams returns all current values of provider parameters
3875        async fn query_params(
3876            &self,
3877            request: tonic::Request<super::QueryParamsRequest>,
3878        ) -> std::result::Result<
3879            tonic::Response<super::QueryParamsResponse>,
3880            tonic::Status,
3881        >;
3882        /// QueryConsumerChainOptedInValidators returns a list of validators consensus addresses
3883        /// that opted-in to the given consumer chain
3884        async fn query_consumer_chain_opted_in_validators(
3885            &self,
3886            request: tonic::Request<super::QueryConsumerChainOptedInValidatorsRequest>,
3887        ) -> std::result::Result<
3888            tonic::Response<super::QueryConsumerChainOptedInValidatorsResponse>,
3889            tonic::Status,
3890        >;
3891        /// QueryConsumerChainsValidatorHasToValidate returns a list of consumer chains
3892        /// that a given validator must validate
3893        async fn query_consumer_chains_validator_has_to_validate(
3894            &self,
3895            request: tonic::Request<
3896                super::QueryConsumerChainsValidatorHasToValidateRequest,
3897            >,
3898        ) -> std::result::Result<
3899            tonic::Response<super::QueryConsumerChainsValidatorHasToValidateResponse>,
3900            tonic::Status,
3901        >;
3902        /// QueryValidatorConsumerCommissionRate returns the commission rate a given
3903        /// validator charges on a given consumer chain
3904        async fn query_validator_consumer_commission_rate(
3905            &self,
3906            request: tonic::Request<super::QueryValidatorConsumerCommissionRateRequest>,
3907        ) -> std::result::Result<
3908            tonic::Response<super::QueryValidatorConsumerCommissionRateResponse>,
3909            tonic::Status,
3910        >;
3911        /// QueryConsumerValidators returns the latest set consumer-validator set for a given consumer ID
3912        /// Note that this does not necessarily mean that the consumer chain is using this validator set at this exact moment
3913        /// because a VSCPacket could be delayed to be delivered on the consumer chain.
3914        async fn query_consumer_validators(
3915            &self,
3916            request: tonic::Request<super::QueryConsumerValidatorsRequest>,
3917        ) -> std::result::Result<
3918            tonic::Response<super::QueryConsumerValidatorsResponse>,
3919            tonic::Status,
3920        >;
3921        /// QueryBlocksUntilNextEpoch returns the number of blocks until the next epoch
3922        /// starts and validator updates are sent to the consumer chains
3923        async fn query_blocks_until_next_epoch(
3924            &self,
3925            request: tonic::Request<super::QueryBlocksUntilNextEpochRequest>,
3926        ) -> std::result::Result<
3927            tonic::Response<super::QueryBlocksUntilNextEpochResponse>,
3928            tonic::Status,
3929        >;
3930        /// QueryConsumerIdFromClientId returns the consumer id of the chain
3931        /// associated with the provided client id
3932        async fn query_consumer_id_from_client_id(
3933            &self,
3934            request: tonic::Request<super::QueryConsumerIdFromClientIdRequest>,
3935        ) -> std::result::Result<
3936            tonic::Response<super::QueryConsumerIdFromClientIdResponse>,
3937            tonic::Status,
3938        >;
3939        /// QueryConsumerChain returns the consumer chain
3940        /// associated with the provided consumer id
3941        async fn query_consumer_chain(
3942            &self,
3943            request: tonic::Request<super::QueryConsumerChainRequest>,
3944        ) -> std::result::Result<
3945            tonic::Response<super::QueryConsumerChainResponse>,
3946            tonic::Status,
3947        >;
3948    }
3949    #[derive(Debug)]
3950    pub struct QueryServer<T> {
3951        inner: Arc<T>,
3952        accept_compression_encodings: EnabledCompressionEncodings,
3953        send_compression_encodings: EnabledCompressionEncodings,
3954        max_decoding_message_size: Option<usize>,
3955        max_encoding_message_size: Option<usize>,
3956    }
3957    impl<T> QueryServer<T> {
3958        pub fn new(inner: T) -> Self {
3959            Self::from_arc(Arc::new(inner))
3960        }
3961        pub fn from_arc(inner: Arc<T>) -> Self {
3962            Self {
3963                inner,
3964                accept_compression_encodings: Default::default(),
3965                send_compression_encodings: Default::default(),
3966                max_decoding_message_size: None,
3967                max_encoding_message_size: None,
3968            }
3969        }
3970        pub fn with_interceptor<F>(
3971            inner: T,
3972            interceptor: F,
3973        ) -> InterceptedService<Self, F>
3974        where
3975            F: tonic::service::Interceptor,
3976        {
3977            InterceptedService::new(Self::new(inner), interceptor)
3978        }
3979        /// Enable decompressing requests with the given encoding.
3980        #[must_use]
3981        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
3982            self.accept_compression_encodings.enable(encoding);
3983            self
3984        }
3985        /// Compress responses with the given encoding, if the client supports it.
3986        #[must_use]
3987        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
3988            self.send_compression_encodings.enable(encoding);
3989            self
3990        }
3991        /// Limits the maximum size of a decoded message.
3992        ///
3993        /// Default: `4MB`
3994        #[must_use]
3995        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
3996            self.max_decoding_message_size = Some(limit);
3997            self
3998        }
3999        /// Limits the maximum size of an encoded message.
4000        ///
4001        /// Default: `usize::MAX`
4002        #[must_use]
4003        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
4004            self.max_encoding_message_size = Some(limit);
4005            self
4006        }
4007    }
4008    impl<T, B> tonic::codegen::Service<http::Request<B>> for QueryServer<T>
4009    where
4010        T: Query,
4011        B: Body + std::marker::Send + 'static,
4012        B::Error: Into<StdError> + std::marker::Send + 'static,
4013    {
4014        type Response = http::Response<tonic::body::Body>;
4015        type Error = std::convert::Infallible;
4016        type Future = BoxFuture<Self::Response, Self::Error>;
4017        fn poll_ready(
4018            &mut self,
4019            _cx: &mut Context<'_>,
4020        ) -> Poll<std::result::Result<(), Self::Error>> {
4021            Poll::Ready(Ok(()))
4022        }
4023        fn call(&mut self, req: http::Request<B>) -> Self::Future {
4024            match req.uri().path() {
4025                "/interchain_security.ccv.provider.v1.Query/QueryConsumerGenesis" => {
4026                    #[allow(non_camel_case_types)]
4027                    struct QueryConsumerGenesisSvc<T: Query>(pub Arc<T>);
4028                    impl<
4029                        T: Query,
4030                    > tonic::server::UnaryService<super::QueryConsumerGenesisRequest>
4031                    for QueryConsumerGenesisSvc<T> {
4032                        type Response = super::QueryConsumerGenesisResponse;
4033                        type Future = BoxFuture<
4034                            tonic::Response<Self::Response>,
4035                            tonic::Status,
4036                        >;
4037                        fn call(
4038                            &mut self,
4039                            request: tonic::Request<super::QueryConsumerGenesisRequest>,
4040                        ) -> Self::Future {
4041                            let inner = Arc::clone(&self.0);
4042                            let fut = async move {
4043                                <T as Query>::query_consumer_genesis(&inner, request).await
4044                            };
4045                            Box::pin(fut)
4046                        }
4047                    }
4048                    let accept_compression_encodings = self.accept_compression_encodings;
4049                    let send_compression_encodings = self.send_compression_encodings;
4050                    let max_decoding_message_size = self.max_decoding_message_size;
4051                    let max_encoding_message_size = self.max_encoding_message_size;
4052                    let inner = self.inner.clone();
4053                    let fut = async move {
4054                        let method = QueryConsumerGenesisSvc(inner);
4055                        let codec = tonic::codec::ProstCodec::default();
4056                        let mut grpc = tonic::server::Grpc::new(codec)
4057                            .apply_compression_config(
4058                                accept_compression_encodings,
4059                                send_compression_encodings,
4060                            )
4061                            .apply_max_message_size_config(
4062                                max_decoding_message_size,
4063                                max_encoding_message_size,
4064                            );
4065                        let res = grpc.unary(method, req).await;
4066                        Ok(res)
4067                    };
4068                    Box::pin(fut)
4069                }
4070                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChains" => {
4071                    #[allow(non_camel_case_types)]
4072                    struct QueryConsumerChainsSvc<T: Query>(pub Arc<T>);
4073                    impl<
4074                        T: Query,
4075                    > tonic::server::UnaryService<super::QueryConsumerChainsRequest>
4076                    for QueryConsumerChainsSvc<T> {
4077                        type Response = super::QueryConsumerChainsResponse;
4078                        type Future = BoxFuture<
4079                            tonic::Response<Self::Response>,
4080                            tonic::Status,
4081                        >;
4082                        fn call(
4083                            &mut self,
4084                            request: tonic::Request<super::QueryConsumerChainsRequest>,
4085                        ) -> Self::Future {
4086                            let inner = Arc::clone(&self.0);
4087                            let fut = async move {
4088                                <T as Query>::query_consumer_chains(&inner, request).await
4089                            };
4090                            Box::pin(fut)
4091                        }
4092                    }
4093                    let accept_compression_encodings = self.accept_compression_encodings;
4094                    let send_compression_encodings = self.send_compression_encodings;
4095                    let max_decoding_message_size = self.max_decoding_message_size;
4096                    let max_encoding_message_size = self.max_encoding_message_size;
4097                    let inner = self.inner.clone();
4098                    let fut = async move {
4099                        let method = QueryConsumerChainsSvc(inner);
4100                        let codec = tonic::codec::ProstCodec::default();
4101                        let mut grpc = tonic::server::Grpc::new(codec)
4102                            .apply_compression_config(
4103                                accept_compression_encodings,
4104                                send_compression_encodings,
4105                            )
4106                            .apply_max_message_size_config(
4107                                max_decoding_message_size,
4108                                max_encoding_message_size,
4109                            );
4110                        let res = grpc.unary(method, req).await;
4111                        Ok(res)
4112                    };
4113                    Box::pin(fut)
4114                }
4115                "/interchain_security.ccv.provider.v1.Query/QueryValidatorConsumerAddr" => {
4116                    #[allow(non_camel_case_types)]
4117                    struct QueryValidatorConsumerAddrSvc<T: Query>(pub Arc<T>);
4118                    impl<
4119                        T: Query,
4120                    > tonic::server::UnaryService<
4121                        super::QueryValidatorConsumerAddrRequest,
4122                    > for QueryValidatorConsumerAddrSvc<T> {
4123                        type Response = super::QueryValidatorConsumerAddrResponse;
4124                        type Future = BoxFuture<
4125                            tonic::Response<Self::Response>,
4126                            tonic::Status,
4127                        >;
4128                        fn call(
4129                            &mut self,
4130                            request: tonic::Request<
4131                                super::QueryValidatorConsumerAddrRequest,
4132                            >,
4133                        ) -> Self::Future {
4134                            let inner = Arc::clone(&self.0);
4135                            let fut = async move {
4136                                <T as Query>::query_validator_consumer_addr(&inner, request)
4137                                    .await
4138                            };
4139                            Box::pin(fut)
4140                        }
4141                    }
4142                    let accept_compression_encodings = self.accept_compression_encodings;
4143                    let send_compression_encodings = self.send_compression_encodings;
4144                    let max_decoding_message_size = self.max_decoding_message_size;
4145                    let max_encoding_message_size = self.max_encoding_message_size;
4146                    let inner = self.inner.clone();
4147                    let fut = async move {
4148                        let method = QueryValidatorConsumerAddrSvc(inner);
4149                        let codec = tonic::codec::ProstCodec::default();
4150                        let mut grpc = tonic::server::Grpc::new(codec)
4151                            .apply_compression_config(
4152                                accept_compression_encodings,
4153                                send_compression_encodings,
4154                            )
4155                            .apply_max_message_size_config(
4156                                max_decoding_message_size,
4157                                max_encoding_message_size,
4158                            );
4159                        let res = grpc.unary(method, req).await;
4160                        Ok(res)
4161                    };
4162                    Box::pin(fut)
4163                }
4164                "/interchain_security.ccv.provider.v1.Query/QueryValidatorProviderAddr" => {
4165                    #[allow(non_camel_case_types)]
4166                    struct QueryValidatorProviderAddrSvc<T: Query>(pub Arc<T>);
4167                    impl<
4168                        T: Query,
4169                    > tonic::server::UnaryService<
4170                        super::QueryValidatorProviderAddrRequest,
4171                    > for QueryValidatorProviderAddrSvc<T> {
4172                        type Response = super::QueryValidatorProviderAddrResponse;
4173                        type Future = BoxFuture<
4174                            tonic::Response<Self::Response>,
4175                            tonic::Status,
4176                        >;
4177                        fn call(
4178                            &mut self,
4179                            request: tonic::Request<
4180                                super::QueryValidatorProviderAddrRequest,
4181                            >,
4182                        ) -> Self::Future {
4183                            let inner = Arc::clone(&self.0);
4184                            let fut = async move {
4185                                <T as Query>::query_validator_provider_addr(&inner, request)
4186                                    .await
4187                            };
4188                            Box::pin(fut)
4189                        }
4190                    }
4191                    let accept_compression_encodings = self.accept_compression_encodings;
4192                    let send_compression_encodings = self.send_compression_encodings;
4193                    let max_decoding_message_size = self.max_decoding_message_size;
4194                    let max_encoding_message_size = self.max_encoding_message_size;
4195                    let inner = self.inner.clone();
4196                    let fut = async move {
4197                        let method = QueryValidatorProviderAddrSvc(inner);
4198                        let codec = tonic::codec::ProstCodec::default();
4199                        let mut grpc = tonic::server::Grpc::new(codec)
4200                            .apply_compression_config(
4201                                accept_compression_encodings,
4202                                send_compression_encodings,
4203                            )
4204                            .apply_max_message_size_config(
4205                                max_decoding_message_size,
4206                                max_encoding_message_size,
4207                            );
4208                        let res = grpc.unary(method, req).await;
4209                        Ok(res)
4210                    };
4211                    Box::pin(fut)
4212                }
4213                "/interchain_security.ccv.provider.v1.Query/QueryThrottleState" => {
4214                    #[allow(non_camel_case_types)]
4215                    struct QueryThrottleStateSvc<T: Query>(pub Arc<T>);
4216                    impl<
4217                        T: Query,
4218                    > tonic::server::UnaryService<super::QueryThrottleStateRequest>
4219                    for QueryThrottleStateSvc<T> {
4220                        type Response = super::QueryThrottleStateResponse;
4221                        type Future = BoxFuture<
4222                            tonic::Response<Self::Response>,
4223                            tonic::Status,
4224                        >;
4225                        fn call(
4226                            &mut self,
4227                            request: tonic::Request<super::QueryThrottleStateRequest>,
4228                        ) -> Self::Future {
4229                            let inner = Arc::clone(&self.0);
4230                            let fut = async move {
4231                                <T as Query>::query_throttle_state(&inner, request).await
4232                            };
4233                            Box::pin(fut)
4234                        }
4235                    }
4236                    let accept_compression_encodings = self.accept_compression_encodings;
4237                    let send_compression_encodings = self.send_compression_encodings;
4238                    let max_decoding_message_size = self.max_decoding_message_size;
4239                    let max_encoding_message_size = self.max_encoding_message_size;
4240                    let inner = self.inner.clone();
4241                    let fut = async move {
4242                        let method = QueryThrottleStateSvc(inner);
4243                        let codec = tonic::codec::ProstCodec::default();
4244                        let mut grpc = tonic::server::Grpc::new(codec)
4245                            .apply_compression_config(
4246                                accept_compression_encodings,
4247                                send_compression_encodings,
4248                            )
4249                            .apply_max_message_size_config(
4250                                max_decoding_message_size,
4251                                max_encoding_message_size,
4252                            );
4253                        let res = grpc.unary(method, req).await;
4254                        Ok(res)
4255                    };
4256                    Box::pin(fut)
4257                }
4258                "/interchain_security.ccv.provider.v1.Query/QueryRegisteredConsumerRewardDenoms" => {
4259                    #[allow(non_camel_case_types)]
4260                    struct QueryRegisteredConsumerRewardDenomsSvc<T: Query>(pub Arc<T>);
4261                    impl<
4262                        T: Query,
4263                    > tonic::server::UnaryService<
4264                        super::QueryRegisteredConsumerRewardDenomsRequest,
4265                    > for QueryRegisteredConsumerRewardDenomsSvc<T> {
4266                        type Response = super::QueryRegisteredConsumerRewardDenomsResponse;
4267                        type Future = BoxFuture<
4268                            tonic::Response<Self::Response>,
4269                            tonic::Status,
4270                        >;
4271                        fn call(
4272                            &mut self,
4273                            request: tonic::Request<
4274                                super::QueryRegisteredConsumerRewardDenomsRequest,
4275                            >,
4276                        ) -> Self::Future {
4277                            let inner = Arc::clone(&self.0);
4278                            let fut = async move {
4279                                <T as Query>::query_registered_consumer_reward_denoms(
4280                                        &inner,
4281                                        request,
4282                                    )
4283                                    .await
4284                            };
4285                            Box::pin(fut)
4286                        }
4287                    }
4288                    let accept_compression_encodings = self.accept_compression_encodings;
4289                    let send_compression_encodings = self.send_compression_encodings;
4290                    let max_decoding_message_size = self.max_decoding_message_size;
4291                    let max_encoding_message_size = self.max_encoding_message_size;
4292                    let inner = self.inner.clone();
4293                    let fut = async move {
4294                        let method = QueryRegisteredConsumerRewardDenomsSvc(inner);
4295                        let codec = tonic::codec::ProstCodec::default();
4296                        let mut grpc = tonic::server::Grpc::new(codec)
4297                            .apply_compression_config(
4298                                accept_compression_encodings,
4299                                send_compression_encodings,
4300                            )
4301                            .apply_max_message_size_config(
4302                                max_decoding_message_size,
4303                                max_encoding_message_size,
4304                            );
4305                        let res = grpc.unary(method, req).await;
4306                        Ok(res)
4307                    };
4308                    Box::pin(fut)
4309                }
4310                "/interchain_security.ccv.provider.v1.Query/QueryAllPairsValConsAddrByConsumer" => {
4311                    #[allow(non_camel_case_types)]
4312                    struct QueryAllPairsValConsAddrByConsumerSvc<T: Query>(pub Arc<T>);
4313                    impl<
4314                        T: Query,
4315                    > tonic::server::UnaryService<
4316                        super::QueryAllPairsValConsAddrByConsumerRequest,
4317                    > for QueryAllPairsValConsAddrByConsumerSvc<T> {
4318                        type Response = super::QueryAllPairsValConsAddrByConsumerResponse;
4319                        type Future = BoxFuture<
4320                            tonic::Response<Self::Response>,
4321                            tonic::Status,
4322                        >;
4323                        fn call(
4324                            &mut self,
4325                            request: tonic::Request<
4326                                super::QueryAllPairsValConsAddrByConsumerRequest,
4327                            >,
4328                        ) -> Self::Future {
4329                            let inner = Arc::clone(&self.0);
4330                            let fut = async move {
4331                                <T as Query>::query_all_pairs_val_cons_addr_by_consumer(
4332                                        &inner,
4333                                        request,
4334                                    )
4335                                    .await
4336                            };
4337                            Box::pin(fut)
4338                        }
4339                    }
4340                    let accept_compression_encodings = self.accept_compression_encodings;
4341                    let send_compression_encodings = self.send_compression_encodings;
4342                    let max_decoding_message_size = self.max_decoding_message_size;
4343                    let max_encoding_message_size = self.max_encoding_message_size;
4344                    let inner = self.inner.clone();
4345                    let fut = async move {
4346                        let method = QueryAllPairsValConsAddrByConsumerSvc(inner);
4347                        let codec = tonic::codec::ProstCodec::default();
4348                        let mut grpc = tonic::server::Grpc::new(codec)
4349                            .apply_compression_config(
4350                                accept_compression_encodings,
4351                                send_compression_encodings,
4352                            )
4353                            .apply_max_message_size_config(
4354                                max_decoding_message_size,
4355                                max_encoding_message_size,
4356                            );
4357                        let res = grpc.unary(method, req).await;
4358                        Ok(res)
4359                    };
4360                    Box::pin(fut)
4361                }
4362                "/interchain_security.ccv.provider.v1.Query/QueryParams" => {
4363                    #[allow(non_camel_case_types)]
4364                    struct QueryParamsSvc<T: Query>(pub Arc<T>);
4365                    impl<T: Query> tonic::server::UnaryService<super::QueryParamsRequest>
4366                    for QueryParamsSvc<T> {
4367                        type Response = super::QueryParamsResponse;
4368                        type Future = BoxFuture<
4369                            tonic::Response<Self::Response>,
4370                            tonic::Status,
4371                        >;
4372                        fn call(
4373                            &mut self,
4374                            request: tonic::Request<super::QueryParamsRequest>,
4375                        ) -> Self::Future {
4376                            let inner = Arc::clone(&self.0);
4377                            let fut = async move {
4378                                <T as Query>::query_params(&inner, request).await
4379                            };
4380                            Box::pin(fut)
4381                        }
4382                    }
4383                    let accept_compression_encodings = self.accept_compression_encodings;
4384                    let send_compression_encodings = self.send_compression_encodings;
4385                    let max_decoding_message_size = self.max_decoding_message_size;
4386                    let max_encoding_message_size = self.max_encoding_message_size;
4387                    let inner = self.inner.clone();
4388                    let fut = async move {
4389                        let method = QueryParamsSvc(inner);
4390                        let codec = tonic::codec::ProstCodec::default();
4391                        let mut grpc = tonic::server::Grpc::new(codec)
4392                            .apply_compression_config(
4393                                accept_compression_encodings,
4394                                send_compression_encodings,
4395                            )
4396                            .apply_max_message_size_config(
4397                                max_decoding_message_size,
4398                                max_encoding_message_size,
4399                            );
4400                        let res = grpc.unary(method, req).await;
4401                        Ok(res)
4402                    };
4403                    Box::pin(fut)
4404                }
4405                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainOptedInValidators" => {
4406                    #[allow(non_camel_case_types)]
4407                    struct QueryConsumerChainOptedInValidatorsSvc<T: Query>(pub Arc<T>);
4408                    impl<
4409                        T: Query,
4410                    > tonic::server::UnaryService<
4411                        super::QueryConsumerChainOptedInValidatorsRequest,
4412                    > for QueryConsumerChainOptedInValidatorsSvc<T> {
4413                        type Response = super::QueryConsumerChainOptedInValidatorsResponse;
4414                        type Future = BoxFuture<
4415                            tonic::Response<Self::Response>,
4416                            tonic::Status,
4417                        >;
4418                        fn call(
4419                            &mut self,
4420                            request: tonic::Request<
4421                                super::QueryConsumerChainOptedInValidatorsRequest,
4422                            >,
4423                        ) -> Self::Future {
4424                            let inner = Arc::clone(&self.0);
4425                            let fut = async move {
4426                                <T as Query>::query_consumer_chain_opted_in_validators(
4427                                        &inner,
4428                                        request,
4429                                    )
4430                                    .await
4431                            };
4432                            Box::pin(fut)
4433                        }
4434                    }
4435                    let accept_compression_encodings = self.accept_compression_encodings;
4436                    let send_compression_encodings = self.send_compression_encodings;
4437                    let max_decoding_message_size = self.max_decoding_message_size;
4438                    let max_encoding_message_size = self.max_encoding_message_size;
4439                    let inner = self.inner.clone();
4440                    let fut = async move {
4441                        let method = QueryConsumerChainOptedInValidatorsSvc(inner);
4442                        let codec = tonic::codec::ProstCodec::default();
4443                        let mut grpc = tonic::server::Grpc::new(codec)
4444                            .apply_compression_config(
4445                                accept_compression_encodings,
4446                                send_compression_encodings,
4447                            )
4448                            .apply_max_message_size_config(
4449                                max_decoding_message_size,
4450                                max_encoding_message_size,
4451                            );
4452                        let res = grpc.unary(method, req).await;
4453                        Ok(res)
4454                    };
4455                    Box::pin(fut)
4456                }
4457                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChainsValidatorHasToValidate" => {
4458                    #[allow(non_camel_case_types)]
4459                    struct QueryConsumerChainsValidatorHasToValidateSvc<T: Query>(
4460                        pub Arc<T>,
4461                    );
4462                    impl<
4463                        T: Query,
4464                    > tonic::server::UnaryService<
4465                        super::QueryConsumerChainsValidatorHasToValidateRequest,
4466                    > for QueryConsumerChainsValidatorHasToValidateSvc<T> {
4467                        type Response = super::QueryConsumerChainsValidatorHasToValidateResponse;
4468                        type Future = BoxFuture<
4469                            tonic::Response<Self::Response>,
4470                            tonic::Status,
4471                        >;
4472                        fn call(
4473                            &mut self,
4474                            request: tonic::Request<
4475                                super::QueryConsumerChainsValidatorHasToValidateRequest,
4476                            >,
4477                        ) -> Self::Future {
4478                            let inner = Arc::clone(&self.0);
4479                            let fut = async move {
4480                                <T as Query>::query_consumer_chains_validator_has_to_validate(
4481                                        &inner,
4482                                        request,
4483                                    )
4484                                    .await
4485                            };
4486                            Box::pin(fut)
4487                        }
4488                    }
4489                    let accept_compression_encodings = self.accept_compression_encodings;
4490                    let send_compression_encodings = self.send_compression_encodings;
4491                    let max_decoding_message_size = self.max_decoding_message_size;
4492                    let max_encoding_message_size = self.max_encoding_message_size;
4493                    let inner = self.inner.clone();
4494                    let fut = async move {
4495                        let method = QueryConsumerChainsValidatorHasToValidateSvc(inner);
4496                        let codec = tonic::codec::ProstCodec::default();
4497                        let mut grpc = tonic::server::Grpc::new(codec)
4498                            .apply_compression_config(
4499                                accept_compression_encodings,
4500                                send_compression_encodings,
4501                            )
4502                            .apply_max_message_size_config(
4503                                max_decoding_message_size,
4504                                max_encoding_message_size,
4505                            );
4506                        let res = grpc.unary(method, req).await;
4507                        Ok(res)
4508                    };
4509                    Box::pin(fut)
4510                }
4511                "/interchain_security.ccv.provider.v1.Query/QueryValidatorConsumerCommissionRate" => {
4512                    #[allow(non_camel_case_types)]
4513                    struct QueryValidatorConsumerCommissionRateSvc<T: Query>(pub Arc<T>);
4514                    impl<
4515                        T: Query,
4516                    > tonic::server::UnaryService<
4517                        super::QueryValidatorConsumerCommissionRateRequest,
4518                    > for QueryValidatorConsumerCommissionRateSvc<T> {
4519                        type Response = super::QueryValidatorConsumerCommissionRateResponse;
4520                        type Future = BoxFuture<
4521                            tonic::Response<Self::Response>,
4522                            tonic::Status,
4523                        >;
4524                        fn call(
4525                            &mut self,
4526                            request: tonic::Request<
4527                                super::QueryValidatorConsumerCommissionRateRequest,
4528                            >,
4529                        ) -> Self::Future {
4530                            let inner = Arc::clone(&self.0);
4531                            let fut = async move {
4532                                <T as Query>::query_validator_consumer_commission_rate(
4533                                        &inner,
4534                                        request,
4535                                    )
4536                                    .await
4537                            };
4538                            Box::pin(fut)
4539                        }
4540                    }
4541                    let accept_compression_encodings = self.accept_compression_encodings;
4542                    let send_compression_encodings = self.send_compression_encodings;
4543                    let max_decoding_message_size = self.max_decoding_message_size;
4544                    let max_encoding_message_size = self.max_encoding_message_size;
4545                    let inner = self.inner.clone();
4546                    let fut = async move {
4547                        let method = QueryValidatorConsumerCommissionRateSvc(inner);
4548                        let codec = tonic::codec::ProstCodec::default();
4549                        let mut grpc = tonic::server::Grpc::new(codec)
4550                            .apply_compression_config(
4551                                accept_compression_encodings,
4552                                send_compression_encodings,
4553                            )
4554                            .apply_max_message_size_config(
4555                                max_decoding_message_size,
4556                                max_encoding_message_size,
4557                            );
4558                        let res = grpc.unary(method, req).await;
4559                        Ok(res)
4560                    };
4561                    Box::pin(fut)
4562                }
4563                "/interchain_security.ccv.provider.v1.Query/QueryConsumerValidators" => {
4564                    #[allow(non_camel_case_types)]
4565                    struct QueryConsumerValidatorsSvc<T: Query>(pub Arc<T>);
4566                    impl<
4567                        T: Query,
4568                    > tonic::server::UnaryService<super::QueryConsumerValidatorsRequest>
4569                    for QueryConsumerValidatorsSvc<T> {
4570                        type Response = super::QueryConsumerValidatorsResponse;
4571                        type Future = BoxFuture<
4572                            tonic::Response<Self::Response>,
4573                            tonic::Status,
4574                        >;
4575                        fn call(
4576                            &mut self,
4577                            request: tonic::Request<
4578                                super::QueryConsumerValidatorsRequest,
4579                            >,
4580                        ) -> Self::Future {
4581                            let inner = Arc::clone(&self.0);
4582                            let fut = async move {
4583                                <T as Query>::query_consumer_validators(&inner, request)
4584                                    .await
4585                            };
4586                            Box::pin(fut)
4587                        }
4588                    }
4589                    let accept_compression_encodings = self.accept_compression_encodings;
4590                    let send_compression_encodings = self.send_compression_encodings;
4591                    let max_decoding_message_size = self.max_decoding_message_size;
4592                    let max_encoding_message_size = self.max_encoding_message_size;
4593                    let inner = self.inner.clone();
4594                    let fut = async move {
4595                        let method = QueryConsumerValidatorsSvc(inner);
4596                        let codec = tonic::codec::ProstCodec::default();
4597                        let mut grpc = tonic::server::Grpc::new(codec)
4598                            .apply_compression_config(
4599                                accept_compression_encodings,
4600                                send_compression_encodings,
4601                            )
4602                            .apply_max_message_size_config(
4603                                max_decoding_message_size,
4604                                max_encoding_message_size,
4605                            );
4606                        let res = grpc.unary(method, req).await;
4607                        Ok(res)
4608                    };
4609                    Box::pin(fut)
4610                }
4611                "/interchain_security.ccv.provider.v1.Query/QueryBlocksUntilNextEpoch" => {
4612                    #[allow(non_camel_case_types)]
4613                    struct QueryBlocksUntilNextEpochSvc<T: Query>(pub Arc<T>);
4614                    impl<
4615                        T: Query,
4616                    > tonic::server::UnaryService<
4617                        super::QueryBlocksUntilNextEpochRequest,
4618                    > for QueryBlocksUntilNextEpochSvc<T> {
4619                        type Response = super::QueryBlocksUntilNextEpochResponse;
4620                        type Future = BoxFuture<
4621                            tonic::Response<Self::Response>,
4622                            tonic::Status,
4623                        >;
4624                        fn call(
4625                            &mut self,
4626                            request: tonic::Request<
4627                                super::QueryBlocksUntilNextEpochRequest,
4628                            >,
4629                        ) -> Self::Future {
4630                            let inner = Arc::clone(&self.0);
4631                            let fut = async move {
4632                                <T as Query>::query_blocks_until_next_epoch(&inner, request)
4633                                    .await
4634                            };
4635                            Box::pin(fut)
4636                        }
4637                    }
4638                    let accept_compression_encodings = self.accept_compression_encodings;
4639                    let send_compression_encodings = self.send_compression_encodings;
4640                    let max_decoding_message_size = self.max_decoding_message_size;
4641                    let max_encoding_message_size = self.max_encoding_message_size;
4642                    let inner = self.inner.clone();
4643                    let fut = async move {
4644                        let method = QueryBlocksUntilNextEpochSvc(inner);
4645                        let codec = tonic::codec::ProstCodec::default();
4646                        let mut grpc = tonic::server::Grpc::new(codec)
4647                            .apply_compression_config(
4648                                accept_compression_encodings,
4649                                send_compression_encodings,
4650                            )
4651                            .apply_max_message_size_config(
4652                                max_decoding_message_size,
4653                                max_encoding_message_size,
4654                            );
4655                        let res = grpc.unary(method, req).await;
4656                        Ok(res)
4657                    };
4658                    Box::pin(fut)
4659                }
4660                "/interchain_security.ccv.provider.v1.Query/QueryConsumerIdFromClientId" => {
4661                    #[allow(non_camel_case_types)]
4662                    struct QueryConsumerIdFromClientIdSvc<T: Query>(pub Arc<T>);
4663                    impl<
4664                        T: Query,
4665                    > tonic::server::UnaryService<
4666                        super::QueryConsumerIdFromClientIdRequest,
4667                    > for QueryConsumerIdFromClientIdSvc<T> {
4668                        type Response = super::QueryConsumerIdFromClientIdResponse;
4669                        type Future = BoxFuture<
4670                            tonic::Response<Self::Response>,
4671                            tonic::Status,
4672                        >;
4673                        fn call(
4674                            &mut self,
4675                            request: tonic::Request<
4676                                super::QueryConsumerIdFromClientIdRequest,
4677                            >,
4678                        ) -> Self::Future {
4679                            let inner = Arc::clone(&self.0);
4680                            let fut = async move {
4681                                <T as Query>::query_consumer_id_from_client_id(
4682                                        &inner,
4683                                        request,
4684                                    )
4685                                    .await
4686                            };
4687                            Box::pin(fut)
4688                        }
4689                    }
4690                    let accept_compression_encodings = self.accept_compression_encodings;
4691                    let send_compression_encodings = self.send_compression_encodings;
4692                    let max_decoding_message_size = self.max_decoding_message_size;
4693                    let max_encoding_message_size = self.max_encoding_message_size;
4694                    let inner = self.inner.clone();
4695                    let fut = async move {
4696                        let method = QueryConsumerIdFromClientIdSvc(inner);
4697                        let codec = tonic::codec::ProstCodec::default();
4698                        let mut grpc = tonic::server::Grpc::new(codec)
4699                            .apply_compression_config(
4700                                accept_compression_encodings,
4701                                send_compression_encodings,
4702                            )
4703                            .apply_max_message_size_config(
4704                                max_decoding_message_size,
4705                                max_encoding_message_size,
4706                            );
4707                        let res = grpc.unary(method, req).await;
4708                        Ok(res)
4709                    };
4710                    Box::pin(fut)
4711                }
4712                "/interchain_security.ccv.provider.v1.Query/QueryConsumerChain" => {
4713                    #[allow(non_camel_case_types)]
4714                    struct QueryConsumerChainSvc<T: Query>(pub Arc<T>);
4715                    impl<
4716                        T: Query,
4717                    > tonic::server::UnaryService<super::QueryConsumerChainRequest>
4718                    for QueryConsumerChainSvc<T> {
4719                        type Response = super::QueryConsumerChainResponse;
4720                        type Future = BoxFuture<
4721                            tonic::Response<Self::Response>,
4722                            tonic::Status,
4723                        >;
4724                        fn call(
4725                            &mut self,
4726                            request: tonic::Request<super::QueryConsumerChainRequest>,
4727                        ) -> Self::Future {
4728                            let inner = Arc::clone(&self.0);
4729                            let fut = async move {
4730                                <T as Query>::query_consumer_chain(&inner, request).await
4731                            };
4732                            Box::pin(fut)
4733                        }
4734                    }
4735                    let accept_compression_encodings = self.accept_compression_encodings;
4736                    let send_compression_encodings = self.send_compression_encodings;
4737                    let max_decoding_message_size = self.max_decoding_message_size;
4738                    let max_encoding_message_size = self.max_encoding_message_size;
4739                    let inner = self.inner.clone();
4740                    let fut = async move {
4741                        let method = QueryConsumerChainSvc(inner);
4742                        let codec = tonic::codec::ProstCodec::default();
4743                        let mut grpc = tonic::server::Grpc::new(codec)
4744                            .apply_compression_config(
4745                                accept_compression_encodings,
4746                                send_compression_encodings,
4747                            )
4748                            .apply_max_message_size_config(
4749                                max_decoding_message_size,
4750                                max_encoding_message_size,
4751                            );
4752                        let res = grpc.unary(method, req).await;
4753                        Ok(res)
4754                    };
4755                    Box::pin(fut)
4756                }
4757                _ => {
4758                    Box::pin(async move {
4759                        let mut response = http::Response::new(
4760                            tonic::body::Body::default(),
4761                        );
4762                        let headers = response.headers_mut();
4763                        headers
4764                            .insert(
4765                                tonic::Status::GRPC_STATUS,
4766                                (tonic::Code::Unimplemented as i32).into(),
4767                            );
4768                        headers
4769                            .insert(
4770                                http::header::CONTENT_TYPE,
4771                                tonic::metadata::GRPC_CONTENT_TYPE,
4772                            );
4773                        Ok(response)
4774                    })
4775                }
4776            }
4777        }
4778    }
4779    impl<T> Clone for QueryServer<T> {
4780        fn clone(&self) -> Self {
4781            let inner = self.inner.clone();
4782            Self {
4783                inner,
4784                accept_compression_encodings: self.accept_compression_encodings,
4785                send_compression_encodings: self.send_compression_encodings,
4786                max_decoding_message_size: self.max_decoding_message_size,
4787                max_encoding_message_size: self.max_encoding_message_size,
4788            }
4789        }
4790    }
4791    /// Generated gRPC service name
4792    pub const SERVICE_NAME: &str = "interchain_security.ccv.provider.v1.Query";
4793    impl<T> tonic::server::NamedService for QueryServer<T> {
4794        const NAME: &'static str = SERVICE_NAME;
4795    }
4796}
4797/// GenesisState defines the CCV provider chain genesis state
4798#[derive(Clone, PartialEq, ::prost::Message)]
4799pub struct GenesisState {
4800    /// strictly positive and set to 1 (DefaultValsetUpdateID) for a new chain
4801    #[prost(uint64, tag = "1")]
4802    pub valset_update_id: u64,
4803    /// empty for a new chain
4804    #[prost(message, repeated, tag = "2")]
4805    pub consumer_states: ::prost::alloc::vec::Vec<ConsumerState>,
4806    /// empty for a new chain
4807    #[prost(message, repeated, tag = "5")]
4808    pub valset_update_id_to_height: ::prost::alloc::vec::Vec<ValsetUpdateIdToHeight>,
4809    #[prost(message, optional, tag = "8")]
4810    pub params: ::core::option::Option<Params>,
4811    /// empty for a new chain
4812    #[prost(message, repeated, tag = "9")]
4813    pub validator_consumer_pubkeys: ::prost::alloc::vec::Vec<ValidatorConsumerPubKey>,
4814    /// empty for a new chain
4815    #[prost(message, repeated, tag = "10")]
4816    pub validators_by_consumer_addr: ::prost::alloc::vec::Vec<ValidatorByConsumerAddr>,
4817    /// empty for a new chain
4818    #[prost(message, repeated, tag = "14")]
4819    pub consumer_addrs_to_prune_v2: ::prost::alloc::vec::Vec<ConsumerAddrsToPruneV2>,
4820}
4821impl ::prost::Name for GenesisState {
4822    const NAME: &'static str = "GenesisState";
4823    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
4824    fn full_name() -> ::prost::alloc::string::String {
4825        "interchain_security.ccv.provider.v1.GenesisState".into()
4826    }
4827    fn type_url() -> ::prost::alloc::string::String {
4828        "/interchain_security.ccv.provider.v1.GenesisState".into()
4829    }
4830}
4831/// The provider CCV module's knowledge of consumer state.
4832///
4833/// Note this type is only used internally to the provider CCV module.
4834#[derive(Clone, PartialEq, ::prost::Message)]
4835pub struct ConsumerState {
4836    /// ChainID defines the chain ID for the consumer chain
4837    #[prost(string, tag = "1")]
4838    pub chain_id: ::prost::alloc::string::String,
4839    /// ChannelID defines the IBC channel ID for the consumer chain
4840    #[prost(string, tag = "2")]
4841    pub channel_id: ::prost::alloc::string::String,
4842    /// ClientID defines the IBC client ID for the consumer chain
4843    #[prost(string, tag = "3")]
4844    pub client_id: ::prost::alloc::string::String,
4845    /// InitalHeight defines the initial block height for the consumer chain
4846    #[prost(uint64, tag = "4")]
4847    pub initial_height: u64,
4848    /// ConsumerGenesis defines the initial consumer chain genesis states
4849    #[prost(message, optional, tag = "5")]
4850    pub consumer_genesis: ::core::option::Option<super::super::v1::ConsumerGenesisState>,
4851    /// PendingValsetChanges defines the pending validator set changes for the
4852    /// consumer chain
4853    #[prost(message, repeated, tag = "6")]
4854    pub pending_valset_changes: ::prost::alloc::vec::Vec<
4855        super::super::v1::ValidatorSetChangePacketData,
4856    >,
4857    #[prost(string, repeated, tag = "7")]
4858    pub slash_downtime_ack: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
4859    /// the phase of the consumer chain
4860    #[prost(enumeration = "ConsumerPhase", tag = "9")]
4861    pub phase: i32,
4862}
4863impl ::prost::Name for ConsumerState {
4864    const NAME: &'static str = "ConsumerState";
4865    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
4866    fn full_name() -> ::prost::alloc::string::String {
4867        "interchain_security.ccv.provider.v1.ConsumerState".into()
4868    }
4869    fn type_url() -> ::prost::alloc::string::String {
4870        "/interchain_security.ccv.provider.v1.ConsumerState".into()
4871    }
4872}
4873/// ValsetUpdateIdToHeight defines the genesis information for the mapping
4874/// of each valset update id to a block height
4875#[derive(Clone, Copy, PartialEq, ::prost::Message)]
4876pub struct ValsetUpdateIdToHeight {
4877    #[prost(uint64, tag = "1")]
4878    pub valset_update_id: u64,
4879    #[prost(uint64, tag = "2")]
4880    pub height: u64,
4881}
4882impl ::prost::Name for ValsetUpdateIdToHeight {
4883    const NAME: &'static str = "ValsetUpdateIdToHeight";
4884    const PACKAGE: &'static str = "interchain_security.ccv.provider.v1";
4885    fn full_name() -> ::prost::alloc::string::String {
4886        "interchain_security.ccv.provider.v1.ValsetUpdateIdToHeight".into()
4887    }
4888    fn type_url() -> ::prost::alloc::string::String {
4889        "/interchain_security.ccv.provider.v1.ValsetUpdateIdToHeight".into()
4890    }
4891}