mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-14 02:51:08 +00:00
Integrate Grandpa Proof Checker into Substrate Pallet (#375)
* Remove the Substrate primitives crate The types here were only used in one place, the pallet itself. If other components start using these types we can considering moving them back into a standalone crate. * Start trying to integrate justification module * Make Substrate blocks configurable in Pallet * WIP: Try and generalize justification test helpers * Fix tests which use "real" justifications * Put common test helpers alongside mock code * Use common helper for creating headers * Remove usage of UintAuthorityId This change favours the use of the Ed25519Keyring authorities in order to keep things consistent with the tests. * Add documentation around config trait types * Make test header, hash, and number types consistent * Update modules/substrate/src/verifier.rs Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com> * Update modules/substrate/src/lib.rs Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com> * Update modules/substrate/Cargo.toml Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com> * Derive `RuntimeDebug` instead of `Debug` * Add `Paramter` as a trait constraint on config types Since we use these types as part of the dispatchable functions we should explicitly require this. * Enforce that hasher output matches expected hash type * Accept headers over indexes when making test justifications * Check that authority sets are valid * Make Clippy happy * Apply correct Clippy fix * Move justification code into primitives module * Use new module in verifier code * Add primitives module for Substrate test helpers * WIP * Move justification generation into test_helpers * Revert commits which move `justification` into primitives This reverts commit 03a381f0bc4a8dbe4785c30d42ab252a06ba876c. Co-authored-by: Svyatoslav Nikolsky <svyatonik@gmail.com> Co-authored-by: Tomasz Drwięga <tomusdrw@users.noreply.github.com>
This commit is contained in:
committed by
Bastian Köcher
parent
52c1913fff
commit
f9db999a1a
@@ -0,0 +1,74 @@
|
||||
// Copyright 2019-2020 Parity Technologies (UK) Ltd.
|
||||
// This file is part of Parity Bridges Common.
|
||||
|
||||
// Parity Bridges Common is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
|
||||
// Parity Bridges Common is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Parity Bridges Common. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
//! Storage primitives for the Substrate light client (a.k.a bridge) pallet.
|
||||
|
||||
use codec::{Decode, Encode};
|
||||
use core::default::Default;
|
||||
#[cfg(feature = "std")]
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sp_finality_grandpa::{AuthorityList, SetId};
|
||||
use sp_runtime::RuntimeDebug;
|
||||
|
||||
/// A Grandpa Authority List and ID.
|
||||
#[derive(Default, Encode, Decode, RuntimeDebug, PartialEq, Clone)]
|
||||
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
|
||||
pub struct AuthoritySet {
|
||||
/// List of Grandpa authorities for the current round.
|
||||
pub authorities: AuthorityList,
|
||||
/// Monotonic identifier of the current Grandpa authority set.
|
||||
pub set_id: SetId,
|
||||
}
|
||||
|
||||
impl AuthoritySet {
|
||||
/// Create a new Grandpa Authority Set.
|
||||
pub fn new(authorities: AuthorityList, set_id: SetId) -> Self {
|
||||
Self { authorities, set_id }
|
||||
}
|
||||
}
|
||||
|
||||
/// Keeps track of when the next Grandpa authority set change will occur.
|
||||
#[derive(Default, Encode, Decode, RuntimeDebug, PartialEq, Clone)]
|
||||
#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
|
||||
pub struct ScheduledChange<N> {
|
||||
/// The authority set that will be used once this change is enacted.
|
||||
pub authority_set: AuthoritySet,
|
||||
/// The block height at which the authority set should be enacted.
|
||||
///
|
||||
/// Note: It will only be enacted once a header at this height is finalized.
|
||||
pub height: N,
|
||||
}
|
||||
|
||||
/// A more useful representation of a header for storage purposes.
|
||||
#[derive(Default, Encode, Decode, Clone, RuntimeDebug, PartialEq)]
|
||||
pub struct ImportedHeader<H> {
|
||||
/// A plain Substrate header.
|
||||
pub header: H,
|
||||
/// Does this header enact a new authority set change. If it does
|
||||
/// then it will require a justification.
|
||||
pub requires_justification: bool,
|
||||
/// Has this header been finalized, either explicitly via a justification,
|
||||
/// or implicitly via one of its children getting finalized.
|
||||
pub is_finalized: bool,
|
||||
}
|
||||
|
||||
impl<H> core::ops::Deref for ImportedHeader<H> {
|
||||
type Target = H;
|
||||
|
||||
fn deref(&self) -> &H {
|
||||
&self.header
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user