Skip to content

Commit

Permalink
Reimplement Cosmos chain methods as generic chain components (#60)
Browse files Browse the repository at this point in the history
* Implement chain traits directly on CosmosChain

* Refactor MessageSender and ChainStatusQuerier in Cosmos as generic components

* Refactor WriteAckQuerier

* Refactor create client payload and message builders

* Refactor ClientStateQuerier

* Refactor consensus state querier

* Implement cosmos packet field reader

* Refactor CounterpartyChainIdQuerier

* Refactor connection handshake payload builder

* Refactor connection handshake message builder

* Refactor received packet querier

* Refactor ConsensusStateHeightQuerier

* Refactor update client payload builder

* Refactor update client message builder

* Reactor packet commitment querier

* Fix clippy

* Use new delegate_components! macro syntax

* Componentize Cosmos receive packet payload/message builder

* Use back cgp in main branch

* Componentize Cosmos ack packet payload/message builder

* Componentize Cosmos timeout packet payload/message builder

* Componentize channel handshake payload builder

* Componentize Cosmos channel handshake message builder

* Componentize Cosmos unreceived packet querier

* Implement Cosmos query send packet component

* Componentize Cosmos query send packets
soareschen authored Oct 9, 2023
1 parent 3f1d2e1 commit 4b1c302
Showing 91 changed files with 3,085 additions and 1,760 deletions.
13 changes: 7 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions crates/relayer-components-extra/src/components/extra/birelay.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
use core::marker::PhantomData;

use cgp_core::delegate_component;
use cgp_core::prelude::*;
use cgp_core::RunnerComponent;
use ibc_relayer_components::components::default::birelay::DefaultBiRelayComponents;

pub struct ExtraBiRelayComponents<BaseComponents>(pub PhantomData<BaseComponents>);

delegate_component!(
RunnerComponent,
ExtraBiRelayComponents<BaseComponents>,
DefaultBiRelayComponents<BaseComponents>,
delegate_components!(
ExtraBiRelayComponents<BaseComponents>;
RunnerComponent:
DefaultBiRelayComponents<BaseComponents>,
);
22 changes: 6 additions & 16 deletions crates/relayer-components-extra/src/components/extra/build.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use core::marker::PhantomData;

use cgp_core::{delegate_component, delegate_components};
use cgp_core::prelude::*;
use ibc_relayer_components::build::traits::components::birelay_builder::BiRelayBuilderComponent;
use ibc_relayer_components::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilderComponent;
use ibc_relayer_components::build::traits::components::chain_builder::ChainBuilderComponent;
@@ -13,25 +13,15 @@ use crate::build::traits::components::relay_with_batch_builder::RelayWithBatchBu

pub struct ExtraBuildComponents<BaseComponents>(pub PhantomData<BaseComponents>);

delegate_component!(
RelayFromChainsBuilderComponent,
ExtraBuildComponents<BaseComponents>,
BuildRelayWithBatchWorker,
);

delegate_component!(
RelayWithBatchBuilderComponent,
ExtraBuildComponents<BaseComponents>,
BaseComponents,
);

delegate_components!(
ExtraBuildComponents<BaseComponents>;
RelayFromChainsBuilderComponent: BuildRelayWithBatchWorker,
RelayWithBatchBuilderComponent: BaseComponents,
[
ChainBuilderComponent,
RelayBuilderComponent,
BiRelayBuilderComponent,
BiRelayFromRelayBuilderComponent,
],
ExtraBuildComponents<BaseComponents>,
DefaultBuildComponents<BaseComponents>,
]:
DefaultBuildComponents<BaseComponents>,
);
29 changes: 12 additions & 17 deletions crates/relayer-components-extra/src/components/extra/chain.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use core::marker::PhantomData;

use cgp_core::{delegate_component, delegate_components};
use cgp_core::prelude::*;
use ibc_relayer_components::chain::traits::components::ack_packet_message_builder::AckPacketMessageBuilderComponent;
use ibc_relayer_components::chain::traits::components::ack_packet_payload_builder::AckPacketPayloadBuilderComponent;
use ibc_relayer_components::chain::traits::components::chain_status_querier::ChainStatusQuerierComponent;
@@ -20,7 +20,9 @@ use ibc_relayer_components::chain::traits::components::packet_fields_reader::Pac
use ibc_relayer_components::chain::traits::components::receive_packet_message_builder::ReceivePacketMessageBuilderComponent;
use ibc_relayer_components::chain::traits::components::receive_packet_payload_builder::ReceivePacketPayloadBuilderComponent;
use ibc_relayer_components::chain::traits::components::received_packet_querier::ReceivedPacketQuerierComponent;
use ibc_relayer_components::chain::traits::components::send_packets_querier::SendPacketsQuerierComponent;
use ibc_relayer_components::chain::traits::components::send_packets_querier::{
SendPacketQuerierComponent, SendPacketsQuerierComponent,
};
use ibc_relayer_components::chain::traits::components::timeout_unordered_packet_message_builder::{
TimeoutUnorderedPacketMessageBuilderComponent, TimeoutUnorderedPacketPayloadBuilderComponent,
};
@@ -35,25 +37,19 @@ use crate::telemetry::components::status::ChainStatusTelemetryQuerier;

pub struct ExtraChainComponents<BaseComponents>(pub PhantomData<BaseComponents>);

delegate_component!(
ChainStatusQuerierComponent,
ExtraChainComponents<BaseComponents>,
ChainStatusTelemetryQuerier<BaseComponents>,
);

delegate_component!(
ConsensusStateQuerierComponent,
ExtraChainComponents<BaseComponents>,
ConsensusStateTelemetryQuerier<BaseComponents>,
);

delegate_components!(
ExtraChainComponents<BaseComponents>;
ChainStatusQuerierComponent:
ChainStatusTelemetryQuerier<BaseComponents>,
ConsensusStateQuerierComponent:
ConsensusStateTelemetryQuerier<BaseComponents>,
[
MessageSenderComponent,
PacketFieldsReaderComponent,
CounterpartyChainIdQuerierComponent,
PacketCommitmentsQuerierComponent,
ReceivedPacketQuerierComponent,
SendPacketQuerierComponent,
SendPacketsQuerierComponent,
UnreceivedPacketSequencesQuerierComponent,
WriteAckQuerierComponent,
@@ -73,7 +69,6 @@ delegate_components!(
CreateClientPayloadBuilderComponent,
UpdateClientMessageBuilderComponent,
UpdateClientPayloadBuilderComponent,
],
ExtraChainComponents<BaseComponents>,
DefaultChainComponents<BaseComponents>,
]:
DefaultChainComponents<BaseComponents>,
);
32 changes: 10 additions & 22 deletions crates/relayer-components-extra/src/components/extra/relay.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use core::marker::PhantomData;

use cgp_core::{delegate_component, delegate_components, RunnerComponent};
use cgp_core::prelude::*;
use cgp_core::RunnerComponent;
use ibc_relayer_components::components::default::relay::DefaultRelayComponents;
use ibc_relayer_components::relay::components::message_senders::chain_sender::SendIbcMessagesToChain;
use ibc_relayer_components::relay::components::message_senders::update_client::SendIbcMessagesWithUpdateClient;
@@ -38,25 +39,13 @@ use crate::relay::components::packet_relayers::retry::RetryRelayer;

pub struct ExtraRelayComponents<BaseComponents>(pub PhantomData<BaseComponents>);

delegate_component!(
IbcMessageSenderComponent<MainSink>,
ExtraRelayComponents<BaseComponents>,
SendMessagesToBatchWorker,
);

delegate_component!(
IbcMessageSenderComponent<BatchWorkerSink>,
ExtraRelayComponents<BaseComponents>,
SendIbcMessagesWithUpdateClient<SendIbcMessagesToChain>,
);

delegate_component!(
PacketRelayerComponent,
ExtraRelayComponents<BaseComponents>,
LockPacketRelayer<LoggerRelayer<FilterRelayer<RetryRelayer<FullCycleRelayer>>>>,
);

delegate_components!(
ExtraRelayComponents<BaseComponents>;
IbcMessageSenderComponent<MainSink>: SendMessagesToBatchWorker,
IbcMessageSenderComponent<BatchWorkerSink>:
SendIbcMessagesWithUpdateClient<SendIbcMessagesToChain>,
PacketRelayerComponent:
LockPacketRelayer<LoggerRelayer<FilterRelayer<RetryRelayer<FullCycleRelayer>>>>,
[
UpdateClientMessageBuilderComponent,
PacketFilterComponent,
@@ -78,7 +67,6 @@ delegate_components!(
ConnectionOpenHandshakeRelayerComponent,
AutoRelayerComponent,
RunnerComponent,
],
ExtraRelayComponents<BaseComponents>,
DefaultRelayComponents<BaseComponents>,
]:
DefaultRelayComponents<BaseComponents>,
);
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@ use ibc_relayer_components::transaction::traits::components::tx_submitter::TxSub
pub struct ExtraTxComponents<BaseComponents>(pub PhantomData<BaseComponents>);

delegate_components!(
ExtraTxComponents<BaseComponents>;
[
MessageSenderComponent,
MessageAsTxSenderComponent,
@@ -25,7 +26,5 @@ delegate_components!(
TxSubmitterComponent,
TxResponsePollerComponent,
TxResponseQuerierComponent,
],
ExtraTxComponents<BaseComponents>,
DefaultTxComponents<BaseComponents>,
]: DefaultTxComponents<BaseComponents>,
);
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ use crate::build::traits::components::birelay_builder::CanBuildBiRelay;
use crate::build::traits::target::relay::RelayAToBTarget;
use crate::build::types::aliases::{ChainA, ChainB, ChainIdA, ChainIdB};
use crate::chain::traits::types::create_client::HasCreateClientOptions;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::relay::traits::chains::HasRelayChains;
use crate::relay::traits::two_way::HasTwoWayRelay;
use crate::std_prelude::*;
@@ -34,8 +35,8 @@ where
+ CanBootstrapRelay<RelayAToBTarget>,
BiRelay: HasTwoWayRelay<RelayAToB = RelayAToB>,
RelayAToB: HasRelayChains<SrcChain = ChainA, DstChain = ChainB>,
ChainA: HasCreateClientOptions<ChainB>,
ChainB: HasCreateClientOptions<ChainA>,
ChainA: HasCreateClientOptions<ChainB> + HasIbcChainTypes<ChainB>,
ChainB: HasCreateClientOptions<ChainA> + HasIbcChainTypes<ChainA>,
{
async fn bootstrap_birelay(
&self,
5 changes: 3 additions & 2 deletions crates/relayer-components/src/build/impls/bootstrap/relay.rs
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ use crate::build::types::aliases::{
RelayError, TargetDstChain, TargetDstChainId, TargetRelay, TargetSrcChain, TargetSrcChainId,
};
use crate::chain::traits::types::create_client::HasCreateClientOptions;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::relay::traits::chains::HasRelayChains;
use crate::relay::traits::components::client_creator::CanCreateClient;
use crate::relay::traits::target::{DestinationTarget, SourceTarget};
@@ -45,8 +46,8 @@ where
Relay: HasRelayChains<SrcChain = SrcChain, DstChain = DstChain, Error = RelayError<Build>>
+ CanCreateClient<SourceTarget>
+ CanCreateClient<DestinationTarget>,
SrcChain: HasCreateClientOptions<DstChain>,
DstChain: HasCreateClientOptions<SrcChain>,
SrcChain: HasCreateClientOptions<DstChain> + HasIbcChainTypes<DstChain>,
DstChain: HasCreateClientOptions<SrcChain> + HasIbcChainTypes<SrcChain>,
{
async fn bootstrap_relay(
&self,
Original file line number Diff line number Diff line change
@@ -2,7 +2,6 @@ use cgp_core::prelude::*;

use crate::chain::traits::types::client_state::HasClientStateType;
use crate::chain::traits::types::height::HasHeightType;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent;
use crate::chain::traits::types::packet::HasIbcPacketTypes;
use crate::chain::traits::types::packets::ack::HasAckPacketPayload;
@@ -17,8 +16,6 @@ pub trait CanBuildAckPacketPayload<Counterparty>:
+ HasClientStateType<Counterparty>
+ HasHeightType
+ HasErrorType
where
Counterparty: HasIbcChainTypes<Self>,
{
async fn build_ack_packet_payload(
&self,
Original file line number Diff line number Diff line change
@@ -3,14 +3,15 @@ use cgp_core::prelude::*;
use crate::chain::traits::types::channel::{
HasChannelHandshakePayloads, HasInitChannelOptionsType,
};
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::std_prelude::*;

#[derive_component(ChannelHandshakeMessageBuilderComponent, ChannelHandshakeMessageBuilder<Chain>)]
#[async_trait]
pub trait CanBuildChannelHandshakeMessages<Counterparty>:
HasInitChannelOptionsType<Counterparty> + HasErrorType
HasInitChannelOptionsType<Counterparty> + HasIbcChainTypes<Counterparty> + HasErrorType
where
Counterparty: HasChannelHandshakePayloads<Self>,
Counterparty: HasChannelHandshakePayloads<Self> + HasIbcChainTypes<Self>,
{
async fn build_channel_open_init_message(
&self,
Original file line number Diff line number Diff line change
@@ -2,12 +2,16 @@ use cgp_core::prelude::*;

use crate::chain::traits::types::channel::HasChannelHandshakePayloads;
use crate::chain::traits::types::client_state::HasClientStateType;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::std_prelude::*;

#[derive_component(ChannelHandshakePayloadBuilderComponent, ChannelHandshakePayloadBuilder<Chain>)]
#[async_trait]
pub trait CanBuildChannelHandshakePayloads<Counterparty>:
HasChannelHandshakePayloads<Counterparty> + HasClientStateType<Counterparty> + HasErrorType
HasIbcChainTypes<Counterparty>
+ HasChannelHandshakePayloads<Counterparty>
+ HasClientStateType<Counterparty>
+ HasErrorType
{
async fn build_channel_open_try_payload(
&self,
Original file line number Diff line number Diff line change
@@ -3,14 +3,15 @@ use cgp_core::prelude::*;
use crate::chain::traits::types::connection::{
HasConnectionHandshakePayloads, HasInitConnectionOptionsType,
};
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::std_prelude::*;

#[derive_component(ConnectionHandshakeMessageBuilderComponent, ConnectionHandshakeMessageBuilder<Chain>)]
#[async_trait]
pub trait CanBuildConnectionHandshakeMessages<Counterparty>:
HasInitConnectionOptionsType<Counterparty> + HasErrorType
HasInitConnectionOptionsType<Counterparty> + HasIbcChainTypes<Counterparty> + HasErrorType
where
Counterparty: HasConnectionHandshakePayloads<Self>,
Counterparty: HasConnectionHandshakePayloads<Self> + HasIbcChainTypes<Self>,
{
async fn build_connection_open_init_message(
&self,
Original file line number Diff line number Diff line change
@@ -2,12 +2,16 @@ use cgp_core::prelude::*;

use crate::chain::traits::types::client_state::HasClientStateType;
use crate::chain::traits::types::connection::HasConnectionHandshakePayloads;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::std_prelude::*;

#[derive_component(ConnectionHandshakePayloadBuilderComponent, ConnectionHandshakePayloadBuilder<Chain>)]
#[async_trait]
pub trait CanBuildConnectionHandshakePayloads<Counterparty>:
HasConnectionHandshakePayloads<Counterparty> + HasClientStateType<Counterparty> + HasErrorType
HasIbcChainTypes<Counterparty>
+ HasConnectionHandshakePayloads<Counterparty>
+ HasClientStateType<Counterparty>
+ HasErrorType
{
async fn build_connection_open_init_payload(
&self,
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use cgp_core::prelude::*;

use crate::chain::traits::types::chain::HasChainTypes;
use crate::chain::traits::types::chain_id::HasChainIdType;
use crate::chain::traits::types::ibc::HasIbcChainTypes;
use crate::std_prelude::*;

@@ -9,7 +9,7 @@ use crate::std_prelude::*;
pub trait CanQueryCounterpartyChainId<Counterparty>:
HasIbcChainTypes<Counterparty> + HasErrorType
where
Counterparty: HasChainTypes,
Counterparty: HasChainIdType,
{
async fn query_chain_id_from_channel_id(
&self,
Loading

0 comments on commit 4b1c302

Please sign in to comment.