Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(test/relayer): missing consensus state in light_client #256

Merged
merged 17 commits into from
Feb 6, 2025
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,8 @@ use crate::impls::starknet_to_cosmos::create_client_message::BuildStarknetCreate
use crate::impls::starknet_to_cosmos::packet_fields::ReadPacketDstStarknetFields;
use crate::impls::starknet_to_cosmos::query_consensus_state_height::QueryStarknetConsensusStateHeightsFromGrpc;
use crate::impls::starknet_to_cosmos::update_client_message::BuildStarknetUpdateClientMessage;
use crate::impls::starknet_to_cosmos::update_client_payload::BuildUpdateCometClientPayload;
use crate::types::cosmos::client_state::UseCometClientState;
use crate::types::cosmos::consensus_state::CometConsensusState;
use crate::types::cosmos::update::CometUpdateHeader;

cgp_preset! {
StarknetToCosmosComponents {
Expand All @@ -45,9 +43,11 @@ cgp_preset! {
ConsensusStateQuerierComponent,
ConsensusStateWithProofsQuerierComponent,
CreateClientPayloadTypeComponent,
UpdateClientPayloadTypeComponent,
CreateClientMessageOptionsTypeComponent,
CreateClientPayloadOptionsTypeComponent,
CreateClientPayloadBuilderComponent,
UpdateClientPayloadBuilderComponent,
ChannelOpenInitMessageBuilderComponent,
]:
CosmosToCosmosComponents,
Expand All @@ -60,10 +60,6 @@ cgp_preset! {
UseCometClientState,
ConsensusStateTypeComponent:
WithType<CometConsensusState>,
UpdateClientPayloadTypeComponent:
WithType<CometUpdateHeader>,
UpdateClientPayloadBuilderComponent:
BuildUpdateCometClientPayload,
UpdateClientMessageBuilderComponent:
BuildStarknetUpdateClientMessage,
ConsensusStateHeightsQuerierComponent:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use hermes_chain_components::traits::types::ibc::HasClientIdType;
use hermes_chain_components::traits::types::message::HasMessageType;
use hermes_chain_components::traits::types::update_client::HasUpdateClientPayloadType;
use hermes_chain_type_components::traits::types::address::HasAddressType;
use hermes_cosmos_chain_components::types::payloads::client::CosmosUpdateClientPayload;
use hermes_encoding_components::traits::encode::CanEncode;
use hermes_encoding_components::traits::has_encoding::HasEncoding;
use hermes_encoding_components::traits::types::encoded::HasEncodedType;
Expand All @@ -33,36 +34,45 @@ where
+ HasEncoding<AsFelt, Encoding = Encoding>
+ CanQueryContractAddress<symbol!("ibc_core_contract_address")>
+ CanRaiseAsyncError<Encoding::Error>,
Counterparty: HasUpdateClientPayloadType<Chain, UpdateClientPayload = CometUpdateHeader>,
Counterparty:
HasUpdateClientPayloadType<Chain, UpdateClientPayload = CosmosUpdateClientPayload>,
Encoding: HasEncodedType<Encoded = Vec<Felt>>
+ CanEncode<ViaCairo, CometUpdateHeader>
+ CanEncode<ViaCairo, (ClientId, Vec<Felt>)>,
{
async fn build_update_client_message(
chain: &Chain,
client_id: &ClientId,
update_header: CometUpdateHeader,
counterparty_payload: CosmosUpdateClientPayload,
) -> Result<Vec<Chain::Message>, Chain::Error> {
let encoding = chain.encoding();
let mut messages = Vec::with_capacity(counterparty_payload.headers.len());

let contract_address = chain.query_contract_address(PhantomData).await?;
for header in counterparty_payload.headers {
let update_header = CometUpdateHeader::from(header);

let raw_header = encoding
.encode(&update_header)
.map_err(Chain::raise_error)?;
let encoding = chain.encoding();

let calldata = encoding
.encode(&(client_id.clone(), raw_header))
.map_err(Chain::raise_error)?;
let contract_address = chain.query_contract_address(PhantomData).await?;

let call = Call {
to: contract_address,
selector: selector!("update_client"),
calldata,
};
let raw_header = encoding
.encode(&update_header)
.map_err(Chain::raise_error)?;

let message = StarknetMessage::new(call);
let calldata = encoding
.encode(&(client_id.clone(), raw_header))
.map_err(Chain::raise_error)?;

Ok(vec![message])
let call = Call {
to: contract_address,
selector: selector!("update_client"),
calldata,
};

let message = StarknetMessage::new(call);

messages.push(message);
}

Ok(messages)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ pub mod create_client_message;
pub mod packet_fields;
pub mod query_consensus_state_height;
pub mod update_client_message;
pub mod update_client_payload;

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ impl Transformer for EncodeClientStatus {
}
}

impl From<CometClientState> for Any {
impl From<CometClientState> for IbcCometClientState {
fn from(client_state: CometClientState) -> Self {
IbcCometClientState::new(
client_state.chain_id,
Expand All @@ -178,7 +178,12 @@ impl From<CometClientState> for Any {
},
)
.expect("no error")
.into()
}
}

impl From<CometClientState> for Any {
fn from(client_state: CometClientState) -> Self {
IbcCometClientState::from(client_state).into()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ use cgp::prelude::*;
use hermes_encoding_components::impls::encode_mut::combine::CombineEncoders;
use hermes_encoding_components::impls::encode_mut::field::EncodeField;
use hermes_wasm_encoding_components::components::MutEncoderComponent;
use ibc::clients::tendermint::types::{
ConsensusState as TendermintConsensusState, Header as TendermintHeader,
};

use crate::types::cosmos::height::Height;

Expand All @@ -28,3 +31,32 @@ delegate_components! {
>,
}
}

impl From<TendermintHeader> for CometUpdateHeader {
fn from(header: TendermintHeader) -> Self {
let trusted_height = Height {
revision_number: header.trusted_height.revision_number(),
revision_height: header.trusted_height.revision_height(),
};

let target_height = {
let header_height = header.height();

Height {
revision_number: header_height.revision_number(),
revision_height: header_height.revision_height(),
}
};

let time = header.timestamp().expect("valid timestamp").nanoseconds() / 1_000_000_000;

let root = TendermintConsensusState::from(header).root.into_vec();

Self {
trusted_height,
target_height,
time,
root,
}
}
}
11 changes: 6 additions & 5 deletions relayer/crates/starknet-chain-context/src/contexts/chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use hermes_chain_type_components::traits::types::message_response::HasMessageRes
use hermes_cosmos_chain_components::components::delegate::DelegateCosmosChainComponents;
use hermes_cosmos_chain_components::types::connection::CosmosInitConnectionOptions;
use hermes_cosmos_chain_components::types::key_types::secp256k1::Secp256k1KeyPair;
use hermes_cosmos_chain_components::types::payloads::client::CosmosUpdateClientPayload;
use hermes_cosmos_relayer::contexts::chain::CosmosChain;
use hermes_encoding_components::traits::has_encoding::{
DefaultEncodingGetter, EncodingGetter, HasDefaultEncoding, ProvideEncodingType,
Expand Down Expand Up @@ -164,11 +165,12 @@ use hermes_starknet_chain_components::types::connection_id::{ConnectionEnd, Conn
use hermes_starknet_chain_components::types::consensus_state::WasmStarknetConsensusState;
use hermes_starknet_chain_components::types::cosmos::client_state::CometClientState;
use hermes_starknet_chain_components::types::cosmos::consensus_state::CometConsensusState;
use hermes_starknet_chain_components::types::cosmos::update::CometUpdateHeader;
use hermes_starknet_chain_components::types::event::StarknetEvent;
use hermes_starknet_chain_components::types::events::packet::WriteAcknowledgementEvent;
use hermes_starknet_chain_components::types::message_response::StarknetMessageResponse;
use hermes_starknet_chain_components::types::payloads::client::StarknetCreateClientPayloadOptions;
use hermes_starknet_chain_components::types::payloads::client::{
StarknetCreateClientPayloadOptions, StarknetUpdateClientPayload,
};
use hermes_starknet_test_components::impls::types::wallet::ProvideStarknetWalletType;
use hermes_test_components::chain::traits::assert::eventual_amount::CanAssertEventualAmount;
use hermes_test_components::chain::traits::messages::ibc_transfer::CanBuildIbcTokenTransferMessage;
Expand Down Expand Up @@ -375,7 +377,7 @@ pub trait CanUseStarknetChain:
CreateClientPayloadOptions = StarknetCreateClientPayloadOptions,
> + CanBuildCreateClientPayload<CosmosChain>
+ CanBuildCreateClientMessage<CosmosChain>
+ CanBuildUpdateClientPayload<CosmosChain>
+ CanBuildUpdateClientPayload<CosmosChain, UpdateClientPayload = StarknetUpdateClientPayload>
+ CanBuildUpdateClientMessage<CosmosChain>
+ CanQueryClientState<CosmosChain>
+ CanQueryClientStateWithProofs<CosmosChain>
Expand Down Expand Up @@ -450,15 +452,14 @@ impl CanUseStarknetChain for StarknetChain {}

pub trait CanUseCosmosChainWithStarknet: HasClientStateType<StarknetChain, ClientState = CometClientState>
+ HasConsensusStateType<StarknetChain, ConsensusState = CometConsensusState>
+ HasUpdateClientPayloadType<StarknetChain, UpdateClientPayload = CometUpdateHeader>
+ HasUpdateClientPayloadType<StarknetChain, UpdateClientPayload = CosmosUpdateClientPayload>
+ HasInitConnectionOptionsType<StarknetChain, InitConnectionOptions = CosmosInitConnectionOptions>
+ HasChainId<ChainId = ChainId>
+ HasCounterpartyMessageHeight<StarknetChain>
+ HasClientStateFields<StarknetChain>
+ CanQueryClientState<StarknetChain>
+ CanQueryConsensusState<StarknetChain>
+ CanBuildCreateClientMessage<StarknetChain>
+ CanBuildUpdateClientPayload<StarknetChain>
+ CanBuildUpdateClientMessage<StarknetChain>
+ CanQueryConsensusStateHeight<StarknetChain>
+ CanBuildCreateClientPayload<StarknetChain>
Expand Down
Loading
Loading