From 81f8ad3b73061dda8e5cdacb5e597c7ff6bce7a2 Mon Sep 17 00:00:00 2001 From: Romain Ruetschi <106849+romac@users.noreply.github.com> Date: Thu, 28 Sep 2023 11:37:51 +0200 Subject: [PATCH 1/6] Update ICS protos to include misbehaviour messages --- scripts/sync-protobuf.sh | 4 +- src/COSMOS_ICS_COMMIT | 2 +- .../interchain_security.ccv.consumer.v1.rs | 14 +- .../interchain_security.ccv.provider.v1.rs | 331 ++++++++++++++---- src/prost/interchain_security.ccv.v1.rs | 75 +--- src/prost/proto_descriptor.bin | Bin 712675 -> 712489 bytes 6 files changed, 265 insertions(+), 161 deletions(-) diff --git a/scripts/sync-protobuf.sh b/scripts/sync-protobuf.sh index 49485cce..149706aa 100755 --- a/scripts/sync-protobuf.sh +++ b/scripts/sync-protobuf.sh @@ -163,13 +163,13 @@ mkdir -p src/prost cd tools/proto-compiler -cargo build --locked +cargo build # Run the proto-compiler twice, # once for std version with --build-tonic set to true # and once for no-std version with --build-tonic set to false -cargo run --locked -- compile \ +cargo run -- compile \ --ics "$COSMOS_ICS_DIR/proto-include" \ --sdk "$COSMOS_SDK_DIR/proto-include" \ --ibc "$IBC_GO_DIR/proto-include" \ diff --git a/src/COSMOS_ICS_COMMIT b/src/COSMOS_ICS_COMMIT index b193de85..f2c4e503 100644 --- a/src/COSMOS_ICS_COMMIT +++ b/src/COSMOS_ICS_COMMIT @@ -1 +1 @@ -512753529b7fea6f825c1bfdb1242dd4207b2366 +c881a1aad37f2f8041c913468602edaf69fef9bf diff --git a/src/prost/interchain_security.ccv.consumer.v1.rs b/src/prost/interchain_security.ccv.consumer.v1.rs index f9189e2a..2030193f 100644 --- a/src/prost/interchain_security.ccv.consumer.v1.rs +++ b/src/prost/interchain_security.ccv.consumer.v1.rs @@ -48,17 +48,15 @@ pub struct Params { super::super::super::super::google::protobuf::Duration, >, /// The threshold for the percentage of validators at the bottom of the set who - /// can opt out of running the consumer chain without being punished. For - /// example, a value of 0.05 means that the validators in the bottom 5% of the - /// set can opt out + /// can opt out of running the consumer chain without being punished. For example, a + /// value of 0.05 means that the validators in the bottom 5% of the set can opt out #[prost(string, tag = "10")] pub soft_opt_out_threshold: ::prost::alloc::string::String, - /// Reward denoms. These are the denominations which are allowed to be sent to - /// the provider as rewards. + /// Reward denoms. These are the denominations which are allowed to be sent to the provider as rewards. #[prost(string, repeated, tag = "11")] pub reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - /// Provider-originated reward denoms. These are denoms coming from the - /// provider which are allowed to be used as rewards. e.g. "uatom" + /// Provider-originated reward denoms. These are denoms coming from the provider + /// which are allowed to be used as rewards. e.g. "uatom" #[prost(string, repeated, tag = "12")] pub provider_reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } @@ -144,7 +142,7 @@ pub struct GenesisState { pub last_transmission_block_height: ::core::option::Option< LastTransmissionBlockHeight, >, - /// flag indicating whether the consumer CCV module starts in + /// flag indicating whether the consumer CCV module starts in pre-CCV state #[prost(bool, tag = "13")] pub pre_ccv: bool, } diff --git a/src/prost/interchain_security.ccv.provider.v1.rs b/src/prost/interchain_security.ccv.provider.v1.rs index b21d482a..3dd032c5 100644 --- a/src/prost/interchain_security.ccv.provider.v1.rs +++ b/src/prost/interchain_security.ccv.provider.v1.rs @@ -27,11 +27,50 @@ pub struct MsgRegisterConsumerRewardDenom { #[prost(string, tag = "2")] pub depositor: ::prost::alloc::string::String, } -/// MsgRegisterConsumerRewardDenomResponse defines the -/// Msg/RegisterConsumerRewardDenom response type. +/// MsgRegisterConsumerRewardDenomResponse defines the Msg/RegisterConsumerRewardDenom response type. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MsgRegisterConsumerRewardDenomResponse {} +/// MsgSubmitConsumerMisbehaviour defines a message that reports a misbehaviour +/// observed on a consumer chain +/// Note that the misbheaviour' headers must contain the same trusted states +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MsgSubmitConsumerMisbehaviour { + #[prost(string, tag = "1")] + pub submitter: ::prost::alloc::string::String, + /// The Misbehaviour of the consumer chain wrapping + /// two conflicting IBC headers + #[prost(message, optional, tag = "2")] + pub misbehaviour: ::core::option::Option< + super::super::super::super::ibc::lightclients::tendermint::v1::Misbehaviour, + >, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MsgSubmitConsumerMisbehaviourResponse {} +/// MsgSubmitConsumerDoubleVoting defines a message that reports an equivocation +/// observed on a consumer chain +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MsgSubmitConsumerDoubleVoting { + #[prost(string, tag = "1")] + pub submitter: ::prost::alloc::string::String, + /// The equivocation of the consumer chain wrapping + /// an evidence of a validator that signed two conflicting votes + #[prost(message, optional, tag = "2")] + pub duplicate_vote_evidence: ::core::option::Option< + ::tendermint_proto::types::DuplicateVoteEvidence, + >, + /// The light client header of the infraction block + #[prost(message, optional, tag = "3")] + pub infraction_block_header: ::core::option::Option< + super::super::super::super::ibc::lightclients::tendermint::v1::Header, + >, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MsgSubmitConsumerDoubleVotingResponse {} /// Generated client implementations. #[cfg(feature = "client")] pub mod msg_client { @@ -179,6 +218,66 @@ pub mod msg_client { ); self.inner.unary(req, path, codec).await } + pub async fn submit_consumer_misbehaviour( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerMisbehaviour", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "interchain_security.ccv.provider.v1.Msg", + "SubmitConsumerMisbehaviour", + ), + ); + self.inner.unary(req, path, codec).await + } + pub async fn submit_consumer_double_voting( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerDoubleVoting", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "interchain_security.ccv.provider.v1.Msg", + "SubmitConsumerDoubleVoting", + ), + ); + self.inner.unary(req, path, codec).await + } } } /// Generated server implementations. @@ -203,6 +302,20 @@ pub mod msg_server { tonic::Response, tonic::Status, >; + async fn submit_consumer_misbehaviour( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + async fn submit_consumer_double_voting( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; } /// Msg defines the Msg service. #[derive(Debug)] @@ -376,6 +489,98 @@ pub mod msg_server { }; Box::pin(fut) } + "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerMisbehaviour" => { + #[allow(non_camel_case_types)] + struct SubmitConsumerMisbehaviourSvc(pub Arc); + impl< + T: Msg, + > tonic::server::UnaryService + for SubmitConsumerMisbehaviourSvc { + type Response = super::MsgSubmitConsumerMisbehaviourResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).submit_consumer_misbehaviour(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = SubmitConsumerMisbehaviourSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerDoubleVoting" => { + #[allow(non_camel_case_types)] + struct SubmitConsumerDoubleVotingSvc(pub Arc); + impl< + T: Msg, + > tonic::server::UnaryService + for SubmitConsumerDoubleVotingSvc { + type Response = super::MsgSubmitConsumerDoubleVotingResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).submit_consumer_double_voting(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = SubmitConsumerDoubleVotingSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { Ok( @@ -417,11 +622,9 @@ pub mod msg_server { const NAME: &'static str = "interchain_security.ccv.provider.v1.Msg"; } } -/// ConsumerAdditionProposal is a governance proposal on the provider chain to -/// spawn a new consumer chain. If it passes, then all validators on the provider -/// chain are expected to validate the consumer chain at spawn time or get -/// slashed. It is recommended that spawn time occurs after the proposal end -/// time. +/// ConsumerAdditionProposal is a governance proposal on the provider chain to spawn a new consumer chain. +/// If it passes, then all validators on the provider chain are expected to validate the consumer chain at spawn time +/// or get slashed. It is recommended that spawn time occurs after the proposal end time. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerAdditionProposal { @@ -431,30 +634,26 @@ pub struct ConsumerAdditionProposal { /// the description of the proposal #[prost(string, tag = "2")] pub description: ::prost::alloc::string::String, - /// the proposed chain-id of the new consumer chain, must be different from all - /// other consumer chain ids of the executing provider chain. + /// the proposed chain-id of the new consumer chain, must be different from all other consumer chain ids of the executing + /// provider chain. #[prost(string, tag = "3")] pub chain_id: ::prost::alloc::string::String, /// the proposed initial height of new consumer chain. - /// For a completely new chain, this will be {0,1}. However, it may be - /// different if this is a chain that is converting to a consumer chain. + /// For a completely new chain, this will be {0,1}. However, it may be different if this is a chain that is converting to a consumer chain. #[prost(message, optional, tag = "4")] pub initial_height: ::core::option::Option< super::super::super::super::ibc::core::client::v1::Height, >, - /// The hash of the consumer chain genesis state without the consumer CCV - /// module genesis params. It is used for off-chain confirmation of - /// genesis.json validity by validators and other parties. + /// The hash of the consumer chain genesis state without the consumer CCV module genesis params. + /// It is used for off-chain confirmation of genesis.json validity by validators and other parties. #[prost(bytes = "vec", tag = "5")] pub genesis_hash: ::prost::alloc::vec::Vec, - /// The hash of the consumer chain binary that should be run by validators on - /// chain initialization. It is used for off-chain confirmation of binary - /// validity by validators and other parties. + /// The hash of the consumer chain binary that should be run by validators on chain initialization. + /// It is used for off-chain confirmation of binary validity by validators and other parties. #[prost(bytes = "vec", tag = "6")] pub binary_hash: ::prost::alloc::vec::Vec, - /// spawn time is the time on the provider chain at which the consumer chain - /// genesis is finalized and all validators will be responsible for starting - /// their consumer chain validator node. + /// spawn time is the time on the provider chain at which the consumer chain genesis is finalized and all validators + /// will be responsible for starting their consumer chain validator node. #[prost(message, optional, tag = "7")] pub spawn_time: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, @@ -480,10 +679,8 @@ pub struct ConsumerAdditionProposal { /// decimal number. For example "0.75" would represent 75%. #[prost(string, tag = "11")] pub consumer_redistribution_fraction: ::prost::alloc::string::String, - /// BlocksPerDistributionTransmission is the number of blocks between - /// ibc-token-transfers from the consumer chain to the provider chain. On - /// sending transmission event, `consumer_redistribution_fraction` of the - /// accumulated tokens are sent to the consumer redistribution address. + /// BlocksPerDistributionTransmission is the number of blocks between ibc-token-transfers from the consumer chain to the provider chain. + /// On sending transmission event, `consumer_redistribution_fraction` of the accumulated tokens are sent to the consumer redistribution address. #[prost(int64, tag = "12")] pub blocks_per_distribution_transmission: i64, /// The number of historical info entries to persist in store. @@ -494,16 +691,15 @@ pub struct ConsumerAdditionProposal { /// The ID of a token transfer channel used for the Reward Distribution /// sub-protocol. If DistributionTransmissionChannel == "", a new transfer /// channel is created on top of the same connection as the CCV channel. - /// Note that transfer_channel_id is the ID of the channel end on the consumer - /// chain. it is most relevant for chains performing a sovereign to consumer - /// changeover in order to maintan the existing ibc transfer channel + /// Note that transfer_channel_id is the ID of the channel end on the consumer chain. + /// it is most relevant for chains performing a sovereign to consumer changeover + /// in order to maintan the existing ibc transfer channel #[prost(string, tag = "14")] pub distribution_transmission_channel: ::prost::alloc::string::String, } -/// ConsumerRemovalProposal is a governance proposal on the provider chain to -/// remove (and stop) a consumer chain. If it passes, all the consumer chain's -/// state is removed from the provider chain. The outstanding unbonding operation -/// funds are released. +/// ConsumerRemovalProposal is a governance proposal on the provider chain to remove (and stop) a consumer chain. +/// If it passes, all the consumer chain's state is removed from the provider chain. The outstanding unbonding +/// operation funds are released. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerRemovalProposal { @@ -516,8 +712,7 @@ pub struct ConsumerRemovalProposal { /// the chain-id of the consumer chain to be stopped #[prost(string, tag = "3")] pub chain_id: ::prost::alloc::string::String, - /// the time on the provider chain at which all validators are responsible to - /// stop their consumer chain validator node + /// the time on the provider chain at which all validators are responsible to stop their consumer chain validator node #[prost(message, optional, tag = "4")] pub stop_time: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, @@ -538,9 +733,8 @@ pub struct EquivocationProposal { super::super::super::super::cosmos::evidence::v1beta1::Equivocation, >, } -/// A persisted queue entry indicating that a slash packet data instance needs to -/// be handled. This type belongs in the "global" queue, to coordinate slash -/// packet handling times between consumers. +/// A persisted queue entry indicating that a slash packet data instance needs to be handled. +/// This type belongs in the "global" queue, to coordinate slash packet handling times between consumers. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GlobalSlashEntry { @@ -560,8 +754,7 @@ pub struct GlobalSlashEntry { /// The provider's consensus address of the validator being slashed. /// This field is used to obtain validator power in HandleThrottleQueues. /// - /// This field is not used in the store key, but is persisted in value bytes, - /// see QueueGlobalSlashEntry. + /// This field is not used in the store key, but is persisted in value bytes, see QueueGlobalSlashEntry. #[prost(bytes = "vec", tag = "4")] pub provider_val_cons_addr: ::prost::alloc::vec::Vec, } @@ -573,8 +766,7 @@ pub struct Params { pub template_client: ::core::option::Option< super::super::super::super::ibc::lightclients::tendermint::v1::ClientState, >, - /// TrustingPeriodFraction is used to compute the consumer and provider IBC - /// client's TrustingPeriod from the chain defined UnbondingPeriod + /// TrustingPeriodFraction is used to compute the consumer and provider IBC client's TrustingPeriod from the chain defined UnbondingPeriod #[prost(string, tag = "2")] pub trusting_period_fraction: ::prost::alloc::string::String, /// Sent IBC packets will timeout after this duration @@ -582,8 +774,7 @@ pub struct Params { pub ccv_timeout_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, >, - /// The channel initialization (IBC channel opening handshake) will timeout - /// after this duration + /// The channel initialization (IBC channel opening handshake) will timeout after this duration #[prost(message, optional, tag = "4")] pub init_timeout_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, @@ -601,9 +792,8 @@ pub struct Params { pub slash_meter_replenish_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, >, - /// The fraction of total voting power that is replenished to the slash meter - /// every replenish period. This param also serves as a maximum fraction of - /// total voting power that the slash meter can hold. + /// The fraction of total voting power that is replenished to the slash meter every replenish period. + /// This param also serves as a maximum fraction of total voting power that the slash meter can hold. #[prost(string, tag = "7")] pub slash_meter_replenish_fraction: ::prost::alloc::string::String, /// The maximum amount of throttled slash or vsc matured packets @@ -632,8 +822,7 @@ pub struct SlashAcks { #[prost(string, repeated, tag = "1")] pub addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } -/// ConsumerAdditionProposals holds pending governance proposals on the provider -/// chain to spawn a new chain. +/// ConsumerAdditionProposals holds pending governance proposals on the provider chain to spawn a new chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerAdditionProposals { @@ -641,8 +830,7 @@ pub struct ConsumerAdditionProposals { #[prost(message, repeated, tag = "1")] pub pending: ::prost::alloc::vec::Vec, } -/// ConsumerRemovalProposals holds pending governance proposals on the provider -/// chain to remove (and stop) a consumer chain. +/// ConsumerRemovalProposals holds pending governance proposals on the provider chain to remove (and stop) a consumer chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerRemovalProposals { @@ -717,8 +905,7 @@ pub struct KeyAssignmentReplacement { pub power: i64, } /// Used to serialize the ValidatorConsumerPubKey index from key assignment -/// ValidatorConsumerPubKey: (chainID, providerAddr consAddr) -> consumerKey -/// tmprotocrypto.PublicKey +/// ValidatorConsumerPubKey: (chainID, providerAddr consAddr) -> consumerKey tmprotocrypto.PublicKey #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ValidatorConsumerPubKey { @@ -730,8 +917,7 @@ pub struct ValidatorConsumerPubKey { pub consumer_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>, } /// Used to serialize the ValidatorConsumerAddr index from key assignment -/// ValidatorByConsumerAddr: (chainID, consumerAddr consAddr) -> providerAddr -/// consAddr +/// ValidatorByConsumerAddr: (chainID, consumerAddr consAddr) -> providerAddr consAddr #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ValidatorByConsumerAddr { @@ -844,12 +1030,11 @@ pub struct QueryThrottleStateResponse { /// current slash_meter state #[prost(int64, tag = "1")] pub slash_meter: i64, - /// allowance of voting power units (int) that the slash meter is given per - /// replenish period this also serves as the max value for the meter. + /// allowance of voting power units (int) that the slash meter is given per replenish period + /// this also serves as the max value for the meter. #[prost(int64, tag = "2")] pub slash_meter_allowance: i64, - /// next time the slash meter could potentially be replenished, iff it's not - /// full + /// next time the slash meter could potentially be replenished, iff it's not full #[prost(message, optional, tag = "3")] pub next_replenish_candidate: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, @@ -874,8 +1059,7 @@ pub struct QueryThrottledConsumerPacketDataResponse { #[prost(message, repeated, tag = "3")] pub packet_data_instances: ::prost::alloc::vec::Vec, } -/// A query wrapper type for the global entry and data relevant to a throttled -/// slash packet. +/// A query wrapper type for the global entry and data relevant to a throttled slash packet. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ThrottledSlashPacket { @@ -884,8 +1068,7 @@ pub struct ThrottledSlashPacket { #[prost(message, optional, tag = "2")] pub data: ::core::option::Option, } -/// ThrottledPacketDataWrapper contains either SlashPacketData or -/// VSCMaturedPacketData +/// ThrottledPacketDataWrapper contains either SlashPacketData or VSCMaturedPacketData #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ThrottledPacketDataWrapper { @@ -1192,8 +1375,7 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryThrottleState returns the main on-chain state relevant to currently - /// throttled slash packets + /// QueryThrottleState returns the main on-chain state relevant to currently throttled slash packets pub async fn query_throttle_state( &mut self, request: impl tonic::IntoRequest, @@ -1224,8 +1406,8 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryThrottledConsumerPacketData returns a list of pending packet data - /// instances (slash packet and vsc matured) for a single consumer chain + /// QueryThrottledConsumerPacketData returns a list of pending packet data instances + /// (slash packet and vsc matured) for a single consumer chain pub async fn query_throttled_consumer_packet_data( &mut self, request: impl tonic::IntoRequest< @@ -1258,8 +1440,7 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward - /// denoms that are registered + /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward denoms that are registered pub async fn query_registered_consumer_reward_denoms( &mut self, request: impl tonic::IntoRequest< @@ -1354,8 +1535,7 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryThrottleState returns the main on-chain state relevant to currently - /// throttled slash packets + /// QueryThrottleState returns the main on-chain state relevant to currently throttled slash packets async fn query_throttle_state( &self, request: tonic::Request, @@ -1363,8 +1543,8 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryThrottledConsumerPacketData returns a list of pending packet data - /// instances (slash packet and vsc matured) for a single consumer chain + /// QueryThrottledConsumerPacketData returns a list of pending packet data instances + /// (slash packet and vsc matured) for a single consumer chain async fn query_throttled_consumer_packet_data( &self, request: tonic::Request, @@ -1372,8 +1552,7 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward - /// denoms that are registered + /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward denoms that are registered async fn query_registered_consumer_reward_denoms( &self, request: tonic::Request, @@ -1996,16 +2175,14 @@ pub struct ConsumerState { pub consumer_genesis: ::core::option::Option< super::super::consumer::v1::GenesisState, >, - /// PendingValsetChanges defines the pending validator set changes for the - /// consumer chain + /// PendingValsetChanges defines the pending validator set changes for the consumer chain #[prost(message, repeated, tag = "6")] pub pending_valset_changes: ::prost::alloc::vec::Vec< super::super::v1::ValidatorSetChangePacketData, >, #[prost(string, repeated, tag = "7")] pub slash_downtime_ack: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - /// UnbondingOpsIndex defines the unbonding operations waiting on this consumer - /// chain + /// UnbondingOpsIndex defines the unbonding operations waiting on this consumer chain #[prost(message, repeated, tag = "8")] pub unbonding_ops_index: ::prost::alloc::vec::Vec, } diff --git a/src/prost/interchain_security.ccv.v1.rs b/src/prost/interchain_security.ccv.v1.rs index 4ffc3a50..ba6f17cd 100644 --- a/src/prost/interchain_security.ccv.v1.rs +++ b/src/prost/interchain_security.ccv.v1.rs @@ -46,13 +46,12 @@ pub struct SlashPacketData { pub valset_update_id: u64, /// tell if the slashing is for a downtime or a double-signing infraction #[prost( - enumeration = "super::super::super::cosmos::staking::v1beta1::Infraction", + enumeration = "super::super::super::cosmos::staking::v1beta1::InfractionType", tag = "3" )] pub infraction: i32, } -/// MaturedUnbondingOps defines a list of ids corresponding to ids of matured -/// unbonding operations. +/// MaturedUnbondingOps defines a list of ids corresponding to ids of matured unbonding operations. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MaturedUnbondingOps { @@ -86,41 +85,6 @@ pub struct ConsumerPacketDataList { #[prost(message, repeated, tag = "1")] pub list: ::prost::alloc::vec::Vec, } -/// ConsumerPacketData contains a consumer packet data and a type tag -/// that is compatible with ICS v1 and v2 over the wire. It is not used for internal storage. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ConsumerPacketDataV1 { - #[prost(enumeration = "ConsumerPacketDataType", tag = "1")] - pub r#type: i32, - #[prost(oneof = "consumer_packet_data_v1::Data", tags = "2, 3")] - pub data: ::core::option::Option, -} -/// Nested message and enum types in `ConsumerPacketDataV1`. -pub mod consumer_packet_data_v1 { - #[allow(clippy::derive_partial_eq_without_eq)] - #[derive(Clone, PartialEq, ::prost::Oneof)] - pub enum Data { - #[prost(message, tag = "2")] - SlashPacketData(super::SlashPacketDataV1), - #[prost(message, tag = "3")] - VscMaturedPacketData(super::VscMaturedPacketData), - } -} -/// This packet is sent from the consumer chain to the provider chain -/// It is backward compatible with the ICS v1 and v2 version of the packet. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct SlashPacketDataV1 { - #[prost(message, optional, tag = "1")] - pub validator: ::core::option::Option<::tendermint_proto::abci::Validator>, - /// map to the infraction block height on the provider - #[prost(uint64, tag = "2")] - pub valset_update_id: u64, - /// tell if the slashing is for a downtime or a double-signing infraction - #[prost(enumeration = "InfractionType", tag = "3")] - pub infraction: i32, -} /// ConsumerPacketType indicates interchain security specific packet types. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] @@ -160,38 +124,3 @@ impl ConsumerPacketDataType { } } } -/// InfractionType indicates the infraction type a validator commited. -/// NOTE: ccv.InfractionType to maintain compatibility between ICS versions -/// using different versions of the cosmos-sdk and ibc-go modules. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] -#[repr(i32)] -pub enum InfractionType { - /// UNSPECIFIED defines an empty infraction type. - Unspecified = 0, - /// DOUBLE_SIGN defines a validator that double-signs a block. - DoubleSign = 1, - /// DOWNTIME defines a validator that missed signing too many blocks. - Downtime = 2, -} -impl InfractionType { - /// String value of the enum field names used in the ProtoBuf definition. - /// - /// The values are not transformed in any way and thus are considered stable - /// (if the ProtoBuf definition does not change) and safe for programmatic use. - pub fn as_str_name(&self) -> &'static str { - match self { - InfractionType::Unspecified => "INFRACTION_TYPE_UNSPECIFIED", - InfractionType::DoubleSign => "INFRACTION_TYPE_DOUBLE_SIGN", - InfractionType::Downtime => "INFRACTION_TYPE_DOWNTIME", - } - } - /// Creates an enum from field names used in the ProtoBuf definition. - pub fn from_str_name(value: &str) -> ::core::option::Option { - match value { - "INFRACTION_TYPE_UNSPECIFIED" => Some(Self::Unspecified), - "INFRACTION_TYPE_DOUBLE_SIGN" => Some(Self::DoubleSign), - "INFRACTION_TYPE_DOWNTIME" => Some(Self::Downtime), - _ => None, - } - } -} diff --git a/src/prost/proto_descriptor.bin b/src/prost/proto_descriptor.bin index 66fa458c0bb0c2835146301ccd7579745a758dad..f684a3fb358b2c7bc1c295121d33fb95ad949f70 100644 GIT binary patch delta 16214 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 gjUxVY{sI2k{QUf0mBj8p8x;= delta 15903 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 From 3925bc3433629129180e34d409c9ae4d3b6b5b08 Mon Sep 17 00:00:00 2001 From: Romain Ruetschi <106849+romac@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:25:03 +0200 Subject: [PATCH 2/6] Update ICS protos to ea545b490b53b8e6f422492b4fb2820ab0bc140b --- src/COSMOS_ICS_COMMIT | 2 +- src/prost/cosmos.evidence.v1beta1.rs | 18 -- .../interchain_security.ccv.consumer.v1.rs | 269 +++++++--------- .../interchain_security.ccv.provider.v1.rs | 298 ++++++++---------- src/prost/interchain_security.ccv.v1.rs | 272 ++++++++++++++-- src/prost/proto_descriptor.bin | Bin 712489 -> 717826 bytes 6 files changed, 498 insertions(+), 361 deletions(-) delete mode 100644 src/prost/cosmos.evidence.v1beta1.rs diff --git a/src/COSMOS_ICS_COMMIT b/src/COSMOS_ICS_COMMIT index f2c4e503..53a649c6 100644 --- a/src/COSMOS_ICS_COMMIT +++ b/src/COSMOS_ICS_COMMIT @@ -1 +1 @@ -c881a1aad37f2f8041c913468602edaf69fef9bf +ea545b490b53b8e6f422492b4fb2820ab0bc140b diff --git a/src/prost/cosmos.evidence.v1beta1.rs b/src/prost/cosmos.evidence.v1beta1.rs deleted file mode 100644 index 66ee4789..00000000 --- a/src/prost/cosmos.evidence.v1beta1.rs +++ /dev/null @@ -1,18 +0,0 @@ -/// Equivocation implements the Evidence interface and defines evidence of double -/// signing misbehavior. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Equivocation { - /// height is the equivocation height. - #[prost(int64, tag = "1")] - pub height: i64, - /// time is the equivocation time. - #[prost(message, optional, tag = "2")] - pub time: ::core::option::Option, - /// power is the equivocation validator power. - #[prost(int64, tag = "3")] - pub power: i64, - /// consensus_address is the equivocation validator consensus address. - #[prost(string, tag = "4")] - pub consensus_address: ::prost::alloc::string::String, -} diff --git a/src/prost/interchain_security.ccv.consumer.v1.rs b/src/prost/interchain_security.ccv.consumer.v1.rs index 2030193f..10527306 100644 --- a/src/prost/interchain_security.ccv.consumer.v1.rs +++ b/src/prost/interchain_security.ccv.consumer.v1.rs @@ -1,74 +1,9 @@ -/// Params defines the parameters for CCV consumer module -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct Params { - /// TODO: Remove enabled flag and find a better way to setup integration tests - /// See: - #[prost(bool, tag = "1")] - pub enabled: bool, - /// ///////////////////// - /// Distribution Params - /// Number of blocks between ibc-token-transfers from the consumer chain to - /// the provider chain. Note that at this transmission event a fraction of - /// the accumulated tokens are divided and sent consumer redistribution - /// address. - #[prost(int64, tag = "2")] - pub blocks_per_distribution_transmission: i64, - /// Channel, and provider-chain receiving address to send distribution token - /// transfers over. These parameters is auto-set during the consumer <-> - /// provider handshake procedure. - #[prost(string, tag = "3")] - pub distribution_transmission_channel: ::prost::alloc::string::String, - #[prost(string, tag = "4")] - pub provider_fee_pool_addr_str: ::prost::alloc::string::String, - /// Sent CCV related IBC packets will timeout after this duration - #[prost(message, optional, tag = "5")] - pub ccv_timeout_period: ::core::option::Option< - super::super::super::super::google::protobuf::Duration, - >, - /// Sent transfer related IBC packets will timeout after this duration - #[prost(message, optional, tag = "6")] - pub transfer_timeout_period: ::core::option::Option< - super::super::super::super::google::protobuf::Duration, - >, - /// The fraction of tokens allocated to the consumer redistribution address - /// during distribution events. The fraction is a string representing a - /// decimal number. For example "0.75" would represent 75%. - #[prost(string, tag = "7")] - pub consumer_redistribution_fraction: ::prost::alloc::string::String, - /// The number of historical info entries to persist in store. - /// This param is a part of the cosmos sdk staking module. In the case of - /// a ccv enabled consumer chain, the ccv module acts as the staking module. - #[prost(int64, tag = "8")] - pub historical_entries: i64, - /// Unbonding period for the consumer, - /// which should be smaller than that of the provider in general. - #[prost(message, optional, tag = "9")] - pub unbonding_period: ::core::option::Option< - super::super::super::super::google::protobuf::Duration, - >, - /// The threshold for the percentage of validators at the bottom of the set who - /// can opt out of running the consumer chain without being punished. For example, a - /// value of 0.05 means that the validators in the bottom 5% of the set can opt out - #[prost(string, tag = "10")] - pub soft_opt_out_threshold: ::prost::alloc::string::String, - /// Reward denoms. These are the denominations which are allowed to be sent to the provider as rewards. - #[prost(string, repeated, tag = "11")] - pub reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - /// Provider-originated reward denoms. These are denoms coming from the provider - /// which are allowed to be used as rewards. e.g. "uatom" - #[prost(string, repeated, tag = "12")] - pub provider_reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, -} -/// LastTransmissionBlockHeight is the last time validator holding -/// pools were transmitted to the provider chain -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct LastTransmissionBlockHeight { - #[prost(int64, tag = "1")] - pub height: i64, -} -/// CrossChainValidator defines the validators for CCV consumer module +/// CrossChainValidator defines the type used to store validator information internal +/// to the consumer CCV module. Note one cross chain validator entry is persisted for +/// each consumer validator, where incoming VSC packets update this data, which is eventually +/// forwarded to comet for consumer chain consensus. +/// +/// Note this type is only used internally to the consumer CCV module. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CrossChainValidator { @@ -82,88 +17,20 @@ pub struct CrossChainValidator { super::super::super::super::google::protobuf::Any, >, } -/// MaturingVSCPacket contains the maturing time of a received VSCPacket +/// A record storing the state of a slash packet sent to the provider chain +/// which may bounce back and forth until handled by the provider. +/// +/// Note this type is only used internally to the consumer CCV module. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct MaturingVscPacket { - #[prost(uint64, tag = "1")] - pub vsc_id: u64, +pub struct SlashRecord { + #[prost(bool, tag = "1")] + pub waiting_on_reply: bool, #[prost(message, optional, tag = "2")] - pub maturity_time: ::core::option::Option< + pub send_time: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, >, } -/// GenesisState defines the CCV consumer chain genesis state -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct GenesisState { - #[prost(message, optional, tag = "1")] - pub params: ::core::option::Option, - /// empty for a new chain, filled in on restart. - #[prost(string, tag = "2")] - pub provider_client_id: ::prost::alloc::string::String, - /// empty for a new chain, filled in on restart. - #[prost(string, tag = "3")] - pub provider_channel_id: ::prost::alloc::string::String, - /// true for new chain GenesisState, false for chain restart. - #[prost(bool, tag = "4")] - pub new_chain: bool, - /// ProviderClientState filled in on new chain, nil on restart. - #[prost(message, optional, tag = "5")] - pub provider_client_state: ::core::option::Option< - super::super::super::super::ibc::lightclients::tendermint::v1::ClientState, - >, - /// ProviderConsensusState filled in on new chain, nil on restart. - #[prost(message, optional, tag = "6")] - pub provider_consensus_state: ::core::option::Option< - super::super::super::super::ibc::lightclients::tendermint::v1::ConsensusState, - >, - /// MaturingPackets nil on new chain, filled in on restart. - #[prost(message, repeated, tag = "7")] - pub maturing_packets: ::prost::alloc::vec::Vec, - /// InitialValset filled in on new chain and on restart. - #[prost(message, repeated, tag = "8")] - pub initial_val_set: ::prost::alloc::vec::Vec< - ::tendermint_proto::abci::ValidatorUpdate, - >, - /// HeightToValsetUpdateId nil on new chain, filled in on restart. - #[prost(message, repeated, tag = "9")] - pub height_to_valset_update_id: ::prost::alloc::vec::Vec, - /// OutstandingDowntimes nil on new chain, filled in on restart. - #[prost(message, repeated, tag = "10")] - pub outstanding_downtime_slashing: ::prost::alloc::vec::Vec, - /// PendingConsumerPackets nil on new chain, filled in on restart. - #[prost(message, optional, tag = "11")] - pub pending_consumer_packets: ::core::option::Option< - super::super::v1::ConsumerPacketDataList, - >, - /// LastTransmissionBlockHeight nil on new chain, filled in on restart. - #[prost(message, optional, tag = "12")] - pub last_transmission_block_height: ::core::option::Option< - LastTransmissionBlockHeight, - >, - /// flag indicating whether the consumer CCV module starts in pre-CCV state - #[prost(bool, tag = "13")] - pub pre_ccv: bool, -} -/// HeightValsetUpdateID defines the genesis information for the mapping -/// of each block height to a valset update id -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct HeightToValsetUpdateId { - #[prost(uint64, tag = "1")] - pub height: u64, - #[prost(uint64, tag = "2")] - pub valset_update_id: u64, -} -/// OutstandingDowntime defines the genesis information for each validator -/// flagged with an outstanding downtime slashing. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct OutstandingDowntime { - #[prost(string, tag = "1")] - pub validator_consensus_address: ::prost::alloc::string::String, -} /// NextFeeDistributionEstimate holds information about next fee distribution #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -208,7 +75,30 @@ pub struct QueryParamsRequest {} pub struct QueryParamsResponse { /// params holds all the parameters of this module. #[prost(message, optional, tag = "1")] - pub params: ::core::option::Option, + pub params: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct QueryProviderInfoRequest {} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct QueryProviderInfoResponse { + #[prost(message, optional, tag = "1")] + pub consumer: ::core::option::Option, + #[prost(message, optional, tag = "2")] + pub provider: ::core::option::Option, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ChainInfo { + #[prost(string, tag = "1")] + pub chain_id: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub client_id: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + pub connection_id: ::prost::alloc::string::String, + #[prost(string, tag = "4")] + pub channel_id: ::prost::alloc::string::String, } /// Generated client implementations. #[cfg(feature = "client")] @@ -361,6 +251,36 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } + pub async fn query_provider_info( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/interchain_security.ccv.consumer.v1.Query/QueryProviderInfo", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new( + "interchain_security.ccv.consumer.v1.Query", + "QueryProviderInfo", + ), + ); + self.inner.unary(req, path, codec).await + } } } /// Generated server implementations. @@ -388,6 +308,13 @@ pub mod query_server { tonic::Response, tonic::Status, >; + async fn query_provider_info( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; } #[derive(Debug)] pub struct QueryServer { @@ -561,6 +488,52 @@ pub mod query_server { }; Box::pin(fut) } + "/interchain_security.ccv.consumer.v1.Query/QueryProviderInfo" => { + #[allow(non_camel_case_types)] + struct QueryProviderInfoSvc(pub Arc); + impl< + T: Query, + > tonic::server::UnaryService + for QueryProviderInfoSvc { + type Response = super::QueryProviderInfoResponse; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + (*inner).query_provider_info(request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = QueryProviderInfoSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } _ => { Box::pin(async move { Ok( diff --git a/src/prost/interchain_security.ccv.provider.v1.rs b/src/prost/interchain_security.ccv.provider.v1.rs index 3dd032c5..261cf6e0 100644 --- a/src/prost/interchain_security.ccv.provider.v1.rs +++ b/src/prost/interchain_security.ccv.provider.v1.rs @@ -16,24 +16,8 @@ pub struct MsgAssignConsumerKey { #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MsgAssignConsumerKeyResponse {} -/// MsgRegisterConsumerRewardDenom allows an account to register -/// a consumer reward denom, i.e., add it to the list of denoms -/// accepted by the provider as rewards. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MsgRegisterConsumerRewardDenom { - #[prost(string, tag = "1")] - pub denom: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub depositor: ::prost::alloc::string::String, -} -/// MsgRegisterConsumerRewardDenomResponse defines the Msg/RegisterConsumerRewardDenom response type. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MsgRegisterConsumerRewardDenomResponse {} -/// MsgSubmitConsumerMisbehaviour defines a message that reports a misbehaviour -/// observed on a consumer chain -/// Note that the misbheaviour' headers must contain the same trusted states +/// MsgSubmitConsumerMisbehaviour defines a message that reports a light client attack, +/// also known as a misbehaviour, observed on a consumer chain #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MsgSubmitConsumerMisbehaviour { @@ -49,8 +33,8 @@ pub struct MsgSubmitConsumerMisbehaviour { #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MsgSubmitConsumerMisbehaviourResponse {} -/// MsgSubmitConsumerDoubleVoting defines a message that reports an equivocation -/// observed on a consumer chain +/// MsgSubmitConsumerDoubleVoting defines a message that reports +/// a double signing infraction observed on a consumer chain #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct MsgSubmitConsumerDoubleVoting { @@ -188,36 +172,6 @@ pub mod msg_client { ); self.inner.unary(req, path, codec).await } - pub async fn register_consumer_reward_denom( - &mut self, - request: impl tonic::IntoRequest, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - > { - self.inner - .ready() - .await - .map_err(|e| { - tonic::Status::new( - tonic::Code::Unknown, - format!("Service was not ready: {}", e.into()), - ) - })?; - let codec = tonic::codec::ProstCodec::default(); - let path = http::uri::PathAndQuery::from_static( - "/interchain_security.ccv.provider.v1.Msg/RegisterConsumerRewardDenom", - ); - let mut req = request.into_request(); - req.extensions_mut() - .insert( - GrpcMethod::new( - "interchain_security.ccv.provider.v1.Msg", - "RegisterConsumerRewardDenom", - ), - ); - self.inner.unary(req, path, codec).await - } pub async fn submit_consumer_misbehaviour( &mut self, request: impl tonic::IntoRequest, @@ -295,13 +249,6 @@ pub mod msg_server { tonic::Response, tonic::Status, >; - async fn register_consumer_reward_denom( - &self, - request: tonic::Request, - ) -> std::result::Result< - tonic::Response, - tonic::Status, - >; async fn submit_consumer_misbehaviour( &self, request: tonic::Request, @@ -441,54 +388,6 @@ pub mod msg_server { }; Box::pin(fut) } - "/interchain_security.ccv.provider.v1.Msg/RegisterConsumerRewardDenom" => { - #[allow(non_camel_case_types)] - struct RegisterConsumerRewardDenomSvc(pub Arc); - impl< - T: Msg, - > tonic::server::UnaryService - for RegisterConsumerRewardDenomSvc { - type Response = super::MsgRegisterConsumerRewardDenomResponse; - type Future = BoxFuture< - tonic::Response, - tonic::Status, - >; - fn call( - &mut self, - request: tonic::Request< - super::MsgRegisterConsumerRewardDenom, - >, - ) -> Self::Future { - let inner = Arc::clone(&self.0); - let fut = async move { - (*inner).register_consumer_reward_denom(request).await - }; - Box::pin(fut) - } - } - let accept_compression_encodings = self.accept_compression_encodings; - let send_compression_encodings = self.send_compression_encodings; - let max_decoding_message_size = self.max_decoding_message_size; - let max_encoding_message_size = self.max_encoding_message_size; - let inner = self.inner.clone(); - let fut = async move { - let inner = inner.0; - let method = RegisterConsumerRewardDenomSvc(inner); - let codec = tonic::codec::ProstCodec::default(); - let mut grpc = tonic::server::Grpc::new(codec) - .apply_compression_config( - accept_compression_encodings, - send_compression_encodings, - ) - .apply_max_message_size_config( - max_decoding_message_size, - max_encoding_message_size, - ); - let res = grpc.unary(method, req).await; - Ok(res) - }; - Box::pin(fut) - } "/interchain_security.ccv.provider.v1.Msg/SubmitConsumerMisbehaviour" => { #[allow(non_camel_case_types)] struct SubmitConsumerMisbehaviourSvc(pub Arc); @@ -622,9 +521,11 @@ pub mod msg_server { const NAME: &'static str = "interchain_security.ccv.provider.v1.Msg"; } } -/// ConsumerAdditionProposal is a governance proposal on the provider chain to spawn a new consumer chain. -/// If it passes, then all validators on the provider chain are expected to validate the consumer chain at spawn time -/// or get slashed. It is recommended that spawn time occurs after the proposal end time. +/// ConsumerAdditionProposal is a governance proposal on the provider chain to +/// spawn a new consumer chain. If it passes, then all validators on the provider +/// chain are expected to validate the consumer chain at spawn time or get +/// slashed. It is recommended that spawn time occurs after the proposal end +/// time. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerAdditionProposal { @@ -634,26 +535,30 @@ pub struct ConsumerAdditionProposal { /// the description of the proposal #[prost(string, tag = "2")] pub description: ::prost::alloc::string::String, - /// the proposed chain-id of the new consumer chain, must be different from all other consumer chain ids of the executing - /// provider chain. + /// the proposed chain-id of the new consumer chain, must be different from all + /// other consumer chain ids of the executing provider chain. #[prost(string, tag = "3")] pub chain_id: ::prost::alloc::string::String, /// the proposed initial height of new consumer chain. - /// For a completely new chain, this will be {0,1}. However, it may be different if this is a chain that is converting to a consumer chain. + /// For a completely new chain, this will be {0,1}. However, it may be + /// different if this is a chain that is converting to a consumer chain. #[prost(message, optional, tag = "4")] pub initial_height: ::core::option::Option< super::super::super::super::ibc::core::client::v1::Height, >, - /// The hash of the consumer chain genesis state without the consumer CCV module genesis params. - /// It is used for off-chain confirmation of genesis.json validity by validators and other parties. + /// The hash of the consumer chain genesis state without the consumer CCV + /// module genesis params. It is used for off-chain confirmation of + /// genesis.json validity by validators and other parties. #[prost(bytes = "vec", tag = "5")] pub genesis_hash: ::prost::alloc::vec::Vec, - /// The hash of the consumer chain binary that should be run by validators on chain initialization. - /// It is used for off-chain confirmation of binary validity by validators and other parties. + /// The hash of the consumer chain binary that should be run by validators on + /// chain initialization. It is used for off-chain confirmation of binary + /// validity by validators and other parties. #[prost(bytes = "vec", tag = "6")] pub binary_hash: ::prost::alloc::vec::Vec, - /// spawn time is the time on the provider chain at which the consumer chain genesis is finalized and all validators - /// will be responsible for starting their consumer chain validator node. + /// spawn time is the time on the provider chain at which the consumer chain + /// genesis is finalized and all validators will be responsible for starting + /// their consumer chain validator node. #[prost(message, optional, tag = "7")] pub spawn_time: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, @@ -679,8 +584,10 @@ pub struct ConsumerAdditionProposal { /// decimal number. For example "0.75" would represent 75%. #[prost(string, tag = "11")] pub consumer_redistribution_fraction: ::prost::alloc::string::String, - /// BlocksPerDistributionTransmission is the number of blocks between ibc-token-transfers from the consumer chain to the provider chain. - /// On sending transmission event, `consumer_redistribution_fraction` of the accumulated tokens are sent to the consumer redistribution address. + /// BlocksPerDistributionTransmission is the number of blocks between + /// ibc-token-transfers from the consumer chain to the provider chain. On + /// sending transmission event, `consumer_redistribution_fraction` of the + /// accumulated tokens are sent to the consumer redistribution address. #[prost(int64, tag = "12")] pub blocks_per_distribution_transmission: i64, /// The number of historical info entries to persist in store. @@ -691,15 +598,16 @@ pub struct ConsumerAdditionProposal { /// The ID of a token transfer channel used for the Reward Distribution /// sub-protocol. If DistributionTransmissionChannel == "", a new transfer /// channel is created on top of the same connection as the CCV channel. - /// Note that transfer_channel_id is the ID of the channel end on the consumer chain. - /// it is most relevant for chains performing a sovereign to consumer changeover - /// in order to maintan the existing ibc transfer channel + /// Note that transfer_channel_id is the ID of the channel end on the consumer + /// chain. it is most relevant for chains performing a sovereign to consumer + /// changeover in order to maintan the existing ibc transfer channel #[prost(string, tag = "14")] pub distribution_transmission_channel: ::prost::alloc::string::String, } -/// ConsumerRemovalProposal is a governance proposal on the provider chain to remove (and stop) a consumer chain. -/// If it passes, all the consumer chain's state is removed from the provider chain. The outstanding unbonding -/// operation funds are released. +/// ConsumerRemovalProposal is a governance proposal on the provider chain to +/// remove (and stop) a consumer chain. If it passes, all the consumer chain's +/// state is removed from the provider chain. The outstanding unbonding operation +/// funds are released. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerRemovalProposal { @@ -712,29 +620,34 @@ pub struct ConsumerRemovalProposal { /// the chain-id of the consumer chain to be stopped #[prost(string, tag = "3")] pub chain_id: ::prost::alloc::string::String, - /// the time on the provider chain at which all validators are responsible to stop their consumer chain validator node + /// the time on the provider chain at which all validators are responsible to + /// stop their consumer chain validator node #[prost(message, optional, tag = "4")] pub stop_time: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, >, } +/// ChangeRewardDenomsProposal is a governance proposal on the provider chain to +/// mutate the set of denoms accepted by the provider as rewards. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct EquivocationProposal { +pub struct ChangeRewardDenomsProposal { /// the title of the proposal #[prost(string, tag = "1")] pub title: ::prost::alloc::string::String, /// the description of the proposal #[prost(string, tag = "2")] pub description: ::prost::alloc::string::String, - /// the list of equivocations that will be processed - #[prost(message, repeated, tag = "3")] - pub equivocations: ::prost::alloc::vec::Vec< - super::super::super::super::cosmos::evidence::v1beta1::Equivocation, - >, + /// the list of consumer reward denoms to add + #[prost(string, repeated, tag = "3")] + pub denoms_to_add: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// the list of consumer reward denoms to remove + #[prost(string, repeated, tag = "4")] + pub denoms_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } -/// A persisted queue entry indicating that a slash packet data instance needs to be handled. -/// This type belongs in the "global" queue, to coordinate slash packet handling times between consumers. +/// A persisted queue entry indicating that a slash packet data instance needs to +/// be handled. This type belongs in the "global" queue, to coordinate slash +/// packet handling times between consumers. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GlobalSlashEntry { @@ -754,7 +667,8 @@ pub struct GlobalSlashEntry { /// The provider's consensus address of the validator being slashed. /// This field is used to obtain validator power in HandleThrottleQueues. /// - /// This field is not used in the store key, but is persisted in value bytes, see QueueGlobalSlashEntry. + /// This field is not used in the store key, but is persisted in value bytes, + /// see QueueGlobalSlashEntry. #[prost(bytes = "vec", tag = "4")] pub provider_val_cons_addr: ::prost::alloc::vec::Vec, } @@ -766,7 +680,8 @@ pub struct Params { pub template_client: ::core::option::Option< super::super::super::super::ibc::lightclients::tendermint::v1::ClientState, >, - /// TrustingPeriodFraction is used to compute the consumer and provider IBC client's TrustingPeriod from the chain defined UnbondingPeriod + /// TrustingPeriodFraction is used to compute the consumer and provider IBC + /// client's TrustingPeriod from the chain defined UnbondingPeriod #[prost(string, tag = "2")] pub trusting_period_fraction: ::prost::alloc::string::String, /// Sent IBC packets will timeout after this duration @@ -774,7 +689,8 @@ pub struct Params { pub ccv_timeout_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, >, - /// The channel initialization (IBC channel opening handshake) will timeout after this duration + /// The channel initialization (IBC channel opening handshake) will timeout + /// after this duration #[prost(message, optional, tag = "4")] pub init_timeout_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, @@ -792,8 +708,9 @@ pub struct Params { pub slash_meter_replenish_period: ::core::option::Option< super::super::super::super::google::protobuf::Duration, >, - /// The fraction of total voting power that is replenished to the slash meter every replenish period. - /// This param also serves as a maximum fraction of total voting power that the slash meter can hold. + /// The fraction of total voting power that is replenished to the slash meter + /// every replenish period. This param also serves as a maximum fraction of + /// total voting power that the slash meter can hold. #[prost(string, tag = "7")] pub slash_meter_replenish_fraction: ::prost::alloc::string::String, /// The maximum amount of throttled slash or vsc matured packets @@ -806,23 +723,16 @@ pub struct Params { super::super::super::super::cosmos::base::v1beta1::Coin, >, } -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct HandshakeMetadata { - #[prost(string, tag = "1")] - pub provider_fee_pool_addr: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub version: ::prost::alloc::string::String, -} /// SlashAcks contains cons addresses of consumer chain validators -/// successfully slashed on the provider chain +/// successfully slashed on the provider chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SlashAcks { #[prost(string, repeated, tag = "1")] pub addresses: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } -/// ConsumerAdditionProposals holds pending governance proposals on the provider chain to spawn a new chain. +/// ConsumerAdditionProposals holds pending governance proposals on the provider +/// chain to spawn a new chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerAdditionProposals { @@ -830,7 +740,8 @@ pub struct ConsumerAdditionProposals { #[prost(message, repeated, tag = "1")] pub pending: ::prost::alloc::vec::Vec, } -/// ConsumerRemovalProposals holds pending governance proposals on the provider chain to remove (and stop) a consumer chain. +/// ConsumerRemovalProposals holds pending governance proposals on the provider +/// chain to remove (and stop) a consumer chain. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerRemovalProposals { @@ -894,6 +805,30 @@ pub struct VscSendTimestamp { super::super::super::super::google::protobuf::Timestamp, >, } +/// ValidatorSetChangePackets is a pb list of ccv.ValidatorSetChangePacketData. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ValidatorSetChangePackets { + #[prost(message, repeated, tag = "1")] + pub list: ::prost::alloc::vec::Vec, +} +/// MaturedUnbondingOps defines a list of ids corresponding to ids of matured +/// unbonding operations. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MaturedUnbondingOps { + #[prost(uint64, repeated, tag = "1")] + pub ids: ::prost::alloc::vec::Vec, +} +/// ExportedVscSendTimestamps is VscSendTimestamp with chainID info for exporting to genesis +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ExportedVscSendTimestamp { + #[prost(string, tag = "1")] + pub chain_id: ::prost::alloc::string::String, + #[prost(message, repeated, tag = "2")] + pub vsc_send_timestamps: ::prost::alloc::vec::Vec, +} #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct KeyAssignmentReplacement { @@ -905,7 +840,8 @@ pub struct KeyAssignmentReplacement { pub power: i64, } /// Used to serialize the ValidatorConsumerPubKey index from key assignment -/// ValidatorConsumerPubKey: (chainID, providerAddr consAddr) -> consumerKey tmprotocrypto.PublicKey +/// ValidatorConsumerPubKey: (chainID, providerAddr consAddr) -> consumerKey +/// tmprotocrypto.PublicKey #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ValidatorConsumerPubKey { @@ -917,7 +853,8 @@ pub struct ValidatorConsumerPubKey { pub consumer_key: ::core::option::Option<::tendermint_proto::crypto::PublicKey>, } /// Used to serialize the ValidatorConsumerAddr index from key assignment -/// ValidatorByConsumerAddr: (chainID, consumerAddr consAddr) -> providerAddr consAddr +/// ValidatorByConsumerAddr: (chainID, consumerAddr consAddr) -> providerAddr +/// consAddr #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ValidatorByConsumerAddr { @@ -950,7 +887,7 @@ pub struct QueryConsumerGenesisRequest { #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryConsumerGenesisResponse { #[prost(message, optional, tag = "1")] - pub genesis_state: ::core::option::Option, + pub genesis_state: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -1030,11 +967,12 @@ pub struct QueryThrottleStateResponse { /// current slash_meter state #[prost(int64, tag = "1")] pub slash_meter: i64, - /// allowance of voting power units (int) that the slash meter is given per replenish period - /// this also serves as the max value for the meter. + /// allowance of voting power units (int) that the slash meter is given per + /// replenish period this also serves as the max value for the meter. #[prost(int64, tag = "2")] pub slash_meter_allowance: i64, - /// next time the slash meter could potentially be replenished, iff it's not full + /// next time the slash meter could potentially be replenished, iff it's not + /// full #[prost(message, optional, tag = "3")] pub next_replenish_candidate: ::core::option::Option< super::super::super::super::google::protobuf::Timestamp, @@ -1059,7 +997,8 @@ pub struct QueryThrottledConsumerPacketDataResponse { #[prost(message, repeated, tag = "3")] pub packet_data_instances: ::prost::alloc::vec::Vec, } -/// A query wrapper type for the global entry and data relevant to a throttled slash packet. +/// A query wrapper type for the global entry and data relevant to a throttled +/// slash packet. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ThrottledSlashPacket { @@ -1068,7 +1007,8 @@ pub struct ThrottledSlashPacket { #[prost(message, optional, tag = "2")] pub data: ::core::option::Option, } -/// ThrottledPacketDataWrapper contains either SlashPacketData or VSCMaturedPacketData +/// ThrottledPacketDataWrapper contains either SlashPacketData or +/// VSCMaturedPacketData #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ThrottledPacketDataWrapper { @@ -1375,7 +1315,8 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryThrottleState returns the main on-chain state relevant to currently throttled slash packets + /// QueryThrottleState returns the main on-chain state relevant to currently + /// throttled slash packets pub async fn query_throttle_state( &mut self, request: impl tonic::IntoRequest, @@ -1406,8 +1347,8 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryThrottledConsumerPacketData returns a list of pending packet data instances - /// (slash packet and vsc matured) for a single consumer chain + /// QueryThrottledConsumerPacketData returns a list of pending packet data + /// instances (slash packet and vsc matured) for a single consumer chain pub async fn query_throttled_consumer_packet_data( &mut self, request: impl tonic::IntoRequest< @@ -1440,7 +1381,8 @@ pub mod query_client { ); self.inner.unary(req, path, codec).await } - /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward denoms that are registered + /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward + /// denoms that are registered pub async fn query_registered_consumer_reward_denoms( &mut self, request: impl tonic::IntoRequest< @@ -1535,7 +1477,8 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryThrottleState returns the main on-chain state relevant to currently throttled slash packets + /// QueryThrottleState returns the main on-chain state relevant to currently + /// throttled slash packets async fn query_throttle_state( &self, request: tonic::Request, @@ -1543,8 +1486,8 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryThrottledConsumerPacketData returns a list of pending packet data instances - /// (slash packet and vsc matured) for a single consumer chain + /// QueryThrottledConsumerPacketData returns a list of pending packet data + /// instances (slash packet and vsc matured) for a single consumer chain async fn query_throttled_consumer_packet_data( &self, request: tonic::Request, @@ -1552,7 +1495,8 @@ pub mod query_server { tonic::Response, tonic::Status, >; - /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward denoms that are registered + /// QueryRegisteredConsumerRewardDenoms returns a list of consumer reward + /// denoms that are registered async fn query_registered_consumer_reward_denoms( &self, request: tonic::Request, @@ -2130,9 +2074,7 @@ pub struct GenesisState { pub unbonding_ops: ::prost::alloc::vec::Vec, /// empty for a new chain #[prost(message, optional, tag = "4")] - pub mature_unbonding_ops: ::core::option::Option< - super::super::v1::MaturedUnbondingOps, - >, + pub mature_unbonding_ops: ::core::option::Option, /// empty for a new chain #[prost(message, repeated, tag = "5")] pub valset_update_id_to_height: ::prost::alloc::vec::Vec, @@ -2153,8 +2095,14 @@ pub struct GenesisState { /// empty for a new chain #[prost(message, repeated, tag = "11")] pub consumer_addrs_to_prune: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag = "12")] + pub init_timeout_timestamps: ::prost::alloc::vec::Vec, + #[prost(message, repeated, tag = "13")] + pub exported_vsc_send_timestamps: ::prost::alloc::vec::Vec, } -/// consumer chain +/// The provider CCV module's knowledge of consumer state. +/// +/// Note this type is only used internally to the provider CCV module. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct ConsumerState { @@ -2172,17 +2120,17 @@ pub struct ConsumerState { pub initial_height: u64, /// ConsumerGenesis defines the initial consumer chain genesis states #[prost(message, optional, tag = "5")] - pub consumer_genesis: ::core::option::Option< - super::super::consumer::v1::GenesisState, - >, - /// PendingValsetChanges defines the pending validator set changes for the consumer chain + pub consumer_genesis: ::core::option::Option, + /// PendingValsetChanges defines the pending validator set changes for the + /// consumer chain #[prost(message, repeated, tag = "6")] pub pending_valset_changes: ::prost::alloc::vec::Vec< super::super::v1::ValidatorSetChangePacketData, >, #[prost(string, repeated, tag = "7")] pub slash_downtime_ack: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, - /// UnbondingOpsIndex defines the unbonding operations waiting on this consumer chain + /// UnbondingOpsIndex defines the unbonding operations waiting on this consumer + /// chain #[prost(message, repeated, tag = "8")] pub unbonding_ops_index: ::prost::alloc::vec::Vec, } diff --git a/src/prost/interchain_security.ccv.v1.rs b/src/prost/interchain_security.ccv.v1.rs index ba6f17cd..1ded3981 100644 --- a/src/prost/interchain_security.ccv.v1.rs +++ b/src/prost/interchain_security.ccv.v1.rs @@ -17,13 +17,6 @@ pub struct ValidatorSetChangePacketData { #[prost(string, repeated, tag = "3")] pub slash_acks: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } -/// List of ccv.ValidatorSetChangePacketData. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct ValidatorSetChangePackets { - #[prost(message, repeated, tag = "1")] - pub list: ::prost::alloc::vec::Vec, -} /// This packet is sent from the consumer chain to the provider chain /// to notify that a VSC packet reached maturity on the consumer chain. #[allow(clippy::derive_partial_eq_without_eq)] @@ -46,18 +39,11 @@ pub struct SlashPacketData { pub valset_update_id: u64, /// tell if the slashing is for a downtime or a double-signing infraction #[prost( - enumeration = "super::super::super::cosmos::staking::v1beta1::InfractionType", + enumeration = "super::super::super::cosmos::staking::v1beta1::Infraction", tag = "3" )] pub infraction: i32, } -/// MaturedUnbondingOps defines a list of ids corresponding to ids of matured unbonding operations. -#[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] -pub struct MaturedUnbondingOps { - #[prost(uint64, repeated, tag = "1")] - pub ids: ::prost::alloc::vec::Vec, -} /// ConsumerPacketData contains a consumer packet data and a type tag #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] @@ -78,12 +64,49 @@ pub mod consumer_packet_data { VscMaturedPacketData(super::VscMaturedPacketData), } } -/// ConsumerPacketDataList is a list of consumer packet data packets. +/// Note this type is used during IBC handshake methods for both the consumer and provider #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] -pub struct ConsumerPacketDataList { - #[prost(message, repeated, tag = "1")] - pub list: ::prost::alloc::vec::Vec, +pub struct HandshakeMetadata { + #[prost(string, tag = "1")] + pub provider_fee_pool_addr: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub version: ::prost::alloc::string::String, +} +/// ConsumerPacketData contains a consumer packet data and a type tag +/// that is compatible with ICS v1 and v2 over the wire. It is not used for internal storage. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ConsumerPacketDataV1 { + #[prost(enumeration = "ConsumerPacketDataType", tag = "1")] + pub r#type: i32, + #[prost(oneof = "consumer_packet_data_v1::Data", tags = "2, 3")] + pub data: ::core::option::Option, +} +/// Nested message and enum types in `ConsumerPacketDataV1`. +pub mod consumer_packet_data_v1 { + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Clone, PartialEq, ::prost::Oneof)] + pub enum Data { + #[prost(message, tag = "2")] + SlashPacketData(super::SlashPacketDataV1), + #[prost(message, tag = "3")] + VscMaturedPacketData(super::VscMaturedPacketData), + } +} +/// This packet is sent from the consumer chain to the provider chain +/// It is backward compatible with the ICS v1 and v2 version of the packet. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SlashPacketDataV1 { + #[prost(message, optional, tag = "1")] + pub validator: ::core::option::Option<::tendermint_proto::abci::Validator>, + /// map to the infraction block height on the provider + #[prost(uint64, tag = "2")] + pub valset_update_id: u64, + /// tell if the slashing is for a downtime or a double-signing infraction + #[prost(enumeration = "InfractionType", tag = "3")] + pub infraction: i32, } /// ConsumerPacketType indicates interchain security specific packet types. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] @@ -124,3 +147,214 @@ impl ConsumerPacketDataType { } } } +/// InfractionType indicates the infraction type a validator commited. +/// Note ccv.InfractionType to maintain compatibility between ICS versions +/// using different versions of the cosmos-sdk and ibc-go modules. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum InfractionType { + /// UNSPECIFIED defines an empty infraction type. + Unspecified = 0, + /// DOUBLE_SIGN defines a validator that double-signs a block. + DoubleSign = 1, + /// DOWNTIME defines a validator that missed signing too many blocks. + Downtime = 2, +} +impl InfractionType { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + InfractionType::Unspecified => "INFRACTION_TYPE_UNSPECIFIED", + InfractionType::DoubleSign => "INFRACTION_TYPE_DOUBLE_SIGN", + InfractionType::Downtime => "INFRACTION_TYPE_DOWNTIME", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "INFRACTION_TYPE_UNSPECIFIED" => Some(Self::Unspecified), + "INFRACTION_TYPE_DOUBLE_SIGN" => Some(Self::DoubleSign), + "INFRACTION_TYPE_DOWNTIME" => Some(Self::Downtime), + _ => None, + } + } +} +/// ConsumerParams defines the parameters for CCV consumer module. +/// +/// Note this type is referenced in both the consumer and provider CCV modules, +/// and persisted on the provider, see MakeConsumerGenesis and SetConsumerGenesis. +/// +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ConsumerParams { + /// TODO: Remove enabled flag and find a better way to setup integration tests + /// See: + #[prost(bool, tag = "1")] + pub enabled: bool, + /// ///////////////////// + /// Distribution Params + /// Number of blocks between ibc-token-transfers from the consumer chain to + /// the provider chain. Note that at this transmission event a fraction of + /// the accumulated tokens are divided and sent consumer redistribution + /// address. + #[prost(int64, tag = "2")] + pub blocks_per_distribution_transmission: i64, + /// Channel, and provider-chain receiving address to send distribution token + /// transfers over. These parameters is auto-set during the consumer <-> + /// provider handshake procedure. + #[prost(string, tag = "3")] + pub distribution_transmission_channel: ::prost::alloc::string::String, + #[prost(string, tag = "4")] + pub provider_fee_pool_addr_str: ::prost::alloc::string::String, + /// Sent CCV related IBC packets will timeout after this duration + #[prost(message, optional, tag = "5")] + pub ccv_timeout_period: ::core::option::Option< + super::super::super::google::protobuf::Duration, + >, + /// Sent transfer related IBC packets will timeout after this duration + #[prost(message, optional, tag = "6")] + pub transfer_timeout_period: ::core::option::Option< + super::super::super::google::protobuf::Duration, + >, + /// The fraction of tokens allocated to the consumer redistribution address + /// during distribution events. The fraction is a string representing a + /// decimal number. For example "0.75" would represent 75%. + #[prost(string, tag = "7")] + pub consumer_redistribution_fraction: ::prost::alloc::string::String, + /// The number of historical info entries to persist in store. + /// This param is a part of the cosmos sdk staking module. In the case of + /// a ccv enabled consumer chain, the ccv module acts as the staking module. + #[prost(int64, tag = "8")] + pub historical_entries: i64, + /// Unbonding period for the consumer, + /// which should be smaller than that of the provider in general. + #[prost(message, optional, tag = "9")] + pub unbonding_period: ::core::option::Option< + super::super::super::google::protobuf::Duration, + >, + /// The threshold for the percentage of validators at the bottom of the set who + /// can opt out of running the consumer chain without being punished. For + /// example, a value of 0.05 means that the validators in the bottom 5% of the + /// set can opt out + #[prost(string, tag = "10")] + pub soft_opt_out_threshold: ::prost::alloc::string::String, + /// Reward denoms. These are the denominations which are allowed to be sent to + /// the provider as rewards. + #[prost(string, repeated, tag = "11")] + pub reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + /// Provider-originated reward denoms. These are denoms coming from the + /// provider which are allowed to be used as rewards. e.g. "uatom" + #[prost(string, repeated, tag = "12")] + pub provider_reward_denoms: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +/// ConsumerGenesisState defines the CCV consumer chain genesis state. +/// +/// Note this type is referenced in both the consumer and provider CCV modules, +/// and persisted on the provider, see MakeConsumerGenesis and SetConsumerGenesis. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ConsumerGenesisState { + #[prost(message, optional, tag = "1")] + pub params: ::core::option::Option, + /// empty for a new chain, filled in on restart. + #[prost(string, tag = "2")] + pub provider_client_id: ::prost::alloc::string::String, + /// empty for a new chain, filled in on restart. + #[prost(string, tag = "3")] + pub provider_channel_id: ::prost::alloc::string::String, + /// true for new chain, false for chain restart. + #[prost(bool, tag = "4")] + pub new_chain: bool, + /// ProviderClientState filled in on new chain, nil on restart. + #[prost(message, optional, tag = "5")] + pub provider_client_state: ::core::option::Option< + super::super::super::ibc::lightclients::tendermint::v1::ClientState, + >, + /// ProviderConsensusState filled in on new chain, nil on restart. + #[prost(message, optional, tag = "6")] + pub provider_consensus_state: ::core::option::Option< + super::super::super::ibc::lightclients::tendermint::v1::ConsensusState, + >, + /// MaturingPackets nil on new chain, filled in on restart. + #[prost(message, repeated, tag = "7")] + pub maturing_packets: ::prost::alloc::vec::Vec, + /// InitialValset filled in on new chain and on restart. + #[prost(message, repeated, tag = "8")] + pub initial_val_set: ::prost::alloc::vec::Vec< + ::tendermint_proto::abci::ValidatorUpdate, + >, + /// HeightToValsetUpdateId nil on new chain, filled in on restart. + #[prost(message, repeated, tag = "9")] + pub height_to_valset_update_id: ::prost::alloc::vec::Vec, + /// OutstandingDowntimes nil on new chain, filled in on restart. + #[prost(message, repeated, tag = "10")] + pub outstanding_downtime_slashing: ::prost::alloc::vec::Vec, + /// PendingConsumerPackets nil on new chain, filled in on restart. + #[prost(message, optional, tag = "11")] + pub pending_consumer_packets: ::core::option::Option, + /// LastTransmissionBlockHeight nil on new chain, filled in on restart. + #[prost(message, optional, tag = "12")] + pub last_transmission_block_height: ::core::option::Option< + LastTransmissionBlockHeight, + >, + /// flag indicating whether the consumer CCV module starts in + #[prost(bool, tag = "13")] + pub pre_ccv: bool, +} +/// HeightValsetUpdateID represents a mapping internal to the consumer CCV module +/// AND used in shared consumer genesis state, which links a block height to each recv valset update id. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct HeightToValsetUpdateId { + #[prost(uint64, tag = "1")] + pub height: u64, + #[prost(uint64, tag = "2")] + pub valset_update_id: u64, +} +/// OutstandingDowntime defines the type used internally to the consumer CCV module, +/// AND used in shared consumer genesis state, in order to not send multiple slashing +/// requests for the same downtime infraction. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OutstandingDowntime { + #[prost(string, tag = "1")] + pub validator_consensus_address: ::prost::alloc::string::String, +} +/// LastTransmissionBlockHeight is the last time validator holding +/// pools were transmitted to the provider chain. This type is used internally +/// to the consumer CCV module AND used in shared consumer genesis state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct LastTransmissionBlockHeight { + #[prost(int64, tag = "1")] + pub height: i64, +} +/// MaturingVSCPacket represents a vsc packet that is maturing internal to the +/// consumer CCV module, where the consumer has not yet relayed a VSCMatured packet +/// back to the provider. This type is used internally to the consumer CCV module +/// AND used in shared consumer genesis state. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct MaturingVscPacket { + #[prost(uint64, tag = "1")] + pub vsc_id: u64, + #[prost(message, optional, tag = "2")] + pub maturity_time: ::core::option::Option< + super::super::super::google::protobuf::Timestamp, + >, +} +/// ConsumerPacketDataList is a list of consumer packet data packets. +/// +/// Note this type is is used internally to the consumer CCV module +/// for exporting / importing state in InitGenesis and ExportGenesis, +/// AND included in the consumer genesis type (reffed by provider and consumer modules), +/// hence this is a shared type. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ConsumerPacketDataList { + #[prost(message, repeated, tag = "1")] + pub list: ::prost::alloc::vec::Vec, +} diff --git a/src/prost/proto_descriptor.bin b/src/prost/proto_descriptor.bin index f684a3fb358b2c7bc1c295121d33fb95ad949f70..d8d01bf06aa64b6244759d5af6ddb358c2c3b058 100644 GIT binary patch delta 24503 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 From 2e3a519789121b9d42c5b3dc8b2c41e8227220c6 Mon Sep 17 00:00:00 2001 From: Romain Ruetschi <106849+romac@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:26:19 +0200 Subject: [PATCH 3/6] Expose ICS commit as a constant --- src/lib.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index cc189020..1707e163 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,9 @@ pub const COSMOS_SDK_COMMIT: &str = include_str!("COSMOS_SDK_COMMIT"); /// The version (commit hash) of IBC Go used when generating this library. pub const IBC_GO_COMMIT: &str = include_str!("IBC_GO_COMMIT"); +/// The version (commit hash) of Interchain Security used when generating this library. +pub const INTERCHAIN_SECURITY_COMMIT: &str = include_str!("COSMOS_ICS_COMMIT"); + /// File descriptor set of compiled proto. #[cfg(feature = "proto-descriptor")] pub const FILE_DESCRIPTOR_SET: &[u8] = include_bytes!("prost/proto_descriptor.bin"); From 291cd38dab8661affd523480738e2e87462d1dce Mon Sep 17 00:00:00 2001 From: Romain Ruetschi <106849+romac@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:27:43 +0200 Subject: [PATCH 4/6] Remove now non-existent module `cosmos.evidence.v1beta1` --- src/lib.rs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1707e163..9da5bfeb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,11 +66,6 @@ pub mod cosmos { } } } - pub mod evidence { - pub mod v1beta1 { - include_proto!("cosmos.evidence.v1beta1.rs"); - } - } pub mod staking { pub mod v1beta1 { include_proto!("cosmos.staking.v1beta1.rs"); From d2ad2bb75d42323c31f6f0697a57a723e9a0b9d7 Mon Sep 17 00:00:00 2001 From: Romain Ruetschi <106849+romac@users.noreply.github.com> Date: Wed, 4 Oct 2023 14:29:16 +0200 Subject: [PATCH 5/6] Rename `COSMOS_ICS_COMMIT` to `INTERCHAIN_SECURITY_COMMIT` --- scripts/sync-protobuf.sh | 8 ++++---- src/{COSMOS_ICS_COMMIT => INTERCHAIN_SECURITY_COMMIT} | 0 src/lib.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/{COSMOS_ICS_COMMIT => INTERCHAIN_SECURITY_COMMIT} (100%) diff --git a/scripts/sync-protobuf.sh b/scripts/sync-protobuf.sh index 149706aa..89544f44 100755 --- a/scripts/sync-protobuf.sh +++ b/scripts/sync-protobuf.sh @@ -29,17 +29,17 @@ COSMOS_ICS_GIT="${COSMOS_ICS_GIT:-$CACHE_PATH/cosmos/interchain-security.git}" COSMOS_SDK_COMMIT="$(cat src/COSMOS_SDK_COMMIT)" IBC_GO_COMMIT="$(cat src/IBC_GO_COMMIT)" -COSMOS_ICS_COMMIT="$(cat src/COSMOS_ICS_COMMIT)" +INTERCHAIN_SECURITY_COMMIT="$(cat src/INTERCHAIN_SECURITY_COMMIT)" echo "COSMOS_SDK_COMMIT: $COSMOS_SDK_COMMIT" echo "IBC_GO_COMMIT: $IBC_GO_COMMIT" -echo "COSMOS_ICS_COMMIT: $COSMOS_ICS_COMMIT" +echo "INTERCHAIN_SECURITY_COMMIT: $INTERCHAIN_SECURITY_COMMIT" # Use either --ics-commit flag for commit ID, # or --ics-tag for git tag. Because we can't modify # proto-compiler to have smart detection on that. -if [[ "$COSMOS_ICS_COMMIT" =~ ^[a-zA-Z0-9]{40}$ ]] +if [[ "$INTERCHAIN_SECURITY_COMMIT" =~ ^[a-zA-Z0-9]{40}$ ]] then ICS_COMMIT_OPTION="--ics-commit" else @@ -111,7 +111,7 @@ COSMOS_ICS_DIR=$(mktemp -d /tmp/interchain-security-XXXXXXXX) pushd "$COSMOS_ICS_DIR" git clone "$COSMOS_ICS_GIT" . -git checkout -b "$COSMOS_ICS_COMMIT" "$COSMOS_ICS_COMMIT" +git checkout -b "$INTERCHAIN_SECURITY_COMMIT" "$INTERCHAIN_SECURITY_COMMIT" cd proto buf mod update diff --git a/src/COSMOS_ICS_COMMIT b/src/INTERCHAIN_SECURITY_COMMIT similarity index 100% rename from src/COSMOS_ICS_COMMIT rename to src/INTERCHAIN_SECURITY_COMMIT diff --git a/src/lib.rs b/src/lib.rs index 9da5bfeb..8f89272a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,7 +32,7 @@ pub const COSMOS_SDK_COMMIT: &str = include_str!("COSMOS_SDK_COMMIT"); pub const IBC_GO_COMMIT: &str = include_str!("IBC_GO_COMMIT"); /// The version (commit hash) of Interchain Security used when generating this library. -pub const INTERCHAIN_SECURITY_COMMIT: &str = include_str!("COSMOS_ICS_COMMIT"); +pub const INTERCHAIN_SECURITY_COMMIT: &str = include_str!("INTERCHAIN_SECURITY_COMMIT"); /// File descriptor set of compiled proto. #[cfg(feature = "proto-descriptor")] From 04ed4d3c84b65cd60a7e536917d8183e4381fac7 Mon Sep 17 00:00:00 2001 From: Romain Ruetschi Date: Thu, 19 Oct 2023 17:31:26 +0200 Subject: [PATCH 6/6] Add changelog entry --- .changelog/unreleased/features/113-ccv-protos.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .changelog/unreleased/features/113-ccv-protos.md diff --git a/.changelog/unreleased/features/113-ccv-protos.md b/.changelog/unreleased/features/113-ccv-protos.md new file mode 100644 index 00000000..f6893293 --- /dev/null +++ b/.changelog/unreleased/features/113-ccv-protos.md @@ -0,0 +1,2 @@ +- Update CCV provider protos to include misbehaviour-related messages + ([\#113](https://github.com/cosmos/ibc-proto-rs/issues/113)) \ No newline at end of file