Skip to content

Commit

Permalink
Minor refactoring (#502)
Browse files Browse the repository at this point in the history
* Use raw proto Version type

* Simplify trait bounds of connection handshake message builders

* Add self to try_extract_connection_open_try_event

* Fix ProvideCosmosEvents

* Implement WithProvider for HasConnectionIdType

* Implement WithProvider for ProvideConnectionEndType

* Simplify trait bounds

* Update dependencies
  • Loading branch information
soareschen authored Dec 17, 2024
1 parent a0e6b3e commit 73b4324
Show file tree
Hide file tree
Showing 21 changed files with 392 additions and 304 deletions.
478 changes: 249 additions & 229 deletions Cargo.lock

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
use core::marker::PhantomData;

use cgp::core::error::HasErrorType;
use hermes_chain_type_components::traits::types::height::HasHeightType;
use hermes_chain_type_components::traits::types::ibc::client_id::HasClientIdType;
use hermes_chain_type_components::traits::types::ibc::connection_id::HasConnectionIdType;

use crate::traits::commitment_prefix::HasIbcCommitmentPrefix;
use crate::traits::payload_builders::connection_handshake::{
Expand All @@ -16,7 +19,6 @@ use crate::traits::types::connection::{
HasConnectionOpenInitPayloadType, HasConnectionOpenTryPayloadType,
};
use crate::traits::types::consensus_state::HasConsensusStateType;
use crate::traits::types::ibc::HasIbcChainTypes;
use crate::traits::types::proof::HasCommitmentProofHeight;
use crate::types::payloads::connection::{
ConnectionOpenAckPayload, ConnectionOpenConfirmPayload, ConnectionOpenInitPayload,
Expand Down Expand Up @@ -176,7 +178,9 @@ where
Chain: HasConnectionOpenConfirmPayloadType<
Counterparty,
ConnectionOpenConfirmPayload = ConnectionOpenConfirmPayload<Chain>,
> + HasIbcChainTypes<Counterparty>
> + HasHeightType
+ HasClientIdType<Counterparty>
+ HasConnectionIdType<Counterparty>
+ HasClientStateType<Counterparty>
+ HasCommitmentProofHeight
+ CanQueryConnectionEndWithProofs<Counterparty>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,27 @@
use cgp::core::component::UseDelegate;
use cgp::prelude::*;
use hermes_chain_type_components::traits::types::ibc::client_id::HasClientIdType;
use hermes_chain_type_components::traits::types::ibc::connection_id::HasConnectionIdType;
use hermes_chain_type_components::traits::types::message::HasMessageType;

use crate::traits::types::connection::{
HasConnectionOpenAckPayloadType, HasConnectionOpenConfirmPayloadType,
HasConnectionOpenInitPayloadType, HasConnectionOpenTryPayloadType,
HasInitConnectionOptionsType,
};
use crate::traits::types::ibc::HasIbcChainTypes;

#[cgp_component {
provider: ConnectionOpenInitMessageBuilder,
context: Chain,
}]
#[async_trait]
pub trait CanBuildConnectionOpenInitMessage<Counterparty>:
HasInitConnectionOptionsType<Counterparty> + HasIbcChainTypes<Counterparty> + HasErrorType
HasInitConnectionOptionsType<Counterparty>
+ HasClientIdType<Counterparty>
+ HasMessageType
+ HasErrorType
where
Counterparty: HasConnectionOpenInitPayloadType<Self> + HasIbcChainTypes<Self>,
Counterparty: HasConnectionOpenInitPayloadType<Self> + HasClientIdType<Self>,
{
async fn build_connection_open_init_message(
&self,
Expand All @@ -33,9 +38,10 @@ where
}]
#[async_trait]
pub trait CanBuildConnectionOpenTryMessage<Counterparty>:
HasIbcChainTypes<Counterparty> + HasErrorType
HasMessageType + HasClientIdType<Counterparty> + HasErrorType
where
Counterparty: HasConnectionOpenTryPayloadType<Self> + HasIbcChainTypes<Self>,
Counterparty:
HasConnectionOpenTryPayloadType<Self> + HasClientIdType<Self> + HasConnectionIdType<Self>,
{
async fn build_connection_open_try_message(
&self,
Expand All @@ -52,9 +58,9 @@ where
}]
#[async_trait]
pub trait CanBuildConnectionOpenAckMessage<Counterparty>:
HasIbcChainTypes<Counterparty> + HasErrorType
HasMessageType + HasConnectionIdType<Counterparty> + HasErrorType
where
Counterparty: HasConnectionOpenAckPayloadType<Self> + HasIbcChainTypes<Self>,
Counterparty: HasConnectionOpenAckPayloadType<Self> + HasConnectionIdType<Self>,
{
async fn build_connection_open_ack_message(
&self,
Expand All @@ -70,7 +76,7 @@ where
}]
#[async_trait]
pub trait CanBuildConnectionOpenConfirmMessage<Counterparty>:
HasIbcChainTypes<Counterparty> + HasErrorType
HasMessageType + HasConnectionIdType<Counterparty> + HasErrorType
where
Counterparty: HasConnectionOpenConfirmPayloadType<Self>,
{
Expand All @@ -84,9 +90,11 @@ where
impl<Chain, Counterparty, Components, Delegate>
ConnectionOpenInitMessageBuilder<Chain, Counterparty> for UseDelegate<Components>
where
Chain:
HasInitConnectionOptionsType<Counterparty> + HasIbcChainTypes<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenInitPayloadType<Chain> + HasIbcChainTypes<Chain>,
Chain: HasInitConnectionOptionsType<Counterparty>
+ HasClientIdType<Counterparty>
+ HasMessageType
+ HasErrorType,
Counterparty: HasConnectionOpenInitPayloadType<Chain> + HasClientIdType<Chain>,
Delegate: ConnectionOpenInitMessageBuilder<Chain, Counterparty>,
Components: DelegateComponent<Counterparty, Delegate = Delegate>,
{
Expand All @@ -111,8 +119,10 @@ where
impl<Chain, Counterparty, Components, Delegate> ConnectionOpenTryMessageBuilder<Chain, Counterparty>
for UseDelegate<Components>
where
Chain: HasIbcChainTypes<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenTryPayloadType<Chain> + HasIbcChainTypes<Chain>,
Chain: HasMessageType + HasClientIdType<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenTryPayloadType<Chain>
+ HasClientIdType<Chain>
+ HasConnectionIdType<Chain>,
Delegate: ConnectionOpenTryMessageBuilder<Chain, Counterparty>,
Components: DelegateComponent<Counterparty, Delegate = Delegate>,
{
Expand All @@ -137,8 +147,8 @@ where
impl<Chain, Counterparty, Components, Delegate> ConnectionOpenAckMessageBuilder<Chain, Counterparty>
for UseDelegate<Components>
where
Chain: HasIbcChainTypes<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenAckPayloadType<Chain> + HasIbcChainTypes<Chain>,
Chain: HasMessageType + HasConnectionIdType<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenAckPayloadType<Chain> + HasConnectionIdType<Chain>,
Delegate: ConnectionOpenAckMessageBuilder<Chain, Counterparty>,
Components: DelegateComponent<Counterparty, Delegate = Delegate>,
{
Expand All @@ -161,8 +171,8 @@ where
impl<Chain, Counterparty, Components, Delegate>
ConnectionOpenConfirmMessageBuilder<Chain, Counterparty> for UseDelegate<Components>
where
Chain: HasIbcChainTypes<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenConfirmPayloadType<Chain> + HasIbcChainTypes<Chain>,
Chain: HasMessageType + HasConnectionIdType<Counterparty> + HasErrorType,
Counterparty: HasConnectionOpenConfirmPayloadType<Chain>,
Delegate: ConnectionOpenConfirmMessageBuilder<Chain, Counterparty>,
Components: DelegateComponent<Counterparty, Delegate = Delegate>,
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use cgp::prelude::*;
use hermes_chain_type_components::traits::types::height::HasHeightType;
use hermes_chain_type_components::traits::types::ibc::client_id::HasClientIdType;
use hermes_chain_type_components::traits::types::ibc::connection_id::HasConnectionIdType;

use crate::traits::types::client_state::HasClientStateType;
use crate::traits::types::connection::{
HasConnectionOpenAckPayloadType, HasConnectionOpenConfirmPayloadType,
HasConnectionOpenInitPayloadType, HasConnectionOpenTryPayloadType,
};
use crate::traits::types::ibc::HasIbcChainTypes;

#[cgp_component {
provider: ConnectionOpenInitPayloadBuilder,
Expand All @@ -27,7 +29,9 @@ pub trait CanBuildConnectionOpenInitPayload<Counterparty>:
}]
#[async_trait]
pub trait CanBuildConnectionOpenTryPayload<Counterparty>:
HasIbcChainTypes<Counterparty>
HasHeightType
+ HasClientIdType<Counterparty>
+ HasConnectionIdType<Counterparty>
+ HasConnectionOpenTryPayloadType<Counterparty>
+ HasClientStateType<Counterparty>
+ HasErrorType
Expand All @@ -47,7 +51,9 @@ pub trait CanBuildConnectionOpenTryPayload<Counterparty>:
}]
#[async_trait]
pub trait CanBuildConnectionOpenAckPayload<Counterparty>:
HasIbcChainTypes<Counterparty>
HasHeightType
+ HasClientIdType<Counterparty>
+ HasConnectionIdType<Counterparty>
+ HasConnectionOpenAckPayloadType<Counterparty>
+ HasClientStateType<Counterparty>
+ HasErrorType
Expand All @@ -67,7 +73,9 @@ pub trait CanBuildConnectionOpenAckPayload<Counterparty>:
}]
#[async_trait]
pub trait CanBuildConnectionOpenConfirmPayload<Counterparty>:
HasIbcChainTypes<Counterparty>
HasHeightType
+ HasClientIdType<Counterparty>
+ HasConnectionIdType<Counterparty>
+ HasConnectionOpenConfirmPayloadType<Counterparty>
+ HasClientStateType<Counterparty>
+ HasErrorType
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use core::fmt::Debug;

use cgp::prelude::*;
use hermes_chain_type_components::traits::types::height::HasHeightType;
use hermes_chain_type_components::traits::types::ibc::connection_id::HasConnectionIdType;

use crate::traits::types::connection::HasConnectionEndType;
use crate::traits::types::ibc::HasIbcChainTypes;
Expand All @@ -12,7 +14,10 @@ use crate::traits::types::proof::HasCommitmentProofType;
}]
#[async_trait]
pub trait CanQueryConnectionEnd<Counterparty>:
HasConnectionEndType<Counterparty> + HasIbcChainTypes<Counterparty> + HasErrorType
HasHeightType
+ HasConnectionIdType<Counterparty>
+ HasConnectionEndType<Counterparty>
+ HasErrorType
{
async fn query_connection_end(
&self,
Expand All @@ -27,8 +32,9 @@ pub trait CanQueryConnectionEnd<Counterparty>:
}]
#[async_trait]
pub trait CanQueryConnectionEndWithProofs<Counterparty>:
HasConnectionEndType<Counterparty>
+ HasIbcChainTypes<Counterparty>
HasHeightType
+ HasConnectionIdType<Counterparty>
+ HasConnectionEndType<Counterparty>
+ HasCommitmentProofType
+ HasErrorType
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,19 @@ pub trait CanQueryConsensusState<Counterparty>:
}]
#[async_trait]
pub trait CanQueryConsensusStateWithProofs<Counterparty>:
HasClientIdType<Counterparty> + HasHeightType + HasCommitmentProofType + HasErrorType
where
Counterparty: HasConsensusStateType<Self> + HasHeightType,
HasClientIdType<Counterparty>
+ HasHeightType
+ HasCommitmentProofType
+ HasErrorType
+ CanUseCounterparty<Counterparty, Counterparty: HasConsensusStateType<Self> + HasHeightType>
{
async fn query_consensus_state_with_proofs(
&self,
tag: PhantomData<Counterparty>,
client_id: &Self::ClientId,
consensus_height: &Counterparty::Height,
consensus_height: &HeightOf<Counterparty>,
query_height: &Self::Height,
) -> Result<(Counterparty::ConsensusState, Self::CommitmentProof), Self::Error>;
) -> Result<(ConsensusStateOf<Counterparty, Self>, Self::CommitmentProof), Self::Error>;
}

#[cgp_component {
Expand Down
12 changes: 12 additions & 0 deletions crates/chain/chain-components/src/traits/types/connection.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use cgp::core::component::WithProvider;
use cgp::core::types::traits::ProvideType;
use cgp::prelude::*;

#[cgp_component {
Expand Down Expand Up @@ -56,3 +58,13 @@ pub trait HasConnectionOpenConfirmPayloadType<Counterparty>: Async {
pub trait HasConnectionEndType<Counterparty>: Async {
type ConnectionEnd: Async;
}

impl<Chain, Counterparty, Provider, ConnectionEnd> ProvideConnectionEndType<Chain, Counterparty>
for WithProvider<Provider>
where
Provider: ProvideType<Chain, ConnectionEndTypeComponent, Type = ConnectionEnd>,
Chain: Async,
ConnectionEnd: Async,
{
type ConnectionEnd = ConnectionEnd;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pub trait HasConnectionOpenTryEvent<Counterparty>:
type ConnectionOpenTryEvent: Async;

fn try_extract_connection_open_try_event(
&self,
response: &Self::MessageResponse,
) -> Option<Self::ConnectionOpenTryEvent>;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use core::fmt::{Debug, Display};

use cgp::core::component::WithProvider;
use cgp::core::types::traits::ProvideType;
use cgp::prelude::*;

#[cgp_component {
Expand All @@ -14,3 +16,13 @@ pub trait HasConnectionIdType<Counterparty>: Async {
*/
type ConnectionId: Debug + Display + Async;
}

impl<Chain, Counterparty, Provider, ConnectionId> ProvideConnectionIdType<Chain, Counterparty>
for WithProvider<Provider>
where
Chain: Async,
Provider: ProvideType<Chain, ConnectionIdTypeComponent, Type = ConnectionId>,
ConnectionId: Debug + Display + Async,
{
type ConnectionId = ConnectionId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use cgp::prelude::*;
use hermes_relayer_components::build::traits::builders::chain_builder::CanBuildChain;
use hermes_relayer_components::chain::traits::queries::chain_status::CanQueryChainHeight;
use hermes_relayer_components::chain::traits::queries::connection_end::CanQueryConnectionEnd;
use hermes_relayer_components::chain::traits::types::chain_id::HasChainIdType;
use hermes_relayer_components::multi::traits::chain_at::HasChainTypeAt;
use hermes_relayer_components::multi::types::index::Index;

Expand Down Expand Up @@ -55,7 +56,7 @@ where
+ CanRaiseError<Build::Error>
+ CanRaiseError<Chain::Error>,
Build: CanBuildChain<Index<0>, Chain = Chain> + HasChainTypeAt<Index<1>, Chain = Counterparty>,
Chain: CanQueryChainHeight + CanQueryConnectionEnd<Counterparty>,
Chain: HasChainIdType + CanQueryChainHeight + CanQueryConnectionEnd<Counterparty>,
Args: Async,
{
async fn run_command(app: &App, args: &Args) -> Result<App::Output, App::Error> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,6 @@ cgp_preset! {
QueryCosmosConsensusStateFromAbci,
CounterpartyChainIdQuerierComponent:
QueryChainIdFromAbci,

[
ConnectionOpenInitPayloadBuilderComponent,
ConnectionOpenTryPayloadBuilderComponent,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
use cgp::prelude::*;
use hermes_relayer_components::chain::impls::queries::query_and_convert_client_state::QueryAndConvertRawClientState;
use hermes_relayer_components::chain::impls::queries::query_and_convert_consensus_state::QueryAndConvertRawConsensusState;
use hermes_relayer_components::chain::traits::message_builders::channel_handshake::{
pub use hermes_relayer_components::chain::traits::message_builders::channel_handshake::{
ChannelOpenAckMessageBuilderComponent, ChannelOpenConfirmMessageBuilderComponent,
ChannelOpenInitMessageBuilderComponent, ChannelOpenTryMessageBuilderComponent,
};
use hermes_relayer_components::chain::traits::message_builders::connection_handshake::{
pub use hermes_relayer_components::chain::traits::message_builders::connection_handshake::{
ConnectionOpenAckMessageBuilderComponent, ConnectionOpenConfirmMessageBuilderComponent,
ConnectionOpenInitMessageBuilderComponent, ConnectionOpenTryMessageBuilderComponent,
};
use hermes_relayer_components::chain::traits::message_builders::create_client::CreateClientMessageBuilderComponent;
use hermes_relayer_components::chain::traits::message_builders::update_client::UpdateClientMessageBuilderComponent;
use hermes_relayer_components::chain::traits::payload_builders::create_client::CreateClientPayloadBuilderComponent;
use hermes_relayer_components::chain::traits::payload_builders::update_client::UpdateClientPayloadBuilderComponent;
use hermes_relayer_components::chain::traits::queries::client_state::{
pub use hermes_relayer_components::chain::traits::message_builders::create_client::CreateClientMessageBuilderComponent;
pub use hermes_relayer_components::chain::traits::message_builders::update_client::UpdateClientMessageBuilderComponent;
pub use hermes_relayer_components::chain::traits::payload_builders::create_client::CreateClientPayloadBuilderComponent;
pub use hermes_relayer_components::chain::traits::payload_builders::update_client::UpdateClientPayloadBuilderComponent;
pub use hermes_relayer_components::chain::traits::queries::client_state::{
AllClientStatesQuerierComponent, ClientStateQuerierComponent,
ClientStateWithProofsQuerierComponent,
};
use hermes_relayer_components::chain::traits::queries::consensus_state::{
pub use hermes_relayer_components::chain::traits::queries::consensus_state::{
ConsensusStateQuerierComponent, ConsensusStateWithProofsQuerierComponent,
};
use hermes_relayer_components::chain::traits::queries::consensus_state_height::ConsensusStateHeightsQuerierComponent;
use hermes_relayer_components::chain::traits::types::client_state::{
pub use hermes_relayer_components::chain::traits::queries::consensus_state_height::ConsensusStateHeightsQuerierComponent;
pub use hermes_relayer_components::chain::traits::types::client_state::{
ClientStateFieldsComponent, ClientStateTypeComponent,
};
use hermes_relayer_components::chain::traits::types::consensus_state::{
pub use hermes_relayer_components::chain::traits::types::consensus_state::{
ConsensusStateFieldComponent, ConsensusStateTypeComponent,
};
use hermes_relayer_components::chain::traits::types::create_client::{
pub use hermes_relayer_components::chain::traits::types::create_client::{
CreateClientMessageOptionsTypeComponent, CreateClientPayloadOptionsTypeComponent,
CreateClientPayloadTypeComponent,
};
use hermes_relayer_components::chain::traits::types::ibc::CounterpartyMessageHeightGetterComponent;
use hermes_relayer_components::chain::traits::types::update_client::UpdateClientPayloadTypeComponent;
pub use hermes_relayer_components::chain::traits::types::ibc::CounterpartyMessageHeightGetterComponent;
pub use hermes_relayer_components::chain::traits::types::update_client::UpdateClientPayloadTypeComponent;

use crate::impls::channel::channel_handshake_message::BuildCosmosChannelHandshakeMessage;
use crate::impls::client::create_client_message::BuildAnyCreateClientMessage;
Expand Down
Loading

0 comments on commit 73b4324

Please sign in to comment.