Skip to content

Commit

Permalink
Use component graph design pattern to manage components (#3528)
Browse files Browse the repository at this point in the history
* Use component graph pattern for UpdateClientMessageBuilder

* Use macros to derive component graph

* Auto derive CanQueryChainStatus

* Use components pattern for PacketRelayer

* Use component graph for auto relayer

* Attempt to define macros that derive the derive macros

* Revert "Attempt to define macros that derive the derive macros"

This reverts commit ca47c72.

* Use component graph for consensus state querier

* Use component graph for receive packet relayer

* Use component graph for ack packet relayer

* Use component graph for timeout unordered packet relayer

* Use component graph for IbcMessageSender

* Use component graph for mock components

* Use component graph for packet filter

* Use component graph for auto birelay

* Rename impl modules to components for component-based impls
  • Loading branch information
soareschen authored Aug 9, 2023
1 parent a80b841 commit aa80935
Show file tree
Hide file tree
Showing 108 changed files with 786 additions and 610 deletions.
6 changes: 3 additions & 3 deletions crates/relayer-all-in-one/src/all_for_one/birelay.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use ibc_relayer_components::logger::traits::level::HasLoggerWithBaseLevels;
use ibc_relayer_components::relay::traits::auto_relayer::CanAutoRelay;
use ibc_relayer_components::relay::traits::auto_relayer::{BiRelayMode, CanAutoRelay};
use ibc_relayer_components::relay::traits::two_way::HasTwoWayRelay;

use crate::all_for_one::relay::AfoRelay;
Expand All @@ -8,7 +8,7 @@ use crate::all_for_one::runtime::HasAfoRuntime;
pub trait AfoBiRelay:
HasAfoRuntime
+ HasLoggerWithBaseLevels
+ CanAutoRelay
+ CanAutoRelay<BiRelayMode>
+ HasTwoWayRelay<RelayAToB = Self::AfoRelayAToB, RelayBToA = Self::AfoRelayBToA>
{
type AfoRelayAToB: AfoRelay;
Expand All @@ -26,7 +26,7 @@ where
BiRelay: Clone
+ HasAfoRuntime
+ HasLoggerWithBaseLevels
+ CanAutoRelay
+ CanAutoRelay<BiRelayMode>
+ HasTwoWayRelay<RelayAToB = RelayAToB, RelayBToA = RelayBToA>,
{
type AfoRelayAToB = RelayAToB;
Expand Down
5 changes: 4 additions & 1 deletion crates/relayer-all-in-one/src/all_for_one/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use ibc_relayer_components::chain::traits::types::connection::{
HasConnectionHandshakePayloads, HasInitConnectionOptionsType,
};
use ibc_relayer_components::chain::traits::types::consensus_state::HasConsensusStateType;
use ibc_relayer_components::chain::traits::types::ibc::HasIbcChainTypes;
use ibc_relayer_components::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent;
use ibc_relayer_components::chain::traits::types::packet::{HasIbcPacketFields, HasIbcPacketTypes};
use ibc_relayer_components::logger::traits::level::HasLoggerWithBaseLevels;
Expand All @@ -27,6 +28,7 @@ pub trait AfoChain<Counterparty>:
+ HasTelemetry
+ HasChainTypes
+ CanQueryChainStatus
+ HasIbcChainTypes<Counterparty>
+ HasIbcPacketFields<Counterparty>
+ HasWriteAcknowledgementEvent<Counterparty>
+ HasConsensusStateType<Counterparty>
Expand All @@ -46,7 +48,8 @@ where
}

pub trait AfoCounterpartyChain<Chain>:
HasConsensusStateType<Chain>
HasIbcChainTypes<Chain>
+ HasConsensusStateType<Chain>
+ HasIbcPacketTypes<
Chain,
IncomingPacket = Chain::OutgoingPacket,
Expand Down
23 changes: 9 additions & 14 deletions crates/relayer-all-in-one/src/all_for_one/relay.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use ibc_relayer_components::chain::types::aliases::{IncomingPacket, OutgoingPacket};
use ibc_relayer_components::logger::traits::level::HasLoggerWithBaseLevels;
use ibc_relayer_components::relay::impls::client::create::CanCreateClient;
use ibc_relayer_components::relay::traits::auto_relayer::CanAutoRelay;
use ibc_relayer_components::relay::traits::auto_relayer::{CanAutoRelay, RelayMode};
use ibc_relayer_components::relay::traits::chains::HasRelayChains;
use ibc_relayer_components::relay::traits::channel::open_handshake::CanRelayChannelOpenHandshake;
use ibc_relayer_components::relay::traits::channel::open_init::CanInitChannel;
use ibc_relayer_components::relay::traits::connection::open_handshake::CanRelayConnectionOpenHandshake;
use ibc_relayer_components::relay::traits::connection::open_init::CanInitConnection;
use ibc_relayer_components::relay::traits::event_relayer::CanRelayEvent;
use ibc_relayer_components::relay::traits::ibc_message_sender::CanSendIbcMessages;
use ibc_relayer_components::relay::traits::ibc_message_sender::{CanSendIbcMessages, MainSink};
use ibc_relayer_components::relay::traits::messages::update_client::CanBuildUpdateClientMessage;
use ibc_relayer_components::relay::traits::packet::HasRelayPacket;
use ibc_relayer_components::relay::traits::packet_clear::CanClearReceivePackets;
Expand All @@ -18,8 +18,7 @@ use ibc_relayer_components::relay::traits::packet_relayers::ack_packet::CanRelay
use ibc_relayer_components::relay::traits::packet_relayers::receive_packet::CanRelayReceivePacket;
use ibc_relayer_components::relay::traits::packet_relayers::timeout_unordered_packet::CanRelayTimeoutUnorderedPacket;
use ibc_relayer_components::relay::traits::target::{DestinationTarget, SourceTarget};
use ibc_relayer_components_extra::batch::traits::send_messages_from_batch::CanSendIbcMessagesFromBatchWorker;
use ibc_relayer_components_extra::relay::impls::packet_relayers::retry::SupportsPacketRetry;
use ibc_relayer_components_extra::relay::components::packet_relayers::retry::SupportsPacketRetry;

use crate::all_for_one::chain::AfoChain;
use crate::all_for_one::runtime::HasAfoRuntime;
Expand All @@ -34,18 +33,16 @@ pub trait AfoRelay:
+ HasRelayPacket<SrcChainWithPacket = Self::AfoSrcChain, DstChainWithPacket = Self::AfoDstChain>
+ CanBuildUpdateClientMessage<SourceTarget>
+ CanBuildUpdateClientMessage<DestinationTarget>
+ CanSendIbcMessages<SourceTarget>
+ CanSendIbcMessages<DestinationTarget>
+ CanSendIbcMessages<MainSink, SourceTarget>
+ CanSendIbcMessages<MainSink, DestinationTarget>
+ CanRelayEvent<SourceTarget>
+ CanRelayEvent<DestinationTarget>
+ CanAutoRelay
+ CanAutoRelay<RelayMode>
+ CanFilterPackets
+ CanRelayReceivePacket
+ CanRelayPacket
+ CanRelayAckPacket
+ CanRelayTimeoutUnorderedPacket
+ CanSendIbcMessagesFromBatchWorker<SourceTarget>
+ CanSendIbcMessagesFromBatchWorker<DestinationTarget>
+ CanCreateClient<SourceTarget>
+ CanCreateClient<DestinationTarget>
+ CanInitConnection
Expand Down Expand Up @@ -75,18 +72,16 @@ where
+ HasRelayPacket<SrcChainWithPacket = SrcChain, DstChainWithPacket = DstChain>
+ CanBuildUpdateClientMessage<SourceTarget>
+ CanBuildUpdateClientMessage<DestinationTarget>
+ CanSendIbcMessages<SourceTarget>
+ CanSendIbcMessages<DestinationTarget>
+ CanSendIbcMessages<MainSink, SourceTarget>
+ CanSendIbcMessages<MainSink, DestinationTarget>
+ CanRelayEvent<SourceTarget>
+ CanRelayEvent<DestinationTarget>
+ CanAutoRelay
+ CanAutoRelay<RelayMode>
+ CanFilterPackets
+ CanRelayReceivePacket
+ CanRelayPacket
+ CanRelayAckPacket
+ CanRelayTimeoutUnorderedPacket
+ CanSendIbcMessagesFromBatchWorker<SourceTarget>
+ CanSendIbcMessagesFromBatchWorker<DestinationTarget>
+ CanCreateClient<SourceTarget>
+ CanCreateClient<DestinationTarget>
+ CanInitConnection
Expand Down
49 changes: 0 additions & 49 deletions crates/relayer-all-in-one/src/one_for_all/components.rs

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
use async_trait::async_trait;
use ibc_relayer_components::core::traits::component::HasComponents;
use ibc_relayer_components::core::traits::sync::Async;
use ibc_relayer_components_extra::components::extra::ExtraComponents;

use crate::one_for_all::types::birelay::OfaBiRelayWrapper;
use crate::one_for_all::types::component::OfaComponents;

#[async_trait]
impl<BiRelay> HasComponents for OfaBiRelayWrapper<BiRelay>
where
BiRelay: Async,
{
type Components = ExtraComponents<OfaComponents>;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pub mod auto_relay;
pub mod components;
pub mod error;
pub mod logger;
pub mod runtime;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
use async_trait::async_trait;
use ibc_relayer_components::chain::traits::queries::consensus_state::{
CanQueryConsensusState, ConsensusStateQuerier,
};
use ibc_relayer_components::chain::traits::queries::consensus_state::ConsensusStateQuerier;
use ibc_relayer_components::chain::traits::types::consensus_state::HasConsensusStateType;

use crate::one_for_all::components;
use crate::one_for_all::traits::chain::{OfaChainTypes, OfaIbcChain};
use crate::one_for_all::types::chain::OfaChainWrapper;
use crate::one_for_all::types::component::OfaComponents;
use crate::std_prelude::*;

impl<Chain, Counterparty> HasConsensusStateType<OfaChainWrapper<Counterparty>>
Expand All @@ -18,12 +16,9 @@ where
type ConsensusState = Chain::ConsensusState;
}

pub struct SendConsensusStateQueryToOfa;

#[async_trait]
impl<Chain, Counterparty>
ConsensusStateQuerier<OfaChainWrapper<Chain>, OfaChainWrapper<Counterparty>>
for SendConsensusStateQueryToOfa
ConsensusStateQuerier<OfaChainWrapper<Chain>, OfaChainWrapper<Counterparty>> for OfaComponents
where
Chain: OfaIbcChain<Counterparty>,
Counterparty: OfaChainTypes,
Expand All @@ -38,19 +33,3 @@ where
Ok(consensus_state)
}
}

#[async_trait]
impl<Chain, Counterparty> CanQueryConsensusState<OfaChainWrapper<Counterparty>>
for OfaChainWrapper<Chain>
where
Chain: OfaIbcChain<Counterparty>,
Counterparty: OfaChainTypes,
{
async fn query_consensus_state(
&self,
client_id: &Self::ClientId,
height: &Counterparty::Height,
) -> Result<Counterparty::ConsensusState, Self::Error> {
components::ConsensusStateQuerier::query_consensus_state(self, client_id, height).await
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
use async_trait::async_trait;
use ibc_relayer_components::chain::traits::queries::status::{
CanQueryChainStatus, ChainStatusQuerier,
};
use ibc_relayer_components::chain::traits::queries::status::ChainStatusQuerier;
use ibc_relayer_components::chain::traits::types::status::HasChainStatusType;

use crate::one_for_all::components;
use crate::one_for_all::traits::chain::OfaChain;
use crate::one_for_all::types::chain::OfaChainWrapper;
use crate::one_for_all::types::component::OfaComponents;
use crate::std_prelude::*;

pub struct SendChainStatusQueryToOfa;

impl<Chain> HasChainStatusType for OfaChainWrapper<Chain>
where
Chain: OfaChain,
Expand All @@ -27,7 +23,7 @@ where
}

#[async_trait]
impl<Chain> ChainStatusQuerier<OfaChainWrapper<Chain>> for SendChainStatusQueryToOfa
impl<Chain> ChainStatusQuerier<OfaChainWrapper<Chain>> for OfaComponents
where
Chain: OfaChain,
{
Expand All @@ -39,13 +35,3 @@ where
Ok(status)
}
}

#[async_trait]
impl<Chain> CanQueryChainStatus for OfaChainWrapper<Chain>
where
Chain: OfaChain,
{
async fn query_chain_status(&self) -> Result<Self::ChainStatus, Self::Error> {
components::ChainStatusQuerier::query_chain_status(self).await
}
}
11 changes: 11 additions & 0 deletions crates/relayer-all-in-one/src/one_for_all/impls/chain/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,25 @@ use ibc_relayer_components::chain::traits::types::message::{
};
use ibc_relayer_components::chain::traits::types::packet::{HasIbcPacketFields, HasIbcPacketTypes};
use ibc_relayer_components::chain::traits::types::timestamp::HasTimestampType;
use ibc_relayer_components::core::traits::component::HasComponents;
use ibc_relayer_components::core::traits::error::HasErrorType;
use ibc_relayer_components::core::traits::sync::Async;
use ibc_relayer_components::runtime::traits::runtime::HasRuntime;
use ibc_relayer_components_extra::components::extra::ExtraComponents;

use crate::one_for_all::traits::chain::{OfaChain, OfaChainTypes, OfaIbcChain};
use crate::one_for_all::types::chain::OfaChainWrapper;
use crate::one_for_all::types::component::OfaComponents;
use crate::one_for_all::types::runtime::OfaRuntimeWrapper;
use crate::std_prelude::*;

impl<Chain> HasComponents for OfaChainWrapper<Chain>
where
Chain: Async,
{
type Components = ExtraComponents<OfaComponents>;
}

impl<Chain: OfaChain> HasRuntime for OfaChainWrapper<Chain> {
type Runtime = OfaRuntimeWrapper<Chain::Runtime>;

Expand Down

This file was deleted.

22 changes: 0 additions & 22 deletions crates/relayer-all-in-one/src/one_for_all/impls/relay/batch.rs
Original file line number Diff line number Diff line change
@@ -1,31 +1,9 @@
use async_trait::async_trait;
use ibc_relayer_components::chain::types::aliases::{Event, Message};
use ibc_relayer_components::relay::traits::ibc_message_sender::IbcMessageSender;
use ibc_relayer_components::relay::traits::target::ChainTarget;
use ibc_relayer_components::relay::traits::target::{DestinationTarget, SourceTarget};
use ibc_relayer_components_extra::batch::traits::channel::HasMessageBatchSender;
use ibc_relayer_components_extra::batch::traits::send_messages_from_batch::CanSendIbcMessagesFromBatchWorker;
use ibc_relayer_components_extra::batch::types::aliases::MessageBatchSender;

use crate::one_for_all::components;
use crate::one_for_all::traits::relay::OfaRelay;
use crate::one_for_all::types::relay::OfaRelayWrapper;
use crate::std_prelude::*;

#[async_trait]
impl<Relay, Target> CanSendIbcMessagesFromBatchWorker<Target> for OfaRelayWrapper<Relay>
where
Relay: OfaRelay,
Target: ChainTarget<Self>,
components::IbcMessageSenderForBatchWorker: IbcMessageSender<Self, Target>,
{
async fn send_messages_from_batch_worker(
&self,
messages: Vec<Message<Target::TargetChain>>,
) -> Result<Vec<Vec<Event<Target::TargetChain>>>, Self::Error> {
components::IbcMessageSenderForBatchWorker::send_messages(self, messages).await
}
}

impl<Relay> HasMessageBatchSender<SourceTarget> for OfaRelayWrapper<Relay>
where
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use ibc_relayer_components_extra::relay::impls::packet_relayers::retry::SupportsPacketRetry;
use ibc_relayer_components_extra::relay::components::packet_relayers::retry::SupportsPacketRetry;

use crate::one_for_all::traits::relay::OfaRelay;
use crate::one_for_all::types::relay::OfaRelayWrapper;
Expand Down

This file was deleted.

Loading

0 comments on commit aa80935

Please sign in to comment.