From 291b0ab282c04f09c032274c4bccbb7602a51de6 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Wed, 20 Dec 2023 15:46:47 +0100 Subject: [PATCH] Use marker trait pattern to simplify component delegation (#76) * Use auto trait delegation using marker traits for LegacyCosmosSdkBootstrapComponents * Use marker traits for auto component delegation * Use new marker trait syntax in delegate_components! macro * Use auto component delegation for relay components * Use auto component delegation for relay components * Use auto component delegation for builder context * Slightly reorganize build modules * Use auto component delegation for birelay components * Use auto component delegation for tx components * Use auto component delegation for chain components * Use struct-like syntax and put components mapping inside curly brace * Use delegate_all! macro to auto delegate components * Use new syntax for all calls to delegate_components! * Fix Cargo.toml patch * Use back cgp main branch * Update cgp version --- Cargo.lock | 18 +- .../src/contexts/bootstrap.rs | 47 +++-- .../src/contexts/chain.rs | 41 ++-- .../components/closures/cosmos_sdk.rs | 75 ------- .../components/closures/cosmos_sdk_legacy.rs | 75 ------- .../src/bootstrap/components/closures/mod.rs | 2 - .../src/bootstrap/components/cosmos_sdk.rs | 151 ++++++++------ .../bootstrap/components/cosmos_sdk_legacy.rs | 154 +++++++++------ .../src/bootstrap/components/mod.rs | 1 - .../src/components/extra/birelay.rs | 28 --- .../src/components/extra/build.rs | 119 ++++++++--- .../src/components/extra/chain.rs | 107 +--------- .../src/components/extra/closures/build.rs | 83 -------- .../extra/closures/chain/channel_handshake.rs | 12 +- .../extra/closures/chain/event_relayer.rs | 12 +- .../extra/closures/chain/message_sender.rs | 12 +- .../extra/closures/chain/packet_relayer.rs | 12 +- .../src/components/extra/closures/mod.rs | 1 - .../closures/relay/ack_packet_relayer.rs | 10 +- .../extra/closures/relay/auto_relayer.rs | 10 +- .../extra/closures/relay/channel_handshake.rs | 9 +- .../extra/closures/relay/event_relayer.rs | 8 +- .../extra/closures/relay/message_sender.rs | 8 +- .../extra/closures/relay/packet_relayer.rs | 8 +- .../src/components/extra/mod.rs | 2 - .../src/components/extra/relay.rs | 81 ++++---- .../src/components/extra/transaction.rs | 51 ----- .../src/components/default/birelay.rs | 29 +-- .../src/components/default/build.rs | 88 ++++++--- .../src/components/default/chain.rs | 97 --------- .../src/components/default/closures/build.rs | 52 ----- .../src/components/default/closures/mod.rs | 2 - .../closures/relay/ack_packet_relayer.rs | 10 +- .../default/closures/relay/auto_relayer.rs | 10 +- .../default/closures/relay/event_relayer.rs | 8 +- .../default/closures/relay/packet_relayer.rs | 8 +- .../default/closures/transaction.rs | 66 ------- .../src/components/default/mod.rs | 1 - .../src/components/default/relay.rs | 73 +++---- .../src/components/default/transaction.rs | 120 +++++++---- .../src/components/chain.rs | 21 +- .../src/components/relay.rs | 68 +++---- crates/relayer-cosmos-mock/src/impls/chain.rs | 3 +- crates/relayer-cosmos-mock/src/impls/relay.rs | 14 +- .../src/impls/birelay/components.rs | 41 ++-- .../relayer-cosmos/src/impls/build/chain.rs | 6 +- .../src/impls/build/components.rs | 50 +++-- .../src/impls/chain/component.rs | 186 ++++++++++-------- .../src/impls/relay/component.rs | 39 ++-- .../src/impls/transaction/component.rs | 60 +++--- .../src/relayer_mock/base/impls/chain.rs | 17 +- .../src/relayer_mock/base/impls/relay.rs | 17 +- .../src/relayer_mock/components/chain.rs | 17 +- .../src/relayer_mock/components/relay.rs | 39 ++-- .../src/impls/runtime/components.rs | 21 +- .../src/impls/chain/component.rs | 106 +++++----- .../src/impls/relay/component.rs | 24 ++- .../src/chain/components/default.rs | 21 -- .../src/chain/components/extra.rs | 22 --- .../src/chain/components/mod.rs | 2 - crates/test-components/src/chain/mod.rs | 1 - 61 files changed, 1031 insertions(+), 1445 deletions(-) delete mode 100644 crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk.rs delete mode 100644 crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk_legacy.rs delete mode 100644 crates/cosmos-test-components/src/bootstrap/components/closures/mod.rs delete mode 100644 crates/relayer-components-extra/src/components/extra/birelay.rs delete mode 100644 crates/relayer-components-extra/src/components/extra/closures/build.rs delete mode 100644 crates/relayer-components-extra/src/components/extra/transaction.rs delete mode 100644 crates/relayer-components/src/components/default/chain.rs delete mode 100644 crates/relayer-components/src/components/default/closures/build.rs delete mode 100644 crates/relayer-components/src/components/default/closures/transaction.rs delete mode 100644 crates/test-components/src/chain/components/default.rs delete mode 100644 crates/test-components/src/chain/components/extra.rs delete mode 100644 crates/test-components/src/chain/components/mod.rs diff --git a/Cargo.lock b/Cargo.lock index b191b92cd..a412225a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -513,7 +513,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "cgp-async" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "async-trait", ] @@ -521,7 +521,7 @@ dependencies = [ [[package]] name = "cgp-component" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-async", "cgp-component-macro", @@ -530,7 +530,7 @@ dependencies = [ [[package]] name = "cgp-component-macro" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "itertools 0.11.0", "proc-macro2", @@ -541,7 +541,7 @@ dependencies = [ [[package]] name = "cgp-core" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-async", "cgp-component", @@ -553,7 +553,7 @@ dependencies = [ [[package]] name = "cgp-error" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-async", "cgp-component", @@ -562,7 +562,7 @@ dependencies = [ [[package]] name = "cgp-error-eyre" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-core", "eyre", @@ -571,7 +571,7 @@ dependencies = [ [[package]] name = "cgp-inner" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-async", "cgp-component", @@ -580,7 +580,7 @@ dependencies = [ [[package]] name = "cgp-run" version = "0.1.0" -source = "git+https://github.com/informalsystems/cgp.git?branch=main#ea5ea3aafe336e64e163cfd940f771fb6f108734" +source = "git+https://github.com/informalsystems/cgp.git?branch=main#359d5bbbe6368e1dbe7b2dcd0f0489ac1e55ca75" dependencies = [ "cgp-async", "cgp-component", @@ -2943,7 +2943,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.10.5", "proc-macro2", "quote", "syn 2.0.37", diff --git a/crates/cosmos-integration-tests/src/contexts/bootstrap.rs b/crates/cosmos-integration-tests/src/contexts/bootstrap.rs index 933b9e3ee..ed0b2432e 100644 --- a/crates/cosmos-integration-tests/src/contexts/bootstrap.rs +++ b/crates/cosmos-integration-tests/src/contexts/bootstrap.rs @@ -1,8 +1,10 @@ use cgp_core::prelude::*; -use cgp_core::{ErrorRaiserComponent, ErrorTypeComponent}; +use cgp_core::{delegate_all, ErrorRaiserComponent, ErrorTypeComponent}; use cgp_error_eyre::HandleErrorsWithEyre; -use cosmos_test_components::bootstrap::components::closures::cosmos_sdk_legacy::CanUseLegacyCosmosSdkChainBootstrapper; use cosmos_test_components::bootstrap::components::cosmos_sdk_legacy::LegacyCosmosSdkBootstrapComponents; +use cosmos_test_components::bootstrap::components::cosmos_sdk_legacy::{ + CanUseLegacyCosmosSdkChainBootstrapper, IsLegacyCosmosSdkBootstrapComponent, +}; use cosmos_test_components::bootstrap::impls::fields::denom::DenomForStaking; use cosmos_test_components::bootstrap::impls::fields::denom::DenomForTransfer; use cosmos_test_components::bootstrap::impls::fields::denom::GenesisDenomGetter; @@ -53,27 +55,34 @@ impl CanUseLegacyCosmosSdkChainBootstrapper for CosmosStdBootstrapContext {} pub struct CosmosStdBootstrapComponents; impl HasComponents for CosmosStdBootstrapContext { - type Components = LegacyCosmosSdkBootstrapComponents; + type Components = CosmosStdBootstrapComponents; } -delegate_components!( - CosmosStdBootstrapComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleErrorsWithEyre, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - ChainConfigTypeComponent: ProvideCosmosChainConfigType, - GenesisConfigTypeComponent: ProvideCosmosGenesisConfigType, - WalletConfigGeneratorComponent: GenerateStandardWalletConfig, - [ - WalletConfigTypeComponent, - WalletConfigFieldsComponent, - ]: ProvideCosmosWalletConfigType, +delegate_all!( + IsLegacyCosmosSdkBootstrapComponent, + LegacyCosmosSdkBootstrapComponents, + CosmosStdBootstrapComponents, ); +delegate_components! { + CosmosStdBootstrapComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleErrorsWithEyre, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + ChainConfigTypeComponent: ProvideCosmosChainConfigType, + GenesisConfigTypeComponent: ProvideCosmosGenesisConfigType, + WalletConfigGeneratorComponent: GenerateStandardWalletConfig, + [ + WalletConfigTypeComponent, + WalletConfigFieldsComponent, + ]: ProvideCosmosWalletConfigType, + } +} + impl ProvideChainType for CosmosStdBootstrapComponents { type Chain = CosmosTestChain; } diff --git a/crates/cosmos-integration-tests/src/contexts/chain.rs b/crates/cosmos-integration-tests/src/contexts/chain.rs index ffdaa501c..fe3cee1f6 100644 --- a/crates/cosmos-integration-tests/src/contexts/chain.rs +++ b/crates/cosmos-integration-tests/src/contexts/chain.rs @@ -22,23 +22,24 @@ impl HasComponents for CosmosTestChain { type Components = CosmosTestChainComponents; } -delegate_components!( - CosmosTestChainComponents; - [ - ChainIdTypeProviderComponent, - ]: - ProvideCosmosChainTypes, - [ - WalletTypeComponent, - WalletSignerComponent, - ]: - ProvideCosmosTestWallet, - ChainIdFromStringBuilderComponent: - BuildCosmosChainIdFromString, - AmountTypeComponent: - ProvideU128AmountWithDenom, - DenomTypeComponent: - ProvideIbcDenom, - AddressTypeComponent: - ProvideStringAddress, -); +delegate_components! { + CosmosTestChainComponents { + [ + ChainIdTypeProviderComponent, + ]: + ProvideCosmosChainTypes, + [ + WalletTypeComponent, + WalletSignerComponent, + ]: + ProvideCosmosTestWallet, + ChainIdFromStringBuilderComponent: + BuildCosmosChainIdFromString, + AmountTypeComponent: + ProvideU128AmountWithDenom, + DenomTypeComponent: + ProvideIbcDenom, + AddressTypeComponent: + ProvideStringAddress, + } +} diff --git a/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk.rs b/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk.rs deleted file mode 100644 index d2b77956f..000000000 --- a/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk.rs +++ /dev/null @@ -1,75 +0,0 @@ -use cgp_core::{CanRaiseError, HasComponents, HasErrorType}; -use core::fmt::Display; -use eyre::Report; -use ibc_relayer_components::chain::traits::types::chain_id::HasChainIdType; -use ibc_relayer_components::runtime::traits::runtime::HasRuntime; -use ibc_test_components::bootstrap::traits::chain::CanBootstrapChain; -use ibc_test_components::bootstrap::traits::types::chain::ProvideChainType; -use ibc_test_components::chain::traits::build::CanBuildChainIdFromString; -use ibc_test_components::chain::traits::types::address::HasAddressType; -use ibc_test_components::chain::traits::types::amount::HasAmountType; -use ibc_test_components::chain::traits::types::wallet::HasWalletType; -use ibc_test_components::runtime::traits::child_process::CanStartChildProcess; -use ibc_test_components::runtime::traits::exec_command::CanExecCommand; -use ibc_test_components::runtime::traits::read_file::CanReadFileAsString; -use ibc_test_components::runtime::traits::reserve_port::CanReserveTcpPort; -use ibc_test_components::runtime::traits::write_file::CanWriteStringToFile; -use std::io::Error as IoError; -use std::path::Path; - -use crate::bootstrap::components::cosmos_sdk::CosmosSdkBootstrapComponents; -use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilder; -use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathGetter; -use crate::bootstrap::traits::fields::random_id::RandomIdFlagGetter; -use crate::bootstrap::traits::fields::test_dir::TestDirGetter; -use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGenerator; -use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifier; -use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifier; -use crate::bootstrap::traits::types::chain_config::ProvideChainConfigType; -use crate::bootstrap::traits::types::genesis_config::ProvideGenesisConfigType; -use crate::bootstrap::traits::types::wallet_config::{ - ProvideWalletConfigType, WalletConfigFieldsGetter, -}; -use crate::bootstrap::types::chain_config::CosmosChainConfig; -use crate::bootstrap::types::genesis_config::CosmosGenesisConfig; -use crate::chain::types::wallet::CosmosTestWallet; - -pub trait CanUseCosmosSdkChainBootstrapper: UseCosmosSdkChainBootstrapper {} - -pub trait UseCosmosSdkChainBootstrapper: CanBootstrapChain {} - -impl UseCosmosSdkChainBootstrapper for Bootstrap -where - Bootstrap: HasComponents> - + HasRuntime - + HasErrorType - + CanRaiseError, - BaseComponents: ProvideChainType - + ProvideGenesisConfigType - + ProvideChainConfigType - + TestDirGetter - + ChainCommandPathGetter - + RandomIdFlagGetter - + CosmosGenesisConfigModifier - + CometConfigModifier - + WalletConfigGenerator - + ChainFromBootstrapParamsBuilder - + ProvideWalletConfigType - + WalletConfigFieldsGetter, - Runtime: CanExecCommand - + CanStartChildProcess - + CanReadFileAsString - + CanWriteStringToFile - + CanReserveTcpPort, - Chain: HasChainIdType - + HasWalletType - + HasAmountType - + HasAddressType - + CanBuildChainIdFromString, - Chain::ChainId: Display, - Runtime::FilePath: AsRef, - Bootstrap::Error: From, - BaseComponents::GenesisConfig: From, - BaseComponents::ChainConfig: From, -{ -} diff --git a/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk_legacy.rs b/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk_legacy.rs deleted file mode 100644 index 6e3830830..000000000 --- a/crates/cosmos-test-components/src/bootstrap/components/closures/cosmos_sdk_legacy.rs +++ /dev/null @@ -1,75 +0,0 @@ -use cgp_core::{CanRaiseError, HasComponents, HasErrorType}; -use core::fmt::Display; -use eyre::Report; -use ibc_relayer_components::chain::traits::types::chain_id::HasChainIdType; -use ibc_relayer_components::runtime::traits::runtime::HasRuntime; -use ibc_test_components::bootstrap::traits::chain::CanBootstrapChain; -use ibc_test_components::bootstrap::traits::types::chain::ProvideChainType; -use ibc_test_components::chain::traits::build::CanBuildChainIdFromString; -use ibc_test_components::chain::traits::types::address::HasAddressType; -use ibc_test_components::chain::traits::types::amount::HasAmountType; -use ibc_test_components::chain::traits::types::wallet::HasWalletType; -use ibc_test_components::runtime::traits::child_process::CanStartChildProcess; -use ibc_test_components::runtime::traits::exec_command::CanExecCommand; -use ibc_test_components::runtime::traits::read_file::CanReadFileAsString; -use ibc_test_components::runtime::traits::reserve_port::CanReserveTcpPort; -use ibc_test_components::runtime::traits::write_file::CanWriteStringToFile; -use std::io::Error as IoError; -use std::path::Path; - -use crate::bootstrap::components::cosmos_sdk_legacy::LegacyCosmosSdkBootstrapComponents; -use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilder; -use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathGetter; -use crate::bootstrap::traits::fields::random_id::RandomIdFlagGetter; -use crate::bootstrap::traits::fields::test_dir::TestDirGetter; -use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGenerator; -use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifier; -use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifier; -use crate::bootstrap::traits::types::chain_config::ProvideChainConfigType; -use crate::bootstrap::traits::types::genesis_config::ProvideGenesisConfigType; -use crate::bootstrap::traits::types::wallet_config::{ - ProvideWalletConfigType, WalletConfigFieldsGetter, -}; -use crate::bootstrap::types::chain_config::CosmosChainConfig; -use crate::bootstrap::types::genesis_config::CosmosGenesisConfig; -use crate::chain::types::wallet::CosmosTestWallet; - -pub trait CanUseLegacyCosmosSdkChainBootstrapper: UseLegacyCosmosSdkChainBootstrapper {} - -pub trait UseLegacyCosmosSdkChainBootstrapper: CanBootstrapChain {} - -impl UseLegacyCosmosSdkChainBootstrapper for Bootstrap -where - Bootstrap: HasComponents> - + HasRuntime - + HasErrorType - + CanRaiseError, - BaseComponents: ProvideChainType - + ProvideGenesisConfigType - + ProvideChainConfigType - + TestDirGetter - + ChainCommandPathGetter - + RandomIdFlagGetter - + CosmosGenesisConfigModifier - + CometConfigModifier - + WalletConfigGenerator - + ChainFromBootstrapParamsBuilder - + ProvideWalletConfigType - + WalletConfigFieldsGetter, - Runtime: CanExecCommand - + CanStartChildProcess - + CanReadFileAsString - + CanWriteStringToFile - + CanReserveTcpPort, - Chain: HasChainIdType - + HasWalletType - + HasAmountType - + HasAddressType - + CanBuildChainIdFromString, - Chain::ChainId: Display, - Runtime::FilePath: AsRef, - Bootstrap::Error: From, - BaseComponents::GenesisConfig: From, - BaseComponents::ChainConfig: From, -{ -} diff --git a/crates/cosmos-test-components/src/bootstrap/components/closures/mod.rs b/crates/cosmos-test-components/src/bootstrap/components/closures/mod.rs deleted file mode 100644 index ee873d5ce..000000000 --- a/crates/cosmos-test-components/src/bootstrap/components/closures/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod cosmos_sdk; -pub mod cosmos_sdk_legacy; diff --git a/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk.rs b/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk.rs index ddbaa1402..d23a86748 100644 --- a/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk.rs +++ b/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk.rs @@ -1,16 +1,27 @@ -use core::marker::PhantomData; +use core::fmt::Display; +use std::path::Path; use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use cgp_core::CanRaiseError; +use eyre::Report; +use ibc_relayer_components::chain::traits::types::chain_id::HasChainIdType; +use ibc_relayer_components::runtime::traits::runtime::HasRuntime; +use ibc_test_components::bootstrap::traits::chain::CanBootstrapChain; use ibc_test_components::bootstrap::traits::chain::ChainBootstrapperComponent; -use ibc_test_components::bootstrap::traits::types::chain::ChainTypeComponent; +use ibc_test_components::bootstrap::traits::types::chain::ProvideChainType; +use ibc_test_components::chain::traits::build::CanBuildChainIdFromString; +use ibc_test_components::chain::traits::types::address::HasAddressType; +use ibc_test_components::chain::traits::types::amount::HasAmountType; +use ibc_test_components::chain::traits::types::wallet::HasWalletType; +use ibc_test_components::runtime::traits::child_process::CanStartChildProcess; +use ibc_test_components::runtime::traits::exec_command::CanExecCommand; +use ibc_test_components::runtime::traits::read_file::CanReadFileAsString; +use ibc_test_components::runtime::traits::reserve_port::CanReserveTcpPort; +use ibc_test_components::runtime::traits::write_file::CanWriteStringToFile; +use std::io::Error as IoError; use crate::bootstrap::impls::chain::bootstrap_chain::BootstrapCosmosChain; use crate::bootstrap::impls::chain::start_chain::StartCosmosChain; -use crate::bootstrap::impls::fields::denom::GenesisDenomComponent; use crate::bootstrap::impls::fields::hd_path::ProvideCosmosHdPath; use crate::bootstrap::impls::generator::random_chain_id::GenerateRandomChainId; use crate::bootstrap::impls::genesis::add_genesis_account::AddCosmosGenesisAccount; @@ -22,14 +33,14 @@ use crate::bootstrap::impls::initializers::init_chain_data::InitCosmosChainData; use crate::bootstrap::impls::initializers::init_wallet::InitCosmosTestWallet; use crate::bootstrap::impls::initializers::update_chain_config::UpdateCosmosChainConfig; use crate::bootstrap::impls::initializers::update_genesis_config::UpdateCosmosGenesisConfig; -use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilderComponent; +use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilder; use crate::bootstrap::traits::chain::start_chain::ChainFullNodeStarterComponent; -use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathComponent; +use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathGetter; use crate::bootstrap::traits::fields::hd_path::WalletHdPathComponent; -use crate::bootstrap::traits::fields::random_id::RandomIdFlagComponent; -use crate::bootstrap::traits::fields::test_dir::TestDirComponent; +use crate::bootstrap::traits::fields::random_id::RandomIdFlagGetter; +use crate::bootstrap::traits::fields::test_dir::TestDirGetter; use crate::bootstrap::traits::generator::generate_chain_id::ChainIdGeneratorComponent; -use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGeneratorComponent; +use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGenerator; use crate::bootstrap::traits::genesis::add_genesis_account::GenesisAccountAdderComponent; use crate::bootstrap::traits::genesis::add_genesis_validator::GenesisValidatorAdderComponent; use crate::bootstrap::traits::genesis::add_genesis_wallet::GenesisWalletAdderComponent; @@ -39,55 +50,77 @@ use crate::bootstrap::traits::initializers::init_chain_data::ChainDataInitialize use crate::bootstrap::traits::initializers::init_chain_home_dir::ChainHomeDirInitializerComponent; use crate::bootstrap::traits::initializers::init_genesis_config::GenesisConfigInitializerComponent; use crate::bootstrap::traits::initializers::init_wallet::WalletInitializerComponent; -use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifierComponent; -use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifierComponent; -use crate::bootstrap::traits::types::chain_config::ChainConfigTypeComponent; -use crate::bootstrap::traits::types::genesis_config::GenesisConfigTypeComponent; -use crate::bootstrap::traits::types::wallet_config::{ - WalletConfigFieldsComponent, WalletConfigTypeComponent, -}; +use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifier; +use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifier; +use crate::bootstrap::traits::types::chain_config::ProvideChainConfigType; +use crate::bootstrap::traits::types::genesis_config::ProvideGenesisConfigType; +use crate::bootstrap::traits::types::wallet_config::ProvideWalletConfigType; +use crate::bootstrap::traits::types::wallet_config::WalletConfigFieldsGetter; +use crate::bootstrap::types::chain_config::CosmosChainConfig; +use crate::bootstrap::types::genesis_config::CosmosGenesisConfig; +use crate::chain::types::wallet::CosmosTestWallet; -pub struct CosmosSdkBootstrapComponents(pub PhantomData); +pub struct CosmosSdkBootstrapComponents; -delegate_components!( - CosmosSdkBootstrapComponents; +// Components that will be swapped in `LegacyCosmosSdkBootstrapComponents` +delegate_components! { + #[mark_component(IsCosmosSdkBootstrapComponent)] + #[mark_delegate(DelegatesToCosmosSdkBootstrapComponents)] + CosmosSdkBootstrapComponents { + GenesisAccountAdderComponent: AddCosmosGenesisAccount, + GenesisValidatorAdderComponent: AddCosmosGenesisValidator, + GenesisTransactionsCollectorComponent: CollectCosmosGentxs, - // Components that will be swapped in `LegacyCosmosSdkBootstrapComponents` - GenesisAccountAdderComponent: AddCosmosGenesisAccount, - GenesisValidatorAdderComponent: AddCosmosGenesisValidator, - GenesisTransactionsCollectorComponent: CollectCosmosGentxs, + ChainIdGeneratorComponent: GenerateRandomChainId, + ChainHomeDirInitializerComponent: CreateChainHomeDirFromTestDir, + ChainDataInitializerComponent: InitCosmosChainData, + WalletHdPathComponent: ProvideCosmosHdPath, + WalletInitializerComponent: InitCosmosTestWallet, + ChainConfigInitializerComponent: UpdateCosmosChainConfig, + GenesisConfigInitializerComponent: UpdateCosmosGenesisConfig, + GenesisWalletAdderComponent: AddCosmosWalletToGenesis, + ChainFullNodeStarterComponent: StartCosmosChain, + ChainBootstrapperComponent: BootstrapCosmosChain, + } +} - // Components that are common with `LegacyCosmosSdkBootstrapComponents` - ChainIdGeneratorComponent: GenerateRandomChainId, - ChainHomeDirInitializerComponent: CreateChainHomeDirFromTestDir, - ChainDataInitializerComponent: InitCosmosChainData, - WalletHdPathComponent: ProvideCosmosHdPath, - WalletInitializerComponent: InitCosmosTestWallet, - ChainConfigInitializerComponent: UpdateCosmosChainConfig, - GenesisConfigInitializerComponent: UpdateCosmosGenesisConfig, - GenesisWalletAdderComponent: AddCosmosWalletToGenesis, - ChainFullNodeStarterComponent: StartCosmosChain, - ChainBootstrapperComponent: BootstrapCosmosChain, +pub trait CanUseCosmosSdkChainBootstrapper: UseCosmosSdkChainBootstrapper {} - // Components that should be implemented by `BaseComponents` - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - ChainTypeComponent, - GenesisConfigTypeComponent, - ChainConfigTypeComponent, - TestDirComponent, - ChainCommandPathComponent, - RandomIdFlagComponent, - GenesisDenomComponent, - WalletConfigTypeComponent, - WalletConfigFieldsComponent, - WalletConfigGeneratorComponent, - CosmosGenesisConfigModifierComponent, - CometConfigModifierComponent, - ChainFromBootstrapParamsBuilderComponent, - ]: - BaseComponents, -); +pub trait UseCosmosSdkChainBootstrapper: CanBootstrapChain {} + +impl UseCosmosSdkChainBootstrapper for Bootstrap +where + Bootstrap: HasComponents + + HasRuntime + + HasErrorType + + CanRaiseError, + Components: DelegatesToCosmosSdkBootstrapComponents + + ProvideChainType + + ProvideGenesisConfigType + + ProvideChainConfigType + + TestDirGetter + + ChainCommandPathGetter + + RandomIdFlagGetter + + CosmosGenesisConfigModifier + + CometConfigModifier + + WalletConfigGenerator + + ChainFromBootstrapParamsBuilder + + ProvideWalletConfigType + + WalletConfigFieldsGetter, + Runtime: CanExecCommand + + CanStartChildProcess + + CanReadFileAsString + + CanWriteStringToFile + + CanReserveTcpPort, + Chain: HasChainIdType + + HasWalletType + + HasAmountType + + HasAddressType + + CanBuildChainIdFromString, + Chain::ChainId: Display, + Runtime::FilePath: AsRef, + Bootstrap::Error: From, + Components::GenesisConfig: From, + Components::ChainConfig: From, +{ +} diff --git a/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk_legacy.rs b/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk_legacy.rs index ab692bffc..327ad42eb 100644 --- a/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk_legacy.rs +++ b/crates/cosmos-test-components/src/bootstrap/components/cosmos_sdk_legacy.rs @@ -1,26 +1,37 @@ -use core::marker::PhantomData; +use core::fmt::Display; +use std::io::Error as IoError; +use std::path::Path; use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use cgp_core::CanRaiseError; +use eyre::Report; +use ibc_relayer_components::chain::traits::types::chain_id::HasChainIdType; +use ibc_relayer_components::runtime::traits::runtime::HasRuntime; +use ibc_test_components::bootstrap::traits::chain::CanBootstrapChain; use ibc_test_components::bootstrap::traits::chain::ChainBootstrapperComponent; -use ibc_test_components::bootstrap::traits::types::chain::ChainTypeComponent; +use ibc_test_components::bootstrap::traits::types::chain::ProvideChainType; +use ibc_test_components::chain::traits::build::CanBuildChainIdFromString; +use ibc_test_components::chain::traits::types::address::HasAddressType; +use ibc_test_components::chain::traits::types::amount::HasAmountType; +use ibc_test_components::chain::traits::types::wallet::HasWalletType; +use ibc_test_components::runtime::traits::child_process::CanStartChildProcess; +use ibc_test_components::runtime::traits::exec_command::CanExecCommand; +use ibc_test_components::runtime::traits::read_file::CanReadFileAsString; +use ibc_test_components::runtime::traits::reserve_port::CanReserveTcpPort; +use ibc_test_components::runtime::traits::write_file::CanWriteStringToFile; use crate::bootstrap::components::cosmos_sdk::CosmosSdkBootstrapComponents; -use crate::bootstrap::impls::fields::denom::GenesisDenomComponent; use crate::bootstrap::impls::genesis_legacy::add_genesis_account::LegacyAddCosmosGenesisAccount; use crate::bootstrap::impls::genesis_legacy::add_genesis_validator::LegacyAddCosmosGenesisValidator; use crate::bootstrap::impls::genesis_legacy::collect_gentxs::LegacyCollectCosmosGentxs; -use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilderComponent; +use crate::bootstrap::traits::chain::build_chain::ChainFromBootstrapParamsBuilder; use crate::bootstrap::traits::chain::start_chain::ChainFullNodeStarterComponent; -use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathComponent; +use crate::bootstrap::traits::fields::chain_command_path::ChainCommandPathGetter; use crate::bootstrap::traits::fields::hd_path::WalletHdPathComponent; -use crate::bootstrap::traits::fields::random_id::RandomIdFlagComponent; -use crate::bootstrap::traits::fields::test_dir::TestDirComponent; +use crate::bootstrap::traits::fields::random_id::RandomIdFlagGetter; +use crate::bootstrap::traits::fields::test_dir::TestDirGetter; use crate::bootstrap::traits::generator::generate_chain_id::ChainIdGeneratorComponent; -use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGeneratorComponent; +use crate::bootstrap::traits::generator::generate_wallet_config::WalletConfigGenerator; use crate::bootstrap::traits::genesis::add_genesis_account::GenesisAccountAdderComponent; use crate::bootstrap::traits::genesis::add_genesis_validator::GenesisValidatorAdderComponent; use crate::bootstrap::traits::genesis::add_genesis_wallet::GenesisWalletAdderComponent; @@ -30,55 +41,80 @@ use crate::bootstrap::traits::initializers::init_chain_data::ChainDataInitialize use crate::bootstrap::traits::initializers::init_chain_home_dir::ChainHomeDirInitializerComponent; use crate::bootstrap::traits::initializers::init_genesis_config::GenesisConfigInitializerComponent; use crate::bootstrap::traits::initializers::init_wallet::WalletInitializerComponent; -use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifierComponent; -use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifierComponent; -use crate::bootstrap::traits::types::chain_config::ChainConfigTypeComponent; -use crate::bootstrap::traits::types::genesis_config::GenesisConfigTypeComponent; -use crate::bootstrap::traits::types::wallet_config::{ - WalletConfigFieldsComponent, WalletConfigTypeComponent, -}; +use crate::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifier; +use crate::bootstrap::traits::modifiers::modify_genesis_config::CosmosGenesisConfigModifier; +use crate::bootstrap::traits::types::chain_config::ProvideChainConfigType; +use crate::bootstrap::traits::types::genesis_config::ProvideGenesisConfigType; +use crate::bootstrap::traits::types::wallet_config::ProvideWalletConfigType; +use crate::bootstrap::traits::types::wallet_config::WalletConfigFieldsGetter; +use crate::bootstrap::types::chain_config::CosmosChainConfig; +use crate::bootstrap::types::genesis_config::CosmosGenesisConfig; +use crate::chain::types::wallet::CosmosTestWallet; -pub struct LegacyCosmosSdkBootstrapComponents(pub PhantomData); +pub struct LegacyCosmosSdkBootstrapComponents; -delegate_components!( - LegacyCosmosSdkBootstrapComponents; +delegate_components! { + #[mark_component(IsLegacyCosmosSdkBootstrapComponent)] + #[mark_delegate(DelegatesToLegacyToCosmosSdkBootstrapComponents)] + LegacyCosmosSdkBootstrapComponents { + GenesisAccountAdderComponent: LegacyAddCosmosGenesisAccount, + GenesisValidatorAdderComponent: LegacyAddCosmosGenesisValidator, + GenesisTransactionsCollectorComponent: LegacyCollectCosmosGentxs, - // Components that differ from `CosmosSdkBootstrapComponents` - GenesisAccountAdderComponent: LegacyAddCosmosGenesisAccount, - GenesisValidatorAdderComponent: LegacyAddCosmosGenesisValidator, - GenesisTransactionsCollectorComponent: LegacyCollectCosmosGentxs, + // Components that are the same as `CosmosSdkBootstrapComponents` + [ + ChainIdGeneratorComponent, + ChainHomeDirInitializerComponent, + ChainDataInitializerComponent, + WalletHdPathComponent, + WalletInitializerComponent, + ChainConfigInitializerComponent, + GenesisConfigInitializerComponent, + GenesisWalletAdderComponent, + ChainFullNodeStarterComponent, + ChainBootstrapperComponent, + ]: + CosmosSdkBootstrapComponents, + } +} - // Components that are the same as `CosmosSdkBootstrapComponents` - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - ChainIdGeneratorComponent, - ChainHomeDirInitializerComponent, - ChainDataInitializerComponent, - WalletHdPathComponent, - WalletInitializerComponent, - ChainConfigInitializerComponent, - GenesisConfigInitializerComponent, - GenesisWalletAdderComponent, - ChainFullNodeStarterComponent, - ChainBootstrapperComponent, +pub trait CanUseLegacyCosmosSdkChainBootstrapper: UseLegacyCosmosSdkChainBootstrapper {} - // Components that are forwarded to `BaseComponents` via `CosmosSdkBootstrapComponents` - ChainTypeComponent, - GenesisConfigTypeComponent, - ChainConfigTypeComponent, - TestDirComponent, - ChainCommandPathComponent, - RandomIdFlagComponent, - GenesisDenomComponent, - WalletConfigTypeComponent, - WalletConfigFieldsComponent, - WalletConfigGeneratorComponent, - CosmosGenesisConfigModifierComponent, - CometConfigModifierComponent, - ChainFromBootstrapParamsBuilderComponent, - ]: - CosmosSdkBootstrapComponents, -); +pub trait UseLegacyCosmosSdkChainBootstrapper: CanBootstrapChain {} + +impl UseLegacyCosmosSdkChainBootstrapper for Bootstrap +where + Bootstrap: HasComponents + + HasRuntime + + HasErrorType + + CanRaiseError, + Components: DelegatesToLegacyToCosmosSdkBootstrapComponents + + ProvideChainType + + ProvideGenesisConfigType + + ProvideChainConfigType + + TestDirGetter + + ChainCommandPathGetter + + RandomIdFlagGetter + + CosmosGenesisConfigModifier + + CometConfigModifier + + WalletConfigGenerator + + ChainFromBootstrapParamsBuilder + + ProvideWalletConfigType + + WalletConfigFieldsGetter, + Runtime: CanExecCommand + + CanStartChildProcess + + CanReadFileAsString + + CanWriteStringToFile + + CanReserveTcpPort, + Chain: HasChainIdType + + HasWalletType + + HasAmountType + + HasAddressType + + CanBuildChainIdFromString, + Chain::ChainId: Display, + Runtime::FilePath: AsRef, + Bootstrap::Error: From, + Components::GenesisConfig: From, + Components::ChainConfig: From, +{ +} diff --git a/crates/cosmos-test-components/src/bootstrap/components/mod.rs b/crates/cosmos-test-components/src/bootstrap/components/mod.rs index ec590f23b..ee873d5ce 100644 --- a/crates/cosmos-test-components/src/bootstrap/components/mod.rs +++ b/crates/cosmos-test-components/src/bootstrap/components/mod.rs @@ -1,3 +1,2 @@ -pub mod closures; pub mod cosmos_sdk; pub mod cosmos_sdk_legacy; diff --git a/crates/relayer-components-extra/src/components/extra/birelay.rs b/crates/relayer-components-extra/src/components/extra/birelay.rs deleted file mode 100644 index 08b587752..000000000 --- a/crates/relayer-components-extra/src/components/extra/birelay.rs +++ /dev/null @@ -1,28 +0,0 @@ -use core::marker::PhantomData; - -use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; -use cgp_core::RunnerComponent; -use ibc_relayer_components::components::default::birelay::DefaultBiRelayComponents; -use ibc_relayer_components::logger::traits::has_logger::{ - LoggerFieldComponent, LoggerTypeComponent, -}; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; - -pub struct ExtraBiRelayComponents(pub PhantomData); - -delegate_components!( - ExtraBiRelayComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - RunnerComponent, - LoggerTypeComponent, - LoggerFieldComponent, - ]: - DefaultBiRelayComponents, -); diff --git a/crates/relayer-components-extra/src/components/extra/build.rs b/crates/relayer-components-extra/src/components/extra/build.rs index 783228250..7f420563a 100644 --- a/crates/relayer-components-extra/src/components/extra/build.rs +++ b/crates/relayer-components-extra/src/components/extra/build.rs @@ -1,40 +1,105 @@ use core::marker::PhantomData; use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; +use ibc_relayer_components::birelay::traits::two_way::HasTwoWayRelay; +use ibc_relayer_components::build::traits::birelay::HasBiRelayType; +use ibc_relayer_components::build::traits::cache::{HasChainCache, HasRelayCache}; 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::birelay_builder::CanBuildBiRelay; +use ibc_relayer_components::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilder; +use ibc_relayer_components::build::traits::components::chain_builder::ChainBuilder; use ibc_relayer_components::build::traits::components::chain_builder::ChainBuilderComponent; use ibc_relayer_components::build::traits::components::relay_builder::RelayBuilderComponent; use ibc_relayer_components::build::traits::components::relay_from_chains_builder::RelayFromChainsBuilderComponent; +use ibc_relayer_components::build::traits::target::chain::{ChainATarget, ChainBTarget}; +use ibc_relayer_components::build::traits::target::relay::{RelayAToBTarget, RelayBToATarget}; +use ibc_relayer_components::build::types::aliases::{ChainA, ChainB}; +use ibc_relayer_components::chain::traits::types::chain_id::HasChainId; +use ibc_relayer_components::chain::traits::types::ibc::HasIbcChainTypes; use ibc_relayer_components::components::default::build::DefaultBuildComponents; -use ibc_relayer_components::logger::traits::has_logger::{ - LoggerFieldComponent, LoggerTypeComponent, -}; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; +use ibc_relayer_components::relay::traits::chains::HasRelayChains; +use ibc_relayer_components::runtime::traits::mutex::HasMutex; +use ibc_relayer_components::runtime::traits::runtime::HasRuntime; +use crate::batch::traits::config::HasBatchConfig; use crate::build::components::relay::batch::BuildRelayWithBatchWorker; -use crate::build::traits::components::relay_with_batch_builder::RelayWithBatchBuilderComponent; +use crate::build::traits::cache::HasBatchSenderCache; +use crate::build::traits::components::relay_with_batch_builder::RelayWithBatchBuilder; +use crate::components::extra::closures::batch::UseBatchMessageWorkerSpawner; +use crate::runtime::traits::channel::{CanCloneSender, CanCreateChannels}; +use crate::runtime::traits::channel_once::CanUseChannelsOnce; pub struct ExtraBuildComponents(pub PhantomData); -delegate_components!( - ExtraBuildComponents; - RelayFromChainsBuilderComponent: BuildRelayWithBatchWorker, - RelayWithBatchBuilderComponent: BaseComponents, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerFieldComponent, - LoggerTypeComponent, - ChainBuilderComponent, - RelayBuilderComponent, - BiRelayBuilderComponent, - BiRelayFromRelayBuilderComponent, - ]: - DefaultBuildComponents, -); +delegate_components! { + #[mark_component(IsExtraBuildComponent)] + #[mark_delegate(DelegatesToExtraBuildComponents)] + ExtraBuildComponents { + RelayFromChainsBuilderComponent: BuildRelayWithBatchWorker, + [ + ChainBuilderComponent, + RelayBuilderComponent, + BiRelayBuilderComponent, + ]: + DefaultBuildComponents, + } +} + +pub trait CanUseExtraBuildComponents: UseExtraBuildComponents +where + ChainA: HasIbcChainTypes>, + ChainB: HasIbcChainTypes>, +{ +} + +pub trait UseExtraBuildComponents: CanBuildBiRelay +where + ChainA: HasIbcChainTypes>, + ChainB: HasIbcChainTypes>, +{ +} + +impl + UseExtraBuildComponents for Build +where + Build: HasBatchConfig + + HasBiRelayType + + HasRelayCache + + HasRelayCache + + HasChainCache + + HasChainCache + + HasBatchSenderCache + + HasBatchSenderCache + + HasComponents, + BiRelay: HasTwoWayRelay< + ChainA = ChainA, + ChainB = ChainB, + RelayAToB = RelayAToB, + RelayBToA = RelayBToA, + >, + RelayAToB: Clone + + HasErrorType + + HasRelayChains + + UseBatchMessageWorkerSpawner, + RelayBToA: Clone + + HasErrorType + + HasRelayChains + + UseBatchMessageWorkerSpawner, + ChainA: Clone + HasRuntime + HasChainId + HasIbcChainTypes, + ChainB: Clone + HasRuntime + HasChainId + HasIbcChainTypes, + Error: Async, + ChainA::ChainId: Ord + Clone, + ChainB::ChainId: Ord + Clone, + ChainA::ClientId: Ord + Clone, + ChainB::ClientId: Ord + Clone, + ChainA::Runtime: CanCreateChannels + CanUseChannelsOnce + CanCloneSender, + ChainB::Runtime: CanCreateChannels + CanUseChannelsOnce + CanCloneSender, + Build::Runtime: HasMutex, + Components: HasComponents + + DelegatesToExtraBuildComponents + + BiRelayFromRelayBuilder + + RelayWithBatchBuilder + + RelayWithBatchBuilder, + BaseComponents: ChainBuilder + ChainBuilder, +{ +} diff --git a/crates/relayer-components-extra/src/components/extra/chain.rs b/crates/relayer-components-extra/src/components/extra/chain.rs index 614da1854..5cf8a81ae 100644 --- a/crates/relayer-components-extra/src/components/extra/chain.rs +++ b/crates/relayer-components-extra/src/components/extra/chain.rs @@ -1,108 +1,21 @@ use core::marker::PhantomData; use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; -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; -use ibc_relayer_components::chain::traits::components::channel_handshake_message_builder::ChannelHandshakeMessageBuilderComponent; -use ibc_relayer_components::chain::traits::components::channel_handshake_payload_builder::ChannelHandshakePayloadBuilderComponent; -use ibc_relayer_components::chain::traits::components::client_state_querier::ClientStateQuerierComponent; -use ibc_relayer_components::chain::traits::components::connection_handshake_message_builder::ConnectionHandshakeMessageBuilderComponent; -use ibc_relayer_components::chain::traits::components::connection_handshake_payload_builder::ConnectionHandshakePayloadBuilderComponent; -use ibc_relayer_components::chain::traits::components::consensus_state_height_querier::ConsensusStateHeightQuerierComponent; use ibc_relayer_components::chain::traits::components::consensus_state_querier::ConsensusStateQuerierComponent; -use ibc_relayer_components::chain::traits::components::counterparty_chain_id_querier::CounterpartyChainIdQuerierComponent; -use ibc_relayer_components::chain::traits::components::create_client_message_builder::CreateClientMessageBuilderComponent; -use ibc_relayer_components::chain::traits::components::create_client_payload_builder::CreateClientPayloadBuilderComponent; -use ibc_relayer_components::chain::traits::components::message_sender::MessageSenderComponent; -use ibc_relayer_components::chain::traits::components::packet_commitments_querier::PacketCommitmentsQuerierComponent; -use ibc_relayer_components::chain::traits::components::packet_fields_reader::PacketFieldsReaderComponent; -use ibc_relayer_components::chain::traits::components::packet_from_write_ack_builder::PacketFromWriteAckBuilderComponent; -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::{ - SendPacketQuerierComponent, SendPacketsQuerierComponent, -}; -use ibc_relayer_components::chain::traits::components::timeout_unordered_packet_message_builder::{ - TimeoutUnorderedPacketMessageBuilderComponent, TimeoutUnorderedPacketPayloadBuilderComponent, -}; -use ibc_relayer_components::chain::traits::components::unreceived_packet_sequences_querier::UnreceivedPacketSequencesQuerierComponent; -use ibc_relayer_components::chain::traits::components::update_client_message_builder::UpdateClientMessageBuilderComponent; -use ibc_relayer_components::chain::traits::components::update_client_payload_builder::UpdateClientPayloadBuilderComponent; -use ibc_relayer_components::chain::traits::components::write_ack_querier::WriteAckQuerierComponent; -use ibc_relayer_components::chain::traits::types::chain_id::{ - ChainIdGetterComponent, ChainIdTypeProviderComponent, -}; -use ibc_relayer_components::chain::traits::types::event::EventTypeProviderComponent; -use ibc_relayer_components::chain::traits::types::height::HeightTypeProviderComponent; -use ibc_relayer_components::chain::traits::types::ibc::IbcChainTypesProviderComponent; -use ibc_relayer_components::chain::traits::types::message::MessageTypeProviderComponent; -use ibc_relayer_components::chain::traits::types::packet::IbcPacketTypesProviderComponent; -use ibc_relayer_components::chain::traits::types::status::ChainStatusTypeProviderComponent; -use ibc_relayer_components::chain::traits::types::timestamp::TimestampTypeProviderComponent; -use ibc_relayer_components::components::default::chain::DefaultChainComponents; -use ibc_relayer_components::logger::traits::has_logger::{ - LoggerFieldComponent, LoggerTypeComponent, -}; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use crate::telemetry::components::consensus_state::ConsensusStateTelemetryQuerier; use crate::telemetry::components::status::ChainStatusTelemetryQuerier; pub struct ExtraChainComponents(pub PhantomData); -delegate_components!( - ExtraChainComponents; - ChainStatusQuerierComponent: - ChainStatusTelemetryQuerier, - ConsensusStateQuerierComponent: - ConsensusStateTelemetryQuerier, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - HeightTypeProviderComponent, - TimestampTypeProviderComponent, - ChainIdTypeProviderComponent, - ChainIdGetterComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - IbcChainTypesProviderComponent, - IbcPacketTypesProviderComponent, - ChainStatusTypeProviderComponent, - LoggerTypeComponent, - LoggerFieldComponent, - MessageSenderComponent, - PacketFieldsReaderComponent, - CounterpartyChainIdQuerierComponent, - PacketCommitmentsQuerierComponent, - ReceivedPacketQuerierComponent, - SendPacketQuerierComponent, - SendPacketsQuerierComponent, - UnreceivedPacketSequencesQuerierComponent, - WriteAckQuerierComponent, - AckPacketMessageBuilderComponent, - AckPacketPayloadBuilderComponent, - ChannelHandshakeMessageBuilderComponent, - ChannelHandshakePayloadBuilderComponent, - ConnectionHandshakeMessageBuilderComponent, - ConnectionHandshakePayloadBuilderComponent, - ReceivePacketMessageBuilderComponent, - ReceivePacketPayloadBuilderComponent, - TimeoutUnorderedPacketMessageBuilderComponent, - TimeoutUnorderedPacketPayloadBuilderComponent, - ClientStateQuerierComponent, - ConsensusStateHeightQuerierComponent, - CreateClientMessageBuilderComponent, - CreateClientPayloadBuilderComponent, - UpdateClientMessageBuilderComponent, - UpdateClientPayloadBuilderComponent, - PacketFromWriteAckBuilderComponent, - ]: - DefaultChainComponents, -); +delegate_components! { + #[mark_component(IsExtraChainComponent)] + #[mark_delegate(DelegatesToExtraChainComponents)] + ExtraChainComponents { + ChainStatusQuerierComponent: + ChainStatusTelemetryQuerier, + ConsensusStateQuerierComponent: + ConsensusStateTelemetryQuerier, + } +} diff --git a/crates/relayer-components-extra/src/components/extra/closures/build.rs b/crates/relayer-components-extra/src/components/extra/closures/build.rs deleted file mode 100644 index 660344b87..000000000 --- a/crates/relayer-components-extra/src/components/extra/closures/build.rs +++ /dev/null @@ -1,83 +0,0 @@ -use cgp_core::{Async, HasComponents, HasErrorType}; -use ibc_relayer_components::birelay::traits::two_way::HasTwoWayRelay; -use ibc_relayer_components::build::traits::birelay::HasBiRelayType; -use ibc_relayer_components::build::traits::cache::{HasChainCache, HasRelayCache}; -use ibc_relayer_components::build::traits::components::birelay_builder::CanBuildBiRelay; -use ibc_relayer_components::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilder; -use ibc_relayer_components::build::traits::components::chain_builder::ChainBuilder; -use ibc_relayer_components::build::traits::target::chain::{ChainATarget, ChainBTarget}; -use ibc_relayer_components::build::traits::target::relay::{RelayAToBTarget, RelayBToATarget}; -use ibc_relayer_components::build::types::aliases::{ChainA, ChainB}; -use ibc_relayer_components::chain::traits::types::chain_id::HasChainId; -use ibc_relayer_components::chain::traits::types::ibc::HasIbcChainTypes; -use ibc_relayer_components::relay::traits::chains::HasRelayChains; -use ibc_relayer_components::runtime::traits::mutex::HasMutex; -use ibc_relayer_components::runtime::traits::runtime::HasRuntime; - -use crate::batch::traits::config::HasBatchConfig; -use crate::build::traits::cache::HasBatchSenderCache; -use crate::build::traits::components::relay_with_batch_builder::RelayWithBatchBuilder; -use crate::components::extra::build::ExtraBuildComponents; -use crate::components::extra::closures::batch::UseBatchMessageWorkerSpawner; -use crate::runtime::traits::channel::{CanCloneSender, CanCreateChannels}; -use crate::runtime::traits::channel_once::CanUseChannelsOnce; - -pub trait CanUseExtraBuilderComponents: UseExtraBuilderComponents -where - ChainA: HasIbcChainTypes>, - ChainB: HasIbcChainTypes>, -{ -} - -pub trait UseExtraBuilderComponents: CanBuildBiRelay -where - ChainA: HasIbcChainTypes>, - ChainB: HasIbcChainTypes>, -{ -} - -impl - UseExtraBuilderComponents for Build -where - Build: HasErrorType - + HasRuntime - + HasBatchConfig - + HasBiRelayType - + HasRelayCache - + HasRelayCache - + HasChainCache - + HasChainCache - + HasBatchSenderCache - + HasBatchSenderCache - + HasComponents>, - BiRelay: HasTwoWayRelay< - ChainA = ChainA, - ChainB = ChainB, - RelayAToB = RelayAToB, - RelayBToA = RelayBToA, - >, - RelayAToB: Clone - + HasErrorType - + HasRelayChains - + UseBatchMessageWorkerSpawner, - RelayBToA: Clone - + HasErrorType - + HasRelayChains - + UseBatchMessageWorkerSpawner, - ChainA: Clone + HasRuntime + HasChainId + HasIbcChainTypes, - ChainB: Clone + HasRuntime + HasChainId + HasIbcChainTypes, - Error: Async, - ChainA::ChainId: Ord + Clone, - ChainB::ChainId: Ord + Clone, - ChainA::ClientId: Ord + Clone, - ChainB::ClientId: Ord + Clone, - ChainA::Runtime: CanCreateChannels + CanUseChannelsOnce + CanCloneSender, - ChainB::Runtime: CanCreateChannels + CanUseChannelsOnce + CanCloneSender, - Build::Runtime: HasMutex, - BaseComponents: BiRelayFromRelayBuilder - + RelayWithBatchBuilder - + RelayWithBatchBuilder - + ChainBuilder - + ChainBuilder, -{ -} diff --git a/crates/relayer-components-extra/src/components/extra/closures/chain/channel_handshake.rs b/crates/relayer-components-extra/src/components/extra/closures/chain/channel_handshake.rs index a979127cc..9bb9259ad 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/chain/channel_handshake.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/chain/channel_handshake.rs @@ -18,7 +18,7 @@ use ibc_relayer_components::chain::traits::types::ibc_events::channel::{ }; use ibc_relayer_components::chain::traits::types::update_client::HasUpdateClientPayload; -use crate::components::extra::chain::ExtraChainComponents; +use crate::components::extra::chain::DelegatesToExtraChainComponents; use crate::components::extra::closures::chain::message_sender::UseExtraChainComponentsForIbcMessageSender; pub trait UseExtraChainComponentsForChannelHandshake: @@ -39,21 +39,23 @@ where { } -impl UseExtraChainComponentsForChannelHandshake - for Chain +impl + UseExtraChainComponentsForChannelHandshake for Chain where Chain: HasChannelOpenInitEvent + HasChannelOpenTryEvent + HasInitChannelOptionsType + HasChannelHandshakePayloads + UseExtraChainComponentsForIbcMessageSender - + HasComponents>, + + HasComponents, Counterparty: HasClientStateType + HasConsensusStateType + HasIbcChainTypes + HasUpdateClientPayload + HasChannelHandshakePayloads, - ChainComponents: ChannelHandshakePayloadBuilder + Components: HasComponents + + DelegatesToExtraChainComponents + + ChannelHandshakePayloadBuilder + ChannelHandshakeMessageBuilder, Chain::Height: Clone, { diff --git a/crates/relayer-components-extra/src/components/extra/closures/chain/event_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/chain/event_relayer.rs index ae3a94041..86a3ce8ce 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/chain/event_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/chain/event_relayer.rs @@ -13,7 +13,7 @@ use ibc_relayer_components::chain::traits::types::ibc_events::send_packet::HasSe use ibc_relayer_components::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent; use ibc_relayer_components::logger::traits::has_logger::HasLoggerType; -use crate::components::extra::chain::ExtraChainComponents; +use crate::components::extra::chain::DelegatesToExtraChainComponents; pub trait UseExtraChainComponentsForEventRelayer: HasChainId @@ -27,8 +27,8 @@ where { } -impl UseExtraChainComponentsForEventRelayer - for Chain +impl + UseExtraChainComponentsForEventRelayer for Chain where Chain: HasErrorType + HasChainId @@ -38,9 +38,11 @@ where + HasIbcChainTypes + HasClientStateType + HasWriteAckEvent - + HasComponents>, + + HasComponents, Counterparty: HasIbcChainTypes, - ChainComponents: CounterpartyChainIdQuerier + Components: HasComponents + + DelegatesToExtraChainComponents + + CounterpartyChainIdQuerier + PacketFromWriteAckBuilder, { } diff --git a/crates/relayer-components-extra/src/components/extra/closures/chain/message_sender.rs b/crates/relayer-components-extra/src/components/extra/closures/chain/message_sender.rs index fcd2433c7..45a9f34d6 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/chain/message_sender.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/chain/message_sender.rs @@ -34,7 +34,7 @@ use ibc_relayer_components::chain::traits::types::update_client::HasUpdateClient use ibc_relayer_components::logger::traits::has_logger::HasLoggerType; use ibc_relayer_components::runtime::traits::runtime::HasRuntime; -use crate::components::extra::chain::ExtraChainComponents; +use crate::components::extra::chain::DelegatesToExtraChainComponents; use crate::telemetry::traits::metrics::HasBasicMetrics; use crate::telemetry::traits::telemetry::HasTelemetry; @@ -61,8 +61,8 @@ where { } -impl UseExtraChainComponentsForIbcMessageSender - for Chain +impl + UseExtraChainComponentsForIbcMessageSender for Chain where Chain: HasRuntime + HasChainId @@ -76,13 +76,15 @@ where + HasIbcChainTypes + HasClientStateType + HasUpdateClientPayload - + HasComponents>, + + HasComponents, Counterparty: HasIbcChainTypes + HasClientStateType + HasConsensusStateType + HasUpdateClientPayload, Chain::Telemetry: HasBasicMetrics, - ChainComponents: MessageSender + Components: HasComponents + + DelegatesToExtraChainComponents + + MessageSender + ChainStatusQuerier + ConsensusStateQuerier + ClientStateQuerier diff --git a/crates/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs index e67199786..eb41a82d8 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs @@ -32,7 +32,7 @@ use ibc_relayer_components::chain::traits::types::packets::receive::HasReceivePa use ibc_relayer_components::chain::traits::types::packets::timeout::HasTimeoutUnorderedPacketPayload; use ibc_relayer_components::chain::traits::types::update_client::HasUpdateClientPayload; -use crate::components::extra::chain::ExtraChainComponents; +use crate::components::extra::chain::DelegatesToExtraChainComponents; use crate::components::extra::closures::chain::message_sender::UseExtraChainComponentsForIbcMessageSender; pub trait UseExtraChainComponentsForPacketRelayer: @@ -57,8 +57,8 @@ where { } -impl UseExtraChainComponentsForPacketRelayer - for Chain +impl + UseExtraChainComponentsForPacketRelayer for Chain where Chain: CanLogChainPacket + HasIbcPacketTypes @@ -67,7 +67,7 @@ where + HasAckPacketPayload + HasTimeoutUnorderedPacketPayload + UseExtraChainComponentsForIbcMessageSender - + HasComponents>, + + HasComponents, Counterparty: HasIbcChainTypes + HasClientStateType + HasConsensusStateType @@ -75,7 +75,9 @@ where + HasAckPacketPayload + HasTimeoutUnorderedPacketPayload + HasReceivePacketPayload, - ChainComponents: PacketFieldsReader + Components: HasComponents + + DelegatesToExtraChainComponents + + PacketFieldsReader + ReceivedPacketQuerier + ReceivePacketPayloadBuilder + ReceivePacketMessageBuilder diff --git a/crates/relayer-components-extra/src/components/extra/closures/mod.rs b/crates/relayer-components-extra/src/components/extra/closures/mod.rs index 2155acfb4..f5213fe5e 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/mod.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/mod.rs @@ -1,4 +1,3 @@ pub mod batch; -pub mod build; pub mod chain; pub mod relay; diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs index f5c2912a0..9a35566cc 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs @@ -1,4 +1,4 @@ -use cgp_core::{Async, HasComponents, HasErrorType}; +use cgp_core::{HasComponents, HasErrorType}; use ibc_relayer_components::chain::traits::components::ack_packet_message_builder::CanBuildAckPacketMessage; use ibc_relayer_components::chain::traits::components::ack_packet_payload_builder::CanBuildAckPacketPayload; use ibc_relayer_components::chain::traits::components::chain_status_querier::CanQueryChainStatus; @@ -24,7 +24,7 @@ use ibc_relayer_components::runtime::traits::runtime::HasRuntime; use ibc_relayer_components::runtime::traits::sleep::CanSleep; use crate::batch::traits::channel::HasMessageBatchSender; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; use crate::runtime::traits::channel::CanUseChannels; use crate::runtime::traits::channel_once::{CanCreateChannelsOnce, CanUseChannelsOnce}; @@ -40,12 +40,12 @@ where { } -impl UseExtraAckPacketRelayer for Relay +impl UseExtraAckPacketRelayer for Relay where Relay: HasRelayChains + HasLogger + HasMessageBatchSender - + HasComponents>, + + HasComponents, SrcChain: HasErrorType + HasRuntime + HasChainId @@ -73,6 +73,6 @@ where SrcChain::Runtime: CanCreateChannelsOnce + CanUseChannels + CanUseChannelsOnce, DstChain::Runtime: CanSleep, Relay::Logger: HasBaseLogLevels, - BaseRelayComponents: Async, + Components: DelegatesToExtraRelayComponents, { } diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/auto_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/auto_relayer.rs index 5cfd3bbcd..705b358fe 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/auto_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/auto_relayer.rs @@ -1,4 +1,4 @@ -use cgp_core::{Async, CanRun, HasComponents}; +use cgp_core::{CanRun, HasComponents}; use ibc_relayer_components::chain::traits::event_subscription::HasEventSubscription; use ibc_relayer_components::chain::traits::logs::event::CanLogChainEvent; use ibc_relayer_components::chain::traits::types::chain_id::HasChainId; @@ -11,21 +11,21 @@ use ibc_relayer_components::runtime::traits::subscription::HasSubscriptionType; use ibc_relayer_components::runtime::traits::task::CanRunConcurrentTasks; use crate::components::extra::closures::relay::event_relayer::UseExtraEventRelayer; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; use crate::runtime::traits::spawn::CanSpawnTask; pub trait CanUseExtraAutoRelayer: UseExtraAutoRelayer {} pub trait UseExtraAutoRelayer: CanRun {} -impl UseExtraAutoRelayer for Relay +impl UseExtraAutoRelayer for Relay where Relay: Clone + HasRuntime + HasLogger + HasRelayChains + UseExtraEventRelayer - + HasComponents>, + + HasComponents, Relay::SrcChain: HasRuntime + HasChainId + HasLoggerType @@ -42,6 +42,6 @@ where HasSubscriptionType + CanRunConcurrentTasks + CanMapStream, ::Runtime: HasSubscriptionType + CanRunConcurrentTasks + CanMapStream, - BaseRelayComponents: Async, + Components: DelegatesToExtraRelayComponents, { } diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/channel_handshake.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/channel_handshake.rs index 58284fec5..904a6158f 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/channel_handshake.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/channel_handshake.rs @@ -13,7 +13,7 @@ use ibc_relayer_components::relay::traits::channel::open_try::ChannelOpenTryRela use crate::components::extra::closures::chain::channel_handshake::UseExtraChainComponentsForChannelHandshake; use crate::components::extra::closures::relay::message_sender::UseExtraIbcMessageSender; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; pub trait UseExtraChannelHandshakeRelayer: CanInitChannel + CanRelayChannelOpenHandshake where @@ -21,14 +21,15 @@ where { } -impl UseExtraChannelHandshakeRelayer for Relay +impl UseExtraChannelHandshakeRelayer for Relay where Relay: HasRelayChains - + HasComponents> + + HasComponents + CanRaiseMissingChannelInitEventError + CanRaiseMissingChannelTryEventError + UseExtraIbcMessageSender, - RelayComponents: ChannelOpenTryRelayer + Components: DelegatesToExtraRelayComponents + + ChannelOpenTryRelayer + ChannelOpenAckRelayer + ChannelOpenConfirmRelayer + ChannelInitializer, diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs index c8ad32f87..56bc01152 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs @@ -11,7 +11,7 @@ use ibc_relayer_components::relay::traits::target::{DestinationTarget, SourceTar use crate::components::extra::closures::chain::event_relayer::UseExtraChainComponentsForEventRelayer; use crate::components::extra::closures::relay::ack_packet_relayer::UseExtraAckPacketRelayer; use crate::components::extra::closures::relay::packet_relayer::UseExtraPacketRelayer; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; pub trait CanUseExtraEventRelayer: UseExtraEventRelayer {} @@ -20,7 +20,7 @@ pub trait UseExtraEventRelayer: { } -impl UseExtraEventRelayer for Relay +impl UseExtraEventRelayer for Relay where Relay: HasRelayChains + HasPacketLock @@ -28,11 +28,11 @@ where + HasRelayPacketFields + UseExtraAckPacketRelayer + UseExtraPacketRelayer - + HasComponents>, + + HasComponents, Relay::SrcChain: HasLoggerType + UseExtraChainComponentsForEventRelayer, Relay::DstChain: UseExtraChainComponentsForEventRelayer, Relay::Logger: HasBaseLogLevels, - BaseRelayComponents: PacketFilter, + Components: DelegatesToExtraRelayComponents + PacketFilter, { } diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/message_sender.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/message_sender.rs index 2f3b0e23d..890a49abd 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/message_sender.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/message_sender.rs @@ -13,7 +13,7 @@ use ibc_relayer_components::runtime::traits::sleep::CanSleep; use crate::batch::traits::channel::HasMessageBatchSender; use crate::batch::types::sink::BatchWorkerSink; use crate::components::extra::closures::chain::message_sender::UseExtraChainComponentsForIbcMessageSender; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; use crate::runtime::traits::channel::CanUseChannels; use crate::runtime::traits::channel_once::{CanCreateChannelsOnce, CanUseChannelsOnce}; @@ -25,13 +25,13 @@ pub trait UseExtraIbcMessageSender: { } -impl UseExtraIbcMessageSender for Relay +impl UseExtraIbcMessageSender for Relay where Relay: HasRelayChains + HasLogger + HasMessageBatchSender + HasMessageBatchSender - + HasComponents>, + + HasComponents, SrcChain: HasLoggerType + HasIbcPacketTypes + UseExtraChainComponentsForIbcMessageSender, @@ -42,6 +42,6 @@ where SrcChain::Runtime: CanSleep + CanCreateChannelsOnce + CanUseChannels + CanUseChannelsOnce, DstChain::Runtime: CanSleep + CanCreateChannelsOnce + CanUseChannels + CanUseChannelsOnce, Relay::Logger: HasBaseLogLevels, - RelayComponents: PacketFilter, + Components: DelegatesToExtraRelayComponents + PacketFilter, { } diff --git a/crates/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs b/crates/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs index 44fb65dc7..7dc151c12 100644 --- a/crates/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs +++ b/crates/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs @@ -9,27 +9,27 @@ use ibc_relayer_components::relay::traits::packet_lock::HasPacketLock; use crate::components::extra::closures::chain::packet_relayer::UseExtraChainComponentsForPacketRelayer; use crate::components::extra::closures::relay::message_sender::UseExtraIbcMessageSender; -use crate::components::extra::relay::ExtraRelayComponents; +use crate::components::extra::relay::DelegatesToExtraRelayComponents; use crate::relay::components::packet_relayers::retry::SupportsPacketRetry; pub trait CanUseExtraPacketRelayer: UseExtraPacketRelayer {} pub trait UseExtraPacketRelayer: CanRelayPacket {} -impl UseExtraPacketRelayer for Relay +impl UseExtraPacketRelayer for Relay where Relay: HasRelayChains + HasLogger + HasPacketLock + SupportsPacketRetry + UseExtraIbcMessageSender - + HasComponents>, + + HasComponents, SrcChain: HasLoggerType + HasIbcPacketTypes + UseExtraChainComponentsForPacketRelayer, DstChain: HasIbcPacketTypes + UseExtraChainComponentsForPacketRelayer, Relay::Logger: HasBaseLogLevels, - RelayComponents: PacketFilter, + Components: DelegatesToExtraRelayComponents + PacketFilter, { } diff --git a/crates/relayer-components-extra/src/components/extra/mod.rs b/crates/relayer-components-extra/src/components/extra/mod.rs index b0a50173e..05f8b69c0 100644 --- a/crates/relayer-components-extra/src/components/extra/mod.rs +++ b/crates/relayer-components-extra/src/components/extra/mod.rs @@ -1,6 +1,4 @@ -pub mod birelay; pub mod build; pub mod chain; pub mod closures; pub mod relay; -pub mod transaction; diff --git a/crates/relayer-components-extra/src/components/extra/relay.rs b/crates/relayer-components-extra/src/components/extra/relay.rs index d888b3823..60551697b 100644 --- a/crates/relayer-components-extra/src/components/extra/relay.rs +++ b/crates/relayer-components-extra/src/components/extra/relay.rs @@ -1,12 +1,6 @@ -use core::marker::PhantomData; - use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; use cgp_core::RunnerComponent; use ibc_relayer_components::components::default::relay::DefaultRelayComponents; -use ibc_relayer_components::logger::traits::has_logger::LoggerFieldComponent; -use ibc_relayer_components::logger::traits::has_logger::LoggerTypeComponent; 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::packet_relayers::general::filter_relayer::FilterRelayer; @@ -25,7 +19,6 @@ use ibc_relayer_components::relay::traits::components::ibc_message_sender::{ IbcMessageSenderComponent, MainSink, }; use ibc_relayer_components::relay::traits::components::packet_clearer::PacketClearerComponent; -use ibc_relayer_components::relay::traits::components::packet_filter::PacketFilterComponent; use ibc_relayer_components::relay::traits::components::packet_relayer::PacketRelayerComponent; use ibc_relayer_components::relay::traits::components::packet_relayers::ack_packet::AckPacketRelayerComponent; use ibc_relayer_components::relay::traits::components::packet_relayers::receive_packet::ReceivePacketRelayerComponnent; @@ -36,49 +29,43 @@ use ibc_relayer_components::relay::traits::connection::open_confirm::ConnectionO use ibc_relayer_components::relay::traits::connection::open_handshake::ConnectionOpenHandshakeRelayerComponent; use ibc_relayer_components::relay::traits::connection::open_init::ConnectionInitializerComponent; use ibc_relayer_components::relay::traits::connection::open_try::ConnectionOpenTryRelayerComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeComponent; -use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use crate::batch::components::message_sender::SendMessagesToBatchWorker; use crate::batch::types::sink::BatchWorkerSink; use crate::relay::components::packet_relayers::retry::RetryRelayer; -pub struct ExtraRelayComponents(pub PhantomData); +pub struct ExtraRelayComponents; -delegate_components!( - ExtraRelayComponents; - IbcMessageSenderComponent: SendMessagesToBatchWorker, - IbcMessageSenderComponent: - SendIbcMessagesWithUpdateClient, - PacketRelayerComponent: - LockPacketRelayer>>>, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerTypeComponent, - LoggerFieldComponent, - UpdateClientMessageBuilderComponent, - PacketFilterComponent, - ReceivePacketRelayerComponnent, - AckPacketRelayerComponent, - TimeoutUnorderedPacketRelayerComponent, - EventRelayerComponent, - ClientCreatorComponent, - PacketClearerComponent, - ChannelInitializerComponent, - ChannelOpenTryRelayerComponent, - ChannelOpenAckRelayerComponent, - ChannelOpenConfirmRelayerComponent, - ChannelOpenHandshakeRelayerComponent, - ConnectionOpenAckRelayerComponent, - ConnectionOpenConfirmRelayerComponent, - ConnectionInitializerComponent, - ConnectionOpenTryRelayerComponent, - ConnectionOpenHandshakeRelayerComponent, - AutoRelayerComponent, - RunnerComponent, - ]: - DefaultRelayComponents, -); +delegate_components! { + #[mark_component(IsExtraRelayComponent)] + #[mark_delegate(DelegatesToExtraRelayComponents)] + ExtraRelayComponents { + IbcMessageSenderComponent: SendMessagesToBatchWorker, + IbcMessageSenderComponent: + SendIbcMessagesWithUpdateClient, + PacketRelayerComponent: + LockPacketRelayer>>>, + [ + UpdateClientMessageBuilderComponent, + ReceivePacketRelayerComponnent, + AckPacketRelayerComponent, + TimeoutUnorderedPacketRelayerComponent, + EventRelayerComponent, + ClientCreatorComponent, + PacketClearerComponent, + ChannelInitializerComponent, + ChannelOpenTryRelayerComponent, + ChannelOpenAckRelayerComponent, + ChannelOpenConfirmRelayerComponent, + ChannelOpenHandshakeRelayerComponent, + ConnectionOpenAckRelayerComponent, + ConnectionOpenConfirmRelayerComponent, + ConnectionInitializerComponent, + ConnectionOpenTryRelayerComponent, + ConnectionOpenHandshakeRelayerComponent, + AutoRelayerComponent, + RunnerComponent, + ]: + DefaultRelayComponents, + } +} diff --git a/crates/relayer-components-extra/src/components/extra/transaction.rs b/crates/relayer-components-extra/src/components/extra/transaction.rs deleted file mode 100644 index ca9dd5293..000000000 --- a/crates/relayer-components-extra/src/components/extra/transaction.rs +++ /dev/null @@ -1,51 +0,0 @@ -use core::marker::PhantomData; - -use cgp_core::{delegate_components, ErrorRaiserComponent, ErrorTypeComponent}; -use ibc_relayer_components::chain::traits::components::message_sender::MessageSenderComponent; -use ibc_relayer_components::chain::traits::types::chain_id::{ - ChainIdGetterComponent, ChainIdTypeProviderComponent, -}; -use ibc_relayer_components::chain::traits::types::event::EventTypeProviderComponent; -use ibc_relayer_components::chain::traits::types::message::MessageTypeProviderComponent; -use ibc_relayer_components::components::default::transaction::DefaultTxComponents; -use ibc_relayer_components::logger::traits::has_logger::{ - LoggerFieldComponent, LoggerTypeComponent, -}; -use ibc_relayer_components::runtime::traits::runtime::{RuntimeComponent, RuntimeTypeComponent}; -use ibc_relayer_components::transaction::traits::components::nonce_allocater::NonceAllocatorComponent; -use ibc_relayer_components::transaction::traits::components::nonce_querier::NonceQuerierComponent; -use ibc_relayer_components::transaction::traits::components::send_messages_with_signer::MessagesWithSignerSenderComponent; -use ibc_relayer_components::transaction::traits::components::send_messages_with_signer_and_nonce::MessagesWithSignerAndNonceSenderComponent; -use ibc_relayer_components::transaction::traits::components::tx_encoder::TxEncoderComponent; -use ibc_relayer_components::transaction::traits::components::tx_fee_estimater::TxFeeEstimatorComponent; -use ibc_relayer_components::transaction::traits::components::tx_response_poller::TxResponsePollerComponent; -use ibc_relayer_components::transaction::traits::components::tx_response_querier::TxResponseQuerierComponent; -use ibc_relayer_components::transaction::traits::components::tx_submitter::TxSubmitterComponent; - -pub struct ExtraTxComponents(pub PhantomData); - -delegate_components!( - ExtraTxComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerTypeComponent, - LoggerFieldComponent, - ChainIdTypeProviderComponent, - ChainIdGetterComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - MessageSenderComponent, - MessagesWithSignerSenderComponent, - MessagesWithSignerAndNonceSenderComponent, - NonceQuerierComponent, - NonceAllocatorComponent, - TxEncoderComponent, - TxFeeEstimatorComponent, - TxSubmitterComponent, - TxResponsePollerComponent, - TxResponseQuerierComponent, - ]: DefaultTxComponents, -); diff --git a/crates/relayer-components/src/components/default/birelay.rs b/crates/relayer-components/src/components/default/birelay.rs index 70b2baff2..e6ddea2f6 100644 --- a/crates/relayer-components/src/components/default/birelay.rs +++ b/crates/relayer-components/src/components/default/birelay.rs @@ -1,27 +1,14 @@ -use core::marker::PhantomData; - use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; use cgp_core::RunnerComponent; -use crate::logger::traits::has_logger::{LoggerFieldComponent, LoggerTypeComponent}; use crate::relay::components::auto_relayers::both_ways::RelayBothWays; -use crate::runtime::traits::runtime::RuntimeComponent; -use crate::runtime::traits::runtime::RuntimeTypeComponent; -pub struct DefaultBiRelayComponents(pub PhantomData); +pub struct DefaultBiRelayComponents; -delegate_components!( - DefaultBiRelayComponents; - RunnerComponent: RelayBothWays, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerTypeComponent, - LoggerFieldComponent, - ]: - BaseComponents, -); +delegate_components! { + #[mark_component(IsDefaultBiRelayComponent)] + #[mark_delegate(DelegatesToDefaultBiRelayComponents)] + DefaultBiRelayComponents { + RunnerComponent: RelayBothWays, + } +} diff --git a/crates/relayer-components/src/components/default/build.rs b/crates/relayer-components/src/components/default/build.rs index f9a4044a8..489d81c32 100644 --- a/crates/relayer-components/src/components/default/build.rs +++ b/crates/relayer-components/src/components/default/build.rs @@ -1,37 +1,79 @@ use core::marker::PhantomData; use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; +use crate::birelay::traits::two_way::{HasTwoChainTypes, HasTwoWayRelay}; use crate::build::components::birelay::BuildBiRelayFromRelays; use crate::build::components::chain::cache::BuildChainWithCache; use crate::build::components::relay::build_from_chain::BuildRelayFromChains; use crate::build::components::relay::cache::BuildRelayWithCache; +use crate::build::traits::birelay::HasBiRelayType; +use crate::build::traits::cache::{HasChainCache, HasRelayCache}; use crate::build::traits::components::birelay_builder::BiRelayBuilderComponent; -use crate::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilderComponent; +use crate::build::traits::components::birelay_builder::CanBuildBiRelay; +use crate::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilder; +use crate::build::traits::components::chain_builder::ChainBuilder; use crate::build::traits::components::chain_builder::ChainBuilderComponent; use crate::build::traits::components::relay_builder::RelayBuilderComponent; -use crate::build::traits::components::relay_from_chains_builder::RelayFromChainsBuilderComponent; -use crate::logger::traits::has_logger::{LoggerFieldComponent, LoggerTypeComponent}; -use crate::runtime::traits::runtime::RuntimeComponent; -use crate::runtime::traits::runtime::RuntimeTypeComponent; +use crate::build::traits::components::relay_from_chains_builder::RelayFromChainsBuilder; +use crate::build::traits::target::chain::{ChainATarget, ChainBTarget}; +use crate::build::traits::target::relay::{RelayAToBTarget, RelayBToATarget}; +use crate::build::types::aliases::{ChainA, ChainB}; +use crate::chain::traits::types::ibc::HasIbcChainTypes; +use crate::relay::traits::chains::HasRelayChains; +use crate::runtime::traits::mutex::HasMutex; pub struct DefaultBuildComponents(pub PhantomData); -delegate_components!( - DefaultBuildComponents; - ChainBuilderComponent: BuildChainWithCache, - RelayBuilderComponent: BuildRelayWithCache, - BiRelayBuilderComponent: BuildBiRelayFromRelays, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerFieldComponent, - LoggerTypeComponent, - RelayFromChainsBuilderComponent, - BiRelayFromRelayBuilderComponent, - ]: BaseComponents -); +delegate_components! { + #[mark_component(IsDefaultBuildComponent)] + #[mark_delegate(DelegatesToDefaultBuildComponents)] + DefaultBuildComponents { + ChainBuilderComponent: BuildChainWithCache, + RelayBuilderComponent: BuildRelayWithCache, + BiRelayBuilderComponent: BuildBiRelayFromRelays, + } +} + +pub trait CanUseDefaultBuildComponents: UseDefaultBuildComponents +where + ChainA: HasIbcChainTypes>, + ChainB: HasIbcChainTypes>, +{ +} + +pub trait UseDefaultBuildComponents: CanBuildBiRelay +where + ChainA: HasIbcChainTypes>, + ChainB: HasIbcChainTypes>, +{ +} + +impl + UseDefaultBuildComponents for Build +where + Build: HasBiRelayType + + HasRelayCache + + HasRelayCache + + HasChainCache + + HasChainCache + + HasComponents, + BiRelay: HasTwoChainTypes + + HasTwoWayRelay, + RelayAToB: Clone + HasRelayChains, + RelayBToA: Clone + HasRelayChains, + ChainA: Clone + HasIbcChainTypes + HasErrorType, + ChainB: Clone + HasIbcChainTypes + HasErrorType, + ChainA::ChainId: Ord + Clone, + ChainB::ChainId: Ord + Clone, + ChainA::ClientId: Ord + Clone, + ChainB::ClientId: Ord + Clone, + Build::Runtime: HasMutex, + Components: HasComponents + + DelegatesToDefaultBuildComponents + + BiRelayFromRelayBuilder + + RelayFromChainsBuilder + + RelayFromChainsBuilder, + BaseComponents: ChainBuilder + ChainBuilder, +{ +} diff --git a/crates/relayer-components/src/components/default/chain.rs b/crates/relayer-components/src/components/default/chain.rs deleted file mode 100644 index 693063889..000000000 --- a/crates/relayer-components/src/components/default/chain.rs +++ /dev/null @@ -1,97 +0,0 @@ -use core::marker::PhantomData; - -use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; - -use crate::chain::traits::components::ack_packet_message_builder::AckPacketMessageBuilderComponent; -use crate::chain::traits::components::ack_packet_payload_builder::AckPacketPayloadBuilderComponent; -use crate::chain::traits::components::chain_status_querier::ChainStatusQuerierComponent; -use crate::chain::traits::components::channel_handshake_message_builder::ChannelHandshakeMessageBuilderComponent; -use crate::chain::traits::components::channel_handshake_payload_builder::ChannelHandshakePayloadBuilderComponent; -use crate::chain::traits::components::client_state_querier::ClientStateQuerierComponent; -use crate::chain::traits::components::connection_handshake_message_builder::ConnectionHandshakeMessageBuilderComponent; -use crate::chain::traits::components::connection_handshake_payload_builder::ConnectionHandshakePayloadBuilderComponent; -use crate::chain::traits::components::consensus_state_height_querier::ConsensusStateHeightQuerierComponent; -use crate::chain::traits::components::consensus_state_querier::ConsensusStateQuerierComponent; -use crate::chain::traits::components::counterparty_chain_id_querier::CounterpartyChainIdQuerierComponent; -use crate::chain::traits::components::create_client_message_builder::CreateClientMessageBuilderComponent; -use crate::chain::traits::components::create_client_payload_builder::CreateClientPayloadBuilderComponent; -use crate::chain::traits::components::message_sender::MessageSenderComponent; -use crate::chain::traits::components::packet_commitments_querier::PacketCommitmentsQuerierComponent; -use crate::chain::traits::components::packet_fields_reader::PacketFieldsReaderComponent; -use crate::chain::traits::components::packet_from_write_ack_builder::PacketFromWriteAckBuilderComponent; -use crate::chain::traits::components::receive_packet_message_builder::ReceivePacketMessageBuilderComponent; -use crate::chain::traits::components::receive_packet_payload_builder::ReceivePacketPayloadBuilderComponent; -use crate::chain::traits::components::received_packet_querier::ReceivedPacketQuerierComponent; -use crate::chain::traits::components::send_packets_querier::{ - SendPacketQuerierComponent, SendPacketsQuerierComponent, -}; -use crate::chain::traits::components::timeout_unordered_packet_message_builder::{ - TimeoutUnorderedPacketMessageBuilderComponent, TimeoutUnorderedPacketPayloadBuilderComponent, -}; -use crate::chain::traits::components::unreceived_packet_sequences_querier::UnreceivedPacketSequencesQuerierComponent; -use crate::chain::traits::components::update_client_message_builder::UpdateClientMessageBuilderComponent; -use crate::chain::traits::components::update_client_payload_builder::UpdateClientPayloadBuilderComponent; -use crate::chain::traits::components::write_ack_querier::WriteAckQuerierComponent; -use crate::chain::traits::types::chain_id::{ChainIdGetterComponent, ChainIdTypeProviderComponent}; -use crate::chain::traits::types::event::EventTypeProviderComponent; -use crate::chain::traits::types::height::HeightTypeProviderComponent; -use crate::chain::traits::types::ibc::IbcChainTypesProviderComponent; -use crate::chain::traits::types::message::MessageTypeProviderComponent; -use crate::chain::traits::types::packet::IbcPacketTypesProviderComponent; -use crate::chain::traits::types::status::ChainStatusTypeProviderComponent; -use crate::chain::traits::types::timestamp::TimestampTypeProviderComponent; -use crate::logger::traits::has_logger::{LoggerFieldComponent, LoggerTypeComponent}; -use crate::runtime::traits::runtime::RuntimeComponent; -use crate::runtime::traits::runtime::RuntimeTypeComponent; -pub struct DefaultChainComponents(pub PhantomData); - -delegate_components!( - DefaultChainComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - HeightTypeProviderComponent, - TimestampTypeProviderComponent, - ChainIdTypeProviderComponent, - ChainIdGetterComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - IbcChainTypesProviderComponent, - IbcPacketTypesProviderComponent, - ChainStatusTypeProviderComponent, - LoggerTypeComponent, - LoggerFieldComponent, - ChainStatusQuerierComponent, - ConsensusStateQuerierComponent, - MessageSenderComponent, - PacketFieldsReaderComponent, - CounterpartyChainIdQuerierComponent, - PacketCommitmentsQuerierComponent, - ReceivedPacketQuerierComponent, - SendPacketQuerierComponent, - SendPacketsQuerierComponent, - UnreceivedPacketSequencesQuerierComponent, - WriteAckQuerierComponent, - AckPacketMessageBuilderComponent, - AckPacketPayloadBuilderComponent, - ChannelHandshakeMessageBuilderComponent, - ChannelHandshakePayloadBuilderComponent, - ConnectionHandshakeMessageBuilderComponent, - ConnectionHandshakePayloadBuilderComponent, - ReceivePacketMessageBuilderComponent, - ReceivePacketPayloadBuilderComponent, - TimeoutUnorderedPacketMessageBuilderComponent, - TimeoutUnorderedPacketPayloadBuilderComponent, - ClientStateQuerierComponent, - ConsensusStateHeightQuerierComponent, - CreateClientMessageBuilderComponent, - CreateClientPayloadBuilderComponent, - UpdateClientMessageBuilderComponent, - UpdateClientPayloadBuilderComponent, - PacketFromWriteAckBuilderComponent, - ]: BaseComponents, -); diff --git a/crates/relayer-components/src/components/default/closures/build.rs b/crates/relayer-components/src/components/default/closures/build.rs deleted file mode 100644 index ad3b2e08f..000000000 --- a/crates/relayer-components/src/components/default/closures/build.rs +++ /dev/null @@ -1,52 +0,0 @@ -use cgp_core::{HasComponents, HasErrorType}; - -use crate::birelay::traits::two_way::{HasTwoChainTypes, HasTwoWayRelay}; -use crate::build::traits::birelay::HasBiRelayType; -use crate::build::traits::cache::{HasChainCache, HasRelayCache}; -use crate::build::traits::components::birelay_builder::CanBuildBiRelay; -use crate::build::traits::components::birelay_from_relay_builder::BiRelayFromRelayBuilder; -use crate::build::traits::components::chain_builder::ChainBuilder; -use crate::build::traits::components::relay_from_chains_builder::RelayFromChainsBuilder; -use crate::build::traits::target::chain::{ChainATarget, ChainBTarget}; -use crate::build::traits::target::relay::{RelayAToBTarget, RelayBToATarget}; -use crate::build::types::aliases::{ChainA, ChainB}; -use crate::chain::traits::types::ibc::HasIbcChainTypes; -use crate::components::default::build::DefaultBuildComponents; -use crate::relay::traits::chains::HasRelayChains; -use crate::runtime::traits::mutex::HasMutex; - -pub trait UseDefaultBuilderComponents: CanBuildBiRelay -where - ChainA: HasIbcChainTypes>, - ChainB: HasIbcChainTypes>, -{ -} - -impl - UseDefaultBuilderComponents for Build -where - Build: HasErrorType - + HasBiRelayType - + HasRelayCache - + HasRelayCache - + HasChainCache - + HasChainCache - + HasComponents>, - BiRelay: HasTwoChainTypes - + HasTwoWayRelay, - RelayAToB: Clone + HasRelayChains, - RelayBToA: Clone + HasRelayChains, - ChainA: Clone + HasIbcChainTypes + HasErrorType, - ChainB: Clone + HasIbcChainTypes + HasErrorType, - ChainA::ChainId: Ord + Clone, - ChainB::ChainId: Ord + Clone, - ChainA::ClientId: Ord + Clone, - ChainB::ClientId: Ord + Clone, - Build::Runtime: HasMutex, - BaseComponents: BiRelayFromRelayBuilder - + RelayFromChainsBuilder - + RelayFromChainsBuilder - + ChainBuilder - + ChainBuilder, -{ -} diff --git a/crates/relayer-components/src/components/default/closures/mod.rs b/crates/relayer-components/src/components/default/closures/mod.rs index 02966cd3d..6193dd91b 100644 --- a/crates/relayer-components/src/components/default/closures/mod.rs +++ b/crates/relayer-components/src/components/default/closures/mod.rs @@ -1,3 +1 @@ -pub mod build; pub mod relay; -pub mod transaction; diff --git a/crates/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs b/crates/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs index b9ebceb59..35d150e18 100644 --- a/crates/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs +++ b/crates/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs @@ -1,4 +1,4 @@ -use cgp_core::{Async, HasComponents, HasErrorType}; +use cgp_core::{HasComponents, HasErrorType}; use crate::chain::traits::components::ack_packet_message_builder::CanBuildAckPacketMessage; use crate::chain::traits::components::ack_packet_payload_builder::CanBuildAckPacketPayload; @@ -16,7 +16,7 @@ use crate::chain::traits::types::consensus_state::HasConsensusStateType; use crate::chain::traits::types::height::CanIncrementHeight; use crate::chain::traits::types::ibc::HasCounterpartyMessageHeight; use crate::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent; -use crate::components::default::relay::DefaultRelayComponents; +use crate::components::default::relay::DelegatesToDefaultRelayComponents; use crate::logger::traits::has_logger::HasLogger; use crate::logger::traits::level::HasBaseLogLevels; use crate::relay::traits::chains::HasRelayChains; @@ -36,11 +36,11 @@ where { } -impl UseDefaultAckPacketRelayer for Relay +impl UseDefaultAckPacketRelayer for Relay where Relay: HasRelayChains + HasLogger - + HasComponents>, + + HasComponents, SrcChain: HasErrorType + HasChainId + CanSendMessages @@ -66,6 +66,6 @@ where DstChain::Height: Clone, DstChain::Runtime: CanSleep, Relay::Logger: HasBaseLogLevels, - BaseRelayComponents: Async, + Components: DelegatesToDefaultRelayComponents, { } diff --git a/crates/relayer-components/src/components/default/closures/relay/auto_relayer.rs b/crates/relayer-components/src/components/default/closures/relay/auto_relayer.rs index 52446644f..c580eae37 100644 --- a/crates/relayer-components/src/components/default/closures/relay/auto_relayer.rs +++ b/crates/relayer-components/src/components/default/closures/relay/auto_relayer.rs @@ -1,8 +1,8 @@ -use cgp_core::{Async, CanRun, HasComponents}; +use cgp_core::{CanRun, HasComponents}; use crate::chain::traits::event_subscription::HasEventSubscription; use crate::components::default::closures::relay::event_relayer::UseDefaultEventRelayer; -use crate::components::default::relay::DefaultRelayComponents; +use crate::components::default::relay::DelegatesToDefaultRelayComponents; use crate::relay::traits::chains::HasRelayChains; use crate::runtime::traits::runtime::{HasRuntime, HasRuntimeType}; use crate::runtime::traits::stream::CanMapStream; @@ -13,13 +13,13 @@ pub trait CanUseDefaultAutoRelayer: UseDefaultAutoRelayer {} pub trait UseDefaultAutoRelayer: CanRun {} -impl UseDefaultAutoRelayer for Relay +impl UseDefaultAutoRelayer for Relay where Relay: Clone + HasRuntime + HasRelayChains + UseDefaultEventRelayer - + HasComponents>, + + HasComponents, Relay::SrcChain: HasEventSubscription, Relay::DstChain: HasEventSubscription, Relay::Runtime: CanRunConcurrentTasks, @@ -27,6 +27,6 @@ where HasSubscriptionType + CanRunConcurrentTasks + CanMapStream, ::Runtime: HasSubscriptionType + CanRunConcurrentTasks + CanMapStream, - BaseRelayComponents: Async, + Components: DelegatesToDefaultRelayComponents, { } diff --git a/crates/relayer-components/src/components/default/closures/relay/event_relayer.rs b/crates/relayer-components/src/components/default/closures/relay/event_relayer.rs index 8fb38197b..71f167a74 100644 --- a/crates/relayer-components/src/components/default/closures/relay/event_relayer.rs +++ b/crates/relayer-components/src/components/default/closures/relay/event_relayer.rs @@ -7,7 +7,7 @@ use crate::chain::traits::types::chain_id::HasChainId; use crate::chain::traits::types::ibc_events::send_packet::HasSendPacketEvent; use crate::components::default::closures::relay::ack_packet_relayer::UseDefaultAckPacketRelayer; use crate::components::default::closures::relay::packet_relayer::UseDefaultPacketRelayer; -use crate::components::default::relay::DefaultRelayComponents; +use crate::components::default::relay::DelegatesToDefaultRelayComponents; use crate::logger::traits::has_logger::{HasLogger, HasLoggerType}; use crate::logger::traits::level::HasBaseLogLevels; use crate::relay::traits::chains::HasRelayChains; @@ -24,7 +24,7 @@ pub trait UseDefaultEventRelayer: { } -impl UseDefaultEventRelayer for Relay +impl UseDefaultEventRelayer for Relay where Relay: HasRelayChains + HasPacketLock @@ -32,7 +32,7 @@ where + HasRelayPacketFields + UseDefaultAckPacketRelayer + UseDefaultPacketRelayer - + HasComponents>, + + HasComponents, Relay::SrcChain: HasChainId + HasLoggerType + CanLogChainPacket @@ -42,6 +42,6 @@ where + CanQueryCounterpartyChainId + CanBuildPacketFromWriteAck, Relay::Logger: HasBaseLogLevels, - BaseRelayComponents: PacketFilter, + Components: DelegatesToDefaultRelayComponents + PacketFilter, { } diff --git a/crates/relayer-components/src/components/default/closures/relay/packet_relayer.rs b/crates/relayer-components/src/components/default/closures/relay/packet_relayer.rs index 9d1274a77..ed59f267c 100644 --- a/crates/relayer-components/src/components/default/closures/relay/packet_relayer.rs +++ b/crates/relayer-components/src/components/default/closures/relay/packet_relayer.rs @@ -23,7 +23,7 @@ use crate::chain::traits::types::consensus_state::HasConsensusStateType; use crate::chain::traits::types::height::CanIncrementHeight; use crate::chain::traits::types::ibc::HasCounterpartyMessageHeight; use crate::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent; -use crate::components::default::relay::DefaultRelayComponents; +use crate::components::default::relay::DelegatesToDefaultRelayComponents; use crate::logger::traits::has_logger::{HasLogger, HasLoggerType}; use crate::logger::traits::level::HasBaseLogLevels; use crate::relay::traits::chains::HasRelayChains; @@ -37,12 +37,12 @@ pub trait CanUseDefaultPacketRelayer: UseDefaultPacketRelayer {} pub trait UseDefaultPacketRelayer: CanRelayPacket {} -impl UseDefaultPacketRelayer for Relay +impl UseDefaultPacketRelayer for Relay where Relay: HasRelayChains + HasLogger + HasPacketLock - + HasComponents>, + + HasComponents, SrcChain: HasErrorType + HasRuntime + HasChainId @@ -88,6 +88,6 @@ where SrcChain::Runtime: CanSleep, DstChain::Runtime: CanSleep, Relay::Logger: HasBaseLogLevels, - RelayComponents: PacketFilter, + Components: DelegatesToDefaultRelayComponents + PacketFilter, { } diff --git a/crates/relayer-components/src/components/default/closures/transaction.rs b/crates/relayer-components/src/components/default/closures/transaction.rs deleted file mode 100644 index d25e74645..000000000 --- a/crates/relayer-components/src/components/default/closures/transaction.rs +++ /dev/null @@ -1,66 +0,0 @@ -use cgp_core::{HasComponents, HasErrorType}; - -use crate::chain::traits::components::message_sender::CanSendMessages; -use crate::chain::traits::types::chain_id::HasChainId; -use crate::components::default::transaction::DefaultTxComponents; -use crate::logger::traits::has_logger::HasLogger; -use crate::logger::traits::level::HasBaseLogLevels; -use crate::runtime::traits::mutex::HasMutex; -use crate::runtime::traits::sleep::CanSleep; -use crate::runtime::traits::time::HasTime; -use crate::transaction::components::poll_tx_response::{CanRaiseNoTxResponseError, HasPollTimeout}; -use crate::transaction::traits::components::nonce_allocater::CanAllocateNonce; -use crate::transaction::traits::components::nonce_querier::{CanQueryNonce, NonceQuerier}; -use crate::transaction::traits::components::send_messages_with_signer_and_nonce::CanSendMessagesWithSignerAndNonce; -use crate::transaction::traits::components::tx_encoder::{CanEncodeTx, TxEncoder}; -use crate::transaction::traits::components::tx_fee_estimater::{CanEstimateTxFee, TxFeeEstimator}; -use crate::transaction::traits::components::tx_response_poller::CanPollTxResponse; -use crate::transaction::traits::components::tx_response_querier::{ - CanQueryTxResponse, TxResponseQuerier, -}; -use crate::transaction::traits::components::tx_submitter::{CanSubmitTx, TxSubmitter}; -use crate::transaction::traits::event::CanParseTxResponseAsEvents; -use crate::transaction::traits::fee::HasFeeForSimulation; -use crate::transaction::traits::logs::nonce::CanLogNonce; -use crate::transaction::traits::nonce::guard::HasNonceGuard; -use crate::transaction::traits::nonce::mutex::HasMutexForNonceAllocation; -use crate::transaction::traits::signer::HasDefaultSigner; -use crate::transaction::traits::types::HasTxTypes; - -pub trait UseDefaultTxComponents: - CanSendMessages - + CanSendMessagesWithSignerAndNonce - + CanAllocateNonce - + CanPollTxResponse - + CanQueryNonce - + CanEncodeTx - + CanEstimateTxFee - + CanSubmitTx - + CanQueryTxResponse -{ -} - -impl UseDefaultTxComponents for Chain -where - Chain: HasErrorType - + HasTxTypes - + HasDefaultSigner - + HasNonceGuard - + HasChainId - + HasFeeForSimulation - + HasMutexForNonceAllocation - + HasPollTimeout - + HasLogger - + CanLogNonce - + CanParseTxResponseAsEvents - + CanRaiseNoTxResponseError - + HasComponents>, - Chain::Runtime: HasMutex + HasTime + CanSleep, - Chain::Logger: HasBaseLogLevels, - BaseComponents: TxEncoder - + TxFeeEstimator - + NonceQuerier - + TxSubmitter - + TxResponseQuerier, -{ -} diff --git a/crates/relayer-components/src/components/default/mod.rs b/crates/relayer-components/src/components/default/mod.rs index b0a50173e..d29e84b26 100644 --- a/crates/relayer-components/src/components/default/mod.rs +++ b/crates/relayer-components/src/components/default/mod.rs @@ -1,6 +1,5 @@ pub mod birelay; pub mod build; -pub mod chain; pub mod closures; pub mod relay; pub mod transaction; diff --git a/crates/relayer-components/src/components/default/relay.rs b/crates/relayer-components/src/components/default/relay.rs index 7295c702e..f500f1927 100644 --- a/crates/relayer-components/src/components/default/relay.rs +++ b/crates/relayer-components/src/components/default/relay.rs @@ -1,11 +1,7 @@ -use core::marker::PhantomData; - use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; + use cgp_core::RunnerComponent; -use crate::logger::traits::has_logger::{LoggerFieldComponent, LoggerTypeComponent}; use crate::relay::components::auto_relayers::both_targets::RelayBothTargets; use crate::relay::components::auto_relayers::event::RelayEvents; use crate::relay::components::create_client::CreateClientWithChains; @@ -44,7 +40,7 @@ use crate::relay::traits::components::client_creator::ClientCreatorComponent; use crate::relay::traits::components::event_relayer::EventRelayerComponent; use crate::relay::traits::components::ibc_message_sender::{IbcMessageSenderComponent, MainSink}; use crate::relay::traits::components::packet_clearer::PacketClearerComponent; -use crate::relay::traits::components::packet_filter::PacketFilterComponent; + use crate::relay::traits::components::packet_relayer::PacketRelayerComponent; use crate::relay::traits::components::packet_relayers::ack_packet::AckPacketRelayerComponent; use crate::relay::traits::components::packet_relayers::receive_packet::ReceivePacketRelayerComponnent; @@ -55,42 +51,33 @@ use crate::relay::traits::connection::open_confirm::ConnectionOpenConfirmRelayer use crate::relay::traits::connection::open_handshake::ConnectionOpenHandshakeRelayerComponent; use crate::relay::traits::connection::open_init::ConnectionInitializerComponent; use crate::relay::traits::connection::open_try::ConnectionOpenTryRelayerComponent; -use crate::runtime::traits::runtime::RuntimeComponent; -use crate::runtime::traits::runtime::RuntimeTypeComponent; -pub struct DefaultRelayComponents(pub PhantomData); +pub struct DefaultRelayComponents; -delegate_components!( - DefaultRelayComponents; - IbcMessageSenderComponent: SendIbcMessagesWithUpdateClient, - UpdateClientMessageBuilderComponent: SkipUpdateClient>, - PacketRelayerComponent: LockPacketRelayer>>, - ReceivePacketRelayerComponnent: SkipReceivedPacketRelayer, - AckPacketRelayerComponent: BaseAckPacketRelayer, - TimeoutUnorderedPacketRelayerComponent: BaseTimeoutUnorderedPacketRelayer, - EventRelayerComponent: PacketEventRelayer, - RunnerComponent: RelayBothTargets, - AutoRelayerComponent: RelayEvents, - ClientCreatorComponent: CreateClientWithChains, - PacketClearerComponent: ClearReceivePackets, - ChannelInitializerComponent: InitializeChannel, - ChannelOpenTryRelayerComponent: RelayChannelOpenTry, - ChannelOpenAckRelayerComponent: RelayChannelOpenAck, - ChannelOpenConfirmRelayerComponent: RelayChannelOpenConfirm, - ChannelOpenHandshakeRelayerComponent: RelayChannelOpenHandshake, - ConnectionOpenAckRelayerComponent: RelayConnectionOpenAck, - ConnectionOpenConfirmRelayerComponent: RelayConnectionOpenConfirm, - ConnectionInitializerComponent: InitializeConnection, - ConnectionOpenTryRelayerComponent: RelayConnectionOpenTry, - ConnectionOpenHandshakeRelayerComponent: RelayConnectionOpenHandshake, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerTypeComponent, - LoggerFieldComponent, - PacketFilterComponent, - ]: - BaseComponents, -); +delegate_components! { + #[mark_component(IsDefaultRelayComponent)] + #[mark_delegate(DelegatesToDefaultRelayComponents)] + DefaultRelayComponents { + IbcMessageSenderComponent: SendIbcMessagesWithUpdateClient, + UpdateClientMessageBuilderComponent: SkipUpdateClient>, + PacketRelayerComponent: LockPacketRelayer>>, + ReceivePacketRelayerComponnent: SkipReceivedPacketRelayer, + AckPacketRelayerComponent: BaseAckPacketRelayer, + TimeoutUnorderedPacketRelayerComponent: BaseTimeoutUnorderedPacketRelayer, + EventRelayerComponent: PacketEventRelayer, + RunnerComponent: RelayBothTargets, + AutoRelayerComponent: RelayEvents, + ClientCreatorComponent: CreateClientWithChains, + PacketClearerComponent: ClearReceivePackets, + ChannelInitializerComponent: InitializeChannel, + ChannelOpenTryRelayerComponent: RelayChannelOpenTry, + ChannelOpenAckRelayerComponent: RelayChannelOpenAck, + ChannelOpenConfirmRelayerComponent: RelayChannelOpenConfirm, + ChannelOpenHandshakeRelayerComponent: RelayChannelOpenHandshake, + ConnectionOpenAckRelayerComponent: RelayConnectionOpenAck, + ConnectionOpenConfirmRelayerComponent: RelayConnectionOpenConfirm, + ConnectionInitializerComponent: InitializeConnection, + ConnectionOpenTryRelayerComponent: RelayConnectionOpenTry, + ConnectionOpenHandshakeRelayerComponent: RelayConnectionOpenHandshake, + } +} diff --git a/crates/relayer-components/src/components/default/transaction.rs b/crates/relayer-components/src/components/default/transaction.rs index aa0499d8f..48e411446 100644 --- a/crates/relayer-components/src/components/default/transaction.rs +++ b/crates/relayer-components/src/components/default/transaction.rs @@ -1,56 +1,92 @@ -use core::marker::PhantomData; - use cgp_core::prelude::*; -use cgp_core::ErrorRaiserComponent; -use cgp_core::ErrorTypeComponent; +use crate::chain::traits::components::message_sender::CanSendMessages; use crate::chain::traits::components::message_sender::MessageSenderComponent; -use crate::chain::traits::types::chain_id::{ChainIdGetterComponent, ChainIdTypeProviderComponent}; -use crate::chain::traits::types::event::EventTypeProviderComponent; -use crate::chain::traits::types::message::MessageTypeProviderComponent; -use crate::logger::traits::has_logger::{LoggerFieldComponent, LoggerTypeComponent}; -use crate::runtime::traits::runtime::RuntimeComponent; -use crate::runtime::traits::runtime::RuntimeTypeComponent; +use crate::chain::traits::types::chain_id::HasChainId; +use crate::logger::traits::has_logger::HasLogger; +use crate::logger::traits::level::HasBaseLogLevels; +use crate::runtime::traits::mutex::HasMutex; +use crate::runtime::traits::sleep::CanSleep; +use crate::runtime::traits::time::HasTime; use crate::transaction::components::allocate_nonce_and_send_messages::AllocateNonceAndSendMessages; use crate::transaction::components::allocate_nonce_with_mutex::AllocateNonceWithMutex; use crate::transaction::components::estimate_fees_and_send_tx::EstimateFeesAndSendTx; use crate::transaction::components::poll_tx_response::PollTxResponse; +use crate::transaction::components::poll_tx_response::{CanRaiseNoTxResponseError, HasPollTimeout}; use crate::transaction::components::send_messages_with_default_signer::SendMessagesWithDefaultSigner; +use crate::transaction::traits::components::nonce_allocater::CanAllocateNonce; use crate::transaction::traits::components::nonce_allocater::NonceAllocatorComponent; -use crate::transaction::traits::components::nonce_querier::NonceQuerierComponent; +use crate::transaction::traits::components::nonce_querier::{CanQueryNonce, NonceQuerier}; use crate::transaction::traits::components::send_messages_with_signer::MessagesWithSignerSenderComponent; +use crate::transaction::traits::components::send_messages_with_signer_and_nonce::CanSendMessagesWithSignerAndNonce; use crate::transaction::traits::components::send_messages_with_signer_and_nonce::MessagesWithSignerAndNonceSenderComponent; -use crate::transaction::traits::components::tx_encoder::TxEncoderComponent; -use crate::transaction::traits::components::tx_fee_estimater::TxFeeEstimatorComponent; +use crate::transaction::traits::components::tx_encoder::{CanEncodeTx, TxEncoder}; +use crate::transaction::traits::components::tx_fee_estimater::{CanEstimateTxFee, TxFeeEstimator}; +use crate::transaction::traits::components::tx_response_poller::CanPollTxResponse; use crate::transaction::traits::components::tx_response_poller::TxResponsePollerComponent; -use crate::transaction::traits::components::tx_response_querier::TxResponseQuerierComponent; -use crate::transaction::traits::components::tx_submitter::TxSubmitterComponent; +use crate::transaction::traits::components::tx_response_querier::{ + CanQueryTxResponse, TxResponseQuerier, +}; +use crate::transaction::traits::components::tx_submitter::{CanSubmitTx, TxSubmitter}; +use crate::transaction::traits::event::CanParseTxResponseAsEvents; +use crate::transaction::traits::fee::HasFeeForSimulation; +use crate::transaction::traits::logs::nonce::CanLogNonce; +use crate::transaction::traits::nonce::guard::HasNonceGuard; +use crate::transaction::traits::nonce::mutex::HasMutexForNonceAllocation; +use crate::transaction::traits::signer::HasDefaultSigner; +use crate::transaction::traits::types::HasTxTypes; + +pub struct DefaultTxComponents; + +delegate_components! { + #[mark_component(IsDefaultTxComponents)] + #[mark_delegate(DelegatesToDefaultTxComponents)] + DefaultTxComponents { + MessageSenderComponent: SendMessagesWithDefaultSigner, + MessagesWithSignerSenderComponent: AllocateNonceAndSendMessages, + MessagesWithSignerAndNonceSenderComponent: EstimateFeesAndSendTx, + NonceAllocatorComponent: AllocateNonceWithMutex, + TxResponsePollerComponent: PollTxResponse, + } +} + +pub trait CanUseDefaultTxComponents: UseDefaultTxComponents {} -pub struct DefaultTxComponents(pub PhantomData); +pub trait UseDefaultTxComponents: + CanSendMessages + + CanSendMessagesWithSignerAndNonce + + CanAllocateNonce + + CanPollTxResponse + + CanQueryNonce + + CanEncodeTx + + CanEstimateTxFee + + CanSubmitTx + + CanQueryTxResponse +{ +} -delegate_components!( - DefaultTxComponents; - MessageSenderComponent: SendMessagesWithDefaultSigner, - MessagesWithSignerSenderComponent: AllocateNonceAndSendMessages, - MessagesWithSignerAndNonceSenderComponent: EstimateFeesAndSendTx, - NonceAllocatorComponent: AllocateNonceWithMutex, - TxResponsePollerComponent: PollTxResponse, - [ - ErrorTypeComponent, - ErrorRaiserComponent, - RuntimeTypeComponent, - RuntimeComponent, - LoggerTypeComponent, - LoggerFieldComponent, - ChainIdTypeProviderComponent, - ChainIdGetterComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - NonceQuerierComponent, - TxEncoderComponent, - TxFeeEstimatorComponent, - TxSubmitterComponent, - TxResponseQuerierComponent, - ]: - BaseComponents, -); +impl UseDefaultTxComponents for Chain +where + Chain: HasErrorType + + HasTxTypes + + HasDefaultSigner + + HasNonceGuard + + HasChainId + + HasFeeForSimulation + + HasMutexForNonceAllocation + + HasPollTimeout + + HasLogger + + CanLogNonce + + CanParseTxResponseAsEvents + + CanRaiseNoTxResponseError + + HasComponents, + Chain::Runtime: HasMutex + HasTime + CanSleep, + Chain::Logger: HasBaseLogLevels, + Components: DelegatesToDefaultTxComponents + + TxEncoder + + TxFeeEstimator + + NonceQuerier + + TxSubmitter + + TxResponseQuerier, +{ +} diff --git a/crates/relayer-cosmos-mock/src/components/chain.rs b/crates/relayer-cosmos-mock/src/components/chain.rs index e6d753bb4..2852ee259 100644 --- a/crates/relayer-cosmos-mock/src/components/chain.rs +++ b/crates/relayer-cosmos-mock/src/components/chain.rs @@ -8,13 +8,14 @@ use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; pub struct MockCosmosChainComponents; -delegate_components!( - MockCosmosChainComponents; - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, - RuntimeTypeComponent: - ProvideTokioRuntimeType, -); +delegate_components! { + MockCosmosChainComponents { + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + } +} diff --git a/crates/relayer-cosmos-mock/src/components/relay.rs b/crates/relayer-cosmos-mock/src/components/relay.rs index 510415fbb..0d03c9949 100644 --- a/crates/relayer-cosmos-mock/src/components/relay.rs +++ b/crates/relayer-cosmos-mock/src/components/relay.rs @@ -1,50 +1,36 @@ -use ibc_relayer_components::logger::traits::has_logger::{LoggerTypeComponent, LoggerFieldComponent}; -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::components::default::relay::{ + DefaultRelayComponents, IsDefaultRelayComponent, +}; +use ibc_relayer_components::logger::traits::has_logger::{ + LoggerFieldComponent, LoggerTypeComponent, +}; + use ibc_relayer_components::relay::components::packet_filters::allow_all::AllowAll; -use ibc_relayer_components::relay::components::packet_relayers::general::full_relay::FullCycleRelayer; -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::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::components::ibc_message_sender::{IbcMessageSenderComponent, MainSink}; + use ibc_relayer_components::relay::traits::components::packet_filter::PacketFilterComponent; -use ibc_relayer_components::relay::traits::components::packet_relayer::PacketRelayerComponent; -use ibc_relayer_components::relay::traits::components::packet_relayers::ack_packet::AckPacketRelayerComponent; -use ibc_relayer_components::relay::traits::components::packet_relayers::receive_packet::ReceivePacketRelayerComponnent; -use ibc_relayer_components::relay::traits::components::packet_relayers::timeout_unordered_packet::TimeoutUnorderedPacketRelayerComponent; -use ibc_relayer_components::relay::traits::components::update_client_message_builder::UpdateClientMessageBuilderComponent; -use cgp_core::delegate_components; + +use cgp_core::{delegate_all, delegate_components, DelegateComponent}; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; -use crate::impls::relay::MockCosmosBuildUpdateClientMessage; - pub struct MockCosmosRelayComponents; -delegate_components!( - MockCosmosRelayComponents; - PacketRelayerComponent: - FullCycleRelayer, - UpdateClientMessageBuilderComponent: - SkipUpdateClient>, - IbcMessageSenderComponent: - SendIbcMessagesWithUpdateClient, - ReceivePacketRelayerComponnent: - SkipReceivedPacketRelayer, - AckPacketRelayerComponent: - BaseAckPacketRelayer, - TimeoutUnorderedPacketRelayerComponent: - BaseTimeoutUnorderedPacketRelayer, - PacketFilterComponent: AllowAll, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, +delegate_all!( + IsDefaultRelayComponent, + DefaultRelayComponents, + MockCosmosRelayComponents, ); + +delegate_components! { + MockCosmosRelayComponents { + PacketFilterComponent: AllowAll, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} diff --git a/crates/relayer-cosmos-mock/src/impls/chain.rs b/crates/relayer-cosmos-mock/src/impls/chain.rs index abed4a785..82339f2b2 100644 --- a/crates/relayer-cosmos-mock/src/impls/chain.rs +++ b/crates/relayer-cosmos-mock/src/impls/chain.rs @@ -69,7 +69,6 @@ use ibc_relayer_components::chain::traits::types::packets::timeout::HasTimeoutUn use ibc_relayer_components::chain::traits::types::status::ChainStatusTypeProvider; use ibc_relayer_components::chain::traits::types::timestamp::TimestampTypeProvider; use ibc_relayer_components::chain::traits::types::update_client::HasUpdateClientPayload; -use ibc_relayer_components::components::default::chain::DefaultChainComponents; use ibc_relayer_components::runtime::traits::runtime::ProvideRuntime; use ibc_relayer_runtime::types::error::TokioRuntimeError; use ibc_relayer_runtime::types::log::value::LogValue; @@ -83,7 +82,7 @@ use crate::types::status::ChainStatus; use crate::util::dummy::dummy_signer; impl HasComponents for MockCosmosContext { - type Components = DefaultChainComponents; + type Components = MockCosmosChainComponents; } impl ProvideErrorType> diff --git a/crates/relayer-cosmos-mock/src/impls/relay.rs b/crates/relayer-cosmos-mock/src/impls/relay.rs index 1e3ad04b2..e1e663cec 100644 --- a/crates/relayer-cosmos-mock/src/impls/relay.rs +++ b/crates/relayer-cosmos-mock/src/impls/relay.rs @@ -2,7 +2,7 @@ use alloc::boxed::Box; use alloc::vec::Vec; use async_trait::async_trait; -use cgp_core::{DelegateComponent, ErrorRaiser, HasComponents, ProvideErrorType}; +use cgp_core::{ErrorRaiser, HasComponents, ProvideErrorType}; use ibc::clients::ics07_tendermint::client_type; use ibc::clients::ics07_tendermint::header::Header; use ibc::core::ics02_client::msgs::update_client::MsgUpdateClient; @@ -12,7 +12,7 @@ use ibc::core::{Msg, ValidationContext}; use ibc::proto::Any; use ibc::Height; use ibc_relayer_components::components::default::closures::relay::packet_relayer::CanUseDefaultPacketRelayer; -use ibc_relayer_components::components::default::relay::DefaultRelayComponents; + use ibc_relayer_components::relay::traits::chains::HasRelayChains; use ibc_relayer_components::relay::traits::components::update_client_message_builder::UpdateClientMessageBuilder; use ibc_relayer_components::relay::traits::packet_lock::HasPacketLock; @@ -28,20 +28,12 @@ use crate::traits::endpoint::BasecoinEndpoint; use crate::types::error::Error; use crate::util::dummy::dummy_signer; -impl DelegateComponent for MockCosmosRelay -where - SrcChain: BasecoinEndpoint, - DstChain: BasecoinEndpoint, -{ - type Delegate = DefaultRelayComponents; -} - impl HasComponents for MockCosmosRelay where SrcChain: BasecoinEndpoint, DstChain: BasecoinEndpoint, { - type Components = DefaultRelayComponents; + type Components = MockCosmosRelayComponents; } impl CanUseDefaultPacketRelayer for MockCosmosRelay diff --git a/crates/relayer-cosmos/src/impls/birelay/components.rs b/crates/relayer-cosmos/src/impls/birelay/components.rs index c470eb5a6..ce4b39c74 100644 --- a/crates/relayer-cosmos/src/impls/birelay/components.rs +++ b/crates/relayer-cosmos/src/impls/birelay/components.rs @@ -1,11 +1,13 @@ +use cgp_core::delegate_all; use cgp_core::prelude::*; use cgp_core::ErrorRaiserComponent; use cgp_core::ErrorTypeComponent; +use ibc_relayer_components::components::default::birelay::DefaultBiRelayComponents; +use ibc_relayer_components::components::default::birelay::IsDefaultBiRelayComponent; use ibc_relayer_components::logger::traits::has_logger::{ LoggerFieldComponent, LoggerTypeComponent, }; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; -use ibc_relayer_components_extra::components::extra::birelay::ExtraBiRelayComponents; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -19,21 +21,28 @@ where ChainA: Async, ChainB: Async, { - type Components = ExtraBiRelayComponents; + type Components = CosmosBiRelayComponents; } -delegate_components!( - CosmosBiRelayComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleCosmosError, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, +delegate_all!( + IsDefaultBiRelayComponent, + DefaultBiRelayComponents, + CosmosBiRelayComponents, ); + +delegate_components! { + CosmosBiRelayComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleCosmosError, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} diff --git a/crates/relayer-cosmos/src/impls/build/chain.rs b/crates/relayer-cosmos/src/impls/build/chain.rs index 69b80ae1c..f1bde222d 100644 --- a/crates/relayer-cosmos/src/impls/build/chain.rs +++ b/crates/relayer-cosmos/src/impls/build/chain.rs @@ -6,11 +6,11 @@ use ibc_relayer_types::core::ics24_host::identifier::ChainId; use crate::contexts::builder::CosmosBuilder; use crate::contexts::chain::CosmosChain; -use crate::impls::build::components::CosmosBuildComponents; +use crate::impls::build::components::CosmosBaseBuildComponents; use crate::types::error::Error; #[async_trait] -impl ChainBuilder for CosmosBuildComponents { +impl ChainBuilder for CosmosBaseBuildComponents { async fn build_chain( build: &CosmosBuilder, _target: ChainATarget, @@ -23,7 +23,7 @@ impl ChainBuilder for CosmosBuildComponents { } #[async_trait] -impl ChainBuilder for CosmosBuildComponents { +impl ChainBuilder for CosmosBaseBuildComponents { async fn build_chain( build: &CosmosBuilder, _target: ChainBTarget, diff --git a/crates/relayer-cosmos/src/impls/build/components.rs b/crates/relayer-cosmos/src/impls/build/components.rs index 0ebf179e0..5502891f3 100644 --- a/crates/relayer-cosmos/src/impls/build/components.rs +++ b/crates/relayer-cosmos/src/impls/build/components.rs @@ -1,3 +1,4 @@ +use cgp_core::delegate_all; use cgp_core::prelude::*; use cgp_core::ErrorRaiserComponent; use cgp_core::ErrorTypeComponent; @@ -5,7 +6,9 @@ use ibc_relayer_components::logger::traits::has_logger::{ LoggerFieldComponent, LoggerTypeComponent, }; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; -use ibc_relayer_components_extra::components::extra::build::ExtraBuildComponents; +use ibc_relayer_components_extra::components::extra::build::{ + CanUseExtraBuildComponents, ExtraBuildComponents, IsExtraBuildComponent, +}; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -14,22 +17,37 @@ use crate::impls::error::HandleCosmosError; pub struct CosmosBuildComponents; +pub struct CosmosBaseBuildComponents; + impl HasComponents for CosmosBuilder { - type Components = ExtraBuildComponents; + type Components = CosmosBuildComponents; +} + +impl HasComponents for CosmosBuildComponents { + type Components = CosmosBaseBuildComponents; } -delegate_components!( - CosmosBuildComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleCosmosError, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, +delegate_all!( + IsExtraBuildComponent, + ExtraBuildComponents, + CosmosBuildComponents, ); + +impl CanUseExtraBuildComponents for CosmosBuilder {} + +delegate_components! { + CosmosBuildComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleCosmosError, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} diff --git a/crates/relayer-cosmos/src/impls/chain/component.rs b/crates/relayer-cosmos/src/impls/chain/component.rs index a43324f5a..aa4aad402 100644 --- a/crates/relayer-cosmos/src/impls/chain/component.rs +++ b/crates/relayer-cosmos/src/impls/chain/component.rs @@ -1,3 +1,4 @@ +use cgp_core::delegate_all; use cgp_core::prelude::*; use cgp_core::ErrorRaiserComponent; use cgp_core::ErrorTypeComponent; @@ -70,6 +71,7 @@ use ibc_relayer_components::logger::traits::has_logger::{ }; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use ibc_relayer_components_extra::components::extra::chain::ExtraChainComponents; +use ibc_relayer_components_extra::components::extra::chain::IsExtraChainComponent; use ibc_relayer_components_extra::components::extra::closures::chain::all::CanUseExtraChainComponents; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -83,13 +85,25 @@ use crate::impls::error::HandleCosmosError; pub struct CosmosChainComponents; +pub struct CosmosBaseChainComponents; + +impl HasComponents for CosmosChainComponents { + type Components = CosmosBaseChainComponents; +} + impl HasComponents for CosmosChain where Chain: Async, { - type Components = ExtraChainComponents; + type Components = CosmosChainComponents; } +delegate_all!( + IsExtraChainComponent, + ExtraChainComponents, + CosmosChainComponents, +); + impl CanUseExtraChainComponents> for CosmosChain where @@ -98,85 +112,91 @@ where { } -delegate_components!( - CosmosChainComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleCosmosError, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - HeightTypeProviderComponent, - TimestampTypeProviderComponent, - ChainIdTypeProviderComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - IbcChainTypesProviderComponent, - IbcPacketTypesProviderComponent, - ChainStatusTypeProviderComponent, - ]: - ProvideCosmosChainTypes, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, - MessageSenderComponent: - SendMessagesToTxContext, - ChainStatusQuerierComponent: - QueryChainStatusWithChainHandle, - PacketFieldsReaderComponent: - CosmosPacketFieldReader, - ClientStateQuerierComponent: - DelegateCosmosClientStateQuerier, - ConsensusStateQuerierComponent: - DelegateCosmosConsensusStateQuerier, - ConsensusStateHeightQuerierComponent: - QueryConsensusStateHeightFromChainHandle, - WriteAckQuerierComponent: - QueryWriteAckEventFromChainHandle, - CreateClientMessageBuilderComponent: - DelegateCosmosCreateClientMessageBuilder, - CreateClientPayloadBuilderComponent: - BuildCreateClientPayloadWithChainHandle, - UpdateClientPayloadBuilderComponent: - BuildUpdateClientPayloadWithChainHandle, - UpdateClientMessageBuilderComponent: - BuildCosmosUpdateClientMessage, - CounterpartyChainIdQuerierComponent: - QueryChainIdWithChainHandle, - ConnectionHandshakePayloadBuilderComponent: - BuildCosmosConnectionHandshakePayload, - ChannelHandshakePayloadBuilderComponent: - BuildCosmosChannelHandshakePayload, - ConnectionHandshakeMessageBuilderComponent: - DelegateCosmosConnectionHandshakeBuilder, - ChannelHandshakeMessageBuilderComponent: - BuildCosmosChannelHandshakeMessage, - PacketCommitmentsQuerierComponent: - QueryCosmosPacketCommitments, - ReceivedPacketQuerierComponent: - QueryReceivedPacketWithChainHandle, - ReceivePacketPayloadBuilderComponent: - BuildCosmosReceivePacketPayload, - ReceivePacketMessageBuilderComponent: - BuildCosmosReceivePacketMessage, - AckPacketPayloadBuilderComponent: - BuildCosmosAckPacketPayload, - AckPacketMessageBuilderComponent: - BuildCosmosAckPacketMessage, - TimeoutUnorderedPacketPayloadBuilderComponent: - BuildCosmosTimeoutPacketPayload, - TimeoutUnorderedPacketMessageBuilderComponent: - BuildCosmosTimeoutPacketMessage, - UnreceivedPacketSequencesQuerierComponent: - QueryUnreceivedCosmosPacketSequences, - SendPacketQuerierComponent: - QueryCosmosSendPacket, - SendPacketsQuerierComponent: - QuerySendPacketsConcurrently, - PacketFromWriteAckBuilderComponent: - BuildCosmosPacketFromWriteAck, -); +delegate_components! { + CosmosChainComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleCosmosError, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + HeightTypeProviderComponent, + TimestampTypeProviderComponent, + ChainIdTypeProviderComponent, + MessageTypeProviderComponent, + EventTypeProviderComponent, + IbcChainTypesProviderComponent, + IbcPacketTypesProviderComponent, + ChainStatusTypeProviderComponent, + ]: + ProvideCosmosChainTypes, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + MessageSenderComponent: + SendMessagesToTxContext, + PacketFieldsReaderComponent: + CosmosPacketFieldReader, + ClientStateQuerierComponent: + DelegateCosmosClientStateQuerier, + ConsensusStateHeightQuerierComponent: + QueryConsensusStateHeightFromChainHandle, + WriteAckQuerierComponent: + QueryWriteAckEventFromChainHandle, + CreateClientMessageBuilderComponent: + DelegateCosmosCreateClientMessageBuilder, + CreateClientPayloadBuilderComponent: + BuildCreateClientPayloadWithChainHandle, + UpdateClientPayloadBuilderComponent: + BuildUpdateClientPayloadWithChainHandle, + UpdateClientMessageBuilderComponent: + BuildCosmosUpdateClientMessage, + CounterpartyChainIdQuerierComponent: + QueryChainIdWithChainHandle, + ConnectionHandshakePayloadBuilderComponent: + BuildCosmosConnectionHandshakePayload, + ChannelHandshakePayloadBuilderComponent: + BuildCosmosChannelHandshakePayload, + ConnectionHandshakeMessageBuilderComponent: + DelegateCosmosConnectionHandshakeBuilder, + ChannelHandshakeMessageBuilderComponent: + BuildCosmosChannelHandshakeMessage, + PacketCommitmentsQuerierComponent: + QueryCosmosPacketCommitments, + ReceivedPacketQuerierComponent: + QueryReceivedPacketWithChainHandle, + ReceivePacketPayloadBuilderComponent: + BuildCosmosReceivePacketPayload, + ReceivePacketMessageBuilderComponent: + BuildCosmosReceivePacketMessage, + AckPacketPayloadBuilderComponent: + BuildCosmosAckPacketPayload, + AckPacketMessageBuilderComponent: + BuildCosmosAckPacketMessage, + TimeoutUnorderedPacketPayloadBuilderComponent: + BuildCosmosTimeoutPacketPayload, + TimeoutUnorderedPacketMessageBuilderComponent: + BuildCosmosTimeoutPacketMessage, + UnreceivedPacketSequencesQuerierComponent: + QueryUnreceivedCosmosPacketSequences, + SendPacketQuerierComponent: + QueryCosmosSendPacket, + SendPacketsQuerierComponent: + QuerySendPacketsConcurrently, + PacketFromWriteAckBuilderComponent: + BuildCosmosPacketFromWriteAck, + } +} + +delegate_components! { + CosmosBaseChainComponents { + ChainStatusQuerierComponent: + QueryChainStatusWithChainHandle, + ConsensusStateQuerierComponent: + DelegateCosmosConsensusStateQuerier, + } +} diff --git a/crates/relayer-cosmos/src/impls/relay/component.rs b/crates/relayer-cosmos/src/impls/relay/component.rs index 4cacda13f..f2f211a51 100644 --- a/crates/relayer-cosmos/src/impls/relay/component.rs +++ b/crates/relayer-cosmos/src/impls/relay/component.rs @@ -1,3 +1,4 @@ +use cgp_core::delegate_all; use cgp_core::prelude::*; use cgp_core::ErrorRaiserComponent; use cgp_core::ErrorTypeComponent; @@ -8,6 +9,7 @@ use ibc_relayer_components::logger::traits::has_logger::{ use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use ibc_relayer_components_extra::components::extra::closures::relay::auto_relayer::CanUseExtraAutoRelayer; use ibc_relayer_components_extra::components::extra::relay::ExtraRelayComponents; +use ibc_relayer_components_extra::components::extra::relay::IsExtraRelayComponent; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -16,20 +18,27 @@ use crate::impls::error::HandleCosmosError; pub struct CosmosRelayComponents; -delegate_components!( - CosmosRelayComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleCosmosError, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, +delegate_components! { + CosmosRelayComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleCosmosError, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} + +delegate_all!( + IsExtraRelayComponent, + ExtraRelayComponents, + CosmosRelayComponents, ); impl HasComponents for CosmosRelay @@ -37,7 +46,7 @@ where SrcChain: Async, DstChain: Async, { - type Components = ExtraRelayComponents; + type Components = CosmosRelayComponents; } impl CanUseExtraAutoRelayer for CosmosRelay diff --git a/crates/relayer-cosmos/src/impls/transaction/component.rs b/crates/relayer-cosmos/src/impls/transaction/component.rs index d108783ea..9466be06a 100644 --- a/crates/relayer-cosmos/src/impls/transaction/component.rs +++ b/crates/relayer-cosmos/src/impls/transaction/component.rs @@ -1,13 +1,18 @@ -use cgp_core::{delegate_components, ErrorRaiserComponent, ErrorTypeComponent, HasComponents}; +use cgp_core::{ + delegate_all, delegate_components, DelegateComponent, ErrorRaiserComponent, ErrorTypeComponent, + HasComponents, +}; use cosmos_client_components::components::types::chain::ProvideCosmosChainTypes; use ibc_relayer_components::chain::traits::types::chain_id::ChainIdTypeProviderComponent; use ibc_relayer_components::chain::traits::types::event::EventTypeProviderComponent; use ibc_relayer_components::chain::traits::types::message::MessageTypeProviderComponent; +use ibc_relayer_components::components::default::transaction::{ + CanUseDefaultTxComponents, DefaultTxComponents, IsDefaultTxComponents, +}; use ibc_relayer_components::logger::traits::has_logger::{ LoggerFieldComponent, LoggerTypeComponent, }; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; -use ibc_relayer_components_extra::components::extra::transaction::ExtraTxComponents; use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -17,27 +22,36 @@ use crate::impls::error::HandleCosmosError; pub struct CosmosTxComponents; impl HasComponents for CosmosTxContext { - type Components = ExtraTxComponents; + type Components = CosmosTxComponents; } -delegate_components!( - CosmosTxComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleCosmosError, - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - ChainIdTypeProviderComponent, - MessageTypeProviderComponent, - EventTypeProviderComponent, - ]: - ProvideCosmosChainTypes, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, +delegate_all!( + IsDefaultTxComponents, + DefaultTxComponents, + CosmosTxComponents, ); + +impl CanUseDefaultTxComponents for CosmosTxContext {} + +delegate_components! { + CosmosTxComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleCosmosError, + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + ChainIdTypeProviderComponent, + MessageTypeProviderComponent, + EventTypeProviderComponent, + ]: + ProvideCosmosChainTypes, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} diff --git a/crates/relayer-mock/src/relayer_mock/base/impls/chain.rs b/crates/relayer-mock/src/relayer_mock/base/impls/chain.rs index 5ee6fa9d9..b748ec89f 100644 --- a/crates/relayer-mock/src/relayer_mock/base/impls/chain.rs +++ b/crates/relayer-mock/src/relayer_mock/base/impls/chain.rs @@ -72,14 +72,15 @@ impl HasComponents for MockChainContext { type Components = MockChainComponents; } -delegate_components!( - MockChainComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleMockError, -); +delegate_components! { + MockChainComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleMockError, + } +} impl ProvideRuntimeType for MockChainComponents { type Runtime = MockRuntimeContext; 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 417d8001c..47d571bb5 100644 --- a/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs +++ b/crates/relayer-mock/src/relayer_mock/base/impls/relay.rs @@ -27,14 +27,15 @@ impl HasComponents for MockRelayContext { type Components = MockRelayComponents; } -delegate_components!( - MockRelayComponents; - [ - ErrorTypeComponent, - ErrorRaiserComponent, - ]: - HandleMockError, -); +delegate_components! { + MockRelayComponents { + [ + ErrorTypeComponent, + ErrorRaiserComponent, + ]: + HandleMockError, + } +} impl ProvideRuntimeType for MockRelayComponents { type Runtime = MockRuntimeContext; diff --git a/crates/relayer-mock/src/relayer_mock/components/chain.rs b/crates/relayer-mock/src/relayer_mock/components/chain.rs index 3d39f2f8e..fd64cdc3b 100644 --- a/crates/relayer-mock/src/relayer_mock/components/chain.rs +++ b/crates/relayer-mock/src/relayer_mock/components/chain.rs @@ -6,11 +6,12 @@ use ibc_relayer_runtime::impls::logger::components::ProvideTracingLogger; pub struct MockChainComponents; -delegate_components!( - MockChainComponents; - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, -); +delegate_components! { + MockChainComponents { + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + } +} diff --git a/crates/relayer-mock/src/relayer_mock/components/relay.rs b/crates/relayer-mock/src/relayer_mock/components/relay.rs index e1de79e72..a4f7b8b75 100644 --- a/crates/relayer-mock/src/relayer_mock/components/relay.rs +++ b/crates/relayer-mock/src/relayer_mock/components/relay.rs @@ -21,22 +21,23 @@ use crate::relayer_mock::base::impls::relay::MockBuildUpdateClientMessage; pub struct MockRelayComponents; -delegate_components!( - MockRelayComponents; - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, - IbcMessageSenderComponent: - SendIbcMessagesWithUpdateClient, - PacketRelayerComponent: FullCycleRelayer, - ReceivePacketRelayerComponnent: - SkipReceivedPacketRelayer, - AckPacketRelayerComponent: - BaseAckPacketRelayer, - TimeoutUnorderedPacketRelayerComponent: - BaseTimeoutUnorderedPacketRelayer, - UpdateClientMessageBuilderComponent: - SkipUpdateClient>, -); +delegate_components! { + MockRelayComponents { + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + IbcMessageSenderComponent: + SendIbcMessagesWithUpdateClient, + PacketRelayerComponent: FullCycleRelayer, + ReceivePacketRelayerComponnent: + SkipReceivedPacketRelayer, + AckPacketRelayerComponent: + BaseAckPacketRelayer, + TimeoutUnorderedPacketRelayerComponent: + BaseTimeoutUnorderedPacketRelayer, + UpdateClientMessageBuilderComponent: + SkipUpdateClient>, + } +} diff --git a/crates/relayer-runtime/src/impls/runtime/components.rs b/crates/relayer-runtime/src/impls/runtime/components.rs index 4b72b1ca2..26a251230 100644 --- a/crates/relayer-runtime/src/impls/runtime/components.rs +++ b/crates/relayer-runtime/src/impls/runtime/components.rs @@ -22,13 +22,14 @@ impl HasComponents for TokioRuntimeContext { type Components = TokioRuntimeComponents; } -delegate_components!( - TokioRuntimeComponents; - FilePathTypeComponent: ProvideStdPathType, - ChildProcessTypeComponent: ProvideTokioChildProcessType, - ChildProcessStarterComponent: StartTokioChildProcess, - FileAsStringReaderComponent: TokioReadFileAsString, - CommandExecutorComponent: TokioExecCommand, - StringToFileWriterComponent: TokioWriteStringToFile, - TcpPortReserverComponent: TokioReserveTcpPort, -); +delegate_components! { + TokioRuntimeComponents { + FilePathTypeComponent: ProvideStdPathType, + ChildProcessTypeComponent: ProvideTokioChildProcessType, + ChildProcessStarterComponent: StartTokioChildProcess, + FileAsStringReaderComponent: TokioReadFileAsString, + CommandExecutorComponent: TokioExecCommand, + StringToFileWriterComponent: TokioWriteStringToFile, + TcpPortReserverComponent: TokioReserveTcpPort, + } +} diff --git a/crates/relayer-solomachine/src/impls/chain/component.rs b/crates/relayer-solomachine/src/impls/chain/component.rs index 2e6a3f553..d20a80c27 100644 --- a/crates/relayer-solomachine/src/impls/chain/component.rs +++ b/crates/relayer-solomachine/src/impls/chain/component.rs @@ -23,7 +23,6 @@ use ibc_relayer_components::chain::traits::types::ibc::IbcChainTypesProviderComp use ibc_relayer_components::chain::traits::types::message::MessageTypeProviderComponent; use ibc_relayer_components::chain::traits::types::packet::IbcPacketTypesProviderComponent; use ibc_relayer_components::chain::traits::types::timestamp::TimestampTypeProviderComponent; -use ibc_relayer_components::components::default::chain::DefaultChainComponents; use ibc_relayer_components::logger::traits::has_logger::{ LoggerFieldComponent, LoggerTypeComponent, }; @@ -52,57 +51,58 @@ impl HasComponents for SolomachineChain where Chain: Async, { - type Components = DefaultChainComponents; + type Components = SolomachineChainComponents; } -delegate_components!( - SolomachineChainComponents; - RuntimeTypeComponent: - ProvideTokioRuntimeType, - [ - HeightTypeProviderComponent, - TimestampTypeProviderComponent, - ChainIdTypeProviderComponent, - IbcChainTypesProviderComponent, - IbcPacketTypesProviderComponent, - ]: - ProvideCosmosChainTypes, - [ - LoggerTypeComponent, - LoggerFieldComponent, - ]: - ProvideTracingLogger, - [ - MessageTypeProviderComponent, - EventTypeProviderComponent, - ]: - ProvideSolomachineChainTypes, - PacketFieldsReaderComponent: - CosmosPacketFieldReader, - MessageSenderComponent: - ProcessSolomachineMessages, - ClientStateQuerierComponent: - QueryCosmosClientStateFromSolomachine, - ConsensusStateQuerierComponent: - QueryCosmosConsensusStateFromSolomachine, - ChannelHandshakePayloadBuilderComponent: - BuildSolomachineChannelHandshakePayloads, - ChannelHandshakeMessageBuilderComponent: - BuildCosmosToSolomachineChannelHandshakeMessage, - ConnectionHandshakePayloadBuilderComponent: - BuildSolomachineConnectionHandshakePayloads, - ConnectionHandshakeMessageBuilderComponent: - BuildCosmosToSolomachineConnectionHandshakeMessage, - CreateClientPayloadBuilderComponent: - BuildSolomachineCreateClientPayload, - CreateClientMessageBuilderComponent: - BuildCreateCosmosClientMessage, - ReceivePacketPayloadBuilderComponent: - BuildSolomachineReceivePacketPayload, - TimeoutUnorderedPacketMessageBuilderComponent: - BuildSolomachineTimeoutPacketPayload, - UpdateClientPayloadBuilderComponent: - BuildSolomachineUpdateClientPayload, - UpdateClientMessageBuilderComponent: - BuildCosmosUpdateClientMessage, -); +delegate_components! { + SolomachineChainComponents { + RuntimeTypeComponent: + ProvideTokioRuntimeType, + [ + HeightTypeProviderComponent, + TimestampTypeProviderComponent, + ChainIdTypeProviderComponent, + IbcChainTypesProviderComponent, + IbcPacketTypesProviderComponent, + ]: + ProvideCosmosChainTypes, + [ + LoggerTypeComponent, + LoggerFieldComponent, + ]: + ProvideTracingLogger, + [ + MessageTypeProviderComponent, + EventTypeProviderComponent, + ]: + ProvideSolomachineChainTypes, + PacketFieldsReaderComponent: + CosmosPacketFieldReader, + MessageSenderComponent: + ProcessSolomachineMessages, + ClientStateQuerierComponent: + QueryCosmosClientStateFromSolomachine, + ConsensusStateQuerierComponent: + QueryCosmosConsensusStateFromSolomachine, + ChannelHandshakePayloadBuilderComponent: + BuildSolomachineChannelHandshakePayloads, + ChannelHandshakeMessageBuilderComponent: + BuildCosmosToSolomachineChannelHandshakeMessage, + ConnectionHandshakePayloadBuilderComponent: + BuildSolomachineConnectionHandshakePayloads, + ConnectionHandshakeMessageBuilderComponent: + BuildCosmosToSolomachineConnectionHandshakeMessage, + CreateClientPayloadBuilderComponent: + BuildSolomachineCreateClientPayload, + CreateClientMessageBuilderComponent: + BuildCreateCosmosClientMessage, + ReceivePacketPayloadBuilderComponent: + BuildSolomachineReceivePacketPayload, + TimeoutUnorderedPacketMessageBuilderComponent: + BuildSolomachineTimeoutPacketPayload, + UpdateClientPayloadBuilderComponent: + BuildSolomachineUpdateClientPayload, + UpdateClientMessageBuilderComponent: + BuildCosmosUpdateClientMessage, + } +} diff --git a/crates/relayer-solomachine/src/impls/relay/component.rs b/crates/relayer-solomachine/src/impls/relay/component.rs index 81c70cdb7..1ae69646b 100644 --- a/crates/relayer-solomachine/src/impls/relay/component.rs +++ b/crates/relayer-solomachine/src/impls/relay/component.rs @@ -1,5 +1,8 @@ +use cgp_core::delegate_all; use cgp_core::prelude::*; -use ibc_relayer_components::components::default::relay::DefaultRelayComponents; +use ibc_relayer_components::components::default::relay::{ + DefaultRelayComponents, IsDefaultRelayComponent, +}; use ibc_relayer_components::runtime::traits::runtime::RuntimeTypeComponent; use ibc_relayer_runtime::impls::types::runtime::ProvideTokioRuntimeType; @@ -7,15 +10,22 @@ use crate::context::relay::SolomachineRelay; pub struct SolomachineRelayComponents; +delegate_all!( + IsDefaultRelayComponent, + DefaultRelayComponents, + SolomachineRelayComponents, +); + impl HasComponents for SolomachineRelay where Chain: Async, { - type Components = DefaultRelayComponents; + type Components = SolomachineRelayComponents; } -delegate_components!( - SolomachineRelayComponents; - RuntimeTypeComponent: - ProvideTokioRuntimeType, -); +delegate_components! { + SolomachineRelayComponents { + RuntimeTypeComponent: + ProvideTokioRuntimeType, + } +} diff --git a/crates/test-components/src/chain/components/default.rs b/crates/test-components/src/chain/components/default.rs deleted file mode 100644 index b7cfcd565..000000000 --- a/crates/test-components/src/chain/components/default.rs +++ /dev/null @@ -1,21 +0,0 @@ -use cgp_core::prelude::*; -use ibc_relayer_components::components::default::chain::DefaultChainComponents; - -use crate::chain::traits::build::ChainIdFromStringBuilderComponent; -use crate::chain::traits::types::address::AddressTypeComponent; -use crate::chain::traits::types::amount::AmountTypeComponent; -use crate::chain::traits::types::denom::DenomTypeComponent; -use crate::chain::traits::types::wallet::{WalletSignerComponent, WalletTypeComponent}; - -delegate_components!( - DefaultChainComponents; - [ - ChainIdFromStringBuilderComponent, - AmountTypeComponent, - DenomTypeComponent, - AddressTypeComponent, - WalletTypeComponent, - WalletSignerComponent, - ]: - BaseComponents -); diff --git a/crates/test-components/src/chain/components/extra.rs b/crates/test-components/src/chain/components/extra.rs deleted file mode 100644 index ea188570e..000000000 --- a/crates/test-components/src/chain/components/extra.rs +++ /dev/null @@ -1,22 +0,0 @@ -use cgp_core::prelude::*; -use ibc_relayer_components::components::default::chain::DefaultChainComponents; -use ibc_relayer_components_extra::components::extra::chain::ExtraChainComponents; - -use crate::chain::traits::build::ChainIdFromStringBuilderComponent; -use crate::chain::traits::types::address::AddressTypeComponent; -use crate::chain::traits::types::amount::AmountTypeComponent; -use crate::chain::traits::types::denom::DenomTypeComponent; -use crate::chain::traits::types::wallet::{WalletSignerComponent, WalletTypeComponent}; - -delegate_components!( - ExtraChainComponents; - [ - ChainIdFromStringBuilderComponent, - AmountTypeComponent, - DenomTypeComponent, - AddressTypeComponent, - WalletTypeComponent, - WalletSignerComponent, - ]: - DefaultChainComponents -); diff --git a/crates/test-components/src/chain/components/mod.rs b/crates/test-components/src/chain/components/mod.rs deleted file mode 100644 index bef50aae9..000000000 --- a/crates/test-components/src/chain/components/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod default; -pub mod extra; diff --git a/crates/test-components/src/chain/mod.rs b/crates/test-components/src/chain/mod.rs index 702a1181b..d44cc4a18 100644 --- a/crates/test-components/src/chain/mod.rs +++ b/crates/test-components/src/chain/mod.rs @@ -1,3 +1,2 @@ -pub mod components; pub mod impls; pub mod traits;