From 6081f8e4f69db173c032d0a4328566df83074915 Mon Sep 17 00:00:00 2001 From: Rano | Ranadeep Date: Thu, 13 Jun 2024 11:46:41 +0200 Subject: [PATCH] fix: build correct host ConsensusState (#180) * fix with visible hash * fix timestamp in consensus state * log da height too * use modulo --- modules/sov-consensus-state-tracker/src/celestia_da.rs | 9 ++++++--- modules/sov-consensus-state-tracker/src/lib.rs | 9 +++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/sov-consensus-state-tracker/src/celestia_da.rs b/modules/sov-consensus-state-tracker/src/celestia_da.rs index 675342ec..52f8f025 100644 --- a/modules/sov-consensus-state-tracker/src/celestia_da.rs +++ b/modules/sov-consensus-state-tracker/src/celestia_da.rs @@ -6,7 +6,6 @@ use sov_celestia_client::consensus_state::ConsensusState as HostConsensusState; use sov_celestia_client::types::consensus_state::{ ConsensusState as SovConsensusState, TmConsensusParams, }; -use sov_rollup_interface::da::BlockHeaderTrait; use crate::HasConsensusState; @@ -14,10 +13,14 @@ impl HasConsensusState for CelestiaSpec { fn consensus_state(header: &CelestiaHeader, user_hash: [u8; 32]) -> HostConsensusState { let sovereign_params = CommitmentRoot::from_bytes(&user_hash).into(); + let protobuf_time = tendermint::time::Time::decode(header.header.time.as_slice()) + .expect("Timestamp must be valid"); + let da_params = TmConsensusParams::new( tendermint::Time::from_unix_timestamp( - header.time().secs(), - header.time().subsec_nanos(), + protobuf_time.unix_timestamp(), + u32::try_from(protobuf_time.unix_timestamp_nanos() % 1_000_000_000) + .expect("no overflow"), ) .expect("Could not obtain timestamp from header"), tendermint::Hash::decode_vec(&header.header.next_validators_hash) diff --git a/modules/sov-consensus-state-tracker/src/lib.rs b/modules/sov-consensus-state-tracker/src/lib.rs index 6129f672..2780573a 100644 --- a/modules/sov-consensus-state-tracker/src/lib.rs +++ b/modules/sov-consensus-state-tracker/src/lib.rs @@ -10,6 +10,7 @@ use ibc_core::client::types::Height; pub use mock_da::*; use sov_celestia_client::consensus_state::ConsensusState as HostConsensusState; use sov_ibc::context::HOST_REVISION_NUMBER; +use sov_modules_api::da::BlockHeaderTrait; use sov_modules_api::kernel_state::BootstrapWorkingSet; use sov_modules_api::runtime::capabilities::{BatchSelector, Kernel, KernelSlotHooks}; use sov_modules_api::{DaSpec, Gas, KernelModule, KernelWorkingSet, Spec, StateCheckpoint}; @@ -138,7 +139,9 @@ where .host_height_map .set(&height, kernel_working_set.inner); - let consensus_state = Da::consensus_state(slot_header, pre_state_root.clone().into()); + let visible_hash = S::VisibleHash::from(pre_state_root.clone()); + + let consensus_state = Da::consensus_state(slot_header, visible_hash.into()); self.ibc.host_timestamp_map.set( &consensus_state.timestamp().into(), @@ -151,7 +154,9 @@ where kernel_working_set.inner, ); - info!("Host ConsensusState is stored at {height}: {consensus_state:?}"); + let da_height = slot_header.height(); + + info!("Host ConsensusState is stored at rollup {height} and DA {da_height}: {consensus_state:?}"); } gas_price