git.delta.rocks / unique-network / refs/commits / 184b30a86bc8

difftreelog

feat finalization can be enabled in dev mode

Daniel Shiposha2023-10-02parent: #b6b1e0f.patch.diff
in: master

3 files changed

modifiednode/cli/src/cli.rsdiffbeforeafterboth
--- a/node/cli/src/cli.rs
+++ b/node/cli/src/cli.rs
@@ -80,7 +80,7 @@
 	/// an empty block will be sealed automatically
 	/// after the `--idle-autoseal-interval` milliseconds.
 	///
-	/// The default interval is 500 milliseconds
+	/// The default interval is 500 milliseconds.
 	#[structopt(default_value = "500", long)]
 	pub idle_autoseal_interval: u64,
 
@@ -88,6 +88,12 @@
 	#[structopt(long)]
 	pub disable_autoseal_on_tx: bool,
 
+	/// Finalization delay (in seconds) of auto-sealed blocks in the `--dev` mode.
+	///
+	/// Disabled by default.
+	#[structopt(long)]
+	pub autoseal_finalization_delay: Option<u64>,
+
 	/// Disable automatic hardware benchmarks.
 	///
 	/// By default these benchmarks are automatically ran at startup and measure
modifiednode/cli/src/command.rsdiffbeforeafterboth
62use sc_service::config::{BasePath, PrometheusConfig};62use sc_service::config::{BasePath, PrometheusConfig};
63use sp_core::hexdisplay::HexDisplay;63use sp_core::hexdisplay::HexDisplay;
64use sp_runtime::traits::{AccountIdConversion, Block as BlockT};64use sp_runtime::traits::{AccountIdConversion, Block as BlockT};
65use std::{time::Duration};
6665
67use up_common::types::opaque::{Block, RuntimeId};66use up_common::types::opaque::{Block, RuntimeId};
6867
481 if is_dev_service {480 if is_dev_service {
482 info!("Running Dev service");481 info!("Running Dev service");
483
484 let autoseal_interval = Duration::from_millis(cli.idle_autoseal_interval);
485482
486 let mut config = config;483 let mut config = config;
487484
488 config.state_pruning = Some(sc_service::PruningMode::ArchiveAll);485 config.state_pruning = Some(sc_service::PruningMode::ArchiveAll);
489486
490 return start_node_using_chain_runtime! {487 return start_node_using_chain_runtime! {
491 start_dev_node(config, autoseal_interval, cli.disable_autoseal_on_tx).map_err(Into::into)488 start_dev_node(config, cli.idle_autoseal_interval, cli.autoseal_finalization_delay, cli.disable_autoseal_on_tx).map_err(Into::into)
492 };489 };
493 };490 };
494491
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -169,9 +169,9 @@
 }
 
 impl AutosealInterval {
-	pub fn new(config: &Configuration, interval: Duration) -> Self {
+	pub fn new(config: &Configuration, interval: u64) -> Self {
 		let _tokio_runtime = config.tokio_handle.enter();
-		let interval = tokio::time::interval(interval);
+		let interval = tokio::time::interval(Duration::from_millis(interval));
 
 		Self { interval }
 	}
@@ -885,7 +885,8 @@
 /// the parachain inherent
 pub fn start_dev_node<Runtime, RuntimeApi, ExecutorDispatch>(
 	config: Configuration,
-	autoseal_interval: Duration,
+	autoseal_interval: u64,
+	autoseal_finalize_delay: Option<u64>,
 	disable_autoseal_on_tx: bool,
 ) -> sc_service::error::Result<TaskManager>
 where
@@ -913,7 +914,10 @@
 		+ sp_consensus_aura::AuraApi<Block, AuraId>,
 	ExecutorDispatch: NativeExecutionDispatch + 'static,
 {
-	use sc_consensus_manual_seal::{run_manual_seal, EngineCommand, ManualSealParams};
+	use sc_consensus_manual_seal::{
+		run_manual_seal, run_delayed_finalize, EngineCommand, ManualSealParams,
+		DelayedFinalizeParams,
+	};
 	use fc_consensus::FrontierBlockImport;
 
 	let sc_service::PartialComponents {
@@ -984,18 +988,19 @@
 				.filter(move |_| futures::future::ready(!disable_autoseal_on_tx))
 				.map(|_| EngineCommand::SealNewBlock {
 					create_empty: true,
-					finalize: false, // todo:collator finalize true
+					finalize: false,
 					parent_hash: None,
 					sender: None,
 				}),
 		);
 
 		let autoseal_interval = Box::pin(AutosealInterval::new(&config, autoseal_interval));
+
 		let idle_commands_stream: Box<
 			dyn Stream<Item = EngineCommand<Hash>> + Send + Sync + Unpin,
 		> = Box::new(autoseal_interval.map(|_| EngineCommand::SealNewBlock {
 			create_empty: true,
-			finalize: false, // todo:collator finalize true
+			finalize: false,
 			parent_hash: None,
 			sender: None,
 		}));
@@ -1005,6 +1010,20 @@
 		let slot_duration = cumulus_client_consensus_aura::slot_duration(&*client)?;
 		let client_set_aside_for_cidp = client.clone();
 
+		if let Some(delay_sec) = autoseal_finalize_delay {
+			let spawn_handle = task_manager.spawn_handle();
+
+			task_manager.spawn_essential_handle().spawn_blocking(
+				"finalization_task",
+				Some("block-authoring"),
+				run_delayed_finalize(DelayedFinalizeParams {
+					client: client.clone(),
+					delay_sec,
+					spawn_handle,
+				}),
+			);
+		}
+
 		task_manager.spawn_essential_handle().spawn_blocking(
 			"authorship_task",
 			Some("block-authoring"),