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_api::StorageProof;
24use sp_inherents::InherentData;
25use sp_runtime::{traits::Block as BlockT, Digest};
26
27pub mod aura;
28pub mod babe;
29pub mod timestamp;
30
31/// Consensus data provider, manual seal uses this trait object for authoring blocks valid
32/// for any runtime.
33pub trait ConsensusDataProvider<B: BlockT>: Send + Sync {
34 /// Attempt to create a consensus digest.
35 fn create_digest(&self, parent: &B::Header, inherents: &InherentData) -> Result<Digest, Error>;
36
37 /// Set up the necessary import params.
38 fn append_block_import(
39 &self,
40 parent: &B::Header,
41 params: &mut BlockImportParams<B>,
42 inherents: &InherentData,
43 proof: StorageProof,
44 ) -> Result<(), Error>;
45}