diff --git a/crates/relayer-all-in-one/src/all_for_one/birelay.rs b/crates/relayer-all-in-one/src/all_for_one/birelay.rs index 8483c5d176..a0f8eb3d75 100644 --- a/crates/relayer-all-in-one/src/all_for_one/birelay.rs +++ b/crates/relayer-all-in-one/src/all_for_one/birelay.rs @@ -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; @@ -8,7 +8,7 @@ use crate::all_for_one::runtime::HasAfoRuntime; pub trait AfoBiRelay: HasAfoRuntime + HasLoggerWithBaseLevels - + CanAutoRelay + + CanAutoRelay + HasTwoWayRelay { type AfoRelayAToB: AfoRelay; @@ -26,7 +26,7 @@ where BiRelay: Clone + HasAfoRuntime + HasLoggerWithBaseLevels - + CanAutoRelay + + CanAutoRelay + HasTwoWayRelay, { type AfoRelayAToB = RelayAToB; diff --git a/crates/relayer-all-in-one/src/all_for_one/chain.rs b/crates/relayer-all-in-one/src/all_for_one/chain.rs index 59044ba491..ffe886fcef 100644 --- a/crates/relayer-all-in-one/src/all_for_one/chain.rs +++ b/crates/relayer-all-in-one/src/all_for_one/chain.rs @@ -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; @@ -27,6 +28,7 @@ pub trait AfoChain: + HasTelemetry + HasChainTypes + CanQueryChainStatus + + HasIbcChainTypes + HasIbcPacketFields + HasWriteAcknowledgementEvent + HasConsensusStateType @@ -46,7 +48,8 @@ where } pub trait AfoCounterpartyChain: - HasConsensusStateType + HasIbcChainTypes + + HasConsensusStateType + HasIbcPacketTypes< Chain, IncomingPacket = Chain::OutgoingPacket, diff --git a/crates/relayer-all-in-one/src/all_for_one/relay.rs b/crates/relayer-all-in-one/src/all_for_one/relay.rs index 65334a7bfe..44aa845401 100644 --- a/crates/relayer-all-in-one/src/all_for_one/relay.rs +++ b/crates/relayer-all-in-one/src/all_for_one/relay.rs @@ -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; @@ -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; @@ -34,18 +33,16 @@ pub trait AfoRelay: + HasRelayPacket + CanBuildUpdateClientMessage + CanBuildUpdateClientMessage - + CanSendIbcMessages - + CanSendIbcMessages + + CanSendIbcMessages + + CanSendIbcMessages + CanRelayEvent + CanRelayEvent - + CanAutoRelay + + CanAutoRelay + CanFilterPackets + CanRelayReceivePacket + CanRelayPacket + CanRelayAckPacket + CanRelayTimeoutUnorderedPacket - + CanSendIbcMessagesFromBatchWorker - + CanSendIbcMessagesFromBatchWorker + CanCreateClient + CanCreateClient + CanInitConnection @@ -75,18 +72,16 @@ where + HasRelayPacket + CanBuildUpdateClientMessage + CanBuildUpdateClientMessage - + CanSendIbcMessages - + CanSendIbcMessages + + CanSendIbcMessages + + CanSendIbcMessages + CanRelayEvent + CanRelayEvent - + CanAutoRelay + + CanAutoRelay + CanFilterPackets + CanRelayReceivePacket + CanRelayPacket + CanRelayAckPacket + CanRelayTimeoutUnorderedPacket - + CanSendIbcMessagesFromBatchWorker - + CanSendIbcMessagesFromBatchWorker + CanCreateClient + CanCreateClient + CanInitConnection diff --git a/crates/relayer-all-in-one/src/one_for_all/components.rs b/crates/relayer-all-in-one/src/one_for_all/components.rs deleted file mode 100644 index 1eebd0ca4c..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/components.rs +++ /dev/null @@ -1,49 +0,0 @@ -use ibc_relayer_components::relay::impls::client::update::BuildUpdateClientMessages; -use ibc_relayer_components::relay::impls::message_senders::chain_sender::SendIbcMessagesToChain; -use ibc_relayer_components::relay::impls::message_senders::update_client::SendIbcMessagesWithUpdateClient; -use ibc_relayer_components::relay::impls::messages::skip_update_client::SkipUpdateClient; -use ibc_relayer_components::relay::impls::messages::wait_update_client::WaitUpdateClient; -use ibc_relayer_components::relay::impls::packet_relayers::ack::base_ack_packet::BaseAckPacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::general::filter_relayer::FilterRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::general::full_relay::FullCycleRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::general::lock::LockPacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::general::log::LoggerRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::receive::base_receive_packet::BaseReceivePacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::receive::skip_received_packet::SkipReceivedPacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::timeout_unordered::timeout_unordered_packet::BaseTimeoutUnorderedPacketRelayer; -use ibc_relayer_components_extra::batch::impls::message_sender::SendMessagesToBatchWorker; -use ibc_relayer_components_extra::relay::impls::auto_relayers::parallel_bidirectional::ParallelBidirectionalRelayer; -use ibc_relayer_components_extra::relay::impls::auto_relayers::parallel_event::ParallelEventSubscriptionRelayer; -use ibc_relayer_components_extra::relay::impls::auto_relayers::parallel_two_way::ParallelTwoWayAutoRelay; -use ibc_relayer_components_extra::relay::impls::packet_relayers::retry::RetryRelayer; -use ibc_relayer_components_extra::telemetry::impls::consensus_state::ConsensusStateTelemetryQuerier; -use ibc_relayer_components_extra::telemetry::impls::status::ChainStatusTelemetryQuerier; - -use crate::one_for_all::impls::chain::queries::consensus_state::SendConsensusStateQueryToOfa; -use crate::one_for_all::impls::chain::queries::status::SendChainStatusQueryToOfa; -use crate::one_for_all::impls::relay::packet_filter::FilterPacketFromOfa; - -pub type ChainStatusQuerier = ChainStatusTelemetryQuerier; - -pub type ConsensusStateQuerier = ConsensusStateTelemetryQuerier; - -pub type UpdateClientMessageBuilder = SkipUpdateClient>; - -pub type AckPacketRelayer = BaseAckPacketRelayer; - -pub type ReceivePacketRelayer = SkipReceivedPacketRelayer; - -pub type TimeoutUnorderedPacketRelayer = BaseTimeoutUnorderedPacketRelayer; - -pub type PacketRelayer = - LockPacketRelayer>>>; - -pub type AutoRelayer = ParallelBidirectionalRelayer; - -pub type PacketFilter = FilterPacketFromOfa; - -pub type IbcMessageSender = SendMessagesToBatchWorker; - -pub type IbcMessageSenderForBatchWorker = SendIbcMessagesWithUpdateClient; - -pub type TwoWayAutoRelayer = ParallelTwoWayAutoRelay; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/birelay/auto_relay.rs b/crates/relayer-all-in-one/src/one_for_all/impls/birelay/auto_relay.rs deleted file mode 100644 index 148a7cf5ae..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/birelay/auto_relay.rs +++ /dev/null @@ -1,17 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::auto_relayer::{AutoRelayer, CanAutoRelay}; - -use crate::one_for_all::components; -use crate::one_for_all::traits::birelay::OfaBiRelay; -use crate::one_for_all::types::birelay::OfaBiRelayWrapper; -use crate::std_prelude::*; - -#[async_trait] -impl CanAutoRelay for OfaBiRelayWrapper -where - BiRelay: OfaBiRelay, -{ - async fn auto_relay(&self) -> Result<(), BiRelay::Error> { - components::TwoWayAutoRelayer::auto_relay(self).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/birelay/components.rs b/crates/relayer-all-in-one/src/one_for_all/impls/birelay/components.rs new file mode 100644 index 0000000000..e4499c23f0 --- /dev/null +++ b/crates/relayer-all-in-one/src/one_for_all/impls/birelay/components.rs @@ -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 HasComponents for OfaBiRelayWrapper +where + BiRelay: Async, +{ + type Components = ExtraComponents; +} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/birelay/mod.rs b/crates/relayer-all-in-one/src/one_for_all/impls/birelay/mod.rs index 55b7735c52..7d47a6f099 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/birelay/mod.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/birelay/mod.rs @@ -1,4 +1,4 @@ -pub mod auto_relay; +pub mod components; pub mod error; pub mod logger; pub mod runtime; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/consensus_state.rs b/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/consensus_state.rs index e8d0d646bb..5aee079784 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/consensus_state.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/consensus_state.rs @@ -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 HasConsensusStateType> @@ -18,12 +16,9 @@ where type ConsensusState = Chain::ConsensusState; } -pub struct SendConsensusStateQueryToOfa; - #[async_trait] impl - ConsensusStateQuerier, OfaChainWrapper> - for SendConsensusStateQueryToOfa + ConsensusStateQuerier, OfaChainWrapper> for OfaComponents where Chain: OfaIbcChain, Counterparty: OfaChainTypes, @@ -38,19 +33,3 @@ where Ok(consensus_state) } } - -#[async_trait] -impl CanQueryConsensusState> - for OfaChainWrapper -where - Chain: OfaIbcChain, - Counterparty: OfaChainTypes, -{ - async fn query_consensus_state( - &self, - client_id: &Self::ClientId, - height: &Counterparty::Height, - ) -> Result { - components::ConsensusStateQuerier::query_consensus_state(self, client_id, height).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/status.rs b/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/status.rs index 6644c10852..4d835a8bc0 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/status.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/chain/queries/status.rs @@ -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 HasChainStatusType for OfaChainWrapper where Chain: OfaChain, @@ -27,7 +23,7 @@ where } #[async_trait] -impl ChainStatusQuerier> for SendChainStatusQueryToOfa +impl ChainStatusQuerier> for OfaComponents where Chain: OfaChain, { @@ -39,13 +35,3 @@ where Ok(status) } } - -#[async_trait] -impl CanQueryChainStatus for OfaChainWrapper -where - Chain: OfaChain, -{ - async fn query_chain_status(&self) -> Result { - components::ChainStatusQuerier::query_chain_status(self).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/chain/types.rs b/crates/relayer-all-in-one/src/one_for_all/impls/chain/types.rs index db3ddd31a0..c545aefa67 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/chain/types.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/chain/types.rs @@ -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 HasComponents for OfaChainWrapper +where + Chain: Async, +{ + type Components = ExtraComponents; +} + impl HasRuntime for OfaChainWrapper { type Runtime = OfaRuntimeWrapper; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/auto_relayer.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/auto_relayer.rs deleted file mode 100644 index 460dcb3f0d..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/auto_relayer.rs +++ /dev/null @@ -1,17 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::auto_relayer::{AutoRelayer, CanAutoRelay}; - -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 CanAutoRelay for OfaRelayWrapper -where - Relay: OfaRelay, -{ - async fn auto_relay(&self) -> Result<(), Relay::Error> { - components::AutoRelayer::auto_relay(self).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/batch.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/batch.rs index b1e438691e..852ad6fdcf 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/batch.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/batch.rs @@ -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 CanSendIbcMessagesFromBatchWorker for OfaRelayWrapper -where - Relay: OfaRelay, - Target: ChainTarget, - components::IbcMessageSenderForBatchWorker: IbcMessageSender, -{ - async fn send_messages_from_batch_worker( - &self, - messages: Vec>, - ) -> Result>>, Self::Error> { - components::IbcMessageSenderForBatchWorker::send_messages(self, messages).await - } -} impl HasMessageBatchSender for OfaRelayWrapper where diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/error.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/error.rs index 78078fa852..de6e80cd0d 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/error.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/error.rs @@ -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; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/mod.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/mod.rs deleted file mode 100644 index 4a9b38e378..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod update_client; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/update_client.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/update_client.rs deleted file mode 100644 index a070e6577f..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_builders/update_client.rs +++ /dev/null @@ -1,28 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::chain::types::aliases::{Height, Message}; -use ibc_relayer_components::relay::traits::messages::update_client::{ - CanBuildUpdateClientMessage, UpdateClientMessageBuilder, -}; -use ibc_relayer_components::relay::traits::target::ChainTarget; - -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 CanBuildUpdateClientMessage for OfaRelayWrapper -where - Relay: OfaRelay, - Target: ChainTarget, - components::UpdateClientMessageBuilder: UpdateClientMessageBuilder, -{ - async fn build_update_client_messages( - &self, - target: Target, - height: &Height, - ) -> Result>, Self::Error> { - components::UpdateClientMessageBuilder::build_update_client_messages(self, target, height) - .await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_sender.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_sender.rs deleted file mode 100644 index 6971f573c0..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/message_sender.rs +++ /dev/null @@ -1,45 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::ibc_message_sender::{ - CanSendIbcMessages, IbcMessageSender, -}; -use ibc_relayer_components::relay::traits::target::{DestinationTarget, SourceTarget}; - -use crate::one_for_all::components; -use crate::one_for_all::traits::chain::OfaChainTypes; -use crate::one_for_all::traits::relay::OfaRelay; -use crate::one_for_all::types::relay::OfaRelayWrapper; -use crate::std_prelude::*; - -#[async_trait] -impl CanSendIbcMessages for OfaRelayWrapper -where - Relay: OfaRelay, -{ - async fn send_messages( - &self, - _target: SourceTarget, - messages: Vec<::Message>, - ) -> Result::Event>>, Self::Error> { - >::send_messages( - self, messages, - ) - .await - } -} - -#[async_trait] -impl CanSendIbcMessages for OfaRelayWrapper -where - Relay: OfaRelay, -{ - async fn send_messages( - &self, - _target: DestinationTarget, - messages: Vec<::Message>, - ) -> Result::Event>>, Self::Error> { - >::send_messages( - self, messages, - ) - .await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/mod.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/mod.rs index a558b0aef5..d9a20a6f4f 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/mod.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/mod.rs @@ -1,4 +1,3 @@ -pub mod auto_relayer; pub mod batch; pub mod channel; pub mod clear_packet; @@ -7,8 +6,6 @@ pub mod connection; pub mod error; pub mod event_relayer; pub mod logger; -pub mod message_builders; -pub mod message_sender; pub mod packet_filter; pub mod packet_relayers; pub mod types; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_filter.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_filter.rs index 85c9ed68d1..42128c9d6f 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_filter.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_filter.rs @@ -1,15 +1,13 @@ use async_trait::async_trait; -use ibc_relayer_components::relay::traits::packet_filter::{CanFilterPackets, PacketFilter}; +use ibc_relayer_components::relay::traits::packet_filter::PacketFilter; -use crate::one_for_all::components; use crate::one_for_all::traits::relay::OfaRelay; +use crate::one_for_all::types::component::OfaComponents; use crate::one_for_all::types::relay::OfaRelayWrapper; use crate::std_prelude::*; -pub struct FilterPacketFromOfa; - #[async_trait] -impl PacketFilter> for FilterPacketFromOfa +impl PacketFilter> for OfaComponents where Relay: OfaRelay, { @@ -20,13 +18,3 @@ where relay.relay.should_relay_packet(packet).await } } - -#[async_trait] -impl CanFilterPackets for OfaRelayWrapper -where - Relay: OfaRelay, -{ - async fn should_relay_packet(&self, packet: &Self::Packet) -> Result { - components::PacketFilter::should_relay_packet(self, packet).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/ack.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/ack.rs deleted file mode 100644 index 715aaa6e18..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/ack.rs +++ /dev/null @@ -1,26 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::packet_relayers::ack_packet::{ - AckPacketRelayer, CanRelayAckPacket, -}; - -use crate::one_for_all::components; -use crate::one_for_all::traits::chain::OfaChainTypes; -use crate::one_for_all::traits::relay::OfaRelay; -use crate::one_for_all::types::relay::OfaRelayWrapper; -use crate::std_prelude::*; - -#[async_trait] -impl CanRelayAckPacket for OfaRelayWrapper -where - Relay: OfaRelay, - components::AckPacketRelayer: AckPacketRelayer, -{ - async fn relay_ack_packet( - &self, - destination_height: &::Height, - packet: &Self::Packet, - ack: &::WriteAcknowledgementEvent, - ) -> Result<(), Relay::Error> { - components::AckPacketRelayer::relay_ack_packet(self, destination_height, packet, ack).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/base.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/base.rs deleted file mode 100644 index f50197858d..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/base.rs +++ /dev/null @@ -1,17 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::packet_relayer::{CanRelayPacket, PacketRelayer}; - -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 CanRelayPacket for OfaRelayWrapper -where - Relay: OfaRelay, -{ - async fn relay_packet(&self, packet: &Self::Packet) -> Result<(), Self::Error> { - components::PacketRelayer::relay_packet(self, packet).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/mod.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/mod.rs index a23d25d061..e949e6a93d 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/mod.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/mod.rs @@ -1,5 +1 @@ -pub mod ack; -pub mod base; pub mod lock; -pub mod receive; -pub mod timeout_unordered; diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/receive.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/receive.rs deleted file mode 100644 index 88cfca3eff..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/receive.rs +++ /dev/null @@ -1,26 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::relay::traits::packet_relayers::receive_packet::{ - CanRelayReceivePacket, ReceivePacketRelayer, -}; - -use crate::one_for_all::components; -use crate::one_for_all::traits::chain::OfaChainTypes; -use crate::one_for_all::traits::relay::OfaRelay; -use crate::one_for_all::types::relay::OfaRelayWrapper; -use crate::std_prelude::*; - -#[async_trait] -impl CanRelayReceivePacket for OfaRelayWrapper -where - Relay: OfaRelay, - components::ReceivePacketRelayer: ReceivePacketRelayer, -{ - async fn relay_receive_packet( - &self, - source_height: &::Height, - packet: &Relay::Packet, - ) -> Result::WriteAcknowledgementEvent>, Relay::Error> - { - components::ReceivePacketRelayer::relay_receive_packet(self, source_height, packet).await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/timeout_unordered.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/timeout_unordered.rs deleted file mode 100644 index b16a994fea..0000000000 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/packet_relayers/timeout_unordered.rs +++ /dev/null @@ -1,30 +0,0 @@ -use async_trait::async_trait; - -use crate::one_for_all::components; -use crate::one_for_all::traits::chain::OfaChainTypes; -use crate::one_for_all::traits::relay::OfaRelay; -use crate::one_for_all::types::relay::OfaRelayWrapper; -use crate::std_prelude::*; -use ibc_relayer_components::relay::traits::packet_relayers::timeout_unordered_packet::{ - CanRelayTimeoutUnorderedPacket, TimeoutUnorderedPacketRelayer, -}; - -#[async_trait] -impl CanRelayTimeoutUnorderedPacket for OfaRelayWrapper -where - Relay: OfaRelay, - components::TimeoutUnorderedPacketRelayer: TimeoutUnorderedPacketRelayer, -{ - async fn relay_timeout_unordered_packet( - &self, - destination_height: &::Height, - packet: &Self::Packet, - ) -> Result<(), Self::Error> { - components::TimeoutUnorderedPacketRelayer::relay_timeout_unordered_packet( - self, - destination_height, - packet, - ) - .await - } -} diff --git a/crates/relayer-all-in-one/src/one_for_all/impls/relay/types.rs b/crates/relayer-all-in-one/src/one_for_all/impls/relay/types.rs index aadd6a472c..7dc6925213 100644 --- a/crates/relayer-all-in-one/src/one_for_all/impls/relay/types.rs +++ b/crates/relayer-all-in-one/src/one_for_all/impls/relay/types.rs @@ -1,13 +1,24 @@ +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::relay::traits::chains::HasRelayChains; use ibc_relayer_components::runtime::traits::runtime::HasRuntime; +use ibc_relayer_components_extra::components::extra::ExtraComponents; use crate::one_for_all::traits::chain::OfaChainTypes; use crate::one_for_all::traits::relay::OfaRelay; use crate::one_for_all::types::chain::OfaChainWrapper; +use crate::one_for_all::types::component::OfaComponents; use crate::one_for_all::types::relay::OfaRelayWrapper; use crate::one_for_all::types::runtime::OfaRuntimeWrapper; +impl HasComponents for OfaRelayWrapper +where + Relay: Async, +{ + type Components = ExtraComponents; +} + impl HasErrorType for OfaRelayWrapper where Relay: OfaRelay, diff --git a/crates/relayer-all-in-one/src/one_for_all/mod.rs b/crates/relayer-all-in-one/src/one_for_all/mod.rs index f20f274146..bb294d36dc 100644 --- a/crates/relayer-all-in-one/src/one_for_all/mod.rs +++ b/crates/relayer-all-in-one/src/one_for_all/mod.rs @@ -17,7 +17,6 @@ //! implement in order to use the APIs provided by the framework, which are //! encapsulated in the `all_for_one` trait. -pub mod components; pub mod impls; pub mod traits; pub mod types; diff --git a/crates/relayer-all-in-one/src/one_for_all/traits/birelay.rs b/crates/relayer-all-in-one/src/one_for_all/traits/birelay.rs index cda2c43d86..068a1b0ef1 100644 --- a/crates/relayer-all-in-one/src/one_for_all/traits/birelay.rs +++ b/crates/relayer-all-in-one/src/one_for_all/traits/birelay.rs @@ -21,6 +21,7 @@ pub trait OfaBiRelay: Async { SrcChain = ::DstChain, DstChain = ::SrcChain, Error = ::Error, + Logger = ::Logger, >; fn runtime(&self) -> &OfaRuntimeWrapper; diff --git a/crates/relayer-all-in-one/src/one_for_all/types/component.rs b/crates/relayer-all-in-one/src/one_for_all/types/component.rs new file mode 100644 index 0000000000..cbb2187e7d --- /dev/null +++ b/crates/relayer-all-in-one/src/one_for_all/types/component.rs @@ -0,0 +1 @@ +pub struct OfaComponents; diff --git a/crates/relayer-all-in-one/src/one_for_all/types/mod.rs b/crates/relayer-all-in-one/src/one_for_all/types/mod.rs index ca23848af5..2061b7ec84 100644 --- a/crates/relayer-all-in-one/src/one_for_all/types/mod.rs +++ b/crates/relayer-all-in-one/src/one_for_all/types/mod.rs @@ -2,6 +2,7 @@ pub mod batch; pub mod birelay; pub mod builder; pub mod chain; +pub mod component; pub mod relay; pub mod runtime; pub mod telemetry; diff --git a/crates/relayer-components-extra/src/batch/impls/message_sender.rs b/crates/relayer-components-extra/src/batch/components/message_sender.rs similarity index 84% rename from crates/relayer-components-extra/src/batch/impls/message_sender.rs rename to crates/relayer-components-extra/src/batch/components/message_sender.rs index 88f8a98319..9bdaefa350 100644 --- a/crates/relayer-components-extra/src/batch/impls/message_sender.rs +++ b/crates/relayer-components-extra/src/batch/components/message_sender.rs @@ -1,12 +1,14 @@ use async_trait::async_trait; use ibc_relayer_components::chain::traits::types::ibc::HasIbcChainTypes; use ibc_relayer_components::relay::traits::chains::HasRelayChains; -use ibc_relayer_components::relay::traits::ibc_message_sender::IbcMessageSender; +use ibc_relayer_components::relay::traits::ibc_message_sender::{ + CanSendIbcMessages, IbcMessageSender, +}; use ibc_relayer_components::relay::traits::target::ChainTarget; use ibc_relayer_components::runtime::traits::runtime::HasRuntime; use crate::batch::traits::channel::HasMessageBatchSender; -use crate::batch::traits::send_messages_from_batch::CanSendIbcMessagesFromBatchWorker; +use crate::batch::types::sink::BatchWorkerSink; use crate::runtime::traits::channel::CanUseChannels; use crate::runtime::traits::channel_once::{CanCreateChannelsOnce, CanUseChannelsOnce}; use crate::std_prelude::*; @@ -14,11 +16,11 @@ use crate::std_prelude::*; pub struct SendMessagesToBatchWorker; #[async_trait] -impl IbcMessageSender +impl IbcMessageSender for SendMessagesToBatchWorker where Relay: HasRelayChains, - Relay: CanSendIbcMessagesFromBatchWorker, + Relay: CanSendIbcMessages, Target: ChainTarget, TargetChain: HasIbcChainTypes, TargetChain: HasRuntime, diff --git a/crates/relayer-components-extra/src/batch/impls/mod.rs b/crates/relayer-components-extra/src/batch/components/mod.rs similarity index 100% rename from crates/relayer-components-extra/src/batch/impls/mod.rs rename to crates/relayer-components-extra/src/batch/components/mod.rs diff --git a/crates/relayer-components-extra/src/batch/mod.rs b/crates/relayer-components-extra/src/batch/mod.rs index 35e02c0c8e..fbfd97c2d0 100644 --- a/crates/relayer-components-extra/src/batch/mod.rs +++ b/crates/relayer-components-extra/src/batch/mod.rs @@ -1,4 +1,4 @@ -pub mod impls; +pub mod components; pub mod traits; pub mod types; pub mod worker; diff --git a/crates/relayer-components-extra/src/batch/traits/mod.rs b/crates/relayer-components-extra/src/batch/traits/mod.rs index 6a72619714..81ad882b9e 100644 --- a/crates/relayer-components-extra/src/batch/traits/mod.rs +++ b/crates/relayer-components-extra/src/batch/traits/mod.rs @@ -1,3 +1,2 @@ pub mod channel; pub mod config; -pub mod send_messages_from_batch; diff --git a/crates/relayer-components-extra/src/batch/traits/send_messages_from_batch.rs b/crates/relayer-components-extra/src/batch/traits/send_messages_from_batch.rs deleted file mode 100644 index c2c97887f0..0000000000 --- a/crates/relayer-components-extra/src/batch/traits/send_messages_from_batch.rs +++ /dev/null @@ -1,17 +0,0 @@ -use async_trait::async_trait; -use ibc_relayer_components::chain::types::aliases::{Event, Message}; -use ibc_relayer_components::relay::traits::chains::HasRelayChains; -use ibc_relayer_components::relay::traits::target::ChainTarget; - -use crate::std_prelude::*; - -#[async_trait] -pub trait CanSendIbcMessagesFromBatchWorker: HasRelayChains -where - Target: ChainTarget, -{ - async fn send_messages_from_batch_worker( - &self, - messages: Vec>, - ) -> Result>>, Self::Error>; -} diff --git a/crates/relayer-components-extra/src/batch/types/mod.rs b/crates/relayer-components-extra/src/batch/types/mod.rs index 1aa3529c34..c8d3625875 100644 --- a/crates/relayer-components-extra/src/batch/types/mod.rs +++ b/crates/relayer-components-extra/src/batch/types/mod.rs @@ -1,2 +1,3 @@ pub mod aliases; pub mod config; +pub mod sink; diff --git a/crates/relayer-components-extra/src/batch/types/sink.rs b/crates/relayer-components-extra/src/batch/types/sink.rs new file mode 100644 index 0000000000..99195c2488 --- /dev/null +++ b/crates/relayer-components-extra/src/batch/types/sink.rs @@ -0,0 +1 @@ +pub struct BatchWorkerSink; diff --git a/crates/relayer-components-extra/src/batch/worker.rs b/crates/relayer-components-extra/src/batch/worker.rs index ca65542f72..df2ee2e013 100644 --- a/crates/relayer-components-extra/src/batch/worker.rs +++ b/crates/relayer-components-extra/src/batch/worker.rs @@ -1,5 +1,6 @@ use alloc::collections::VecDeque; use core::mem; +use ibc_relayer_components::relay::traits::ibc_message_sender::CanSendIbcMessages; use ibc_relayer_components::relay::traits::logs::logger::CanLogRelayTarget; use async_trait::async_trait; @@ -17,9 +18,9 @@ use ibc_relayer_components::runtime::traits::sleep::CanSleep; use ibc_relayer_components::runtime::traits::time::HasTime; use ibc_relayer_components::runtime::types::aliases::Runtime; -use crate::batch::traits::send_messages_from_batch::CanSendIbcMessagesFromBatchWorker; use crate::batch::types::aliases::{BatchSubmission, EventResultSender, MessageBatchReceiver}; use crate::batch::types::config::BatchConfig; +use crate::batch::types::sink::BatchWorkerSink; use crate::runtime::traits::channel::{CanUseChannels, HasChannelTypes}; use crate::runtime::traits::channel_once::{CanUseChannelsOnce, HasChannelOnceTypes}; use crate::runtime::traits::spawn::{HasSpawner, Spawner, TaskHandle}; @@ -285,7 +286,7 @@ where #[async_trait] impl CanSendReadyBatches for Relay where - Relay: CanLogRelayTarget + CanSendIbcMessagesFromBatchWorker, + Relay: CanLogRelayTarget + CanSendIbcMessages, Target: ChainTarget, Target::TargetChain: HasRuntime, Runtime: CanUseChannelsOnce + CanUseChannels, @@ -315,7 +316,7 @@ where }, ); - let send_result = self.send_messages_from_batch_worker(in_messages).await; + let send_result = self.send_messages(Target::default(), in_messages).await; match send_result { Err(e) => { diff --git a/crates/relayer-components-extra/src/components/extra.rs b/crates/relayer-components-extra/src/components/extra.rs new file mode 100644 index 0000000000..2e99952555 --- /dev/null +++ b/crates/relayer-components-extra/src/components/extra.rs @@ -0,0 +1,90 @@ +use core::marker::PhantomData; + +use ibc_relayer_components::relay::components::message_senders::chain_sender::SendIbcMessagesToChain; +use ibc_relayer_components::relay::components::message_senders::update_client::SendIbcMessagesWithUpdateClient; +use ibc_relayer_components::relay::components::update_client::build::BuildUpdateClientMessages; +use ibc_relayer_components::relay::components::update_client::skip::SkipUpdateClient; +use ibc_relayer_components::relay::components::update_client::wait::WaitUpdateClient; +use ibc_relayer_components::relay::components::packet_relayers::general::filter_relayer::FilterRelayer; +use ibc_relayer_components::relay::components::packet_relayers::ack::base_ack_packet::BaseAckPacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::general::lock::LockPacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::general::full_relay::FullCycleRelayer; +use ibc_relayer_components::relay::components::packet_relayers::receive::base_receive_packet::BaseReceivePacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::general::log::LoggerRelayer; +use ibc_relayer_components::relay::components::packet_relayers::timeout_unordered::timeout_unordered_packet::BaseTimeoutUnorderedPacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::receive::skip_received_packet::SkipReceivedPacketRelayer; +use ibc_relayer_components::relay::traits::auto_relayer::{RelayMode, BiRelayMode}; +use ibc_relayer_components::relay::traits::ibc_message_sender::MainSink; + +use crate::batch::components::message_sender::SendMessagesToBatchWorker; +use crate::batch::types::sink::BatchWorkerSink; +use crate::relay::components::auto_relayers::parallel_bidirectional::ParallelBidirectionalRelayer; +use crate::relay::components::auto_relayers::parallel_event::ParallelEventSubscriptionRelayer; +use crate::relay::components::auto_relayers::parallel_two_way::ParallelTwoWayAutoRelay; +use crate::relay::components::packet_relayers::retry::RetryRelayer; +use crate::std_prelude::*; +use crate::telemetry::components::consensus_state::ConsensusStateTelemetryQuerier; +use crate::telemetry::components::status::ChainStatusTelemetryQuerier; + +pub struct ExtraComponents(pub PhantomData); + +ibc_relayer_components::derive_chain_status_querier!( + ExtraComponents, + ChainStatusTelemetryQuerier, +); + +ibc_relayer_components::derive_consensus_state_querier!( + ExtraComponents, + ConsensusStateTelemetryQuerier, +); + +ibc_relayer_components::derive_ibc_message_sender!( + MainSink, + ExtraComponents, + SendMessagesToBatchWorker, +); + +ibc_relayer_components::derive_ibc_message_sender!( + BatchWorkerSink, + ExtraComponents, + SendIbcMessagesWithUpdateClient, +); + +ibc_relayer_components::derive_update_client_message_builder!( + ExtraComponents, + SkipUpdateClient>, +); + +ibc_relayer_components::derive_packet_relayer!( + ExtraComponents, + LockPacketRelayer>>>, +); + +ibc_relayer_components::derive_packet_filter!(ExtraComponents, BaseComponents); + +ibc_relayer_components::derive_receive_packet_relayer!( + ExtraComponents, + SkipReceivedPacketRelayer, +); + +ibc_relayer_components::derive_ack_packet_relayer!( + ExtraComponents, + BaseAckPacketRelayer, +); + +ibc_relayer_components::derive_timeout_unordered_packet_relayer!( + ExtraComponents, + BaseTimeoutUnorderedPacketRelayer, +); + +ibc_relayer_components::derive_auto_relayer!( + RelayMode, + ExtraComponents, + ParallelBidirectionalRelayer, +); + +ibc_relayer_components::derive_auto_relayer!( + BiRelayMode, + ExtraComponents, + ParallelTwoWayAutoRelay, +); diff --git a/crates/relayer-components-extra/src/components/mod.rs b/crates/relayer-components-extra/src/components/mod.rs new file mode 100644 index 0000000000..d5d7148613 --- /dev/null +++ b/crates/relayer-components-extra/src/components/mod.rs @@ -0,0 +1 @@ +pub mod extra; diff --git a/crates/relayer-components-extra/src/lib.rs b/crates/relayer-components-extra/src/lib.rs index 02634b48a9..b241aca428 100644 --- a/crates/relayer-components-extra/src/lib.rs +++ b/crates/relayer-components-extra/src/lib.rs @@ -7,6 +7,7 @@ extern crate alloc; pub mod batch; pub mod builder; +pub mod components; pub mod packet_clear; pub mod relay; pub mod runtime; diff --git a/crates/relayer-components-extra/src/relay/impls/auto_relayers/mod.rs b/crates/relayer-components-extra/src/relay/components/auto_relayers/mod.rs similarity index 100% rename from crates/relayer-components-extra/src/relay/impls/auto_relayers/mod.rs rename to crates/relayer-components-extra/src/relay/components/auto_relayers/mod.rs diff --git a/crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_bidirectional.rs b/crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_bidirectional.rs similarity index 94% rename from crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_bidirectional.rs rename to crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_bidirectional.rs index 3e43dac716..2f9bbad8a8 100644 --- a/crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_bidirectional.rs +++ b/crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_bidirectional.rs @@ -17,7 +17,8 @@ use crate::std_prelude::*; pub struct ParallelBidirectionalRelayer(pub PhantomData); #[async_trait] -impl AutoRelayer for ParallelBidirectionalRelayer +impl AutoRelayer + for ParallelBidirectionalRelayer where Relay: HasRelayChains + HasRuntime + Clone, InRelayer: AutoRelayerWithTarget, diff --git a/crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_event.rs b/crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_event.rs similarity index 100% rename from crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_event.rs rename to crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_event.rs diff --git a/crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_two_way.rs b/crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_two_way.rs similarity index 81% rename from crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_two_way.rs rename to crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_two_way.rs index 931e2441f4..e926fca64c 100644 --- a/crates/relayer-components-extra/src/relay/impls/auto_relayers/parallel_two_way.rs +++ b/crates/relayer-components-extra/src/relay/components/auto_relayers/parallel_two_way.rs @@ -1,5 +1,7 @@ use async_trait::async_trait; -use ibc_relayer_components::relay::traits::auto_relayer::{AutoRelayer, CanAutoRelay}; +use ibc_relayer_components::relay::traits::auto_relayer::{ + AutoRelayer, BiRelayMode, CanAutoRelay, RelayMode, +}; use ibc_relayer_components::relay::traits::two_way::HasTwoWayRelay; use ibc_relayer_components::runtime::traits::runtime::HasRuntime; @@ -18,12 +20,12 @@ use crate::std_prelude::*; pub struct ParallelTwoWayAutoRelay; #[async_trait] -impl AutoRelayer for ParallelTwoWayAutoRelay +impl AutoRelayer for ParallelTwoWayAutoRelay where BiRelay: HasTwoWayRelay, Runtime: HasSpawner, - BiRelay::RelayAToB: CanAutoRelay + HasRuntime + Clone, - BiRelay::RelayBToA: CanAutoRelay + Clone, + BiRelay::RelayAToB: CanAutoRelay + HasRuntime + Clone, + BiRelay::RelayBToA: CanAutoRelay + Clone, { async fn auto_relay(birelay: &BiRelay) -> Result<(), BiRelay::Error> { let relay_a_to_b = birelay.relay_a_to_b().clone(); diff --git a/crates/relayer-components-extra/src/relay/impls/mod.rs b/crates/relayer-components-extra/src/relay/components/mod.rs similarity index 100% rename from crates/relayer-components-extra/src/relay/impls/mod.rs rename to crates/relayer-components-extra/src/relay/components/mod.rs diff --git a/crates/relayer-components-extra/src/relay/impls/packet_relayers/mod.rs b/crates/relayer-components-extra/src/relay/components/packet_relayers/mod.rs similarity index 100% rename from crates/relayer-components-extra/src/relay/impls/packet_relayers/mod.rs rename to crates/relayer-components-extra/src/relay/components/packet_relayers/mod.rs diff --git a/crates/relayer-components-extra/src/relay/impls/packet_relayers/retry.rs b/crates/relayer-components-extra/src/relay/components/packet_relayers/retry.rs similarity index 100% rename from crates/relayer-components-extra/src/relay/impls/packet_relayers/retry.rs rename to crates/relayer-components-extra/src/relay/components/packet_relayers/retry.rs diff --git a/crates/relayer-components-extra/src/relay/mod.rs b/crates/relayer-components-extra/src/relay/mod.rs index b132bc2556..f188f2c26d 100644 --- a/crates/relayer-components-extra/src/relay/mod.rs +++ b/crates/relayer-components-extra/src/relay/mod.rs @@ -1 +1 @@ -pub mod impls; +pub mod components; diff --git a/crates/relayer-components-extra/src/telemetry/impls/consensus_state.rs b/crates/relayer-components-extra/src/telemetry/components/consensus_state.rs similarity index 91% rename from crates/relayer-components-extra/src/telemetry/impls/consensus_state.rs rename to crates/relayer-components-extra/src/telemetry/components/consensus_state.rs index 3f3641a3fb..139eaf719f 100644 --- a/crates/relayer-components-extra/src/telemetry/impls/consensus_state.rs +++ b/crates/relayer-components-extra/src/telemetry/components/consensus_state.rs @@ -1,6 +1,7 @@ use async_trait::async_trait; use ibc_relayer_components::chain::traits::queries::consensus_state::ConsensusStateQuerier; use ibc_relayer_components::chain::traits::types::consensus_state::HasConsensusStateType; +use ibc_relayer_components::chain::traits::types::height::HasHeightType; use ibc_relayer_components::chain::traits::types::ibc::HasIbcChainTypes; use ibc_relayer_components::core::traits::error::HasErrorType; @@ -17,7 +18,7 @@ impl ConsensusStateQuerier where Chain: HasIbcChainTypes + HasTelemetry + HasErrorType, - Counterparty: HasConsensusStateType, + Counterparty: HasConsensusStateType + HasHeightType, InQuerier: ConsensusStateQuerier, Telemetry: HasMetric, Telemetry::Value: From, diff --git a/crates/relayer-components-extra/src/telemetry/impls/mod.rs b/crates/relayer-components-extra/src/telemetry/components/mod.rs similarity index 100% rename from crates/relayer-components-extra/src/telemetry/impls/mod.rs rename to crates/relayer-components-extra/src/telemetry/components/mod.rs diff --git a/crates/relayer-components-extra/src/telemetry/impls/status.rs b/crates/relayer-components-extra/src/telemetry/components/status.rs similarity index 100% rename from crates/relayer-components-extra/src/telemetry/impls/status.rs rename to crates/relayer-components-extra/src/telemetry/components/status.rs diff --git a/crates/relayer-components-extra/src/telemetry/mod.rs b/crates/relayer-components-extra/src/telemetry/mod.rs index d44cc4a184..1f44d235ab 100644 --- a/crates/relayer-components-extra/src/telemetry/mod.rs +++ b/crates/relayer-components-extra/src/telemetry/mod.rs @@ -1,2 +1,2 @@ -pub mod impls; +pub mod components; pub mod traits; diff --git a/crates/relayer-components/src/chain/traits/queries/consensus_state.rs b/crates/relayer-components/src/chain/traits/queries/consensus_state.rs index 4b21e02076..a55f8512d6 100644 --- a/crates/relayer-components/src/chain/traits/queries/consensus_state.rs +++ b/crates/relayer-components/src/chain/traits/queries/consensus_state.rs @@ -1,7 +1,9 @@ use async_trait::async_trait; use crate::chain::traits::types::consensus_state::HasConsensusStateType; +use crate::chain::traits::types::height::HasHeightType; use crate::chain::traits::types::ibc::HasIbcChainTypes; +use crate::core::traits::component::HasComponents; use crate::core::traits::error::HasErrorType; use crate::std_prelude::*; @@ -9,7 +11,7 @@ use crate::std_prelude::*; pub trait ConsensusStateQuerier where Chain: HasIbcChainTypes + HasErrorType, - Counterparty: HasConsensusStateType, + Counterparty: HasConsensusStateType + HasHeightType, { async fn query_consensus_state( chain: &Chain, @@ -22,7 +24,7 @@ where pub trait CanQueryConsensusState: HasIbcChainTypes + HasErrorType where - Counterparty: HasConsensusStateType, + Counterparty: HasConsensusStateType + HasHeightType, { async fn query_consensus_state( &self, @@ -30,3 +32,47 @@ where height: &Counterparty::Height, ) -> Result; } + +#[async_trait] +impl CanQueryConsensusState for Chain +where + Chain: HasIbcChainTypes + HasErrorType + HasComponents, + Counterparty: HasConsensusStateType + HasHeightType, + Chain::Components: ConsensusStateQuerier, +{ + async fn query_consensus_state( + &self, + client_id: &Self::ClientId, + height: &Counterparty::Height, + ) -> Result { + Chain::Components::query_consensus_state(self, client_id, height).await + } +} + +#[macro_export] +macro_rules! derive_consensus_state_querier { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::chain::traits::queries::consensus_state::ConsensusStateQuerier + for $target $( < $( $param ),* > )* + where + Chain: + $crate::chain::traits::types::ibc::HasIbcChainTypes + + $crate::core::traits::error::HasErrorType, + Counterparty: + $crate::chain::traits::types::consensus_state::HasConsensusStateType + + $crate::chain::traits::types::height::HasHeightType, + $source: $crate::chain::traits::queries::consensus_state::ConsensusStateQuerier, + { + async fn query_consensus_state( + chain: &Chain, + client_id: &Chain::ClientId, + height: &Counterparty::Height, + ) -> Result { + <$source as $crate::chain::traits::queries::consensus_state::ConsensusStateQuerier> + ::query_consensus_state(chain, client_id, height).await + } + } + }; +} diff --git a/crates/relayer-components/src/chain/traits/queries/status.rs b/crates/relayer-components/src/chain/traits/queries/status.rs index d8cca826c4..27d24412bb 100644 --- a/crates/relayer-components/src/chain/traits/queries/status.rs +++ b/crates/relayer-components/src/chain/traits/queries/status.rs @@ -2,9 +2,21 @@ use async_trait::async_trait; use crate::chain::traits::types::height::HasHeightType; use crate::chain::traits::types::status::HasChainStatusType; +use crate::core::traits::component::HasComponents; use crate::core::traits::error::HasErrorType; use crate::std_prelude::*; +/** + The provider trait for [`ChainStatusQuerier`]. +*/ +#[async_trait] +pub trait ChainStatusQuerier +where + Chain: HasChainStatusType + HasErrorType, +{ + async fn query_chain_status(chain: &Chain) -> Result; +} + /** Implemented by a chain context to provide method for querying the [current status](HasChainStatusType::ChainStatus) of the blockchain. @@ -30,15 +42,15 @@ pub trait CanQueryChainStatus: HasChainStatusType + HasErrorType { async fn query_chain_status(&self) -> Result; } -/** - The provider trait for [`ChainStatusQuerier`]. -*/ #[async_trait] -pub trait ChainStatusQuerier +impl CanQueryChainStatus for Chain where - Chain: HasChainStatusType + HasErrorType, + Chain: HasChainStatusType + HasErrorType + HasComponents, + Chain::Components: ChainStatusQuerier, { - async fn query_chain_status(context: &Chain) -> Result; + async fn query_chain_status(&self) -> Result { + Chain::Components::query_chain_status(self).await + } } #[async_trait] @@ -58,3 +70,23 @@ where Ok(height.clone()) } } + +#[macro_export] +macro_rules! derive_chain_status_querier { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::chain::traits::queries::status::ChainStatusQuerier + for $target $( < $( $param ),* > )* + where + Chain: $crate::chain::traits::types::status::HasChainStatusType + + $crate::core::traits::error::HasErrorType, + $source: $crate::chain::traits::queries::status::ChainStatusQuerier, + { + async fn query_chain_status(chain: &Chain) -> Result { + <$source as $crate::chain::traits::queries::status::ChainStatusQuerier> + ::query_chain_status(chain).await + } + } + }; +} diff --git a/crates/relayer-components/src/chain/traits/types/consensus_state.rs b/crates/relayer-components/src/chain/traits/types/consensus_state.rs index 28cb41c5f4..d6b3017bc3 100644 --- a/crates/relayer-components/src/chain/traits/types/consensus_state.rs +++ b/crates/relayer-components/src/chain/traits/types/consensus_state.rs @@ -1,7 +1,6 @@ -use crate::chain::traits::types::ibc::HasIbcChainTypes; use crate::core::traits::sync::Async; -pub trait HasConsensusStateType: HasIbcChainTypes { +pub trait HasConsensusStateType: Async { /** The consensus state of the `Self` chain's client on the `Counterparty` chain */ diff --git a/crates/relayer-components/src/components/default.rs b/crates/relayer-components/src/components/default.rs new file mode 100644 index 0000000000..e5a1782f56 --- /dev/null +++ b/crates/relayer-components/src/components/default.rs @@ -0,0 +1,62 @@ +use core::marker::PhantomData; + +use crate::relay::components::auto_relayers::concurrent_bidirectional::ConcurrentBidirectionalRelayer; +use crate::relay::components::auto_relayers::concurrent_event::ConcurrentEventSubscriptionRelayer; +use crate::relay::components::message_senders::chain_sender::SendIbcMessagesToChain; +use crate::relay::components::message_senders::update_client::SendIbcMessagesWithUpdateClient; +use crate::relay::components::packet_relayers::ack::base_ack_packet::BaseAckPacketRelayer; +use crate::relay::components::packet_relayers::general::filter_relayer::FilterRelayer; +use crate::relay::components::packet_relayers::general::full_relay::FullCycleRelayer; +use crate::relay::components::packet_relayers::general::lock::LockPacketRelayer; +use crate::relay::components::packet_relayers::general::log::LoggerRelayer; +use crate::relay::components::packet_relayers::receive::base_receive_packet::BaseReceivePacketRelayer; +use crate::relay::components::packet_relayers::receive::skip_received_packet::SkipReceivedPacketRelayer; +use crate::relay::components::packet_relayers::timeout_unordered::timeout_unordered_packet::BaseTimeoutUnorderedPacketRelayer; +use crate::relay::components::update_client::build::BuildUpdateClientMessages; +use crate::relay::components::update_client::skip::SkipUpdateClient; +use crate::relay::components::update_client::wait::WaitUpdateClient; +use crate::relay::traits::auto_relayer::RelayMode; +use crate::relay::traits::ibc_message_sender::MainSink; +use crate::std_prelude::*; + +pub struct DefaultComponents(pub PhantomData); + +crate::derive_chain_status_querier!(DefaultComponents, BaseComponents); + +crate::derive_consensus_state_querier!(DefaultComponents, BaseComponents); + +crate::derive_ibc_message_sender!( + MainSink, + DefaultComponents, + SendIbcMessagesWithUpdateClient, +); + +crate::derive_update_client_message_builder!( + DefaultComponents, + SkipUpdateClient>, +); + +crate::derive_packet_relayer!( + DefaultComponents, + LockPacketRelayer>>, +); + +crate::derive_packet_filter!(DefaultComponents, BaseComponents); + +crate::derive_receive_packet_relayer!( + DefaultComponents, + SkipReceivedPacketRelayer, +); + +crate::derive_ack_packet_relayer!(DefaultComponents, BaseAckPacketRelayer,); + +crate::derive_timeout_unordered_packet_relayer!( + DefaultComponents, + BaseTimeoutUnorderedPacketRelayer, +); + +crate::derive_auto_relayer!( + RelayMode, + DefaultComponents, + ConcurrentBidirectionalRelayer, +); diff --git a/crates/relayer-components/src/components/mod.rs b/crates/relayer-components/src/components/mod.rs new file mode 100644 index 0000000000..1be8d340b8 --- /dev/null +++ b/crates/relayer-components/src/components/mod.rs @@ -0,0 +1 @@ +pub mod default; diff --git a/crates/relayer-components/src/core/traits/component.rs b/crates/relayer-components/src/core/traits/component.rs new file mode 100644 index 0000000000..bdb423ef89 --- /dev/null +++ b/crates/relayer-components/src/core/traits/component.rs @@ -0,0 +1,5 @@ +use crate::core::traits::sync::Async; + +pub trait HasComponents: Async { + type Components: Async; +} diff --git a/crates/relayer-components/src/core/traits/mod.rs b/crates/relayer-components/src/core/traits/mod.rs index e322f4686c..cce358faaa 100644 --- a/crates/relayer-components/src/core/traits/mod.rs +++ b/crates/relayer-components/src/core/traits/mod.rs @@ -1,2 +1,3 @@ +pub mod component; pub mod error; pub mod sync; diff --git a/crates/relayer-components/src/lib.rs b/crates/relayer-components/src/lib.rs index 16d624b48c..2ca5ee51ab 100644 --- a/crates/relayer-components/src/lib.rs +++ b/crates/relayer-components/src/lib.rs @@ -8,8 +8,10 @@ extern crate alloc; pub mod builder; pub mod chain; +pub mod components; pub mod core; pub mod logger; pub mod relay; pub mod runtime; pub mod transaction; +pub mod vendor; diff --git a/crates/relayer-components/src/relay/impls/auto_relayers/concurrent_bidirectional.rs b/crates/relayer-components/src/relay/components/auto_relayers/concurrent_bidirectional.rs similarity index 93% rename from crates/relayer-components/src/relay/impls/auto_relayers/concurrent_bidirectional.rs rename to crates/relayer-components/src/relay/components/auto_relayers/concurrent_bidirectional.rs index ab5881af19..6ffa39a2bd 100644 --- a/crates/relayer-components/src/relay/impls/auto_relayers/concurrent_bidirectional.rs +++ b/crates/relayer-components/src/relay/components/auto_relayers/concurrent_bidirectional.rs @@ -12,7 +12,7 @@ use crate::std_prelude::*; /// A concurrent bidirectional relay context that supports auto-relaying between two /// targets, a `SourceTarget` and a `DestinationTarget`. It is composed of two -/// unidirectional relay contexts. +/// unidirectional relay contexts. /// /// Note that the `InRelayer` parameter is constrained such that the two sub-relay /// contexts must relay between the same two connected chains, the `SourceTarget` @@ -25,7 +25,7 @@ use crate::std_prelude::*; pub struct ConcurrentBidirectionalRelayer(pub PhantomData); #[async_trait] -impl AutoRelayer for ConcurrentBidirectionalRelayer +impl AutoRelayer for ConcurrentBidirectionalRelayer where Relay: HasRelayChains, InRelayer: AutoRelayerWithTarget, diff --git a/crates/relayer-components/src/relay/impls/auto_relayers/concurrent_event.rs b/crates/relayer-components/src/relay/components/auto_relayers/concurrent_event.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/auto_relayers/concurrent_event.rs rename to crates/relayer-components/src/relay/components/auto_relayers/concurrent_event.rs diff --git a/crates/relayer-components/src/relay/impls/auto_relayers/concurrent_two_way.rs b/crates/relayer-components/src/relay/components/auto_relayers/concurrent_two_way.rs similarity index 81% rename from crates/relayer-components/src/relay/impls/auto_relayers/concurrent_two_way.rs rename to crates/relayer-components/src/relay/components/auto_relayers/concurrent_two_way.rs index 5bac3a1e8e..3fe8fb09ba 100644 --- a/crates/relayer-components/src/relay/impls/auto_relayers/concurrent_two_way.rs +++ b/crates/relayer-components/src/relay/components/auto_relayers/concurrent_two_way.rs @@ -4,7 +4,7 @@ use core::pin::Pin; use async_trait::async_trait; use futures_util::stream::{self, StreamExt}; -use crate::relay::traits::auto_relayer::{AutoRelayer, CanAutoRelay}; +use crate::relay::traits::auto_relayer::{AutoRelayer, BiRelayMode, CanAutoRelay, RelayMode}; use crate::relay::traits::two_way::HasTwoWayRelay; use crate::std_prelude::*; @@ -16,11 +16,11 @@ use crate::std_prelude::*; pub struct ConcurrentTwoWayAutoRelay; #[async_trait] -impl AutoRelayer for ConcurrentTwoWayAutoRelay +impl AutoRelayer for ConcurrentTwoWayAutoRelay where BiRelay: HasTwoWayRelay, - BiRelay::RelayAToB: CanAutoRelay, - BiRelay::RelayBToA: CanAutoRelay, + BiRelay::RelayAToB: CanAutoRelay, + BiRelay::RelayBToA: CanAutoRelay, { async fn auto_relay(birelay: &BiRelay) -> Result<(), BiRelay::Error> { let a_to_b_task: Pin + Send>> = Box::pin(async move { diff --git a/crates/relayer-components/src/relay/impls/auto_relayers/mod.rs b/crates/relayer-components/src/relay/components/auto_relayers/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/auto_relayers/mod.rs rename to crates/relayer-components/src/relay/components/auto_relayers/mod.rs diff --git a/crates/relayer-components/src/relay/impls/auto_relayers/sequential_event.rs b/crates/relayer-components/src/relay/components/auto_relayers/sequential_event.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/auto_relayers/sequential_event.rs rename to crates/relayer-components/src/relay/components/auto_relayers/sequential_event.rs diff --git a/crates/relayer-components/src/relay/impls/message_senders/chain_sender.rs b/crates/relayer-components/src/relay/components/message_senders/chain_sender.rs similarity index 89% rename from crates/relayer-components/src/relay/impls/message_senders/chain_sender.rs rename to crates/relayer-components/src/relay/components/message_senders/chain_sender.rs index 145240d683..0f2f1f46b1 100644 --- a/crates/relayer-components/src/relay/impls/message_senders/chain_sender.rs +++ b/crates/relayer-components/src/relay/components/message_senders/chain_sender.rs @@ -10,7 +10,8 @@ use crate::std_prelude::*; pub struct SendIbcMessagesToChain; #[async_trait] -impl IbcMessageSender for SendIbcMessagesToChain +impl IbcMessageSender + for SendIbcMessagesToChain where Relay: HasRelayChains, Target: ChainTarget, diff --git a/crates/relayer-components/src/relay/impls/message_senders/mod.rs b/crates/relayer-components/src/relay/components/message_senders/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/message_senders/mod.rs rename to crates/relayer-components/src/relay/components/message_senders/mod.rs diff --git a/crates/relayer-components/src/relay/impls/message_senders/update_client.rs b/crates/relayer-components/src/relay/components/message_senders/update_client.rs similarity index 89% rename from crates/relayer-components/src/relay/impls/message_senders/update_client.rs rename to crates/relayer-components/src/relay/components/message_senders/update_client.rs index 7f93806569..bf2c45df7e 100644 --- a/crates/relayer-components/src/relay/impls/message_senders/update_client.rs +++ b/crates/relayer-components/src/relay/components/message_senders/update_client.rs @@ -14,12 +14,12 @@ use crate::std_prelude::*; pub struct SendIbcMessagesWithUpdateClient(pub Sender); #[async_trait] -impl IbcMessageSender - for SendIbcMessagesWithUpdateClient +impl + IbcMessageSender for SendIbcMessagesWithUpdateClient where Relay: CanLogRelayTarget, Target: ChainTarget, - Sender: IbcMessageSender, + InSender: IbcMessageSender, TargetChain: HasIbcChainTypes, TargetChain: HasCounterpartyMessageHeight, CounterpartyChain: HasIbcChainTypes + CanIncrementHeight, @@ -61,7 +61,7 @@ where in_messages.extend(messages); - let in_events = Sender::send_messages(relay, in_messages).await?; + let in_events = InSender::send_messages(relay, in_messages).await?; let events = in_events.into_iter().skip(update_messages_count).collect(); diff --git a/crates/relayer-components/src/relay/components/mod.rs b/crates/relayer-components/src/relay/components/mod.rs new file mode 100644 index 0000000000..142e9502a2 --- /dev/null +++ b/crates/relayer-components/src/relay/components/mod.rs @@ -0,0 +1,4 @@ +pub mod auto_relayers; +pub mod message_senders; +pub mod packet_relayers; +pub mod update_client; diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/ack/base_ack_packet.rs b/crates/relayer-components/src/relay/components/packet_relayers/ack/base_ack_packet.rs similarity index 93% rename from crates/relayer-components/src/relay/impls/packet_relayers/ack/base_ack_packet.rs rename to crates/relayer-components/src/relay/components/packet_relayers/ack/base_ack_packet.rs index 595b122ada..801a5359a0 100644 --- a/crates/relayer-components/src/relay/impls/packet_relayers/ack/base_ack_packet.rs +++ b/crates/relayer-components/src/relay/components/packet_relayers/ack/base_ack_packet.rs @@ -7,7 +7,7 @@ use crate::chain::traits::message_builders::ack_packet::{ use crate::chain::traits::types::client_state::HasClientStateType; use crate::chain::traits::types::packet::HasIbcPacketTypes; use crate::core::traits::sync::Async; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::packet::HasRelayPacket; use crate::relay::traits::packet_relayers::ack_packet::AckPacketRelayer; use crate::relay::traits::target::SourceTarget; @@ -26,7 +26,7 @@ where DstChainWithPacket = DstChain, Packet = Packet, >, - Relay: CanSendSingleIbcMessage, + Relay: CanSendSingleIbcMessage, SrcChain: CanQueryClientState + CanBuildAckPacketMessage + HasIbcPacketTypes, diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/ack/mod.rs b/crates/relayer-components/src/relay/components/packet_relayers/ack/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/ack/mod.rs rename to crates/relayer-components/src/relay/components/packet_relayers/ack/mod.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/general/filter_relayer.rs b/crates/relayer-components/src/relay/components/packet_relayers/general/filter_relayer.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/general/filter_relayer.rs rename to crates/relayer-components/src/relay/components/packet_relayers/general/filter_relayer.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs b/crates/relayer-components/src/relay/components/packet_relayers/general/full_relay.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs rename to crates/relayer-components/src/relay/components/packet_relayers/general/full_relay.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/general/lock.rs b/crates/relayer-components/src/relay/components/packet_relayers/general/lock.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/general/lock.rs rename to crates/relayer-components/src/relay/components/packet_relayers/general/lock.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/general/log.rs b/crates/relayer-components/src/relay/components/packet_relayers/general/log.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/general/log.rs rename to crates/relayer-components/src/relay/components/packet_relayers/general/log.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/general/mod.rs b/crates/relayer-components/src/relay/components/packet_relayers/general/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/general/mod.rs rename to crates/relayer-components/src/relay/components/packet_relayers/general/mod.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/mod.rs b/crates/relayer-components/src/relay/components/packet_relayers/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/mod.rs rename to crates/relayer-components/src/relay/components/packet_relayers/mod.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/receive/base_receive_packet.rs b/crates/relayer-components/src/relay/components/packet_relayers/receive/base_receive_packet.rs similarity index 93% rename from crates/relayer-components/src/relay/impls/packet_relayers/receive/base_receive_packet.rs rename to crates/relayer-components/src/relay/components/packet_relayers/receive/base_receive_packet.rs index 0ded7cf3ab..4ee8b4c084 100644 --- a/crates/relayer-components/src/relay/impls/packet_relayers/receive/base_receive_packet.rs +++ b/crates/relayer-components/src/relay/components/packet_relayers/receive/base_receive_packet.rs @@ -7,7 +7,7 @@ use crate::chain::traits::message_builders::receive_packet::{ use crate::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent; use crate::chain::types::aliases::Height; use crate::relay::traits::chains::HasRelayChains; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::packet_relayers::receive_packet::ReceivePacketRelayer; use crate::relay::traits::target::DestinationTarget; use crate::relay::types::aliases::Packet; @@ -19,7 +19,7 @@ pub struct BaseReceivePacketRelayer; impl ReceivePacketRelayer for BaseReceivePacketRelayer where Relay::SrcChain: CanBuildReceivePacketPayload, - Relay: CanSendSingleIbcMessage, + Relay: CanSendSingleIbcMessage, Relay: HasRelayChains, Relay::DstChain: CanQueryClientState + CanBuildReceivePacketMessage diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/receive/mod.rs b/crates/relayer-components/src/relay/components/packet_relayers/receive/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/receive/mod.rs rename to crates/relayer-components/src/relay/components/packet_relayers/receive/mod.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs b/crates/relayer-components/src/relay/components/packet_relayers/receive/skip_received_packet.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs rename to crates/relayer-components/src/relay/components/packet_relayers/receive/skip_received_packet.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/mod.rs b/crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/mod.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/mod.rs rename to crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/mod.rs diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/timeout_unordered_packet.rs b/crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/timeout_unordered_packet.rs similarity index 93% rename from crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/timeout_unordered_packet.rs rename to crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/timeout_unordered_packet.rs index 47495c9828..b29e099afe 100644 --- a/crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/timeout_unordered_packet.rs +++ b/crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/timeout_unordered_packet.rs @@ -6,7 +6,7 @@ use crate::chain::traits::message_builders::timeout_unordered_packet::{ }; use crate::chain::types::aliases::Height; use crate::relay::traits::chains::HasRelayChains; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::packet_relayers::timeout_unordered_packet::TimeoutUnorderedPacketRelayer; use crate::relay::traits::target::SourceTarget; use crate::relay::types::aliases::Packet; @@ -21,7 +21,7 @@ pub struct BaseTimeoutUnorderedPacketRelayer; impl TimeoutUnorderedPacketRelayer for BaseTimeoutUnorderedPacketRelayer where Relay: HasRelayChains, - Relay: CanSendSingleIbcMessage, + Relay: CanSendSingleIbcMessage, Relay::SrcChain: CanQueryClientState + CanBuildTimeoutUnorderedPacketMessage, Relay::DstChain: CanBuildTimeoutUnorderedPacketPayload, diff --git a/crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/wait_timeout.rs b/crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/wait_timeout.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/packet_relayers/timeout_unordered/wait_timeout.rs rename to crates/relayer-components/src/relay/components/packet_relayers/timeout_unordered/wait_timeout.rs diff --git a/crates/relayer-components/src/relay/impls/client/update.rs b/crates/relayer-components/src/relay/components/update_client/build.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/client/update.rs rename to crates/relayer-components/src/relay/components/update_client/build.rs diff --git a/crates/relayer-components/src/relay/components/update_client/mod.rs b/crates/relayer-components/src/relay/components/update_client/mod.rs new file mode 100644 index 0000000000..9a20ef44f3 --- /dev/null +++ b/crates/relayer-components/src/relay/components/update_client/mod.rs @@ -0,0 +1,3 @@ +pub mod build; +pub mod skip; +pub mod wait; diff --git a/crates/relayer-components/src/relay/impls/messages/skip_update_client.rs b/crates/relayer-components/src/relay/components/update_client/skip.rs similarity index 94% rename from crates/relayer-components/src/relay/impls/messages/skip_update_client.rs rename to crates/relayer-components/src/relay/components/update_client/skip.rs index 9285d4d51e..ab3ede1cce 100644 --- a/crates/relayer-components/src/relay/impls/messages/skip_update_client.rs +++ b/crates/relayer-components/src/relay/components/update_client/skip.rs @@ -4,6 +4,7 @@ use async_trait::async_trait; use crate::chain::traits::queries::consensus_state::CanQueryConsensusState; use crate::chain::traits::types::consensus_state::HasConsensusStateType; +use crate::chain::traits::types::height::HasHeightType; use crate::chain::types::aliases::Height; use crate::logger::traits::level::HasBaseLogLevels; use crate::relay::traits::chains::HasRelayChains; @@ -21,7 +22,7 @@ where Relay: HasRelayChains + CanLogRelayTarget, Target: ChainTarget, InUpdateClient: UpdateClientMessageBuilder, - CounterpartyChain: HasConsensusStateType, + CounterpartyChain: HasConsensusStateType + HasHeightType, TargetChain: CanQueryConsensusState, { async fn build_update_client_messages( diff --git a/crates/relayer-components/src/relay/impls/messages/wait_update_client.rs b/crates/relayer-components/src/relay/components/update_client/wait.rs similarity index 100% rename from crates/relayer-components/src/relay/impls/messages/wait_update_client.rs rename to crates/relayer-components/src/relay/components/update_client/wait.rs diff --git a/crates/relayer-components/src/relay/impls/channel/open_ack.rs b/crates/relayer-components/src/relay/impls/channel/open_ack.rs index 5d7ebab38e..b07664440d 100644 --- a/crates/relayer-components/src/relay/impls/channel/open_ack.rs +++ b/crates/relayer-components/src/relay/impls/channel/open_ack.rs @@ -7,7 +7,7 @@ use crate::chain::traits::message_builders::channel::{ use crate::chain::traits::queries::status::CanQueryChainHeight; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::channel::open_ack::ChannelOpenAckRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::target::SourceTarget; use crate::relay::types::aliases::{DstChannelId, DstPortId, SrcChannelId, SrcPortId}; use crate::std_prelude::*; @@ -31,7 +31,7 @@ pub struct RelayChannelOpenAck; impl ChannelOpenAckRelayer for RelayChannelOpenAck where Relay: HasRelayChains - + CanSendSingleIbcMessage, + + CanSendSingleIbcMessage, SrcChain: CanQueryClientState + CanBuildChannelHandshakeMessages, DstChain: CanQueryChainHeight + CanBuildChannelHandshakePayloads, { diff --git a/crates/relayer-components/src/relay/impls/channel/open_confirm.rs b/crates/relayer-components/src/relay/impls/channel/open_confirm.rs index 007bb91ed6..9b4b21982e 100644 --- a/crates/relayer-components/src/relay/impls/channel/open_confirm.rs +++ b/crates/relayer-components/src/relay/impls/channel/open_confirm.rs @@ -7,7 +7,7 @@ use crate::chain::traits::message_builders::channel::{ use crate::chain::traits::queries::status::CanQueryChainHeight; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::channel::open_confirm::ChannelOpenConfirmRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::target::DestinationTarget; use crate::relay::types::aliases::{DstChannelId, DstPortId, SrcChannelId, SrcPortId}; use crate::std_prelude::*; @@ -31,7 +31,7 @@ pub struct RelayChannelOpenConfirm; impl ChannelOpenConfirmRelayer for RelayChannelOpenConfirm where Relay: HasRelayChains - + CanSendSingleIbcMessage, + + CanSendSingleIbcMessage, SrcChain: CanQueryChainHeight + CanBuildChannelHandshakePayloads, DstChain: CanQueryClientState + CanBuildChannelHandshakeMessages, { diff --git a/crates/relayer-components/src/relay/impls/channel/open_try.rs b/crates/relayer-components/src/relay/impls/channel/open_try.rs index 8a4f7dc0c8..03932a144a 100644 --- a/crates/relayer-components/src/relay/impls/channel/open_try.rs +++ b/crates/relayer-components/src/relay/impls/channel/open_try.rs @@ -9,7 +9,7 @@ use crate::chain::traits::types::ibc::HasIbcChainTypes; use crate::chain::traits::types::ibc_events::channel::HasChannelOpenTryEvent; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::channel::open_try::ChannelOpenTryRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::target::DestinationTarget; use crate::relay::types::aliases::{DstChannelId, DstPortId, SrcChannelId, SrcPortId}; use crate::std_prelude::*; @@ -40,7 +40,7 @@ pub struct RelayChannelOpenTry; impl ChannelOpenTryRelayer for RelayChannelOpenTry where Relay: HasRelayChains - + CanSendSingleIbcMessage + + CanSendSingleIbcMessage + InjectMissingChannelTryEventError, SrcChain: CanQueryChainHeight + CanBuildChannelHandshakePayloads, DstChain: CanQueryClientState diff --git a/crates/relayer-components/src/relay/impls/client/mod.rs b/crates/relayer-components/src/relay/impls/client/mod.rs index 82a5ce72ba..c5fb369c1d 100644 --- a/crates/relayer-components/src/relay/impls/client/mod.rs +++ b/crates/relayer-components/src/relay/impls/client/mod.rs @@ -1,2 +1 @@ pub mod create; -pub mod update; diff --git a/crates/relayer-components/src/relay/impls/connection/open_ack.rs b/crates/relayer-components/src/relay/impls/connection/open_ack.rs index 497f7032be..8105aad10e 100644 --- a/crates/relayer-components/src/relay/impls/connection/open_ack.rs +++ b/crates/relayer-components/src/relay/impls/connection/open_ack.rs @@ -8,7 +8,7 @@ use crate::chain::traits::queries::status::CanQueryChainHeight; use crate::relay::impls::update_client::CanSendUpdateClientMessage; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::connection::open_ack::ConnectionOpenAckRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::target::{DestinationTarget, SourceTarget}; use crate::std_prelude::*; @@ -30,7 +30,7 @@ impl ConnectionOpenAckRelayer for RelayConnect where Relay: HasRelayChains + CanSendUpdateClientMessage - + CanSendSingleIbcMessage, + + CanSendSingleIbcMessage, SrcChain: CanBuildConnectionHandshakeMessages + CanQueryClientState, DstChain: CanQueryChainHeight + CanBuildConnectionHandshakePayloads, DstChain::ConnectionId: Clone, diff --git a/crates/relayer-components/src/relay/impls/connection/open_confirm.rs b/crates/relayer-components/src/relay/impls/connection/open_confirm.rs index 6e9fba351b..5b574a2596 100644 --- a/crates/relayer-components/src/relay/impls/connection/open_confirm.rs +++ b/crates/relayer-components/src/relay/impls/connection/open_confirm.rs @@ -7,7 +7,7 @@ use crate::chain::traits::message_builders::connection::{ use crate::chain::traits::queries::status::CanQueryChainHeight; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::connection::open_confirm::ConnectionOpenConfirmRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::messages::update_client::CanBuildUpdateClientMessage; use crate::relay::traits::target::DestinationTarget; use crate::std_prelude::*; @@ -30,7 +30,7 @@ impl ConnectionOpenConfirmRelayer for RelayCon where Relay: HasRelayChains + CanBuildUpdateClientMessage - + CanSendSingleIbcMessage, + + CanSendSingleIbcMessage, SrcChain: CanQueryChainHeight + CanBuildConnectionHandshakePayloads, DstChain: CanBuildConnectionHandshakeMessages + CanQueryClientState, DstChain::ConnectionId: Clone, diff --git a/crates/relayer-components/src/relay/impls/connection/open_try.rs b/crates/relayer-components/src/relay/impls/connection/open_try.rs index f3f9c31df0..0288884e74 100644 --- a/crates/relayer-components/src/relay/impls/connection/open_try.rs +++ b/crates/relayer-components/src/relay/impls/connection/open_try.rs @@ -11,7 +11,7 @@ use crate::chain::traits::types::ibc_events::connection::HasConnectionOpenTryEve use crate::relay::impls::update_client::CanSendUpdateClientMessage; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::connection::open_try::ConnectionOpenTryRelayer; -use crate::relay::traits::ibc_message_sender::CanSendSingleIbcMessage; +use crate::relay::traits::ibc_message_sender::{CanSendSingleIbcMessage, MainSink}; use crate::relay::traits::target::{DestinationTarget, SourceTarget}; use crate::std_prelude::*; @@ -40,7 +40,7 @@ impl ConnectionOpenTryRelayer for RelayConnect where Relay: HasRelayChains + CanSendUpdateClientMessage - + CanSendSingleIbcMessage + + CanSendSingleIbcMessage + InjectMissingConnectionTryEventError, SrcChain: CanQueryChainHeight + CanBuildConnectionHandshakePayloads, DstChain: CanQueryClientState diff --git a/crates/relayer-components/src/relay/impls/messages/mod.rs b/crates/relayer-components/src/relay/impls/messages/mod.rs deleted file mode 100644 index dce39379df..0000000000 --- a/crates/relayer-components/src/relay/impls/messages/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod skip_update_client; -pub mod wait_update_client; diff --git a/crates/relayer-components/src/relay/impls/mod.rs b/crates/relayer-components/src/relay/impls/mod.rs index 8607aab777..aca81e02b1 100644 --- a/crates/relayer-components/src/relay/impls/mod.rs +++ b/crates/relayer-components/src/relay/impls/mod.rs @@ -1,11 +1,7 @@ -pub mod auto_relayers; pub mod channel; pub mod client; pub mod connection; pub mod event_relayers; -pub mod message_senders; -pub mod messages; pub mod packet_clear; pub mod packet_filters; -pub mod packet_relayers; pub mod update_client; diff --git a/crates/relayer-components/src/relay/mod.rs b/crates/relayer-components/src/relay/mod.rs index cf708e876b..69a42f92ea 100644 --- a/crates/relayer-components/src/relay/mod.rs +++ b/crates/relayer-components/src/relay/mod.rs @@ -29,6 +29,7 @@ chains. */ +pub mod components; pub mod impls; pub mod traits; pub mod types; diff --git a/crates/relayer-components/src/relay/traits/auto_relayer.rs b/crates/relayer-components/src/relay/traits/auto_relayer.rs index dc00163102..10941c4909 100644 --- a/crates/relayer-components/src/relay/traits/auto_relayer.rs +++ b/crates/relayer-components/src/relay/traits/auto_relayer.rs @@ -1,11 +1,25 @@ use async_trait::async_trait; +use crate::core::traits::component::HasComponents; use crate::core::traits::error::HasErrorType; use crate::core::traits::sync::Async; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::target::ChainTarget; use crate::std_prelude::*; +pub struct RelayMode; +pub struct BiRelayMode; + +/// Provider trait for the `CanAutoRelay` trait. +#[async_trait] +pub trait AutoRelayer: Async +where + Relay: HasErrorType, +{ + /// Starts the auto-relaying process for the given `Relay`. + async fn auto_relay(relay: &Relay) -> Result<(), Relay::Error>; +} + /// Trait that encodes the capability of a relayer to relay /// in a "set it and forget it" manner. This trait is agnostic /// as far as the provided context is concerned, i.e., it doesn't @@ -18,19 +32,41 @@ use crate::std_prelude::*; /// auto-relay process will relay in one direction as appropriate for /// the implementing context. #[async_trait] -pub trait CanAutoRelay: HasErrorType { +pub trait CanAutoRelay: HasErrorType { /// Starts the auto-relaying process. async fn auto_relay(&self) -> Result<(), Self::Error>; } -/// Provider trait for the `CanAutoRelay` trait. #[async_trait] -pub trait AutoRelayer: Async +impl CanAutoRelay for Relay where - Context: HasErrorType, + Relay: HasErrorType + HasComponents, + Relay::Components: AutoRelayer, { - /// Starts the auto-relaying process for the given `Context`. - async fn auto_relay(context: &Context) -> Result<(), Context::Error>; + async fn auto_relay(&self) -> Result<(), Self::Error> { + Relay::Components::auto_relay(self).await + } +} + +#[macro_export] +macro_rules! derive_auto_relayer { + ( $mode:ty, $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::auto_relayer::AutoRelayer + for $target $( < $( $param ),* > )* + where + Relay: $crate::core::traits::error::HasErrorType, + $source: $crate::relay::traits::auto_relayer::AutoRelayer, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn auto_relay(relay: &Relay) -> Result<(), Relay::Error> { + <$source as $crate::relay::traits::auto_relayer::AutoRelayer> + ::auto_relay(relay).await + } + } + + }; } /// Similar to the `CanAutoRelay` trait, the main differences are that this diff --git a/crates/relayer-components/src/relay/traits/ibc_message_sender.rs b/crates/relayer-components/src/relay/traits/ibc_message_sender.rs index 4e0206517f..62617c67f4 100644 --- a/crates/relayer-components/src/relay/traits/ibc_message_sender.rs +++ b/crates/relayer-components/src/relay/traits/ibc_message_sender.rs @@ -3,13 +3,28 @@ use async_trait::async_trait; use crate::chain::traits::message_sender::InjectMismatchIbcEventsCountError; use crate::chain::traits::types::ibc::HasIbcChainTypes; use crate::chain::types::aliases::{Event, Message}; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::target::ChainTarget; use crate::std_prelude::*; +pub struct MainSink; + #[async_trait] -pub trait CanSendIbcMessages: HasRelayChains +pub trait IbcMessageSender: Async +where + Relay: HasRelayChains, + Target: ChainTarget, +{ + async fn send_messages( + relay: &Relay, + messages: Vec>, + ) -> Result>>, Relay::Error>; +} + +#[async_trait] +pub trait CanSendIbcMessages: HasRelayChains where Target: ChainTarget, { @@ -21,19 +36,48 @@ where } #[async_trait] -pub trait IbcMessageSender: Async +impl CanSendIbcMessages for Relay where - Context: HasRelayChains, - Target: ChainTarget, + Relay: HasRelayChains + HasComponents, + Target: ChainTarget, + Relay::Components: IbcMessageSender, { async fn send_messages( - context: &Context, + &self, + _target: Target, messages: Vec>, - ) -> Result>>, Context::Error>; + ) -> Result>>, Self::Error> { + Relay::Components::send_messages(self, messages).await + } +} + +#[macro_export] +macro_rules! derive_ibc_message_sender { + ( $sink:ty, $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::ibc_message_sender::IbcMessageSender + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::chains::HasRelayChains, + Target: $crate::relay::traits::target::ChainTarget, + $source: $crate::relay::traits::ibc_message_sender::IbcMessageSender, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn send_messages( + relay: &Relay, + messages: Vec<::Message>, + ) -> Result::Event>>, Relay::Error> { + <$source as $crate::relay::traits::ibc_message_sender::IbcMessageSender> + ::send_messages(relay, messages).await + } + } + + }; } #[async_trait] -pub trait CanSendFixSizedIbcMessages: HasRelayChains +pub trait CanSendFixSizedIbcMessages: HasRelayChains where Target: ChainTarget, { @@ -45,7 +89,7 @@ where } #[async_trait] -pub trait CanSendSingleIbcMessage: HasRelayChains +pub trait CanSendSingleIbcMessage: HasRelayChains where Target: ChainTarget, { @@ -57,9 +101,10 @@ where } #[async_trait] -impl CanSendFixSizedIbcMessages for Relay +impl CanSendFixSizedIbcMessages + for Relay where - Relay: CanSendIbcMessages + InjectMismatchIbcEventsCountError, + Relay: CanSendIbcMessages + InjectMismatchIbcEventsCountError, Target: ChainTarget, TargetChain: HasIbcChainTypes, Message: Async, @@ -80,9 +125,10 @@ where } #[async_trait] -impl CanSendSingleIbcMessage for Relay +impl CanSendSingleIbcMessage + for Relay where - Relay: CanSendIbcMessages, + Relay: CanSendIbcMessages, Target: ChainTarget, TargetChain: HasIbcChainTypes, Message: Async, diff --git a/crates/relayer-components/src/relay/traits/messages/update_client.rs b/crates/relayer-components/src/relay/traits/messages/update_client.rs index e6a2fe41da..f5401aebd3 100644 --- a/crates/relayer-components/src/relay/traits/messages/update_client.rs +++ b/crates/relayer-components/src/relay/traits/messages/update_client.rs @@ -1,10 +1,24 @@ use async_trait::async_trait; use crate::chain::types::aliases::{Height, Message}; +use crate::core::traits::component::HasComponents; use crate::relay::traits::chains::HasRelayChains; use crate::relay::traits::target::ChainTarget; use crate::std_prelude::*; +#[async_trait] +pub trait UpdateClientMessageBuilder +where + Relay: HasRelayChains, + Target: ChainTarget, +{ + async fn build_update_client_messages( + relay: &Relay, + _target: Target, + height: &Height, + ) -> Result>, Relay::Error>; +} + #[async_trait] pub trait CanBuildUpdateClientMessage: HasRelayChains where @@ -18,14 +32,42 @@ where } #[async_trait] -pub trait UpdateClientMessageBuilder +impl CanBuildUpdateClientMessage for Relay where - Relay: HasRelayChains, + Relay: HasRelayChains + HasComponents, Target: ChainTarget, + Relay::Components: UpdateClientMessageBuilder, { async fn build_update_client_messages( - relay: &Relay, - _target: Target, + &self, + target: Target, height: &Height, - ) -> Result>, Relay::Error>; + ) -> Result>, Self::Error> { + Relay::Components::build_update_client_messages(self, target, height).await + } +} + +#[macro_export] +macro_rules! derive_update_client_message_builder { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::messages::update_client::UpdateClientMessageBuilder + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::chains::HasRelayChains, + Target: $crate::relay::traits::target::ChainTarget, + $source: $crate::relay::traits::messages::update_client::UpdateClientMessageBuilder, + { + async fn build_update_client_messages( + relay: &Relay, + target: Target, + height: &::Height, + ) -> Result::Message>, Relay::Error> { + <$source as $crate::relay::traits::messages::update_client::UpdateClientMessageBuilder> + ::build_update_client_messages(relay, target, height).await + } + } + + }; } diff --git a/crates/relayer-components/src/relay/traits/packet_filter.rs b/crates/relayer-components/src/relay/traits/packet_filter.rs index c2e47a7790..e7501a215e 100644 --- a/crates/relayer-components/src/relay/traits/packet_filter.rs +++ b/crates/relayer-components/src/relay/traits/packet_filter.rs @@ -1,5 +1,6 @@ use async_trait::async_trait; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::packet::HasRelayPacket; use crate::std_prelude::*; @@ -19,3 +20,38 @@ where pub trait CanFilterPackets: HasRelayPacket { async fn should_relay_packet(&self, packet: &Self::Packet) -> Result; } + +#[async_trait] +impl CanFilterPackets for Relay +where + Relay: HasRelayPacket + HasComponents, + Relay::Components: PacketFilter, +{ + async fn should_relay_packet(&self, packet: &Self::Packet) -> Result { + Relay::Components::should_relay_packet(self, packet).await + } +} + +#[macro_export] +macro_rules! derive_packet_filter { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::packet_filter::PacketFilter + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::packet::HasRelayPacket, + $source: $crate::relay::traits::packet_filter::PacketFilter, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn should_relay_packet( + relay: &Relay, + packet: &Relay::Packet, + ) -> Result { + <$source as $crate::relay::traits::packet_filter::PacketFilter> + ::should_relay_packet(relay, packet).await + } + } + + }; +} diff --git a/crates/relayer-components/src/relay/traits/packet_relayer.rs b/crates/relayer-components/src/relay/traits/packet_relayer.rs index 543ea9b954..41d83b1b70 100644 --- a/crates/relayer-components/src/relay/traits/packet_relayer.rs +++ b/crates/relayer-components/src/relay/traits/packet_relayer.rs @@ -1,5 +1,6 @@ use async_trait::async_trait; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::packet::HasRelayPacket; use crate::std_prelude::*; @@ -16,3 +17,35 @@ where pub trait CanRelayPacket: HasRelayPacket { async fn relay_packet(&self, packet: &Self::Packet) -> Result<(), Self::Error>; } + +#[async_trait] +impl CanRelayPacket for Relay +where + Relay: HasRelayPacket + HasComponents, + Relay::Components: PacketRelayer, +{ + async fn relay_packet(&self, packet: &Self::Packet) -> Result<(), Self::Error> { + Relay::Components::relay_packet(self, packet).await + } +} + +#[macro_export] +macro_rules! derive_packet_relayer { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::packet_relayer::PacketRelayer + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::packet::HasRelayPacket, + $source: $crate::relay::traits::packet_relayer::PacketRelayer, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn relay_packet(relay: &Relay, packet: &Relay::Packet) -> Result<(), Relay::Error> { + <$source as $crate::relay::traits::packet_relayer::PacketRelayer> + ::relay_packet(relay, packet).await + } + } + + }; +} diff --git a/crates/relayer-components/src/relay/traits/packet_relayers/ack_packet.rs b/crates/relayer-components/src/relay/traits/packet_relayers/ack_packet.rs index 111b3ca0e3..e59873ca5f 100644 --- a/crates/relayer-components/src/relay/traits/packet_relayers/ack_packet.rs +++ b/crates/relayer-components/src/relay/traits/packet_relayers/ack_packet.rs @@ -2,10 +2,25 @@ use async_trait::async_trait; use crate::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent; use crate::chain::types::aliases::{Height, WriteAcknowledgementEvent}; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::packet::HasRelayPacket; use crate::std_prelude::*; +#[async_trait] +pub trait AckPacketRelayer: Async +where + Relay: HasRelayPacket, + Relay::DstChain: HasWriteAcknowledgementEvent, +{ + async fn relay_ack_packet( + context: &Relay, + destination_height: &Height, + packet: &Relay::Packet, + ack: &WriteAcknowledgementEvent, + ) -> Result<(), Relay::Error>; +} + #[async_trait] pub trait CanRelayAckPacket: HasRelayPacket where @@ -20,15 +35,45 @@ where } #[async_trait] -pub trait AckPacketRelayer: Async +impl CanRelayAckPacket for Relay where - Relay: HasRelayPacket, + Relay: HasRelayPacket + HasComponents, Relay::DstChain: HasWriteAcknowledgementEvent, + Relay::Components: AckPacketRelayer, { async fn relay_ack_packet( - context: &Relay, - destination_height: &Height, - packet: &Relay::Packet, - ack: &WriteAcknowledgementEvent, - ) -> Result<(), Relay::Error>; + &self, + destination_height: &Height, + packet: &Self::Packet, + ack: &WriteAcknowledgementEvent, + ) -> Result<(), Self::Error> { + Relay::Components::relay_ack_packet(self, destination_height, packet, ack).await + } +} + +#[macro_export] +macro_rules! derive_ack_packet_relayer { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::packet_relayers::ack_packet::AckPacketRelayer + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::packet::HasRelayPacket, + Relay::DstChain: $crate::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent, + $source: $crate::relay::traits::packet_relayers::ack_packet::AckPacketRelayer, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn relay_ack_packet( + relay: &Relay, + destination_height: &::Height, + packet: &Relay::Packet, + ack: &>::WriteAcknowledgementEvent, + ) -> Result<(), Relay::Error> { + <$source as $crate::relay::traits::packet_relayers::ack_packet::AckPacketRelayer> + ::relay_ack_packet(relay, destination_height, packet, ack).await + } + } + + }; } diff --git a/crates/relayer-components/src/relay/traits/packet_relayers/receive_packet.rs b/crates/relayer-components/src/relay/traits/packet_relayers/receive_packet.rs index 4a0f05696d..e9806d4276 100644 --- a/crates/relayer-components/src/relay/traits/packet_relayers/receive_packet.rs +++ b/crates/relayer-components/src/relay/traits/packet_relayers/receive_packet.rs @@ -2,10 +2,24 @@ use async_trait::async_trait; use crate::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent; use crate::chain::types::aliases::{Height, WriteAcknowledgementEvent}; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::packet::HasRelayPacket; use crate::std_prelude::*; +#[async_trait] +pub trait ReceivePacketRelayer: Async +where + Relay: HasRelayPacket, + Relay::DstChain: HasWriteAcknowledgementEvent, +{ + async fn relay_receive_packet( + relay: &Relay, + source_height: &Height, + packet: &Relay::Packet, + ) -> Result>, Relay::Error>; +} + #[async_trait] pub trait CanRelayReceivePacket: HasRelayPacket where @@ -19,14 +33,44 @@ where } #[async_trait] -pub trait ReceivePacketRelayer: Async +impl CanRelayReceivePacket for Relay where - Relay: HasRelayPacket, - Relay::DstChain: HasWriteAcknowledgementEvent, + Relay: HasRelayPacket + HasComponents, + Relay::DstChain: HasWriteAcknowledgementEvent, + Relay::Components: ReceivePacketRelayer, { async fn relay_receive_packet( - context: &Relay, + &self, source_height: &Height, packet: &Relay::Packet, - ) -> Result>, Relay::Error>; + ) -> Result>, Relay::Error> + { + Relay::Components::relay_receive_packet(self, source_height, packet).await + } +} + +#[macro_export] +macro_rules! derive_receive_packet_relayer { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::packet_relayers::receive_packet::ReceivePacketRelayer + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::packet::HasRelayPacket, + Relay::DstChain: $crate::chain::traits::types::ibc_events::write_ack::HasWriteAcknowledgementEvent, + $source: $crate::relay::traits::packet_relayers::receive_packet::ReceivePacketRelayer, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn relay_receive_packet( + relay: &Relay, + source_height: &::Height, + packet: &Relay::Packet, + ) -> Result>::WriteAcknowledgementEvent>, Relay::Error> { + <$source as $crate::relay::traits::packet_relayers::receive_packet::ReceivePacketRelayer> + ::relay_receive_packet(relay, source_height, packet).await + } + } + + }; } diff --git a/crates/relayer-components/src/relay/traits/packet_relayers/timeout_unordered_packet.rs b/crates/relayer-components/src/relay/traits/packet_relayers/timeout_unordered_packet.rs index fc3fb528a8..b7bb0fbd8a 100644 --- a/crates/relayer-components/src/relay/traits/packet_relayers/timeout_unordered_packet.rs +++ b/crates/relayer-components/src/relay/traits/packet_relayers/timeout_unordered_packet.rs @@ -1,10 +1,23 @@ use async_trait::async_trait; use crate::chain::types::aliases::Height; +use crate::core::traits::component::HasComponents; use crate::core::traits::sync::Async; use crate::relay::traits::packet::HasRelayPacket; use crate::std_prelude::*; +#[async_trait] +pub trait TimeoutUnorderedPacketRelayer: Async +where + Relay: HasRelayPacket, +{ + async fn relay_timeout_unordered_packet( + context: &Relay, + destination_height: &Height, + packet: &Relay::Packet, + ) -> Result<(), Relay::Error>; +} + /// Encapsulates the capability of a relayer to send timeout packets over /// unordered channels. /// @@ -25,13 +38,41 @@ pub trait CanRelayTimeoutUnorderedPacket: HasRelayPacket { } #[async_trait] -pub trait TimeoutUnorderedPacketRelayer: Async +impl CanRelayTimeoutUnorderedPacket for Relay where - Relay: HasRelayPacket, + Relay: HasRelayPacket + HasComponents, + Relay::Components: TimeoutUnorderedPacketRelayer, { async fn relay_timeout_unordered_packet( - context: &Relay, - destination_height: &Height, - packet: &Relay::Packet, - ) -> Result<(), Relay::Error>; + &self, + destination_height: &Height, + packet: &Self::Packet, + ) -> Result<(), Self::Error> { + Relay::Components::relay_timeout_unordered_packet(self, destination_height, packet).await + } +} + +#[macro_export] +macro_rules! derive_timeout_unordered_packet_relayer { + ( $target:ident $( < $( $param:ident ),* $(,)? > )?, $source:ty $(,)? ) => { + #[$crate::vendor::async_trait::async_trait] + impl + $crate::relay::traits::packet_relayers::timeout_unordered_packet::TimeoutUnorderedPacketRelayer + for $target $( < $( $param ),* > )* + where + Relay: $crate::relay::traits::packet::HasRelayPacket, + $source: $crate::relay::traits::packet_relayers::timeout_unordered_packet::TimeoutUnorderedPacketRelayer, + $target $( < $( $param ),* > )*: $crate::core::traits::sync::Async, + { + async fn relay_timeout_unordered_packet( + relay: &Relay, + destination_height: &::Height, + packet: &Relay::Packet, + ) -> Result<(), Relay::Error> { + <$source as $crate::relay::traits::packet_relayers::timeout_unordered_packet::TimeoutUnorderedPacketRelayer> + ::relay_timeout_unordered_packet(relay, destination_height, packet).await + } + } + + }; } diff --git a/crates/relayer-components/src/vendor/async_trait.rs b/crates/relayer-components/src/vendor/async_trait.rs new file mode 100644 index 0000000000..8f89eebc8e --- /dev/null +++ b/crates/relayer-components/src/vendor/async_trait.rs @@ -0,0 +1 @@ +pub use async_trait::async_trait; diff --git a/crates/relayer-components/src/vendor/mod.rs b/crates/relayer-components/src/vendor/mod.rs new file mode 100644 index 0000000000..cd31a2855c --- /dev/null +++ b/crates/relayer-components/src/vendor/mod.rs @@ -0,0 +1 @@ +pub mod async_trait; diff --git a/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs b/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs index 830fe1a2ac..ec6e1cd9b3 100644 --- a/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs +++ b/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs @@ -1,26 +1,12 @@ use alloc::boxed::Box; use alloc::string::ToString; use alloc::vec::Vec; +use ibc_relayer_components::core::traits::component::HasComponents; use ibc_relayer_components::core::traits::error::HasErrorType; use ibc_relayer_components::logger::traits::has_logger::{HasLogger, HasLoggerType}; use ibc_relayer_components::relay::traits::chains::HasRelayChains; -use ibc_relayer_components::relay::traits::ibc_message_sender::{ - CanSendIbcMessages, IbcMessageSender, -}; -use ibc_relayer_components::relay::traits::messages::update_client::{ - CanBuildUpdateClientMessage, UpdateClientMessageBuilder, -}; -use ibc_relayer_components::relay::traits::packet_relayer::{CanRelayPacket, PacketRelayer}; -use ibc_relayer_components::relay::traits::packet_relayers::ack_packet::{ - AckPacketRelayer, CanRelayAckPacket, -}; +use ibc_relayer_components::relay::traits::messages::update_client::UpdateClientMessageBuilder; use ibc_relayer_components::relay::traits::packet_relayers::lock::HasPacketLock; -use ibc_relayer_components::relay::traits::packet_relayers::receive_packet::{ - CanRelayReceivePacket, ReceivePacketRelayer, -}; -use ibc_relayer_components::relay::traits::packet_relayers::timeout_unordered_packet::{ - CanRelayTimeoutUnorderedPacket, TimeoutUnorderedPacketRelayer, -}; use ibc_relayer_components::relay::traits::target::{DestinationTarget, SourceTarget}; use ibc_relayer_components::runtime::traits::runtime::HasRuntime; use ibc_relayer_runtime::tokio::logger::tracing::TracingLogger; @@ -31,15 +17,18 @@ use ibc_relayer_runtime::tokio::error::Error as TokioError; use crate::relayer_mock::base::error::{BaseError, Error}; use crate::relayer_mock::base::types::aliases::ClientId; -use crate::relayer_mock::base::types::events::{Event, WriteAcknowledgementEvent}; use crate::relayer_mock::base::types::height::Height as MockHeight; use crate::relayer_mock::base::types::message::Message as MockMessage; use crate::relayer_mock::base::types::packet::PacketKey; use crate::relayer_mock::base::types::runtime::MockRuntimeContext; -use crate::relayer_mock::components; +use crate::relayer_mock::components::MockComponents; use crate::relayer_mock::contexts::chain::MockChainContext; use crate::relayer_mock::contexts::relay::MockRelayContext; +impl HasComponents for MockRelayContext { + type Components = MockComponents; +} + impl HasErrorType for MockRelayContext { type Error = Error; } @@ -132,30 +121,6 @@ impl UpdateClientMessageBuilder } } -#[async_trait] -impl CanBuildUpdateClientMessage for MockRelayContext { - async fn build_update_client_messages( - &self, - target: SourceTarget, - height: &MockHeight, - ) -> Result, Error> { - components::UpdateClientMessageBuilder::build_update_client_messages(self, target, height) - .await - } -} - -#[async_trait] -impl CanBuildUpdateClientMessage for MockRelayContext { - async fn build_update_client_messages( - &self, - target: DestinationTarget, - height: &MockHeight, - ) -> Result, Error> { - components::UpdateClientMessageBuilder::build_update_client_messages(self, target, height) - .await - } -} - #[async_trait] impl HasPacketLock for MockRelayContext { type PacketLock<'a> = (); @@ -164,71 +129,3 @@ impl HasPacketLock for MockRelayContext { Some(()) } } - -#[async_trait] -impl CanSendIbcMessages for MockRelayContext { - async fn send_messages( - &self, - _target: SourceTarget, - messages: Vec, - ) -> Result>, Error> { - >::send_messages(self, messages).await - } -} - -#[async_trait] -impl CanSendIbcMessages for MockRelayContext { - async fn send_messages( - &self, - _target: DestinationTarget, - messages: Vec, - ) -> Result>, Error> { - >::send_messages(self, messages).await - } -} - -#[async_trait] -impl CanRelayAckPacket for MockRelayContext { - async fn relay_ack_packet( - &self, - destination_height: &MockHeight, - packet: &PacketKey, - ack: &WriteAcknowledgementEvent, - ) -> Result<(), Error> { - components::AckPacketRelayer::relay_ack_packet(self, destination_height, packet, ack).await - } -} - -#[async_trait] -impl CanRelayReceivePacket for MockRelayContext { - async fn relay_receive_packet( - &self, - source_height: &MockHeight, - packet: &PacketKey, - ) -> Result, Error> { - components::ReceivePacketRelayer::relay_receive_packet(self, source_height, packet).await - } -} - -#[async_trait] -impl CanRelayTimeoutUnorderedPacket for MockRelayContext { - async fn relay_timeout_unordered_packet( - &self, - destination_height: &MockHeight, - packet: &PacketKey, - ) -> Result<(), Self::Error> { - components::TimeoutUnorderedPacketRelayer::relay_timeout_unordered_packet( - self, - destination_height, - packet, - ) - .await - } -} - -#[async_trait] -impl CanRelayPacket for MockRelayContext { - async fn relay_packet(&self, packet: &PacketKey) -> Result<(), Error> { - components::PacketRelayer::relay_packet(self, packet).await - } -} diff --git a/crates/relayer-mock/src/relayer_mock/components.rs b/crates/relayer-mock/src/relayer_mock/components.rs index f37558c153..af6a05d2a0 100644 --- a/crates/relayer-mock/src/relayer_mock/components.rs +++ b/crates/relayer-mock/src/relayer_mock/components.rs @@ -1,24 +1,39 @@ -use ibc_relayer_components::relay::impls::message_senders::chain_sender::SendIbcMessagesToChain; -use ibc_relayer_components::relay::impls::message_senders::update_client::SendIbcMessagesWithUpdateClient; -use ibc_relayer_components::relay::impls::messages::skip_update_client::SkipUpdateClient; -use ibc_relayer_components::relay::impls::messages::wait_update_client::WaitUpdateClient; -use ibc_relayer_components::relay::impls::packet_relayers::ack::base_ack_packet::BaseAckPacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::general::full_relay::FullCycleRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::receive::base_receive_packet::BaseReceivePacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::receive::skip_received_packet::SkipReceivedPacketRelayer; -use ibc_relayer_components::relay::impls::packet_relayers::timeout_unordered::timeout_unordered_packet::BaseTimeoutUnorderedPacketRelayer; +use ibc_relayer_components::relay::components::message_senders::chain_sender::SendIbcMessagesToChain; +use ibc_relayer_components::relay::components::message_senders::update_client::SendIbcMessagesWithUpdateClient; +use ibc_relayer_components::relay::components::update_client::skip::SkipUpdateClient; +use ibc_relayer_components::relay::components::update_client::wait::WaitUpdateClient; +use ibc_relayer_components::relay::components::packet_relayers::ack::base_ack_packet::BaseAckPacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::general::full_relay::FullCycleRelayer; +use ibc_relayer_components::relay::components::packet_relayers::receive::base_receive_packet::BaseReceivePacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::receive::skip_received_packet::SkipReceivedPacketRelayer; +use ibc_relayer_components::relay::components::packet_relayers::timeout_unordered::timeout_unordered_packet::BaseTimeoutUnorderedPacketRelayer; +use ibc_relayer_components::relay::traits::ibc_message_sender::MainSink; use crate::relayer_mock::base::impls::relay::MockBuildUpdateClientMessage; -pub type IbcMessageSender = SendIbcMessagesWithUpdateClient; +pub struct MockComponents; -pub type PacketRelayer = FullCycleRelayer; +ibc_relayer_components::derive_ibc_message_sender!( + MainSink, + MockComponents, + SendIbcMessagesWithUpdateClient, +); -pub type AckPacketRelayer = BaseAckPacketRelayer; +ibc_relayer_components::derive_packet_relayer!(MockComponents, FullCycleRelayer,); -pub type ReceivePacketRelayer = SkipReceivedPacketRelayer; +ibc_relayer_components::derive_receive_packet_relayer!( + MockComponents, + SkipReceivedPacketRelayer, +); -pub type TimeoutUnorderedPacketRelayer = BaseTimeoutUnorderedPacketRelayer; +ibc_relayer_components::derive_ack_packet_relayer!(MockComponents, BaseAckPacketRelayer,); -pub type UpdateClientMessageBuilder = - SkipUpdateClient>; +ibc_relayer_components::derive_timeout_unordered_packet_relayer!( + MockComponents, + BaseTimeoutUnorderedPacketRelayer, +); + +ibc_relayer_components::derive_update_client_message_builder!( + MockComponents, + SkipUpdateClient>, +);