sc_consensus_manual_seal/consensus.rs
1// This file is part of Substrate.
2
3// Copyright (C) Parity Technologies (UK) Ltd.
4// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
5
6// This program is free software: you can redistribute it and/or modify
7// it under the terms of the GNU General Public License as published by
8// the Free Software Foundation, either version 3 of the License, or
9// (at your option) any later version.
10
11// This program is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License
17// along with this program. If not, see <https://www.gnu.org/licenses/>.
18
19//! Extensions for manual seal to produce blocks valid for any runtime.
20use super::Error;
21
22use sc_consensus::BlockImportParams;
23use sp_inherents::InherentData;
24use sp_runtime::{traits::Block as BlockT, Digest};
25
26pub mod aura;
27pub mod babe;
28pub mod timestamp;
29
30/// Consensus data provider, manual seal uses this trait object for authoring blocks valid
31/// for any runtime.
32pub trait ConsensusDataProvider<B: BlockT>: Send + Sync {
33 /// The proof type.
34 type Proof;
35
36 /// Attempt to create a consensus digest.
37 fn create_digest(&self, parent: &B::Header, inherents: &InherentData) -> Result<Digest, Error>;
38
39 /// Set up the necessary import params.
40 fn append_block_import(
41 &self,
42 parent: &B::Header,
43 params: &mut BlockImportParams<B>,
44 inherents: &InherentData,
45 proof: Self::Proof,
46 ) -> Result<(), Error>;
47}