cumulus_client_consensus_aura/
lib.rs1use codec::Encode;
26use cumulus_primitives_core::PersistedValidationData;
27
28use cumulus_primitives_core::relay_chain::HeadData;
29use polkadot_primitives::{BlockNumber as RBlockNumber, Hash as RHash};
30use sp_runtime::traits::{Block as BlockT, NumberFor};
31use std::{fs, fs::File, path::PathBuf};
32
33mod import_queue;
34
35pub use import_queue::{build_verifier, import_queue, BuildVerifierParams, ImportQueueParams};
36use polkadot_node_primitives::PoV;
37pub use sc_consensus_aura::{
38 slot_duration, standalone::slot_duration_at, AuraVerifier, BuildAuraWorkerParams,
39 SlotProportion,
40};
41pub use sc_consensus_slots::InherentDataProviderExt;
42
43pub mod collator;
44pub mod collators;
45pub mod equivocation_import_queue;
46
47const LOG_TARGET: &str = "aura::cumulus";
48
49pub(crate) fn export_pov_to_path<Block: BlockT>(
56 path: PathBuf,
57 pov: PoV,
58 block_hash: Block::Hash,
59 block_number: NumberFor<Block>,
60 parent_header: Block::Header,
61 relay_parent_storage_root: RHash,
62 relay_parent_number: RBlockNumber,
63 max_pov_size: u32,
64) {
65 if let Err(error) = fs::create_dir_all(&path) {
66 tracing::error!(target: LOG_TARGET, %error, path = %path.display(), "Failed to create PoV export directory");
67 return
68 }
69
70 let mut file = match File::create(path.join(format!("{block_hash:?}_{block_number}.pov"))) {
71 Ok(f) => f,
72 Err(error) => {
73 tracing::error!(target: LOG_TARGET, %error, "Failed to export PoV.");
74 return
75 },
76 };
77
78 pov.encode_to(&mut file);
79 PersistedValidationData {
80 parent_head: HeadData(parent_header.encode()),
81 relay_parent_number,
82 relay_parent_storage_root,
83 max_pov_size,
84 }
85 .encode_to(&mut file);
86}