From 58bbffaae56f3d0dccef9af5a100597a914a7c68 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Thu, 19 Dec 2024 16:57:39 +0100 Subject: [PATCH] Split `CanReadPacketFields` into individual packet field accessor components (#504) * Scaffold individual packet field readers * Remove outgoing_ prefix from packet field accessors * More renaming * Implement WithProvider for packet fields getter * Implement individual Cosmos packet field accessors * Wire up new packet field readers * Remove CanReadPacketFields provider * Remove uses of CanReadPacketFields * Remove forward providers * Removing use of HasIbcChainTypes * Remove more use of HasIbcChainTypes * Fix error * Fix clippy --- .gitignore | 5 +- .../message_builders/channel_handshake.rs | 153 --------- .../message_builders/connection_handshake.rs | 223 ------------- .../src/impls/forward/message_builders/mod.rs | 2 - .../chain-components/src/impls/forward/mod.rs | 3 - .../src/impls/forward/queries/chain_status.rs | 23 -- .../src/impls/forward/queries/channel_end.rs | 74 ----- .../src/impls/forward/queries/client_state.rs | 71 ---- .../impls/forward/queries/connection_end.rs | 70 ---- .../impls/forward/queries/consensus_state.rs | 77 ----- .../forward/queries/consensus_state_height.rs | 31 -- .../src/impls/forward/queries/mod.rs | 9 - .../forward/queries/packet_acknowledgement.rs | 47 --- .../forward/queries/packet_commitment.rs | 44 --- .../impls/forward/queries/packet_receipt.rs | 45 --- .../src/impls/forward/send_message.rs | 30 -- .../chain/chain-components/src/impls/mod.rs | 1 - .../src/impls/payload_builders/channel.rs | 17 +- .../src/impls/payload_builders/packet.rs | 35 +- .../impls/queries/consensus_state_height.rs | 3 +- .../src/traits/packet/fields.rs | 308 ++++++++++++++++-- .../src/traits/queries/channel_end.rs | 5 +- .../src/traits/queries/client_state.rs | 9 +- .../src/traits/queries/connection_end.rs | 5 +- .../traits/queries/counterparty_chain_id.rs | 5 +- .../traits/queries/packet_acknowledgement.rs | 16 +- .../traits/queries/packet_acknowledgements.rs | 10 +- .../src/traits/queries/packet_commitment.rs | 10 +- .../src/traits/queries/packet_commitments.rs | 12 +- .../src/traits/queries/packet_is_received.rs | 9 +- .../src/traits/queries/packet_receipt.rs | 16 +- .../src/traits/queries/send_packets.rs | 35 +- .../queries/unreceived_acks_sequences.rs | 12 +- .../queries/unreceived_packet_sequences.rs | 17 +- .../src/components/client.rs | 20 +- .../src/components/cosmos_to_cosmos.rs | 17 + .../src/impls/packet/packet_fields.rs | 95 ++++-- .../src/impls/relay/packet_filter.rs | 17 +- .../cosmos-relayer/src/contexts/chain.rs | 2 + .../src/components/cosmos_to_wasm_cosmos.rs | 56 ++-- .../src/relayer_mock/base/impls/chain.rs | 44 ++- .../extra/closures/chain/packet_relayer.rs | 10 +- .../closures/relay/ack_packet_relayer.rs | 4 +- .../extra/closures/relay/event_relayer.rs | 5 +- .../extra/closures/relay/packet_relayer.rs | 1 - .../src/relay/impls/packet_relayers/extra.rs | 4 +- .../closures/relay/ack_packet_relayer.rs | 7 +- .../default/closures/relay/event_relayer.rs | 4 +- .../default/closures/relay/packet_relayer.rs | 7 +- .../src/relay/impls/packet_filters/target.rs | 24 +- .../src/relay/impls/packet_lock.rs | 21 +- .../impls/packet_relayers/general/default.rs | 4 +- .../packet_relayers/general/full_relay.rs | 12 +- .../receive/skip_received_packet.rs | 14 +- .../src/components/solomachine.rs | 23 +- 55 files changed, 664 insertions(+), 1159 deletions(-) delete mode 100644 crates/chain/chain-components/src/impls/forward/message_builders/channel_handshake.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/message_builders/connection_handshake.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/message_builders/mod.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/mod.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/chain_status.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/channel_end.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/client_state.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/connection_end.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/consensus_state.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/consensus_state_height.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/mod.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/packet_acknowledgement.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/packet_commitment.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/queries/packet_receipt.rs delete mode 100644 crates/chain/chain-components/src/impls/forward/send_message.rs diff --git a/.gitignore b/.gitignore index 60076bab0..051388a9d 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,7 @@ mc.log # Ignore Nix artifacts /result* -config.toml \ No newline at end of file +config.toml + +rust-toolchain.toml +rustc-ice-*.txt \ No newline at end of file diff --git a/crates/chain/chain-components/src/impls/forward/message_builders/channel_handshake.rs b/crates/chain/chain-components/src/impls/forward/message_builders/channel_handshake.rs deleted file mode 100644 index b538567fb..000000000 --- a/crates/chain/chain-components/src/impls/forward/message_builders/channel_handshake.rs +++ /dev/null @@ -1,153 +0,0 @@ -use cgp::core::inner::HasInner; -use cgp::prelude::{Async, CanRaiseError}; - -use crate::traits::message_builders::channel_handshake::{ - CanBuildChannelOpenAckMessage, CanBuildChannelOpenConfirmMessage, - CanBuildChannelOpenInitMessage, CanBuildChannelOpenTryMessage, ChannelOpenAckMessageBuilder, - ChannelOpenConfirmMessageBuilder, ChannelOpenInitMessageBuilder, ChannelOpenTryMessageBuilder, -}; -use crate::traits::types::channel::{ - HasChannelOpenAckPayloadType, HasChannelOpenConfirmPayloadType, HasChannelOpenTryPayloadType, - HasInitChannelOptionsType, -}; -use crate::traits::types::ibc::HasIbcChainTypes; - -pub struct ForwardChannelHandshakeBuilder; - -impl - ChannelOpenInitMessageBuilder for ForwardChannelHandshakeBuilder -where - Chain: HasInitChannelOptionsType - + HasIbcChainTypes - + HasInner - + CanRaiseError, - Counterparty: - HasIbcChainTypes + HasIbcChainTypes, - InChain: CanBuildChannelOpenInitMessage - + HasIbcChainTypes, - PortId: Async, - Message: Async, - InitChannelOptions: Async, -{ - async fn build_channel_open_init_message( - chain: &Chain, - port_id: &PortId, - counterparty_port_id: &PortId, - init_channel_options: &InitChannelOptions, - ) -> Result { - chain - .inner() - .build_channel_open_init_message(port_id, counterparty_port_id, init_channel_options) - .await - .map_err(Chain::raise_error) - } -} - -impl - ChannelOpenTryMessageBuilder for ForwardChannelHandshakeBuilder -where - Chain: HasIbcChainTypes - + HasInner - + CanRaiseError, - Counterparty: HasChannelOpenTryPayloadType - + HasChannelOpenTryPayloadType - + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildChannelOpenTryMessage - + HasIbcChainTypes, - ChannelId: Async, - PortId: Async, - ChannelOpenTryPayload: Async, - Message: Async, -{ - async fn build_channel_open_try_message( - chain: &Chain, - port_id: &PortId, - counterparty_port_id: &PortId, - counterparty_channel_id: &ChannelId, - counterparty_payload: ChannelOpenTryPayload, - ) -> Result { - chain - .inner() - .build_channel_open_try_message( - port_id, - counterparty_port_id, - counterparty_channel_id, - counterparty_payload, - ) - .await - .map_err(Chain::raise_error) - } -} - -impl - ChannelOpenAckMessageBuilder for ForwardChannelHandshakeBuilder -where - Chain: HasIbcChainTypes - + HasInner - + CanRaiseError, - Counterparty: HasChannelOpenAckPayloadType - + HasChannelOpenAckPayloadType - + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildChannelOpenAckMessage - + HasIbcChainTypes, - ChannelId: Async, - PortId: Async, - ChannelOpenAckPayload: Async, - Message: Async, -{ - async fn build_channel_open_ack_message( - chain: &Chain, - port_id: &PortId, - channel_id: &ChannelId, - counterparty_channel_id: &ChannelId, - counterparty_payload: ChannelOpenAckPayload, - ) -> Result { - chain - .inner() - .build_channel_open_ack_message( - port_id, - channel_id, - counterparty_channel_id, - counterparty_payload, - ) - .await - .map_err(Chain::raise_error) - } -} - -impl - ChannelOpenConfirmMessageBuilder for ForwardChannelHandshakeBuilder -where - Chain: HasIbcChainTypes - + HasInner - + CanRaiseError, - Counterparty: HasChannelOpenConfirmPayloadType< - Chain, - ChannelOpenConfirmPayload = ChannelOpenConfirmPayload, - > + HasChannelOpenConfirmPayloadType< - InChain, - ChannelOpenConfirmPayload = ChannelOpenConfirmPayload, - > + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildChannelOpenConfirmMessage - + HasIbcChainTypes, - ChannelId: Async, - PortId: Async, - ChannelOpenConfirmPayload: Async, - Message: Async, -{ - async fn build_channel_open_confirm_message( - chain: &Chain, - port_id: &PortId, - channel_id: &ChannelId, - counterparty_payload: ChannelOpenConfirmPayload, - ) -> Result { - chain - .inner() - .build_channel_open_confirm_message(port_id, channel_id, counterparty_payload) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/message_builders/connection_handshake.rs b/crates/chain/chain-components/src/impls/forward/message_builders/connection_handshake.rs deleted file mode 100644 index d6bea4ddb..000000000 --- a/crates/chain/chain-components/src/impls/forward/message_builders/connection_handshake.rs +++ /dev/null @@ -1,223 +0,0 @@ -use cgp::core::inner::HasInner; -use cgp::prelude::{Async, CanRaiseError}; - -use crate::traits::message_builders::connection_handshake::{ - CanBuildConnectionOpenAckMessage, CanBuildConnectionOpenConfirmMessage, - CanBuildConnectionOpenInitMessage, CanBuildConnectionOpenTryMessage, - ConnectionOpenAckMessageBuilder, ConnectionOpenConfirmMessageBuilder, - ConnectionOpenInitMessageBuilder, ConnectionOpenTryMessageBuilder, -}; -use crate::traits::types::connection::{ - HasConnectionOpenAckPayloadType, HasConnectionOpenConfirmPayloadType, - HasConnectionOpenInitPayloadType, HasConnectionOpenTryPayloadType, - HasInitConnectionOptionsType, -}; -use crate::traits::types::ibc::HasIbcChainTypes; - -pub struct ForwardConnectionHandshakeBuilder; - -impl< - Chain, - Counterparty, - InChain, - Message, - ClientId, - ConnectionId, - InitConnectionOptions, - ConnectionOpenInitPayload, - > ConnectionOpenInitMessageBuilder for ForwardConnectionHandshakeBuilder -where - Chain: HasInitConnectionOptionsType - + HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - > + HasInner - + CanRaiseError, - Counterparty: HasConnectionOpenInitPayloadType< - Chain, - ConnectionOpenInitPayload = ConnectionOpenInitPayload, - > + HasConnectionOpenInitPayloadType< - InChain, - ConnectionOpenInitPayload = ConnectionOpenInitPayload, - > + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildConnectionOpenInitMessage< - Counterparty, - InitConnectionOptions = InitConnectionOptions, - > + HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - >, - ClientId: Async, - ConnectionId: Async, - ConnectionOpenInitPayload: Async, - Message: Async, - InitConnectionOptions: Async, -{ - async fn build_connection_open_init_message( - chain: &Chain, - client_id: &ClientId, - counterparty_client_id: &ClientId, - init_connection_options: &InitConnectionOptions, - counterparty_payload: ConnectionOpenInitPayload, - ) -> Result { - chain - .inner() - .build_connection_open_init_message( - client_id, - counterparty_client_id, - init_connection_options, - counterparty_payload, - ) - .await - .map_err(Chain::raise_error) - } -} - -impl - ConnectionOpenTryMessageBuilder for ForwardConnectionHandshakeBuilder -where - Chain: HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - > + HasInner - + CanRaiseError, - Counterparty: HasConnectionOpenTryPayloadType - + HasConnectionOpenTryPayloadType< - InChain, - ConnectionOpenTryPayload = ConnectionOpenTryPayload, - > + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildConnectionOpenTryMessage - + HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - >, - ClientId: Async, - ConnectionId: Async, - ConnectionOpenTryPayload: Async, - Message: Async, -{ - async fn build_connection_open_try_message( - chain: &Chain, - client_id: &ClientId, - counterparty_client_id: &ClientId, - counterparty_connection_id: &ConnectionId, - counterparty_payload: ConnectionOpenTryPayload, - ) -> Result { - chain - .inner() - .build_connection_open_try_message( - client_id, - counterparty_client_id, - counterparty_connection_id, - counterparty_payload, - ) - .await - .map_err(Chain::raise_error) - } -} - -impl - ConnectionOpenAckMessageBuilder for ForwardConnectionHandshakeBuilder -where - Chain: HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - > + HasInner - + CanRaiseError, - Counterparty: HasConnectionOpenAckPayloadType - + HasConnectionOpenAckPayloadType< - InChain, - ConnectionOpenAckPayload = ConnectionOpenAckPayload, - > + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildConnectionOpenAckMessage - + HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - >, - ClientId: Async, - ConnectionId: Async, - ConnectionOpenAckPayload: Async, - Message: Async, -{ - async fn build_connection_open_ack_message( - chain: &Chain, - connection_id: &Chain::ConnectionId, - counterparty_connection_id: &ConnectionId, - counterparty_payload: ConnectionOpenAckPayload, - ) -> Result { - chain - .inner() - .build_connection_open_ack_message( - connection_id, - counterparty_connection_id, - counterparty_payload, - ) - .await - .map_err(Chain::raise_error) - } -} - -impl< - Chain, - Counterparty, - InChain, - Message, - ClientId, - ConnectionId, - ConnectionOpenConfirmPayload, - > ConnectionOpenConfirmMessageBuilder for ForwardConnectionHandshakeBuilder -where - Chain: HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - > + HasInner - + CanRaiseError, - Counterparty: HasConnectionOpenConfirmPayloadType< - Chain, - ConnectionOpenConfirmPayload = ConnectionOpenConfirmPayload, - > + HasConnectionOpenConfirmPayloadType< - InChain, - ConnectionOpenConfirmPayload = ConnectionOpenConfirmPayload, - > + HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanBuildConnectionOpenConfirmMessage - + HasIbcChainTypes< - Counterparty, - Message = Message, - ClientId = ClientId, - ConnectionId = ConnectionId, - >, - ClientId: Async, - ConnectionId: Async, - ConnectionOpenConfirmPayload: Async, - Message: Async, -{ - async fn build_connection_open_confirm_message( - chain: &Chain, - connection_id: &Chain::ConnectionId, - counterparty_payload: ConnectionOpenConfirmPayload, - ) -> Result { - chain - .inner() - .build_connection_open_confirm_message(connection_id, counterparty_payload) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/message_builders/mod.rs b/crates/chain/chain-components/src/impls/forward/message_builders/mod.rs deleted file mode 100644 index 980362ed2..000000000 --- a/crates/chain/chain-components/src/impls/forward/message_builders/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod channel_handshake; -pub mod connection_handshake; diff --git a/crates/chain/chain-components/src/impls/forward/mod.rs b/crates/chain/chain-components/src/impls/forward/mod.rs deleted file mode 100644 index ff73252b1..000000000 --- a/crates/chain/chain-components/src/impls/forward/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod message_builders; -pub mod queries; -pub mod send_message; diff --git a/crates/chain/chain-components/src/impls/forward/queries/chain_status.rs b/crates/chain/chain-components/src/impls/forward/queries/chain_status.rs deleted file mode 100644 index f35602dcf..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/chain_status.rs +++ /dev/null @@ -1,23 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::chain_status::{CanQueryChainStatus, ChainStatusQuerier}; -use crate::traits::types::status::HasChainStatusType; - -pub struct ForwardQueryChainStatus; - -impl ChainStatusQuerier for ForwardQueryChainStatus -where - Chain: HasInner + HasChainStatusType + CanRaiseError, - InChain: CanQueryChainStatus, -{ - async fn query_chain_status(chain: &Chain) -> Result { - let chain_status = chain - .inner() - .query_chain_status() - .await - .map_err(Chain::raise_error)?; - - Ok(chain_status) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/channel_end.rs b/crates/chain/chain-components/src/impls/forward/queries/channel_end.rs deleted file mode 100644 index 8dd41f3bf..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/channel_end.rs +++ /dev/null @@ -1,74 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::channel_end::{ - CanQueryChannelEnd, CanQueryChannelEndWithProofs, ChannelEndQuerier, - ChannelEndWithProofsQuerier, -}; -use crate::traits::types::channel::HasChannelEndType; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryChannelEnd; - -impl ChannelEndQuerier - for ForwardQueryChannelEnd -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasChannelEndType, - InChain: CanQueryChannelEnd< - Counterparty, - ChannelId = Chain::ChannelId, - PortId = Chain::PortId, - Height = Chain::Height, - > + HasChannelEndType, -{ - async fn query_channel_end( - chain: &Chain, - channel_id: &Chain::ChannelId, - port_id: &Chain::PortId, - height: &Chain::Height, - ) -> Result { - let channel_end = chain - .inner() - .query_channel_end(channel_id, port_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(channel_end) - } -} - -impl - ChannelEndWithProofsQuerier for ForwardQueryChannelEnd -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasCommitmentProofType - + HasChannelEndType, - InChain: CanQueryChannelEndWithProofs< - Counterparty, - ChannelId = Chain::ChannelId, - PortId = Chain::PortId, - Height = Chain::Height, - > + HasChannelEndType - + HasCommitmentProofType, -{ - async fn query_channel_end_with_proofs( - chain: &Chain, - channel_id: &Chain::ChannelId, - port_id: &Chain::PortId, - height: &Chain::Height, - ) -> Result<(ChannelEnd, CommitmentProof), Chain::Error> { - let result = chain - .inner() - .query_channel_end_with_proofs(channel_id, port_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(result) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/client_state.rs b/crates/chain/chain-components/src/impls/forward/queries/client_state.rs deleted file mode 100644 index ab4537883..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/client_state.rs +++ /dev/null @@ -1,71 +0,0 @@ -use core::marker::PhantomData; - -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::client_state::{ - CanQueryClientState, CanQueryClientStateWithProofs, ClientStateQuerier, - ClientStateWithProofsQuerier, -}; -use crate::traits::types::client_state::HasClientStateType; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryClientState; - -impl ClientStateQuerier - for ForwardQueryClientState -where - Chain: - HasInner + CanRaiseError + HasIbcChainTypes, - InChain: CanQueryClientState, - Counterparty: HasClientStateType - + HasClientStateType, -{ - async fn query_client_state( - chain: &Chain, - tag: PhantomData, - client_id: &Chain::ClientId, - height: &Chain::Height, - ) -> Result { - let client_state = chain - .inner() - .query_client_state(tag, client_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(client_state) - } -} - -impl - ClientStateWithProofsQuerier for ForwardQueryClientState -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasCommitmentProofType, - InChain: CanQueryClientStateWithProofs< - Counterparty, - ClientId = Chain::ClientId, - Height = Chain::Height, - CommitmentProof = CommitmentProof, - >, - Counterparty: HasClientStateType - + HasClientStateType, -{ - async fn query_client_state_with_proofs( - chain: &Chain, - tag: PhantomData, - client_id: &Chain::ClientId, - height: &Chain::Height, - ) -> Result<(ClientState, CommitmentProof), Chain::Error> { - let result = chain - .inner() - .query_client_state_with_proofs(tag, client_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(result) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/connection_end.rs b/crates/chain/chain-components/src/impls/forward/queries/connection_end.rs deleted file mode 100644 index eee25c4cb..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/connection_end.rs +++ /dev/null @@ -1,70 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::connection_end::{ - CanQueryConnectionEnd, CanQueryConnectionEndWithProofs, ConnectionEndQuerier, - ConnectionEndWithProofsQuerier, -}; -use crate::traits::types::connection::HasConnectionEndType; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryConnectionEnd; - -impl ConnectionEndQuerier - for ForwardQueryConnectionEnd -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasConnectionEndType, - InChain: CanQueryConnectionEnd< - Counterparty, - ConnectionId = Chain::ConnectionId, - Height = Chain::Height, - > + HasConnectionEndType, -{ - async fn query_connection_end( - chain: &Chain, - connection_id: &Chain::ConnectionId, - height: &Chain::Height, - ) -> Result { - let connection_end = chain - .inner() - .query_connection_end(connection_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(connection_end) - } -} - -impl - ConnectionEndWithProofsQuerier for ForwardQueryConnectionEnd -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasCommitmentProofType - + HasConnectionEndType, - InChain: CanQueryConnectionEndWithProofs< - Counterparty, - ConnectionId = Chain::ConnectionId, - Height = Chain::Height, - > + HasConnectionEndType - + HasCommitmentProofType, -{ - async fn query_connection_end_with_proofs( - chain: &Chain, - connection_id: &Chain::ConnectionId, - height: &Chain::Height, - ) -> Result<(ConnectionEnd, CommitmentProof), Chain::Error> { - let result = chain - .inner() - .query_connection_end_with_proofs(connection_id, height) - .await - .map_err(Chain::raise_error)?; - - Ok(result) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/consensus_state.rs b/crates/chain/chain-components/src/impls/forward/queries/consensus_state.rs deleted file mode 100644 index 7e685963d..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/consensus_state.rs +++ /dev/null @@ -1,77 +0,0 @@ -use core::marker::PhantomData; - -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::consensus_state::{ - CanQueryConsensusState, CanQueryConsensusStateWithProofs, ConsensusStateQuerier, - ConsensusStateWithProofsQuerier, -}; -use crate::traits::types::consensus_state::HasConsensusStateType; -use crate::traits::types::height::HasHeightType; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryConsensusState; - -impl ConsensusStateQuerier - for ForwardQueryConsensusState -where - Chain: - HasInner + CanRaiseError + HasIbcChainTypes, - InChain: - CanQueryConsensusState, - Counterparty: HasHeightType - + HasConsensusStateType - + HasConsensusStateType, -{ - async fn query_consensus_state( - chain: &Chain, - tag: PhantomData, - client_id: &Chain::ClientId, - consensus_height: &Counterparty::Height, - query_height: &Chain::Height, - ) -> Result { - let consensus_state = chain - .inner() - .query_consensus_state(tag, client_id, consensus_height, query_height) - .await - .map_err(Chain::raise_error)?; - - Ok(consensus_state) - } -} - -impl - ConsensusStateWithProofsQuerier for ForwardQueryConsensusState -where - Chain: HasInner - + CanRaiseError - + HasIbcChainTypes - + HasCommitmentProofType, - InChain: CanQueryConsensusStateWithProofs< - Counterparty, - ClientId = Chain::ClientId, - Height = Chain::Height, - CommitmentProof = CommitmentProof, - >, - Counterparty: HasHeightType - + HasConsensusStateType - + HasConsensusStateType, -{ - async fn query_consensus_state_with_proofs( - chain: &Chain, - tag: PhantomData, - client_id: &Chain::ClientId, - consensus_height: &Counterparty::Height, - query_height: &Chain::Height, - ) -> Result<(ConsensusState, CommitmentProof), Chain::Error> { - let result = chain - .inner() - .query_consensus_state_with_proofs(tag, client_id, consensus_height, query_height) - .await - .map_err(Chain::raise_error)?; - - Ok(result) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/consensus_state_height.rs b/crates/chain/chain-components/src/impls/forward/queries/consensus_state_height.rs deleted file mode 100644 index c1afeeb72..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/consensus_state_height.rs +++ /dev/null @@ -1,31 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::consensus_state_height::{ - CanQueryConsensusStateHeight, ConsensusStateHeightQuerier, -}; -use crate::traits::types::height::HasHeightType; -use crate::traits::types::ibc::HasIbcChainTypes; - -pub struct ForwardQueryConsensusStateHeight; - -impl ConsensusStateHeightQuerier - for ForwardQueryConsensusStateHeight -where - Chain: - HasIbcChainTypes + HasInner + CanRaiseError, - Counterparty: HasHeightType, - InChain: CanQueryConsensusStateHeight, -{ - async fn find_consensus_state_height_before( - chain: &Chain, - client_id: &Chain::ClientId, - target_height: &Counterparty::Height, - ) -> Result { - chain - .inner() - .find_consensus_state_height_before(client_id, target_height) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/mod.rs b/crates/chain/chain-components/src/impls/forward/queries/mod.rs deleted file mode 100644 index 9a65dd8f7..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub mod chain_status; -pub mod channel_end; -pub mod client_state; -pub mod connection_end; -pub mod consensus_state; -pub mod consensus_state_height; -pub mod packet_acknowledgement; -pub mod packet_commitment; -pub mod packet_receipt; diff --git a/crates/chain/chain-components/src/impls/forward/queries/packet_acknowledgement.rs b/crates/chain/chain-components/src/impls/forward/queries/packet_acknowledgement.rs deleted file mode 100644 index bacd18559..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/packet_acknowledgement.rs +++ /dev/null @@ -1,47 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; -use cgp::core::Async; - -use crate::traits::queries::packet_acknowledgement::{ - CanQueryPacketAcknowledgement, PacketAcknowledgementQuerier, -}; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::packets::ack::HasAcknowledgementType; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryPacketAcknowledgement; - -impl PacketAcknowledgementQuerier - for ForwardQueryPacketAcknowledgement -where - Chain: HasInner - + HasIbcChainTypes - + HasAcknowledgementType - + HasCommitmentProofType - + CanRaiseError, - Counterparty: HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanQueryPacketAcknowledgement< - Counterparty, - Acknowledgement = Chain::Acknowledgement, - CommitmentProof = Chain::CommitmentProof, - ChannelId = Chain::ChannelId, - PortId = Chain::PortId, - Height = Chain::Height, - >, - Sequence: Async, -{ - async fn query_packet_acknowledgement( - chain: &Chain, - channel_id: &Chain::ChannelId, - port_id: &Chain::PortId, - sequence: &Sequence, - height: &Chain::Height, - ) -> Result<(Chain::Acknowledgement, Chain::CommitmentProof), Chain::Error> { - chain - .inner() - .query_packet_acknowledgement(channel_id, port_id, sequence, height) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/packet_commitment.rs b/crates/chain/chain-components/src/impls/forward/queries/packet_commitment.rs deleted file mode 100644 index b1749fd6b..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/packet_commitment.rs +++ /dev/null @@ -1,44 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; - -use crate::traits::queries::packet_commitment::{ - CanQueryPacketCommitment, PacketCommitmentQuerier, -}; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::packets::receive::HasPacketCommitmentType; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryPacketCommitment; - -impl PacketCommitmentQuerier - for ForwardQueryPacketCommitment -where - Chain: HasInner - + HasIbcChainTypes - + HasPacketCommitmentType - + HasCommitmentProofType - + CanRaiseError, - InChain: CanQueryPacketCommitment< - Counterparty, - PacketCommitment = Chain::PacketCommitment, - CommitmentProof = Chain::CommitmentProof, - ChannelId = Chain::ChannelId, - Sequence = Chain::Sequence, - PortId = Chain::PortId, - Height = Chain::Height, - >, -{ - async fn query_packet_commitment( - chain: &Chain, - channel_id: &Chain::ChannelId, - port_id: &Chain::PortId, - sequence: &Chain::Sequence, - height: &Chain::Height, - ) -> Result<(Chain::PacketCommitment, Chain::CommitmentProof), Chain::Error> { - chain - .inner() - .query_packet_commitment(channel_id, port_id, sequence, height) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/queries/packet_receipt.rs b/crates/chain/chain-components/src/impls/forward/queries/packet_receipt.rs deleted file mode 100644 index ae4093100..000000000 --- a/crates/chain/chain-components/src/impls/forward/queries/packet_receipt.rs +++ /dev/null @@ -1,45 +0,0 @@ -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; -use cgp::core::Async; - -use crate::traits::queries::packet_receipt::{CanQueryPacketReceipt, PacketReceiptQuerier}; -use crate::traits::types::ibc::HasIbcChainTypes; -use crate::traits::types::packets::timeout::HasPacketReceiptType; -use crate::traits::types::proof::HasCommitmentProofType; - -pub struct ForwardQueryPacketReceipt; - -impl PacketReceiptQuerier - for ForwardQueryPacketReceipt -where - Chain: HasInner - + HasIbcChainTypes - + HasPacketReceiptType - + HasCommitmentProofType - + CanRaiseError, - Counterparty: HasIbcChainTypes - + HasIbcChainTypes, - InChain: CanQueryPacketReceipt< - Counterparty, - PacketReceipt = Chain::PacketReceipt, - CommitmentProof = Chain::CommitmentProof, - ChannelId = Chain::ChannelId, - PortId = Chain::PortId, - Height = Chain::Height, - >, - Sequence: Async, -{ - async fn query_packet_receipt( - chain: &Chain, - channel_id: &Chain::ChannelId, - port_id: &Chain::PortId, - sequence: &Sequence, - height: &Chain::Height, - ) -> Result<(Chain::PacketReceipt, Chain::CommitmentProof), Chain::Error> { - chain - .inner() - .query_packet_receipt(channel_id, port_id, sequence, height) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/forward/send_message.rs b/crates/chain/chain-components/src/impls/forward/send_message.rs deleted file mode 100644 index 50046b78f..000000000 --- a/crates/chain/chain-components/src/impls/forward/send_message.rs +++ /dev/null @@ -1,30 +0,0 @@ -use alloc::vec::Vec; - -use cgp::core::error::CanRaiseError; -use cgp::core::inner::HasInner; -use hermes_chain_type_components::traits::types::message_response::HasMessageResponseType; - -use crate::traits::send_message::{CanSendMessages, MessageSender}; -use crate::traits::types::message::HasMessageType; - -pub struct ForwardSendMessage; - -impl MessageSender for ForwardSendMessage -where - Chain: HasMessageType - + HasMessageResponseType - + HasInner - + CanRaiseError, - InChain: CanSendMessages, -{ - async fn send_messages( - chain: &Chain, - messages: Vec, - ) -> Result, Chain::Error> { - chain - .inner() - .send_messages(messages) - .await - .map_err(Chain::raise_error) - } -} diff --git a/crates/chain/chain-components/src/impls/mod.rs b/crates/chain/chain-components/src/impls/mod.rs index 0ab75c18b..a3545f759 100644 --- a/crates/chain/chain-components/src/impls/mod.rs +++ b/crates/chain/chain-components/src/impls/mod.rs @@ -1,4 +1,3 @@ -pub mod forward; pub mod payload_builders; pub mod queries; pub mod types; diff --git a/crates/chain/chain-components/src/impls/payload_builders/channel.rs b/crates/chain/chain-components/src/impls/payload_builders/channel.rs index 08cee74c1..460d1b74d 100644 --- a/crates/chain/chain-components/src/impls/payload_builders/channel.rs +++ b/crates/chain/chain-components/src/impls/payload_builders/channel.rs @@ -1,3 +1,7 @@ +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; + use crate::traits::payload_builders::channel_handshake::{ ChannelOpenAckPayloadBuilder, ChannelOpenConfirmPayloadBuilder, ChannelOpenTryPayloadBuilder, }; @@ -6,7 +10,6 @@ use crate::traits::types::channel::{ HasChannelOpenAckPayloadType, HasChannelOpenConfirmPayloadType, HasChannelOpenTryPayloadType, }; use crate::traits::types::client_state::HasClientStateType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::proof::HasCommitmentProofHeight; use crate::types::payloads::channel::{ ChannelOpenAckPayload, ChannelOpenConfirmPayload, ChannelOpenTryPayload, @@ -17,7 +20,9 @@ pub struct BuildChannelHandshakePayload; impl ChannelOpenTryPayloadBuilder for BuildChannelHandshakePayload where - Chain: HasIbcChainTypes + Chain: HasHeightType + + HasChannelIdType + + HasPortIdType + HasChannelOpenTryPayloadType< Counterparty, ChannelOpenTryPayload = ChannelOpenTryPayload, @@ -54,7 +59,9 @@ where impl ChannelOpenAckPayloadBuilder for BuildChannelHandshakePayload where - Chain: HasIbcChainTypes + Chain: HasHeightType + + HasChannelIdType + + HasPortIdType + HasChannelOpenAckPayloadType< Counterparty, ChannelOpenAckPayload = ChannelOpenAckPayload, @@ -91,7 +98,9 @@ where impl ChannelOpenConfirmPayloadBuilder for BuildChannelHandshakePayload where - Chain: HasIbcChainTypes + Chain: HasHeightType + + HasChannelIdType + + HasPortIdType + HasChannelOpenConfirmPayloadType< Counterparty, ChannelOpenConfirmPayload = ChannelOpenConfirmPayload, diff --git a/crates/chain/chain-components/src/impls/payload_builders/packet.rs b/crates/chain/chain-components/src/impls/payload_builders/packet.rs index 2538c4dd2..a67a630b0 100644 --- a/crates/chain/chain-components/src/impls/payload_builders/packet.rs +++ b/crates/chain/chain-components/src/impls/payload_builders/packet.rs @@ -1,7 +1,10 @@ use cgp::prelude::HasErrorType; use hermes_chain_type_components::traits::fields::height::CanIncrementHeight; -use crate::traits::packet::fields::CanReadOutgoingPacketFields; +use crate::traits::packet::fields::{ + HasPacketDstChannelId, HasPacketDstPortId, HasPacketSequence, HasPacketSrcChannelId, + HasPacketSrcPortId, +}; use crate::traits::payload_builders::ack_packet::AckPacketPayloadBuilder; use crate::traits::payload_builders::receive_packet::ReceivePacketPayloadBuilder; use crate::traits::payload_builders::timeout_unordered_packet::TimeoutUnorderedPacketPayloadBuilder; @@ -9,7 +12,6 @@ use crate::traits::queries::packet_acknowledgement::CanQueryPacketAcknowledgemen use crate::traits::queries::packet_commitment::CanQueryPacketCommitment; use crate::traits::queries::packet_receipt::CanQueryPacketReceipt; use crate::traits::types::client_state::HasClientStateType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::packets::ack::{HasAckPacketPayloadType, HasAcknowledgementType}; use crate::traits::types::packets::receive::HasReceivePacketPayloadType; use crate::traits::types::packets::timeout::HasTimeoutUnorderedPacketPayloadType; @@ -25,12 +27,13 @@ where Chain: HasReceivePacketPayloadType< Counterparty, ReceivePacketPayload = ReceivePacketPayload, - > + CanReadOutgoingPacketFields + > + HasPacketSrcChannelId + + HasPacketSrcPortId + + HasPacketSequence + HasClientStateType + CanQueryPacketCommitment + HasCommitmentProofHeight + HasErrorType, - Counterparty: HasIbcChainTypes, { async fn build_receive_packet_payload( chain: &Chain, @@ -40,9 +43,9 @@ where ) -> Result { let (_, proof_commitment) = chain .query_packet_commitment( - Chain::outgoing_packet_src_channel_id(packet), - Chain::outgoing_packet_src_port(packet), - Chain::outgoing_packet_sequence(packet), + &Chain::packet_src_channel_id(packet), + &Chain::packet_src_port_id(packet), + &Chain::packet_sequence(packet), height, ) .await?; @@ -72,7 +75,8 @@ where + CanIncrementHeight + HasCommitmentProofHeight + HasErrorType, - Counterparty: HasIbcChainTypes + CanReadOutgoingPacketFields, + Counterparty: + HasPacketDstChannelId + HasPacketDstPortId + HasPacketSequence, Chain::Acknowledgement: Clone, { async fn build_ack_packet_payload( @@ -84,9 +88,9 @@ where ) -> Result { let (_, proof_ack) = chain .query_packet_acknowledgement( - Counterparty::outgoing_packet_dst_channel_id(packet), - Counterparty::outgoing_packet_dst_port(packet), - Counterparty::outgoing_packet_sequence(packet), + &Counterparty::packet_dst_channel_id(packet), + &Counterparty::packet_dst_port_id(packet), + &Counterparty::packet_sequence(packet), height, ) .await?; @@ -117,7 +121,8 @@ where + HasCommitmentProofHeight + HasCommitmentProofType + HasErrorType, - Counterparty: HasIbcChainTypes + CanReadOutgoingPacketFields, + Counterparty: + HasPacketDstChannelId + HasPacketDstPortId + HasPacketSequence, { async fn build_timeout_unordered_packet_payload( chain: &Chain, @@ -127,9 +132,9 @@ where ) -> Result, Chain::Error> { let (_, proof_unreceived) = chain .query_packet_receipt( - Counterparty::outgoing_packet_dst_channel_id(packet), - Counterparty::outgoing_packet_dst_port(packet), - Counterparty::outgoing_packet_sequence(packet), + &Counterparty::packet_dst_channel_id(packet), + &Counterparty::packet_dst_port_id(packet), + &Counterparty::packet_sequence(packet), height, ) .await?; diff --git a/crates/chain/chain-components/src/impls/queries/consensus_state_height.rs b/crates/chain/chain-components/src/impls/queries/consensus_state_height.rs index 574dfb26e..f6f38726b 100644 --- a/crates/chain/chain-components/src/impls/queries/consensus_state_height.rs +++ b/crates/chain/chain-components/src/impls/queries/consensus_state_height.rs @@ -7,7 +7,6 @@ use crate::traits::queries::consensus_state_height::{ CanQueryConsensusStateHeights, ConsensusStateHeightQuerier, }; use crate::traits::types::height::HasHeightType; -use crate::traits::types::ibc::HasIbcChainTypes; pub struct QueryConsensusStateHeightsAndFindHeightBefore; @@ -58,7 +57,7 @@ where impl Debug for NoConsensusStateAtLessThanHeight<'_, Chain, Counterparty> where - Chain: HasIbcChainTypes, + Chain: HasClientIdType, Counterparty: HasHeightType, { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { diff --git a/crates/chain/chain-components/src/traits/packet/fields.rs b/crates/chain/chain-components/src/traits/packet/fields.rs index edeef69c8..412573941 100644 --- a/crates/chain/chain-components/src/traits/packet/fields.rs +++ b/crates/chain/chain-components/src/traits/packet/fields.rs @@ -1,3 +1,7 @@ +use core::marker::PhantomData; + +use cgp::core::component::{UseDelegate, WithProvider}; +use cgp::core::field::FieldGetter; use cgp::prelude::*; use hermes_chain_type_components::traits::types::counterparty::CanUseCounterparty; use hermes_chain_type_components::traits::types::height::HasHeightType; @@ -9,37 +13,293 @@ use hermes_chain_type_components::traits::types::timeout::{HasTimeoutType, Timeo use crate::types::aliases::{ChannelIdOf, HeightOf, PortIdOf}; +pub trait CanReadPacketFields: + HasPacketSrcChannelId + + HasPacketSrcPortId + + HasPacketDstChannelId + + HasPacketDstPortId + + HasPacketSequence + + HasPacketTimeoutHeight + + HasPacketTimeoutTimestamp +{ +} + +impl CanReadPacketFields for Chain where + Chain: HasPacketSrcChannelId + + HasPacketSrcPortId + + HasPacketDstChannelId + + HasPacketDstPortId + + HasPacketSequence + + HasPacketTimeoutHeight + + HasPacketTimeoutTimestamp +{ +} + #[cgp_component { - provider: OutgoingPacketFieldsReader, - context: Chain, + provider: PacketSrcChannelIdGetter, + context: Chain, }] -pub trait CanReadOutgoingPacketFields: - HasOutgoingPacketType - + HasChannelIdType - + HasPortIdType - + HasSequenceType - + CanUseCounterparty< - Counterparty, - Counterparty: HasHeightType + HasTimeoutType + HasChannelIdType + HasPortIdType, - > +pub trait HasPacketSrcChannelId: + HasOutgoingPacketType + HasChannelIdType { - fn outgoing_packet_src_channel_id(packet: &Self::OutgoingPacket) -> &Self::ChannelId; + fn packet_src_channel_id(packet: &Self::OutgoingPacket) -> Self::ChannelId; +} - fn outgoing_packet_dst_channel_id( - packet: &Self::OutgoingPacket, - ) -> &ChannelIdOf; +#[cgp_component { + provider: PacketSrcPortIdGetter, + context: Chain, +}] +pub trait HasPacketSrcPortId: + HasOutgoingPacketType + HasPortIdType +{ + fn packet_src_port_id(packet: &Self::OutgoingPacket) -> Self::PortId; +} - fn outgoing_packet_src_port(packet: &Self::OutgoingPacket) -> &Self::PortId; +#[cgp_component { + provider: PacketDstChannelIdGetter, + context: Chain, +}] +pub trait HasPacketDstChannelId: + Sized + + HasOutgoingPacketType + + CanUseCounterparty> +{ + fn packet_dst_channel_id(packet: &Self::OutgoingPacket) -> ChannelIdOf; +} - fn outgoing_packet_dst_port(packet: &Self::OutgoingPacket) -> &PortIdOf; +#[cgp_component { + provider: PacketDstPortIdGetter, + context: Chain, +}] +pub trait HasPacketDstPortId: + Sized + + HasOutgoingPacketType + + CanUseCounterparty> +{ + fn packet_dst_port_id(packet: &Self::OutgoingPacket) -> PortIdOf; +} + +#[cgp_component { + provider: PacketSequenceGetter, + context: Chain, +}] +pub trait HasPacketSequence: + HasOutgoingPacketType + HasSequenceType +{ + fn packet_sequence(packet: &Self::OutgoingPacket) -> Self::Sequence; +} + +#[cgp_component { + provider: PacketTimeoutHeightGetter, + context: Chain, +}] +pub trait HasPacketTimeoutHeight: + Sized + + HasOutgoingPacketType + + CanUseCounterparty +{ + fn packet_timeout_height(packet: &Self::OutgoingPacket) -> Option>; +} - fn outgoing_packet_sequence(packet: &Self::OutgoingPacket) -> &Self::Sequence; +#[cgp_component { + provider: PacketTimeoutTimestampGetter, + context: Chain, +}] +pub trait HasPacketTimeoutTimestamp: + Sized + + HasOutgoingPacketType + + CanUseCounterparty +{ + fn packet_timeout_timestamp(packet: &Self::OutgoingPacket) -> Option>; +} - fn outgoing_packet_timeout_height( - packet: &Self::OutgoingPacket, - ) -> Option>; +impl PacketSrcChannelIdGetter + for WithProvider +where + Chain: HasOutgoingPacketType + HasChannelIdType, + Provider: FieldGetter< + Chain::OutgoingPacket, + PacketSrcChannelIdGetterComponent, + Value = Chain::ChannelId, + >, +{ + fn packet_src_channel_id(packet: &Chain::OutgoingPacket) -> Chain::ChannelId { + Provider::get_field(packet, PhantomData).clone() + } +} - fn outgoing_packet_timeout_timestamp( - packet: &Self::OutgoingPacket, - ) -> Option>; +impl PacketSrcPortIdGetter + for WithProvider +where + Chain: HasOutgoingPacketType + HasPortIdType, + Provider: + FieldGetter, +{ + fn packet_src_port_id(packet: &Chain::OutgoingPacket) -> Chain::PortId { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketDstChannelIdGetter + for WithProvider +where + Chain: HasOutgoingPacketType, + Counterparty: HasChannelIdType, + Provider: FieldGetter< + Chain::OutgoingPacket, + PacketDstChannelIdGetterComponent, + Value = Counterparty::ChannelId, + >, +{ + fn packet_dst_channel_id(packet: &Chain::OutgoingPacket) -> Counterparty::ChannelId { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketDstPortIdGetter + for WithProvider +where + Chain: HasOutgoingPacketType, + Counterparty: HasPortIdType, + Provider: FieldGetter< + Chain::OutgoingPacket, + PacketDstPortIdGetterComponent, + Value = Counterparty::PortId, + >, +{ + fn packet_dst_port_id(packet: &Chain::OutgoingPacket) -> Counterparty::PortId { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketSequenceGetter + for WithProvider +where + Chain: HasOutgoingPacketType + HasSequenceType, + Provider: + FieldGetter, +{ + fn packet_sequence(packet: &Chain::OutgoingPacket) -> Chain::Sequence { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketTimeoutHeightGetter + for WithProvider +where + Chain: HasOutgoingPacketType, + Counterparty: HasHeightType, + Provider: FieldGetter< + Chain::OutgoingPacket, + PacketDstChannelIdGetterComponent, + Value = Option, + >, +{ + fn packet_timeout_height(packet: &Chain::OutgoingPacket) -> Option { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketTimeoutTimestampGetter + for WithProvider +where + Chain: HasOutgoingPacketType, + Counterparty: HasTimeoutType, + Provider: FieldGetter< + Chain::OutgoingPacket, + PacketDstChannelIdGetterComponent, + Value = Option, + >, +{ + fn packet_timeout_timestamp(packet: &Chain::OutgoingPacket) -> Option { + Provider::get_field(packet, PhantomData).clone() + } +} + +impl PacketSrcChannelIdGetter + for UseDelegate +where + Chain: HasOutgoingPacketType + HasChannelIdType, + Components: DelegateComponent, + Components::Delegate: PacketSrcChannelIdGetter, +{ + fn packet_src_channel_id(packet: &Chain::OutgoingPacket) -> Chain::ChannelId { + Components::Delegate::packet_src_channel_id(packet) + } +} + +impl PacketSrcPortIdGetter + for UseDelegate +where + Chain: HasOutgoingPacketType + HasPortIdType, + Components: DelegateComponent, + Components::Delegate: PacketSrcPortIdGetter, +{ + fn packet_src_port_id(packet: &Chain::OutgoingPacket) -> Chain::PortId { + Components::Delegate::packet_src_port_id(packet) + } +} + +impl PacketDstChannelIdGetter + for UseDelegate +where + Chain: HasOutgoingPacketType, + Counterparty: HasChannelIdType, + Components: DelegateComponent, + Components::Delegate: PacketDstChannelIdGetter, +{ + fn packet_dst_channel_id(packet: &Chain::OutgoingPacket) -> Counterparty::ChannelId { + Components::Delegate::packet_dst_channel_id(packet) + } +} + +impl PacketDstPortIdGetter + for UseDelegate +where + Chain: HasOutgoingPacketType, + Counterparty: HasPortIdType, + Components: DelegateComponent, + Components::Delegate: PacketDstPortIdGetter, +{ + fn packet_dst_port_id(packet: &Chain::OutgoingPacket) -> Counterparty::PortId { + Components::Delegate::packet_dst_port_id(packet) + } +} + +impl PacketSequenceGetter + for UseDelegate +where + Chain: HasOutgoingPacketType + HasSequenceType, + Components: DelegateComponent, + Components::Delegate: PacketSequenceGetter, +{ + fn packet_sequence(packet: &Chain::OutgoingPacket) -> Chain::Sequence { + Components::Delegate::packet_sequence(packet) + } +} + +impl PacketTimeoutHeightGetter + for UseDelegate +where + Chain: HasOutgoingPacketType, + Counterparty: HasHeightType, + Components: DelegateComponent, + Components::Delegate: PacketTimeoutHeightGetter, +{ + fn packet_timeout_height(packet: &Chain::OutgoingPacket) -> Option { + Components::Delegate::packet_timeout_height(packet) + } +} + +impl PacketTimeoutTimestampGetter + for UseDelegate +where + Chain: HasOutgoingPacketType, + Counterparty: HasTimeoutType, + Components: DelegateComponent, + Components::Delegate: PacketTimeoutTimestampGetter, +{ + fn packet_timeout_timestamp(packet: &Chain::OutgoingPacket) -> Option { + Components::Delegate::packet_timeout_timestamp(packet) + } } diff --git a/crates/chain/chain-components/src/traits/queries/channel_end.rs b/crates/chain/chain-components/src/traits/queries/channel_end.rs index 2af54dce0..442134a31 100644 --- a/crates/chain/chain-components/src/traits/queries/channel_end.rs +++ b/crates/chain/chain-components/src/traits/queries/channel_end.rs @@ -6,7 +6,6 @@ use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdTy use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; use crate::traits::types::channel::HasChannelEndType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::proof::HasCommitmentProofType; #[cgp_component { @@ -52,7 +51,7 @@ pub trait CanQueryChannelEndWithProofs: pub struct ChannelNotFoundError<'a, Chain, Counterparty> where - Chain: HasIbcChainTypes, + Chain: HasHeightType + HasChannelIdType + HasPortIdType, { pub chain: &'a Chain, pub channel_id: &'a Chain::ChannelId, @@ -62,7 +61,7 @@ where impl Debug for ChannelNotFoundError<'_, Chain, Counterparty> where - Chain: HasIbcChainTypes, + Chain: HasHeightType + HasChannelIdType + HasPortIdType, { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { writeln!( diff --git a/crates/chain/chain-components/src/traits/queries/client_state.rs b/crates/chain/chain-components/src/traits/queries/client_state.rs index 7a34637e3..a816ff607 100644 --- a/crates/chain/chain-components/src/traits/queries/client_state.rs +++ b/crates/chain/chain-components/src/traits/queries/client_state.rs @@ -10,7 +10,6 @@ use hermes_chain_type_components::traits::types::ibc::client_state::ClientStateO use crate::traits::queries::chain_status::CanQueryChainStatus; use crate::traits::types::client_state::{HasClientStateType, HasRawClientStateType}; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::proof::HasCommitmentProofType; #[cgp_component { @@ -38,7 +37,7 @@ pub trait CanQueryClientState: }] #[async_trait] pub trait CanQueryClientStateWithProofs: - HasClientIdType + HasHeightType + HasCommitmentProofType + HasErrorType + HasHeightType + HasClientIdType + HasCommitmentProofType + HasErrorType where Counterparty: HasClientStateType, { @@ -173,7 +172,7 @@ where impl ClientStateQuerier for UseDelegate where - Chain: HasIbcChainTypes + HasErrorType, + Chain: HasHeightType + HasClientIdType + HasErrorType, Counterparty: HasClientStateType, Components: DelegateComponent, Delegate: ClientStateQuerier, @@ -191,7 +190,7 @@ where impl ClientStateWithProofsQuerier for UseDelegate where - Chain: HasIbcChainTypes + HasCommitmentProofType + HasErrorType, + Chain: HasHeightType + HasClientIdType + HasCommitmentProofType + HasErrorType, Counterparty: HasClientStateType, Components: DelegateComponent, Delegate: ClientStateWithProofsQuerier, @@ -209,7 +208,7 @@ where impl AllClientStatesQuerier for UseDelegate where - Chain: HasIbcChainTypes + HasErrorType, + Chain: HasClientIdType + HasHeightType + HasErrorType, Counterparty: HasClientStateType, Components: DelegateComponent, Delegate: AllClientStatesQuerier, diff --git a/crates/chain/chain-components/src/traits/queries/connection_end.rs b/crates/chain/chain-components/src/traits/queries/connection_end.rs index 752bfa45e..6f601ef0e 100644 --- a/crates/chain/chain-components/src/traits/queries/connection_end.rs +++ b/crates/chain/chain-components/src/traits/queries/connection_end.rs @@ -5,7 +5,6 @@ use hermes_chain_type_components::traits::types::height::HasHeightType; use hermes_chain_type_components::traits::types::ibc::connection_id::HasConnectionIdType; use crate::traits::types::connection::HasConnectionEndType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::proof::HasCommitmentProofType; #[cgp_component { @@ -47,7 +46,7 @@ pub trait CanQueryConnectionEndWithProofs: pub struct ConnectionNotFoundError<'a, Chain, Counterparty> where - Chain: HasIbcChainTypes, + Chain: HasHeightType + HasConnectionIdType, { pub chain: &'a Chain, pub connection_id: &'a Chain::ConnectionId, @@ -56,7 +55,7 @@ where impl Debug for ConnectionNotFoundError<'_, Chain, Counterparty> where - Chain: HasIbcChainTypes, + Chain: HasHeightType + HasConnectionIdType, { fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { writeln!( diff --git a/crates/chain/chain-components/src/traits/queries/counterparty_chain_id.rs b/crates/chain/chain-components/src/traits/queries/counterparty_chain_id.rs index 76ac44aba..ef16698fd 100644 --- a/crates/chain/chain-components/src/traits/queries/counterparty_chain_id.rs +++ b/crates/chain/chain-components/src/traits/queries/counterparty_chain_id.rs @@ -1,7 +1,8 @@ use cgp::prelude::*; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; use crate::traits::types::chain_id::HasChainIdType; -use crate::traits::types::ibc::HasIbcChainTypes; #[cgp_component { provider: CounterpartyChainIdQuerier, @@ -9,7 +10,7 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryCounterpartyChainId: - HasIbcChainTypes + HasErrorType + HasChannelIdType + HasPortIdType + HasErrorType where Counterparty: HasChainIdType, { diff --git a/crates/chain/chain-components/src/traits/queries/packet_acknowledgement.rs b/crates/chain/chain-components/src/traits/queries/packet_acknowledgement.rs index b15c9bd36..53b32b283 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_acknowledgement.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_acknowledgement.rs @@ -1,8 +1,13 @@ use cgp::prelude::*; +use hermes_chain_type_components::traits::types::counterparty::CanUseCounterparty; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::packets::ack::HasAcknowledgementType; use crate::traits::types::proof::HasCommitmentProofType; +use crate::types::aliases::SequenceOf; #[cgp_component { provider: PacketAcknowledgementQuerier, @@ -10,18 +15,19 @@ use crate::traits::types::proof::HasCommitmentProofType; }] #[async_trait] pub trait CanQueryPacketAcknowledgement: - HasIbcChainTypes + HasHeightType + + HasChannelIdType + + HasPortIdType + HasAcknowledgementType + HasCommitmentProofType + HasErrorType -where - Counterparty: HasIbcChainTypes, + + CanUseCounterparty> { async fn query_packet_acknowledgement( &self, channel_id: &Self::ChannelId, port_id: &Self::PortId, - sequence: &Counterparty::Sequence, + sequence: &SequenceOf, height: &Self::Height, ) -> Result<(Self::Acknowledgement, Self::CommitmentProof), Self::Error>; } diff --git a/crates/chain/chain-components/src/traits/queries/packet_acknowledgements.rs b/crates/chain/chain-components/src/traits/queries/packet_acknowledgements.rs index f35e46a16..b28c44ac5 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_acknowledgements.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_acknowledgements.rs @@ -1,8 +1,10 @@ use alloc::vec::Vec; use cgp::prelude::*; - -use crate::traits::types::ibc::HasIbcChainTypes; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; #[cgp_component { provider: PacketAcknowledgementsQuerier, @@ -10,9 +12,9 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryPacketAcknowledgements: - HasIbcChainTypes + HasErrorType + HasHeightType + HasChannelIdType + HasPortIdType + HasErrorType where - Counterparty: HasIbcChainTypes, + Counterparty: HasSequenceType, { /// Query the sequences of the packets that the chain has committed to be /// sent to the counterparty chain, of which the full packet relaying is not diff --git a/crates/chain/chain-components/src/traits/queries/packet_commitment.rs b/crates/chain/chain-components/src/traits/queries/packet_commitment.rs index 4abc5debb..320b135ba 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_commitment.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_commitment.rs @@ -1,6 +1,9 @@ use cgp::prelude::*; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::packets::receive::HasPacketCommitmentType; use crate::traits::types::proof::HasCommitmentProofType; @@ -10,7 +13,10 @@ use crate::traits::types::proof::HasCommitmentProofType; }] #[async_trait] pub trait CanQueryPacketCommitment: - HasIbcChainTypes + HasHeightType + + HasChannelIdType + + HasPortIdType + + HasSequenceType + HasPacketCommitmentType + HasCommitmentProofType + HasErrorType diff --git a/crates/chain/chain-components/src/traits/queries/packet_commitments.rs b/crates/chain/chain-components/src/traits/queries/packet_commitments.rs index aa037c30c..3ddd86d0e 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_commitments.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_commitments.rs @@ -1,8 +1,10 @@ use alloc::vec::Vec; use cgp::prelude::*; - -use crate::traits::types::ibc::HasIbcChainTypes; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; #[cgp_component { provider: PacketCommitmentsQuerier, @@ -10,7 +12,11 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryPacketCommitments: - HasIbcChainTypes + HasErrorType + HasHeightType + + HasChannelIdType + + HasPortIdType + + HasSequenceType + + HasErrorType { /// Query the sequences of the packets that the chain has committed to be /// sent to the counterparty chain, of which the full packet relaying is not diff --git a/crates/chain/chain-components/src/traits/queries/packet_is_received.rs b/crates/chain/chain-components/src/traits/queries/packet_is_received.rs index 8b9187522..d132995a2 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_is_received.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_is_received.rs @@ -1,6 +1,7 @@ use cgp::prelude::*; - -use crate::traits::types::ibc::HasIbcChainTypes; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; #[cgp_component { provider: ReceivedPacketQuerier, @@ -8,9 +9,9 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryPacketIsReceived: - HasIbcChainTypes + HasErrorType + HasChannelIdType + HasPortIdType + HasErrorType where - Counterparty: HasIbcChainTypes, + Counterparty: HasSequenceType, { async fn query_packet_is_received( &self, diff --git a/crates/chain/chain-components/src/traits/queries/packet_receipt.rs b/crates/chain/chain-components/src/traits/queries/packet_receipt.rs index 3ea09a6f4..09b70405b 100644 --- a/crates/chain/chain-components/src/traits/queries/packet_receipt.rs +++ b/crates/chain/chain-components/src/traits/queries/packet_receipt.rs @@ -1,8 +1,13 @@ use cgp::prelude::*; +use hermes_chain_type_components::traits::types::counterparty::CanUseCounterparty; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; -use crate::traits::types::ibc::HasIbcChainTypes; use crate::traits::types::packets::timeout::HasPacketReceiptType; use crate::traits::types::proof::HasCommitmentProofType; +use crate::types::aliases::SequenceOf; #[cgp_component { provider: PacketReceiptQuerier, @@ -10,18 +15,19 @@ use crate::traits::types::proof::HasCommitmentProofType; }] #[async_trait] pub trait CanQueryPacketReceipt: - HasIbcChainTypes + HasHeightType + + HasChannelIdType + + HasPortIdType + HasPacketReceiptType + HasCommitmentProofType + HasErrorType -where - Counterparty: HasIbcChainTypes, + + CanUseCounterparty> { async fn query_packet_receipt( &self, channel_id: &Self::ChannelId, port_id: &Self::PortId, - sequence: &Counterparty::Sequence, + sequence: &SequenceOf, height: &Self::Height, ) -> Result<(Self::PacketReceipt, Self::CommitmentProof), Self::Error>; } diff --git a/crates/chain/chain-components/src/traits/queries/send_packets.rs b/crates/chain/chain-components/src/traits/queries/send_packets.rs index fdc3d89ea..3c0f6ccdc 100644 --- a/crates/chain/chain-components/src/traits/queries/send_packets.rs +++ b/crates/chain/chain-components/src/traits/queries/send_packets.rs @@ -1,9 +1,14 @@ use alloc::vec::Vec; use cgp::prelude::*; +use hermes_chain_type_components::traits::types::counterparty::CanUseCounterparty; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; use hermes_chain_type_components::traits::types::ibc::packet::HasOutgoingPacketType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; -use crate::traits::types::ibc::HasIbcChainTypes; +use crate::types::aliases::{ChannelIdOf, PortIdOf}; #[cgp_component { provider: SendPacketsQuerier, @@ -11,9 +16,13 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQuerySendPackets: - HasIbcChainTypes + HasOutgoingPacketType + HasErrorType -where - Counterparty: HasIbcChainTypes, + HasHeightType + + HasChannelIdType + + HasPortIdType + + HasSequenceType + + HasOutgoingPacketType + + HasErrorType + + CanUseCounterparty + HasPortIdType> { /// Given a list of sequences, a channel and port will query a list of outgoing /// packets which have not been relayed. @@ -21,8 +30,8 @@ where &self, channel_id: &Self::ChannelId, port_id: &Self::PortId, - counterparty_channel_id: &Counterparty::ChannelId, - counterparty_port_id: &Counterparty::PortId, + counterparty_channel_id: &ChannelIdOf, + counterparty_port_id: &PortIdOf, sequences: &[Self::Sequence], // The height is given to query the packets from a specific height. // This height should be the same as the query height from the @@ -37,9 +46,13 @@ where }] #[async_trait] pub trait CanQuerySendPacket: - HasIbcChainTypes + HasOutgoingPacketType + HasErrorType -where - Counterparty: HasIbcChainTypes, + HasHeightType + + HasChannelIdType + + HasPortIdType + + HasSequenceType + + HasOutgoingPacketType + + HasErrorType + + CanUseCounterparty + HasPortIdType> { /// Given a list of sequences, a channel and port will query a list of outgoing /// packets which have not been relayed. @@ -47,8 +60,8 @@ where &self, channel_id: &Self::ChannelId, port_id: &Self::PortId, - counterparty_channel_id: &Counterparty::ChannelId, - counterparty_port_id: &Counterparty::PortId, + counterparty_channel_id: &ChannelIdOf, + counterparty_port_id: &PortIdOf, sequence: &Self::Sequence, height: &Self::Height, ) -> Result; diff --git a/crates/chain/chain-components/src/traits/queries/unreceived_acks_sequences.rs b/crates/chain/chain-components/src/traits/queries/unreceived_acks_sequences.rs index 0f3714636..1992ab95c 100644 --- a/crates/chain/chain-components/src/traits/queries/unreceived_acks_sequences.rs +++ b/crates/chain/chain-components/src/traits/queries/unreceived_acks_sequences.rs @@ -1,8 +1,9 @@ use alloc::vec::Vec; use cgp::prelude::*; - -use crate::traits::types::ibc::HasIbcChainTypes; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; #[cgp_component { provider: UnreceivedAcksSequencesQuerier, @@ -10,9 +11,10 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryUnreceivedAcksSequences: - HasIbcChainTypes + HasErrorType -where - Counterparty: HasIbcChainTypes, + HasChannelIdType + + HasPortIdType + + HasSequenceType + + HasErrorType { /// Performs a query about which IBC packets in the specified list has not /// been acknowledged. Returns the sequence numbers of the packets that were not diff --git a/crates/chain/chain-components/src/traits/queries/unreceived_packet_sequences.rs b/crates/chain/chain-components/src/traits/queries/unreceived_packet_sequences.rs index 9560b5bfb..0e31c7701 100644 --- a/crates/chain/chain-components/src/traits/queries/unreceived_packet_sequences.rs +++ b/crates/chain/chain-components/src/traits/queries/unreceived_packet_sequences.rs @@ -1,8 +1,12 @@ use alloc::vec::Vec; use cgp::prelude::*; +use hermes_chain_type_components::traits::types::counterparty::CanUseCounterparty; +use hermes_chain_type_components::traits::types::ibc::channel_id::HasChannelIdType; +use hermes_chain_type_components::traits::types::ibc::port_id::HasPortIdType; +use hermes_chain_type_components::traits::types::ibc::sequence::HasSequenceType; -use crate::traits::types::ibc::HasIbcChainTypes; +use crate::types::aliases::SequenceOf; #[cgp_component { provider: UnreceivedPacketSequencesQuerier, @@ -10,9 +14,10 @@ use crate::traits::types::ibc::HasIbcChainTypes; }] #[async_trait] pub trait CanQueryUnreceivedPacketSequences: - HasIbcChainTypes + HasErrorType -where - Counterparty: HasIbcChainTypes, + HasChannelIdType + + HasPortIdType + + HasErrorType + + CanUseCounterparty> { /// Given a list of counterparty commitment sequences, /// return a filtered list of sequences which the chain @@ -21,6 +26,6 @@ where &self, channel_id: &Self::ChannelId, port_id: &Self::PortId, - sequences: &[Counterparty::Sequence], - ) -> Result, Self::Error>; + sequences: &[SequenceOf], + ) -> Result>, Self::Error>; } diff --git a/crates/cosmos/cosmos-chain-components/src/components/client.rs b/crates/cosmos/cosmos-chain-components/src/components/client.rs index b806078a4..e88766efe 100644 --- a/crates/cosmos/cosmos-chain-components/src/components/client.rs +++ b/crates/cosmos/cosmos-chain-components/src/components/client.rs @@ -21,7 +21,12 @@ pub use hermes_relayer_components::chain::traits::message_builders::create_clien pub use hermes_relayer_components::chain::traits::message_builders::receive_packet::ReceivePacketMessageBuilderComponent; pub use hermes_relayer_components::chain::traits::message_builders::timeout_unordered_packet::TimeoutUnorderedPacketMessageBuilderComponent; pub use hermes_relayer_components::chain::traits::message_builders::update_client::UpdateClientMessageBuilderComponent; -pub use hermes_relayer_components::chain::traits::packet::fields::OutgoingPacketFieldsReaderComponent; +pub use hermes_relayer_components::chain::traits::packet::fields::{ + PacketDstChannelIdGetterComponent, PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, +}; pub use hermes_relayer_components::chain::traits::packet::filter::{ IncomingPacketFilterComponent, OutgoingPacketFilterComponent, }; @@ -142,7 +147,6 @@ use crate::components::delegate::DelegateCosmosChainComponents; use crate::impls::channel::init_channel_options::ProvideCosmosInitChannelOptionsType; use crate::impls::connection::init_connection_options::ProvideCosmosInitConnectionOptionsType; use crate::impls::events::ProvideCosmosEvents; -use crate::impls::packet::packet_fields::CosmosPacketFieldReader; use crate::impls::packet::packet_from_ack::BuildCosmosPacketFromWriteAck; use crate::impls::packet::packet_message::BuildCosmosPacketMessages; use crate::impls::queries::abci::QueryAbci; @@ -238,8 +242,6 @@ cgp_preset! { ProvideAnyRawClientState, RawConsensusStateTypeComponent: ProvideAnyRawConsensusState, - OutgoingPacketFieldsReaderComponent: - CosmosPacketFieldReader, ConsensusStateHeightQuerierComponent: QueryConsensusStateHeightsAndFindHeightBefore, WriteAckQuerierComponent: @@ -281,7 +283,7 @@ cgp_preset! { [ ReceivePacketMessageBuilderComponent, AckPacketMessageBuilderComponent, - TimeoutUnorderedPacketMessageBuilderComponent, + TimeoutUnorderedPacketMessageBuilderComponent, ]: BuildCosmosPacketMessages, @@ -378,6 +380,14 @@ cgp_preset! { ChannelOpenTryMessageBuilderComponent, ChannelOpenAckMessageBuilderComponent, ChannelOpenConfirmMessageBuilderComponent, + + PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, + PacketDstChannelIdGetterComponent, + PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, + PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, ]: UseDelegate, } diff --git a/crates/cosmos/cosmos-chain-components/src/components/cosmos_to_cosmos.rs b/crates/cosmos/cosmos-chain-components/src/components/cosmos_to_cosmos.rs index e8cb38b9f..a04fa8b50 100644 --- a/crates/cosmos/cosmos-chain-components/src/components/cosmos_to_cosmos.rs +++ b/crates/cosmos/cosmos-chain-components/src/components/cosmos_to_cosmos.rs @@ -11,6 +11,12 @@ pub use hermes_relayer_components::chain::traits::message_builders::connection_h }; pub use hermes_relayer_components::chain::traits::message_builders::create_client::CreateClientMessageBuilderComponent; pub use hermes_relayer_components::chain::traits::message_builders::update_client::UpdateClientMessageBuilderComponent; +pub use hermes_relayer_components::chain::traits::packet::fields::{ + PacketDstChannelIdGetterComponent, PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, +}; pub use hermes_relayer_components::chain::traits::payload_builders::create_client::CreateClientPayloadBuilderComponent; pub use hermes_relayer_components::chain::traits::payload_builders::update_client::UpdateClientPayloadBuilderComponent; pub use hermes_relayer_components::chain::traits::queries::client_state::{ @@ -41,6 +47,7 @@ use crate::impls::client::update_client_message::BuildCosmosUpdateClientMessage; use crate::impls::client::update_client_payload::BuildTendermintUpdateClientPayload; use crate::impls::connection::connection_handshake_message::BuildCosmosConnectionHandshakeMessage; use crate::impls::message_height::GetCosmosCounterpartyMessageHeight; +use crate::impls::packet::packet_fields::CosmosPacketFieldReader; use crate::impls::queries::consensus_state_height::QueryConsensusStateHeightsFromGrpc; use crate::impls::types::client_state::ProvideTendermintClientState; use crate::impls::types::consensus_state::ProvideTendermintConsensusState; @@ -107,5 +114,15 @@ cgp_preset! { QueryConsensusStateHeightsFromGrpc, CounterpartyMessageHeightGetterComponent: GetCosmosCounterpartyMessageHeight, + [ + PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, + PacketDstChannelIdGetterComponent, + PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, + PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, + ]: + CosmosPacketFieldReader, } } diff --git a/crates/cosmos/cosmos-chain-components/src/impls/packet/packet_fields.rs b/crates/cosmos/cosmos-chain-components/src/impls/packet/packet_fields.rs index b2722a1ff..7281eff50 100644 --- a/crates/cosmos/cosmos-chain-components/src/impls/packet/packet_fields.rs +++ b/crates/cosmos/cosmos-chain-components/src/impls/packet/packet_fields.rs @@ -1,5 +1,13 @@ -use hermes_relayer_components::chain::traits::packet::fields::OutgoingPacketFieldsReader; -use hermes_relayer_components::chain::traits::types::ibc::HasIbcChainTypes; +use hermes_chain_type_components::traits::types::height::HasHeightType; +use hermes_chain_type_components::traits::types::timeout::HasTimeoutType; +use hermes_relayer_components::chain::traits::packet::fields::{ + PacketDstChannelIdGetter, PacketDstPortIdGetter, PacketSequenceGetter, + PacketSrcChannelIdGetter, PacketSrcPortIdGetter, PacketTimeoutHeightGetter, + PacketTimeoutTimestampGetter, +}; +use hermes_relayer_components::chain::traits::types::ibc::{ + HasChannelIdType, HasPortIdType, HasSequenceType, +}; use hermes_relayer_components::chain::traits::types::packet::HasOutgoingPacketType; use ibc::core::channel::types::packet::Packet; use ibc::core::channel::types::timeout::{TimeoutHeight, TimeoutTimestamp}; @@ -9,55 +17,76 @@ use ibc::primitives::Timestamp; pub struct CosmosPacketFieldReader; -impl OutgoingPacketFieldsReader - for CosmosPacketFieldReader +impl PacketSrcChannelIdGetter for CosmosPacketFieldReader where Chain: HasOutgoingPacketType - + HasIbcChainTypes< - Counterparty, - Timeout = Timestamp, - ChannelId = ChannelId, - PortId = PortId, - Sequence = Sequence, - >, - Counterparty: HasIbcChainTypes< - Chain, - Timeout = Timestamp, - ChannelId = ChannelId, - PortId = PortId, - Sequence = Sequence, - >, - Chain::Height: From, - Counterparty::Height: From, + + HasChannelIdType, { - fn outgoing_packet_src_channel_id(packet: &Packet) -> &ChannelId { - &packet.chan_id_on_a + fn packet_src_channel_id(packet: &Packet) -> ChannelId { + packet.chan_id_on_a.clone() } +} - fn outgoing_packet_dst_channel_id(packet: &Packet) -> &ChannelId { - &packet.chan_id_on_b +impl PacketSrcPortIdGetter for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType + + HasPortIdType, +{ + fn packet_src_port_id(packet: &Packet) -> PortId { + packet.port_id_on_a.clone() } +} - fn outgoing_packet_src_port(packet: &Packet) -> &PortId { - &packet.port_id_on_a +impl PacketDstChannelIdGetter for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType, + Counterparty: HasChannelIdType, +{ + fn packet_dst_channel_id(packet: &Packet) -> ChannelId { + packet.chan_id_on_b.clone() } +} - fn outgoing_packet_dst_port(packet: &Packet) -> &PortId { - &packet.port_id_on_b +impl PacketDstPortIdGetter for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType, + Counterparty: HasPortIdType, +{ + fn packet_dst_port_id(packet: &Packet) -> PortId { + packet.port_id_on_b.clone() } +} - fn outgoing_packet_sequence(packet: &Packet) -> &Sequence { - &packet.seq_on_a +impl PacketSequenceGetter for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType + + HasSequenceType, +{ + fn packet_sequence(packet: &Packet) -> Sequence { + packet.seq_on_a } +} - fn outgoing_packet_timeout_height(packet: &Packet) -> Option { +impl PacketTimeoutHeightGetter for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType, + Counterparty: HasHeightType, +{ + fn packet_timeout_height(packet: &Packet) -> Option { match &packet.timeout_height_on_b { TimeoutHeight::Never => None, - TimeoutHeight::At(h) => Some((*h).into()), + TimeoutHeight::At(h) => Some(*h), } } +} - fn outgoing_packet_timeout_timestamp(packet: &Packet) -> Option { +impl PacketTimeoutTimestampGetter + for CosmosPacketFieldReader +where + Chain: HasOutgoingPacketType, + Counterparty: HasTimeoutType, +{ + fn packet_timeout_timestamp(packet: &Packet) -> Option { match &packet.timeout_timestamp_on_b { TimeoutTimestamp::Never => None, TimeoutTimestamp::At(timestamp) => Some(*timestamp), diff --git a/crates/cosmos/cosmos-chain-components/src/impls/relay/packet_filter.rs b/crates/cosmos/cosmos-chain-components/src/impls/relay/packet_filter.rs index 60c607cb6..afb194536 100644 --- a/crates/cosmos/cosmos-chain-components/src/impls/relay/packet_filter.rs +++ b/crates/cosmos/cosmos-chain-components/src/impls/relay/packet_filter.rs @@ -2,7 +2,9 @@ use core::marker::PhantomData; use cgp::core::Async; use cgp::prelude::{HasErrorType, HasField}; -use hermes_relayer_components::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_relayer_components::chain::traits::packet::fields::{ + HasPacketDstChannelId, HasPacketDstPortId, HasPacketSrcChannelId, HasPacketSrcPortId, +}; use hermes_relayer_components::chain::traits::packet::filter::{ IncomingPacketFilter, OutgoingPacketFilter, }; @@ -16,7 +18,8 @@ pub struct FilterPacketWithConfig(pub PhantomData); impl OutgoingPacketFilter for FilterPacketWithConfig where - Chain: CanReadOutgoingPacketFields + Chain: HasPacketSrcChannelId + + HasPacketSrcPortId + HasPortIdType + HasChannelIdType + HasField @@ -27,8 +30,8 @@ where packet: &Chain::OutgoingPacket, ) -> Result { Ok(chain.get_field(PhantomData).is_allowed( - Chain::outgoing_packet_src_port(packet), - Chain::outgoing_packet_src_channel_id(packet), + &Chain::packet_src_port_id(packet), + &Chain::packet_src_channel_id(packet), )) } } @@ -41,15 +44,15 @@ where + HasPortIdType + HasChannelIdType + HasErrorType, - Counterparty: CanReadOutgoingPacketFields, + Counterparty: HasPacketDstChannelId + HasPacketDstPortId, { async fn should_relay_incoming_packet( chain: &Chain, packet: &Counterparty::OutgoingPacket, ) -> Result { Ok(chain.get_field(PhantomData).is_allowed( - Counterparty::outgoing_packet_dst_port(packet), - Counterparty::outgoing_packet_dst_channel_id(packet), + &Counterparty::packet_dst_port_id(packet), + &Counterparty::packet_dst_channel_id(packet), )) } } diff --git a/crates/cosmos/cosmos-relayer/src/contexts/chain.rs b/crates/cosmos/cosmos-relayer/src/contexts/chain.rs index 0800c4715..22040516c 100644 --- a/crates/cosmos/cosmos-relayer/src/contexts/chain.rs +++ b/crates/cosmos/cosmos-relayer/src/contexts/chain.rs @@ -46,6 +46,7 @@ use hermes_relayer_components::chain::traits::commitment_prefix::{ }; use hermes_relayer_components::chain::traits::event_subscription::HasEventSubscription; use hermes_relayer_components::chain::traits::message_builders::update_client::CanBuildUpdateClientMessage; +use hermes_relayer_components::chain::traits::packet::fields::HasPacketSrcChannelId; use hermes_relayer_components::chain::traits::packet::filter::{ CanFilterIncomingPacket, CanFilterOutgoingPacket, }; @@ -384,6 +385,7 @@ pub trait CanUseCosmosChain: + CanBuildCreateClientPayload + CanFilterIncomingPacket + CanFilterOutgoingPacket + + HasPacketSrcChannelId { } diff --git a/crates/cosmos/cosmos-wasm-relayer/src/components/cosmos_to_wasm_cosmos.rs b/crates/cosmos/cosmos-wasm-relayer/src/components/cosmos_to_wasm_cosmos.rs index 70a933d15..810fa7162 100644 --- a/crates/cosmos/cosmos-wasm-relayer/src/components/cosmos_to_wasm_cosmos.rs +++ b/crates/cosmos/cosmos-wasm-relayer/src/components/cosmos_to_wasm_cosmos.rs @@ -5,7 +5,7 @@ use hermes_cosmos_chain_components::components::client::{ CreateClientPayloadOptionsTypeComponent, CreateClientPayloadTypeComponent, UpdateClientPayloadBuilderComponent, UpdateClientPayloadTypeComponent, }; -use hermes_cosmos_chain_components::components::cosmos_to_cosmos::CosmosToCosmosComponents; +use hermes_cosmos_chain_components::components::cosmos_to_cosmos::*; use hermes_relayer_components::chain::traits::message_builders::channel_handshake::{ ChannelOpenAckMessageBuilderComponent, ChannelOpenConfirmMessageBuilderComponent, ChannelOpenInitMessageBuilderComponent, ChannelOpenTryMessageBuilderComponent, @@ -31,40 +31,24 @@ use crate::impls::create_client_message::BuildCreateWasmTendermintClientMessage; use crate::impls::update_client_message::BuildUpdateWasmTendermintClientMessage; use crate::types::create_client::ProvidCreateWasmTendermintMessageOptionsType; -cgp_preset! { - CosmosToWasmCosmosComponents { - CreateClientMessageBuilderComponent: - BuildCreateWasmTendermintClientMessage, - CreateClientMessageOptionsTypeComponent: - ProvidCreateWasmTendermintMessageOptionsType, - UpdateClientMessageBuilderComponent: - BuildUpdateWasmTendermintClientMessage, - [ - ClientStateTypeComponent, - ClientStateFieldsComponent, - ConsensusStateTypeComponent, - ConsensusStateFieldComponent, - CreateClientPayloadTypeComponent, - UpdateClientPayloadTypeComponent, - CreateClientPayloadOptionsTypeComponent, - ClientStateQuerierComponent, - ClientStateWithProofsQuerierComponent, - AllClientStatesQuerierComponent, - CreateClientPayloadBuilderComponent, - UpdateClientPayloadBuilderComponent, - ConsensusStateQuerierComponent, - ConsensusStateWithProofsQuerierComponent, - ConnectionOpenInitMessageBuilderComponent, - ConnectionOpenTryMessageBuilderComponent, - ConnectionOpenAckMessageBuilderComponent, - ConnectionOpenConfirmMessageBuilderComponent, - ChannelOpenInitMessageBuilderComponent, - ChannelOpenTryMessageBuilderComponent, - ChannelOpenAckMessageBuilderComponent, - ChannelOpenConfirmMessageBuilderComponent, - ConsensusStateHeightsQuerierComponent, - CounterpartyMessageHeightGetterComponent, - ]: - CosmosToCosmosComponents, +with_cosmos_to_cosmos_components! { + [ + CreateClientMessageBuilderComponent, + CreateClientMessageOptionsTypeComponent, + UpdateClientMessageBuilderComponent, + ], + | Components | { + cgp_preset! { + CosmosToWasmCosmosComponents { + CreateClientMessageBuilderComponent: + BuildCreateWasmTendermintClientMessage, + CreateClientMessageOptionsTypeComponent: + ProvidCreateWasmTendermintMessageOptionsType, + UpdateClientMessageBuilderComponent: + BuildUpdateWasmTendermintClientMessage, + Components: + CosmosToCosmosComponents, + } + } } } diff --git a/crates/mock/mock-relayer/src/relayer_mock/base/impls/chain.rs b/crates/mock/mock-relayer/src/relayer_mock/base/impls/chain.rs index 4db064dd8..07a5f8152 100644 --- a/crates/mock/mock-relayer/src/relayer_mock/base/impls/chain.rs +++ b/crates/mock/mock-relayer/src/relayer_mock/base/impls/chain.rs @@ -22,7 +22,11 @@ use hermes_cosmos_chain_components::components::client::{ use hermes_relayer_components::chain::traits::message_builders::ack_packet::AckPacketMessageBuilder; use hermes_relayer_components::chain::traits::message_builders::receive_packet::ReceivePacketMessageBuilder; use hermes_relayer_components::chain::traits::message_builders::timeout_unordered_packet::TimeoutUnorderedPacketMessageBuilder; -use hermes_relayer_components::chain::traits::packet::fields::OutgoingPacketFieldsReader; +use hermes_relayer_components::chain::traits::packet::fields::{ + PacketDstChannelIdGetter, PacketDstPortIdGetter, PacketSequenceGetter, + PacketSrcChannelIdGetter, PacketSrcPortIdGetter, PacketTimeoutHeightGetter, + PacketTimeoutTimestampGetter, +}; use hermes_relayer_components::chain::traits::payload_builders::ack_packet::AckPacketPayloadBuilder; use hermes_relayer_components::chain::traits::payload_builders::receive_packet::ReceivePacketPayloadBuilder; use hermes_relayer_components::chain::traits::payload_builders::timeout_unordered_packet::TimeoutUnorderedPacketPayloadBuilder; @@ -147,32 +151,44 @@ impl ProvideOutgoingPacketType for MockChain type OutgoingPacket = Packet; } -impl OutgoingPacketFieldsReader for MockChainComponents { - fn outgoing_packet_src_channel_id(packet: &Packet) -> &ChannelId { - &packet.src_channel_id +impl PacketSrcChannelIdGetter for MockChainComponents { + fn packet_src_channel_id(packet: &Packet) -> ChannelId { + packet.src_channel_id.clone() } +} - fn outgoing_packet_src_port(packet: &Packet) -> &PortId { - &packet.src_port_id +impl PacketSrcPortIdGetter for MockChainComponents { + fn packet_src_port_id(packet: &Packet) -> PortId { + packet.src_port_id.clone() } +} - fn outgoing_packet_dst_port(packet: &Packet) -> &PortId { - &packet.dst_port_id +impl PacketDstPortIdGetter for MockChainComponents { + fn packet_dst_port_id(packet: &Packet) -> PortId { + packet.dst_port_id.clone() } +} - fn outgoing_packet_dst_channel_id(packet: &Packet) -> &ChannelId { - &packet.dst_channel_id +impl PacketDstChannelIdGetter for MockChainComponents { + fn packet_dst_channel_id(packet: &Packet) -> ChannelId { + packet.dst_channel_id.clone() } +} - fn outgoing_packet_sequence(packet: &Packet) -> &Sequence { - &packet.sequence +impl PacketSequenceGetter for MockChainComponents { + fn packet_sequence(packet: &Packet) -> Sequence { + packet.sequence } +} - fn outgoing_packet_timeout_height(packet: &Packet) -> Option { +impl PacketTimeoutHeightGetter for MockChainComponents { + fn packet_timeout_height(packet: &Packet) -> Option { Some(packet.timeout_height) } +} - fn outgoing_packet_timeout_timestamp(packet: &Packet) -> Option { +impl PacketTimeoutTimestampGetter for MockChainComponents { + fn packet_timeout_timestamp(packet: &Packet) -> Option { Some(packet.timeout_timestamp.clone()) } } diff --git a/crates/relayer/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs b/crates/relayer/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs index 3365a0647..ac6c1b814 100644 --- a/crates/relayer/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs +++ b/crates/relayer/relayer-components-extra/src/components/extra/closures/chain/packet_relayer.rs @@ -8,9 +8,7 @@ use hermes_relayer_components::chain::traits::message_builders::receive_packet:: use hermes_relayer_components::chain::traits::message_builders::timeout_unordered_packet::{ CanBuildTimeoutUnorderedPacketMessage, TimeoutUnorderedPacketMessageBuilder, }; -use hermes_relayer_components::chain::traits::packet::fields::{ - CanReadOutgoingPacketFields, OutgoingPacketFieldsReader, -}; +use hermes_relayer_components::chain::traits::packet::fields::CanReadPacketFields; use hermes_relayer_components::chain::traits::payload_builders::ack_packet::{ AckPacketPayloadBuilder, CanBuildAckPacketPayload, }; @@ -37,7 +35,7 @@ use crate::components::extra::closures::chain::message_sender::UseExtraChainComp pub trait UseExtraChainComponentsForPacketRelayer: CanQueryPacketIsReceived - + CanReadOutgoingPacketFields + + CanReadPacketFields + CanBuildReceivePacketPayload + CanBuildReceivePacketMessage + CanBuildAckPacketPayload @@ -65,6 +63,7 @@ where + HasReceivePacketPayloadType + HasWriteAckEvent + HasAckPacketPayloadType + + CanReadPacketFields + HasTimeoutUnorderedPacketPayloadType + UseExtraChainComponentsForIbcMessageSender + HasComponents, @@ -76,8 +75,7 @@ where + HasAckPacketPayloadType + HasTimeoutUnorderedPacketPayloadType + HasReceivePacketPayloadType, - Components: OutgoingPacketFieldsReader - + ReceivedPacketQuerier + Components: ReceivedPacketQuerier + ReceivePacketPayloadBuilder + ReceivePacketMessageBuilder + AckPacketPayloadBuilder diff --git a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs index 06299a3f3..3fdc989b7 100644 --- a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs +++ b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/ack_packet_relayer.rs @@ -4,7 +4,7 @@ use hermes_logging_components::traits::has_logger::HasLogger; use hermes_logging_components::traits::logger::CanLog; use hermes_relayer_components::chain::traits::message_builders::ack_packet::CanBuildAckPacketMessage; use hermes_relayer_components::chain::traits::message_builders::update_client::CanBuildUpdateClientMessage; -use hermes_relayer_components::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_relayer_components::chain::traits::packet::fields::CanReadPacketFields; use hermes_relayer_components::chain::traits::payload_builders::ack_packet::CanBuildAckPacketPayload; use hermes_relayer_components::chain::traits::payload_builders::update_client::CanBuildUpdateClientPayload; use hermes_relayer_components::chain::traits::queries::chain_status::CanQueryChainStatus; @@ -66,7 +66,7 @@ where + HasIbcChainTypes + HasConsensusStateType + HasCounterpartyMessageHeight - + CanReadOutgoingPacketFields + + CanReadPacketFields + CanQueryClientState + CanQueryConsensusState + CanQueryConsensusStateHeight diff --git a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs index 397c2f63d..f7aa041ce 100644 --- a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs +++ b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/event_relayer.rs @@ -2,7 +2,7 @@ use cgp::core::component::HasComponents; use cgp::core::error::ErrorRaiser; use hermes_logging_components::traits::has_logger::HasLogger; use hermes_logging_components::traits::logger::CanLog; -use hermes_relayer_components::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_relayer_components::chain::traits::packet::fields::CanReadPacketFields; use hermes_relayer_components::relay::impls::packet_relayers::general::lock::LogSkipRelayLockedPacket; use hermes_relayer_components::relay::traits::chains::{ CanRaiseRelayChainErrors, HasRelayChains, HasRelayClientIds, @@ -33,8 +33,7 @@ where + UseExtraAckPacketRelayer + UseExtraPacketRelayer + HasComponents, - SrcChain: - CanReadOutgoingPacketFields + UseExtraChainComponentsForEventRelayer, + SrcChain: CanReadPacketFields + UseExtraChainComponentsForEventRelayer, DstChain: UseExtraChainComponentsForEventRelayer, Components: DelegatesToExtraRelayPreset + RelayPacketFilter diff --git a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs index 49e66e5e0..d66f3d867 100644 --- a/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs +++ b/crates/relayer/relayer-components-extra/src/components/extra/closures/relay/packet_relayer.rs @@ -43,7 +43,6 @@ where DstChain: UseExtraChainComponentsForPacketRelayer + HasMessageResponseEvents + HasWriteAckEvent, - DstChain::Timeout: Ord, Logger: for<'a> CanLog> + for<'a> CanLog> + for<'a> CanLog>, diff --git a/crates/relayer/relayer-components-extra/src/relay/impls/packet_relayers/extra.rs b/crates/relayer/relayer-components-extra/src/relay/impls/packet_relayers/extra.rs index fc5949a3e..c9e104ffd 100644 --- a/crates/relayer/relayer-components-extra/src/relay/impls/packet_relayers/extra.rs +++ b/crates/relayer/relayer-components-extra/src/relay/impls/packet_relayers/extra.rs @@ -2,7 +2,7 @@ use cgp::prelude::CanRaiseError; use hermes_chain_type_components::traits::types::timeout::HasTimeoutType; use hermes_logging_components::traits::has_logger::HasLogger; use hermes_logging_components::traits::logger::CanLog; -use hermes_relayer_components::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_relayer_components::chain::traits::packet::fields::CanReadPacketFields; use hermes_relayer_components::chain::traits::queries::chain_status::CanQueryChainStatus; use hermes_relayer_components::chain::traits::types::ibc::{HasChannelIdType, HasPortIdType}; use hermes_relayer_components::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent; @@ -45,7 +45,7 @@ where + CanRaiseError + CanRaiseError + for<'a> CanRaiseError>, - SrcChain: CanQueryChainStatus + CanReadOutgoingPacketFields, + SrcChain: CanQueryChainStatus + CanReadPacketFields, DstChain: CanQueryChainStatus + HasWriteAckEvent + HasChannelIdType diff --git a/crates/relayer/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs b/crates/relayer/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs index 370c631d1..39518d6d3 100644 --- a/crates/relayer/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs +++ b/crates/relayer/relayer-components/src/components/default/closures/relay/ack_packet_relayer.rs @@ -12,7 +12,7 @@ use hermes_runtime_components::traits::sleep::CanSleep; use crate::chain::traits::message_builders::ack_packet::CanBuildAckPacketMessage; use crate::chain::traits::message_builders::update_client::CanBuildUpdateClientMessage; -use crate::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use crate::chain::traits::packet::fields::CanReadPacketFields; use crate::chain::traits::payload_builders::ack_packet::CanBuildAckPacketPayload; use crate::chain::traits::payload_builders::update_client::CanBuildUpdateClientPayload; use crate::chain::traits::queries::chain_status::CanQueryChainStatus; @@ -55,10 +55,9 @@ where + CanQueryChainStatus + HasOutgoingPacketType + HasIbcChainTypes - + CanReadOutgoingPacketFields + + CanReadPacketFields + HasConsensusStateType + HasCounterpartyMessageHeight - + CanReadOutgoingPacketFields + CanQueryClientState + CanQueryConsensusState + CanQueryConsensusStateHeight @@ -72,7 +71,7 @@ where + HasIbcChainTypes + HasClientStateFields + HasConsensusStateType - + CanReadOutgoingPacketFields + + CanReadPacketFields + CanBuildAckPacketPayload + CanBuildUpdateClientPayload + HasWriteAckEvent, diff --git a/crates/relayer/relayer-components/src/components/default/closures/relay/event_relayer.rs b/crates/relayer/relayer-components/src/components/default/closures/relay/event_relayer.rs index 23bfdcd80..07d8c807d 100644 --- a/crates/relayer/relayer-components/src/components/default/closures/relay/event_relayer.rs +++ b/crates/relayer/relayer-components/src/components/default/closures/relay/event_relayer.rs @@ -1,6 +1,6 @@ use cgp::core::component::HasComponents; use cgp::core::error::ErrorRaiser; -use hermes_chain_components::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_chain_components::traits::packet::fields::CanReadPacketFields; use hermes_logging_components::traits::has_logger::HasLogger; use hermes_logging_components::traits::logger::CanLog; @@ -35,7 +35,7 @@ where + UseDefaultPacketRelayer + HasComponents, SrcChain: HasChainId - + CanReadOutgoingPacketFields + + CanReadPacketFields + HasSendPacketEvent + CanQueryCounterpartyChainId, DstChain: HasChainId diff --git a/crates/relayer/relayer-components/src/components/default/closures/relay/packet_relayer.rs b/crates/relayer/relayer-components/src/components/default/closures/relay/packet_relayer.rs index 87123ec4f..ef0207789 100644 --- a/crates/relayer/relayer-components/src/components/default/closures/relay/packet_relayer.rs +++ b/crates/relayer/relayer-components/src/components/default/closures/relay/packet_relayer.rs @@ -12,7 +12,7 @@ use crate::chain::traits::message_builders::ack_packet::CanBuildAckPacketMessage use crate::chain::traits::message_builders::receive_packet::CanBuildReceivePacketMessage; use crate::chain::traits::message_builders::timeout_unordered_packet::CanBuildTimeoutUnorderedPacketMessage; use crate::chain::traits::message_builders::update_client::CanBuildUpdateClientMessage; -use crate::chain::traits::packet::fields::CanReadOutgoingPacketFields; +use crate::chain::traits::packet::fields::CanReadPacketFields; use crate::chain::traits::payload_builders::ack_packet::CanBuildAckPacketPayload; use crate::chain::traits::payload_builders::receive_packet::CanBuildReceivePacketPayload; use crate::chain::traits::payload_builders::timeout_unordered_packet::CanBuildTimeoutUnorderedPacketPayload; @@ -71,7 +71,7 @@ where + HasClientStateFields + HasConsensusStateType + HasCounterpartyMessageHeight - + CanReadOutgoingPacketFields + + CanReadPacketFields + CanQueryClientState + CanQueryConsensusState + CanQueryConsensusStateHeight @@ -90,7 +90,7 @@ where + HasConsensusStateType + HasCounterpartyMessageHeight + HasWriteAckEvent - + CanReadOutgoingPacketFields + + CanReadPacketFields + CanQueryClientState + CanQueryPacketIsReceived + CanQueryConsensusState @@ -102,7 +102,6 @@ where + CanBuildReceivePacketMessage, SrcChain::Height: Clone, DstChain::Height: Clone, - DstChain::Timeout: Ord, SrcChain::Runtime: CanSleep, DstChain::Runtime: CanSleep, Logger: for<'a> CanLog> diff --git a/crates/relayer/relayer-components/src/relay/impls/packet_filters/target.rs b/crates/relayer/relayer-components/src/relay/impls/packet_filters/target.rs index b1c745ab2..ebf3c6fb1 100644 --- a/crates/relayer/relayer-components/src/relay/impls/packet_filters/target.rs +++ b/crates/relayer/relayer-components/src/relay/impls/packet_filters/target.rs @@ -1,4 +1,6 @@ -use hermes_chain_components::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_chain_components::traits::packet::fields::{ + HasPacketDstChannelId, HasPacketDstPortId, HasPacketSrcChannelId, HasPacketSrcPortId, +}; use crate::chain::traits::queries::counterparty_chain_id::CanQueryCounterpartyChainId; use crate::chain::traits::types::chain_id::HasChainId; @@ -13,18 +15,19 @@ impl RelayPacketFilter for MatchPacketSourceChain where Relay: HasRelayChains + CanRaiseRelayChainErrors, Relay::DstChain: CanQueryCounterpartyChainId, - Relay::SrcChain: HasChainId + CanReadOutgoingPacketFields, + Relay::SrcChain: + HasChainId + HasPacketDstChannelId + HasPacketDstPortId, { async fn should_relay_packet( relay: &Relay, packet: &PacketOf, ) -> Result { - let dst_channel_id = Relay::SrcChain::outgoing_packet_dst_channel_id(packet); - let dst_port = Relay::SrcChain::outgoing_packet_dst_port(packet); + let dst_channel_id = Relay::SrcChain::packet_dst_channel_id(packet); + let dst_port = Relay::SrcChain::packet_dst_port_id(packet); let src_chain_id = relay .dst_chain() - .query_counterparty_chain_id_from_channel_id(dst_channel_id, dst_port) + .query_counterparty_chain_id_from_channel_id(&dst_channel_id, &dst_port) .await .map_err(Relay::raise_error)?; @@ -37,20 +40,21 @@ where impl RelayPacketFilter for MatchPacketDestinationChain where Relay: HasRelayChains + CanRaiseRelayChainErrors, - Relay::SrcChain: - CanQueryCounterpartyChainId + CanReadOutgoingPacketFields, + Relay::SrcChain: CanQueryCounterpartyChainId + + HasPacketSrcChannelId + + HasPacketSrcPortId, Relay::DstChain: HasChainId, { async fn should_relay_packet( relay: &Relay, packet: &PacketOf, ) -> Result { - let src_channel_id = Relay::SrcChain::outgoing_packet_src_channel_id(packet); - let src_port = Relay::SrcChain::outgoing_packet_src_port(packet); + let src_channel_id = Relay::SrcChain::packet_src_channel_id(packet); + let src_port = Relay::SrcChain::packet_src_port_id(packet); let dst_chain_id = relay .src_chain() - .query_counterparty_chain_id_from_channel_id(src_channel_id, src_port) + .query_counterparty_chain_id_from_channel_id(&src_channel_id, &src_port) .await .map_err(Relay::raise_error)?; diff --git a/crates/relayer/relayer-components/src/relay/impls/packet_lock.rs b/crates/relayer/relayer-components/src/relay/impls/packet_lock.rs index 231757e2c..e1ed764b2 100644 --- a/crates/relayer/relayer-components/src/relay/impls/packet_lock.rs +++ b/crates/relayer/relayer-components/src/relay/impls/packet_lock.rs @@ -4,6 +4,10 @@ use core::marker::PhantomData; use cgp::core::field::impls::use_field::UseField; use cgp::prelude::*; +use hermes_chain_components::traits::packet::fields::{ + HasPacketDstChannelId, HasPacketDstPortId, HasPacketSequence, HasPacketSrcChannelId, + HasPacketSrcPortId, +}; use hermes_chain_components::traits::types::ibc::{ HasChannelIdType, HasPortIdType, HasSequenceType, }; @@ -15,7 +19,6 @@ use hermes_runtime_components::traits::runtime::HasRuntime; use hermes_runtime_components::traits::spawn::CanSpawnTask; use hermes_runtime_components::traits::task::Task; -use crate::chain::traits::packet::fields::CanReadOutgoingPacketFields; use crate::chain::types::aliases::{ChannelIdOf, PortIdOf, SequenceOf}; use crate::relay::traits::chains::{HasRelayChainTypes, HasRelayChains, PacketOf}; use crate::relay::traits::packet_lock::ProvidePacketLock; @@ -137,7 +140,11 @@ impl ProvidePacketLock for ProvidePacketLockWithMutex where Relay: CanUsePacketMutex + HasPacketMutex + HasRelayChains, Relay::Runtime: CanUseChannelsOnce + CanCreateChannelsOnce + CanSpawnTask, - Relay::SrcChain: CanReadOutgoingPacketFields, + Relay::SrcChain: HasPacketSrcChannelId + + HasPacketSrcPortId + + HasPacketDstChannelId + + HasPacketDstPortId + + HasPacketSequence, { type PacketLock<'a> = PacketLock; @@ -146,11 +153,11 @@ where packet: &'a PacketOf, ) -> Option> { let packet_key = ( - Relay::SrcChain::outgoing_packet_src_channel_id(packet).clone(), - Relay::SrcChain::outgoing_packet_src_port(packet).clone(), - Relay::SrcChain::outgoing_packet_dst_channel_id(packet).clone(), - Relay::SrcChain::outgoing_packet_dst_port(packet).clone(), - Relay::SrcChain::outgoing_packet_sequence(packet).clone(), + Relay::SrcChain::packet_src_channel_id(packet), + Relay::SrcChain::packet_src_port_id(packet), + Relay::SrcChain::packet_dst_channel_id(packet), + Relay::SrcChain::packet_dst_port_id(packet), + Relay::SrcChain::packet_sequence(packet), ); let packet_mutex = relay.packet_mutex(); diff --git a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/default.rs b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/default.rs index ac8ab4a0e..e0fd4b5de 100644 --- a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/default.rs +++ b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/default.rs @@ -1,5 +1,5 @@ use cgp::prelude::CanRaiseError; -use hermes_chain_components::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_chain_components::traits::packet::fields::CanReadPacketFields; use hermes_chain_components::traits::types::ibc::{HasChannelIdType, HasPortIdType}; use hermes_chain_components::traits::types::timestamp::HasTimeoutType; use hermes_logging_components::traits::has_logger::HasLogger; @@ -37,7 +37,7 @@ where + HasRelayChains + CanRaiseError + CanRaiseError, - SrcChain: CanQueryChainStatus + CanReadOutgoingPacketFields, + SrcChain: CanQueryChainStatus + CanReadPacketFields, DstChain: CanQueryChainStatus + HasWriteAckEvent + HasChannelIdType diff --git a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs index 847144278..eca0ecc5a 100644 --- a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs +++ b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/general/full_relay.rs @@ -1,5 +1,7 @@ use cgp::prelude::CanRaiseError; -use hermes_chain_components::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_chain_components::traits::packet::fields::{ + HasPacketTimeoutHeight, HasPacketTimeoutTimestamp, +}; use hermes_chain_components::traits::types::ibc::{HasChannelIdType, HasPortIdType}; use hermes_chain_components::traits::types::timestamp::HasTimeoutType; use hermes_logging_components::traits::has_logger::HasLogger; @@ -42,7 +44,9 @@ where + HasRelayChains + CanRaiseError + CanRaiseError, - SrcChain: CanQueryChainStatus + CanReadOutgoingPacketFields, + SrcChain: CanQueryChainStatus + + HasPacketTimeoutHeight + + HasPacketTimeoutTimestamp, DstChain: CanQueryChainStatus + HasWriteAckEvent + HasChannelIdType @@ -63,8 +67,8 @@ where let destination_height = DstChain::chain_status_height(&destination_status); let destination_timestamp = DstChain::chain_status_time(&destination_status); - let packet_timeout_height = SrcChain::outgoing_packet_timeout_height(packet); - let packet_timeout_timestamp = SrcChain::outgoing_packet_timeout_timestamp(packet); + let packet_timeout_height = SrcChain::packet_timeout_height(packet); + let packet_timeout_timestamp = SrcChain::packet_timeout_timestamp(packet); let has_packet_timed_out = match (packet_timeout_height, packet_timeout_timestamp) { (Some(height), Some(timestamp)) => { diff --git a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs index 27bfeca43..b98c02abc 100644 --- a/crates/relayer/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs +++ b/crates/relayer/relayer-components/src/relay/impls/packet_relayers/receive/skip_received_packet.rs @@ -1,6 +1,8 @@ use core::marker::PhantomData; -use hermes_chain_components::traits::packet::fields::CanReadOutgoingPacketFields; +use hermes_chain_components::traits::packet::fields::{ + HasPacketDstChannelId, HasPacketDstPortId, HasPacketSequence, +}; use crate::chain::traits::queries::packet_is_received::CanQueryPacketIsReceived; use crate::chain::traits::types::ibc_events::write_ack::HasWriteAckEvent; @@ -16,7 +18,9 @@ impl ReceivePacketRelayer for SkipReceivedPacketRelayer, - Relay::SrcChain: CanReadOutgoingPacketFields, + Relay::SrcChain: HasPacketDstChannelId + + HasPacketDstPortId + + HasPacketSequence, Relay::DstChain: HasWriteAckEvent, Relay::DstChain: CanQueryPacketIsReceived, { @@ -28,9 +32,9 @@ where let is_packet_received = relay .dst_chain() .query_packet_is_received( - Relay::SrcChain::outgoing_packet_dst_port(packet), - Relay::SrcChain::outgoing_packet_dst_channel_id(packet), - Relay::SrcChain::outgoing_packet_sequence(packet), + &Relay::SrcChain::packet_dst_port_id(packet), + &Relay::SrcChain::packet_dst_channel_id(packet), + &Relay::SrcChain::packet_sequence(packet), ) .await .map_err(Relay::raise_error)?; diff --git a/crates/solomachine/solomachine-chain-components/src/components/solomachine.rs b/crates/solomachine/solomachine-chain-components/src/components/solomachine.rs index ae1fa6ea7..d2a5bbc71 100644 --- a/crates/solomachine/solomachine-chain-components/src/components/solomachine.rs +++ b/crates/solomachine/solomachine-chain-components/src/components/solomachine.rs @@ -10,14 +10,19 @@ pub use hermes_cosmos_chain_components::components::client::{ CreateClientMessageOptionsTypeComponent, CreateClientPayloadOptionsTypeComponent, CreateClientPayloadTypeComponent, InitChannelOptionsTypeComponent, InitConnectionOptionsTypeComponent, MessageResponseEventsGetterComponent, - MessageResponseTypeComponent, OutgoingPacketFieldsReaderComponent, OutgoingPacketTypeComponent, - PortIdTypeComponent, ReceivePacketPayloadTypeComponent, SequenceTypeComponent, - TimeTypeComponent, TimeoutUnorderedPacketPayloadTypeComponent, - UpdateClientPayloadTypeComponent, + MessageResponseTypeComponent, OutgoingPacketTypeComponent, PortIdTypeComponent, + ReceivePacketPayloadTypeComponent, SequenceTypeComponent, TimeTypeComponent, + TimeoutUnorderedPacketPayloadTypeComponent, UpdateClientPayloadTypeComponent, }; pub use hermes_cosmos_chain_components::impls::client::update_client_message::BuildCosmosUpdateClientMessage; pub use hermes_cosmos_chain_components::impls::packet::packet_fields::CosmosPacketFieldReader; pub use hermes_cosmos_chain_components::impls::types::chain::ProvideCosmosChainTypes; +pub use hermes_cosmos_relayer::presets::chain::{ + PacketDstChannelIdGetterComponent, PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, +}; pub use hermes_encoding_components::impls::default_encoding::GetDefaultEncoding; pub use hermes_encoding_components::traits::has_encoding::EncodingGetterComponent; pub use hermes_relayer_components::chain::traits::commitment_prefix::CommitmentPrefixTypeComponent; @@ -119,7 +124,15 @@ cgp_preset! { ProvideSolomachineClientState, ConsensusStateTypeComponent: ProvideSolomachineConsensusState, - OutgoingPacketFieldsReaderComponent: + [ + PacketSrcChannelIdGetterComponent, + PacketSrcPortIdGetterComponent, + PacketDstChannelIdGetterComponent, + PacketDstPortIdGetterComponent, + PacketSequenceGetterComponent, + PacketTimeoutHeightGetterComponent, + PacketTimeoutTimestampGetterComponent, + ]: CosmosPacketFieldReader, MessageSenderComponent: ProcessSolomachineMessages,