diff --git a/collator/src/collator/build_block.rs b/collator/src/collator/build_block.rs index a25241501..07a80ecf7 100644 --- a/collator/src/collator/build_block.rs +++ b/collator/src/collator/build_block.rs @@ -173,7 +173,7 @@ impl CollatorStdImpl { if capabilities.contains(GlobalCapability::CapReportVersion) { new_block_info.set_gen_software(Some(GlobalVersion { version: self.config.supported_block_version, - capabilities: self.config.supported_capabilities.into(), + capabilities: self.config.supported_capabilities, })); } diff --git a/collator/src/manager/mod.rs b/collator/src/manager/mod.rs index 140ad06b4..9b22c5a7c 100644 --- a/collator/src/manager/mod.rs +++ b/collator/src/manager/mod.rs @@ -1056,6 +1056,8 @@ where .or_default(); last_collated_chain_times.push((chain_time, force_mc_block)); + let mc_block_min_interval_ms = self.config.mc_block_min_interval.as_millis() as u64; + // check if should collate master in current shard let should_collate_mc_block = if force_mc_block { tracing::info!( @@ -1069,20 +1071,19 @@ where let chain_time_elapsed = chain_time .checked_sub(self.next_mc_block_chain_time) .unwrap_or_default(); - let mc_block_interval_elapsed = - chain_time_elapsed > self.config.mc_block_min_interval_ms; + let mc_block_interval_elapsed = chain_time_elapsed > mc_block_min_interval_ms; if mc_block_interval_elapsed { tracing::debug!( target: tracing_targets::COLLATION_MANAGER, "Master block interval is {}ms, elapsed chain time {}ms exceeded the interval in current shard {}", - self.config.mc_block_min_interval_ms, chain_time_elapsed, shard_id, + mc_block_min_interval_ms, chain_time_elapsed, shard_id, ); } else { tracing::debug!( target: tracing_targets::COLLATION_MANAGER, "Elapsed chain time {}ms has not elapsed master block interval {}ms in current shard \ - do not need to collate next master block", - chain_time_elapsed, self.config.mc_block_min_interval_ms, + chain_time_elapsed, mc_block_min_interval_ms, ); } mc_block_interval_elapsed @@ -1103,7 +1104,7 @@ where || (*chain_time) .checked_sub(self.next_mc_block_chain_time) .unwrap_or_default() - > self.config.mc_block_min_interval_ms + > mc_block_min_interval_ms }) { first_elapsed_chain_times.push(*chain_time_that_elapsed); @@ -1129,7 +1130,7 @@ where target: tracing_targets::COLLATION_MANAGER, "Master block collation forced or interval {}ms elapsed in every shard - \ will collate next master block with chain time {}ms", - self.config.mc_block_min_interval_ms, max_first_chain_time_that_elapsed, + mc_block_min_interval_ms, max_first_chain_time_that_elapsed, ); return ( should_collate_mc_block, diff --git a/collator/src/types.rs b/collator/src/types.rs index 41d3ddbde..3cf2a903e 100644 --- a/collator/src/types.rs +++ b/collator/src/types.rs @@ -1,4 +1,5 @@ use std::sync::Arc; +use std::time::Duration; use everscale_crypto::ed25519::KeyPair; use everscale_types::cell::HashBytes; @@ -10,15 +11,16 @@ use serde::{Deserialize, Serialize}; use tycho_block_util::block::{BlockStuffAug, ValidatorSubsetInfo}; use tycho_block_util::state::ShardStateStuff; use tycho_network::{DhtClient, OverlayService, PeerResolver}; -use tycho_util::FastHashMap; +use tycho_util::{serde_helpers, FastHashMap}; #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(default)] pub struct CollationConfig { pub supported_block_version: u32, - pub supported_capabilities: u64, + pub supported_capabilities: GlobalCapabilities, - pub mc_block_min_interval_ms: u64, + #[serde(with = "serde_helpers::humantime")] + pub mc_block_min_interval: Duration, pub max_mc_block_delta_from_bc_to_await_own: i32, pub max_uncommitted_chain_length: u32, pub uncommitted_chain_to_import_next_anchor: u32, @@ -34,7 +36,7 @@ impl Default for CollationConfig { supported_block_version: 50, supported_capabilities: supported_capabilities(), - mc_block_min_interval_ms: 2500, + mc_block_min_interval: Duration::from_millis(2500), max_mc_block_delta_from_bc_to_await_own: 2, max_uncommitted_chain_length: 31, @@ -47,7 +49,7 @@ impl Default for CollationConfig { } } -fn supported_capabilities() -> u64 { +pub fn supported_capabilities() -> GlobalCapabilities { GlobalCapabilities::from([ GlobalCapability::CapCreateStatsEnabled, GlobalCapability::CapBounceMsgBody, @@ -69,7 +71,6 @@ fn supported_capabilities() -> u64 { GlobalCapability::CapSuspendedList, GlobalCapability::CapsTvmBugfixes2022, ]) - .into_inner() } #[derive(Debug, Serialize, Deserialize, Clone)] diff --git a/collator/tests/collation_tests.rs b/collator/tests/collation_tests.rs index 6c340738c..88610ea3c 100644 --- a/collator/tests/collation_tests.rs +++ b/collator/tests/collation_tests.rs @@ -16,7 +16,7 @@ use tycho_collator::mempool::MempoolAdapterStubImpl; use tycho_collator::queue_adapter::MessageQueueAdapterStdImpl; use tycho_collator::state_node::{StateNodeAdapter, StateNodeAdapterStdImpl}; use tycho_collator::test_utils::{prepare_test_storage, try_init_test_tracing}; -use tycho_collator::types::{CollationConfig, MsgsExecutionParams}; +use tycho_collator::types::{supported_capabilities, CollationConfig, MsgsExecutionParams}; use tycho_collator::validator::client::retry::BackoffConfig; use tycho_collator::validator::config::ValidatorConfig; use tycho_collator::validator::validator::ValidatorStdImplFactory; @@ -84,7 +84,7 @@ async fn test_collation_process_on_stubs() { let config = CollationConfig { supported_block_version: 50, supported_capabilities: supported_capabilities(), - mc_block_min_interval_ms: 10000, + mc_block_min_interval: Duration::from_secs(1), max_mc_block_delta_from_bc_to_await_own: 2, max_uncommitted_chain_length: 31, uncommitted_chain_to_import_next_anchor: 8, @@ -187,28 +187,3 @@ async fn test_collation_process_on_stubs() { } } } - -fn supported_capabilities() -> u64 { - let caps = GlobalCapability::CapCreateStatsEnabled as u64 - | GlobalCapability::CapBounceMsgBody as u64 - | GlobalCapability::CapReportVersion as u64 - | GlobalCapability::CapShortDequeue as u64 - | GlobalCapability::CapRemp as u64 - | GlobalCapability::CapInitCodeHash as u64 - | GlobalCapability::CapOffHypercube as u64 - | GlobalCapability::CapFixTupleIndexBug as u64 - | GlobalCapability::CapFastStorageStat as u64 - | GlobalCapability::CapMyCode as u64 - | GlobalCapability::CapCopyleft as u64 - | GlobalCapability::CapFullBodyInBounced as u64 - | GlobalCapability::CapStorageFeeToTvm as u64 - | GlobalCapability::CapWorkchains as u64 - | GlobalCapability::CapStcontNewFormat as u64 - | GlobalCapability::CapFastStorageStatBugfix as u64 - | GlobalCapability::CapResolveMerkleCell as u64 - | GlobalCapability::CapFeeInGasUnits as u64 - | GlobalCapability::CapBounceAfterFailedAction as u64 - | GlobalCapability::CapSuspendedList as u64 - | GlobalCapability::CapsTvmBugfixes2022 as u64; - caps -}