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