mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 20:31:13 +00:00
Rework inherent data client side (#8526)
* Lol * Yeah * Moare * adaasda * Convert AURA to new pallet macro * AURA: Switch to `CurrentSlot` instead of `LastTimestamp` This switches AURA to use `CurrentSlot` instead of `LastTimestamp`. * Add missing file * Update frame/aura/src/migrations.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> * Remove the runtime side provide inherent code * Use correct weight * Add TODO * Remove the Inherent from AURA * 🤦 * Remove unused stuff * Update primitives authorship * Fix babe inherent data provider * Fix consensus-uncles * Fix BABE * Do some further changes to authorship primitives... :D * More work * Make it compile the happy path * Make it async! * Take hash * More stuff * Hacks * Revert "Hacks" This reverts commit cfffad88668cfdebf632a59c4fbfada001ef8251. * Fix * Make `execute_block` return the final block header * Move Aura digest stuff * Make it possible to disable equivocation checking * Fix fix fix * Some refactorings * Comment * Fixes fixes fixes * More cleanups * Some love * Better love * Make slot duration being exposed as `Duration` to the outside * Some slot info love * Add `build_aura_worker` utility function * Copy copy copy * Some stuff * Start fixing pow * Fix pow * Remove some bounds * More work * Make grandpa work * Make slots use `async_trait` * Introduce `SharedData` * Add test and fix bugs * Switch to `SharedData` * Make grandpa tests working * More Babe work * Make grandpa work * Introduce `SharedData` * Add test and fix bugs * Switch to `SharedData` * Make grandpa tests working * More Babe work * Make it async * Fix fix * Use `async_trait` in sc-consensus-slots This makes the code a little bit easier to read and also expresses that there can always only be one call at a time to `on_slot`. * Make grandpa tests compile * More Babe tests work * Fix network test * Start fixing service test * Finish service-test * Fix sc-consensus-aura * Fix fix fix * More fixes * Make everything compile *yeah* * Make manual-seal compile * More fixes * Start fixing Aura * Fix Aura tests * Fix Babe tests * Make everything compile * Move code around and switch to async_trait * Fix Babe * Docs docs docs * Move to FRAME * Fix fix fix * Make everything compile * Last cleanups * Fix integration test * Change slot usage of the timestamp * We really need to switch to `impl-trait-for-tuples` * Update primitives/inherents/src/lib.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> * Update primitives/inherents/src/lib.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> * Update primitives/inherents/src/lib.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> * Some extra logging * Remove dbg! * Update primitives/consensus/common/src/import_queue/basic_queue.rs Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com>
This commit is contained in:
@@ -19,14 +19,70 @@
|
||||
pub use crate::sp_std::vec::Vec;
|
||||
#[doc(hidden)]
|
||||
pub use crate::sp_runtime::traits::{Block as BlockT, Extrinsic};
|
||||
#[doc(hidden)]
|
||||
|
||||
pub use sp_inherents::{
|
||||
InherentData, ProvideInherent, CheckInherentsResult, IsFatalError, InherentIdentifier,
|
||||
MakeFatalError,
|
||||
InherentData, CheckInherentsResult, IsFatalError, InherentIdentifier, MakeFatalError,
|
||||
};
|
||||
|
||||
/// A pallet that provides or verifies an inherent extrinsic.
|
||||
///
|
||||
/// The pallet may provide the inherent, verify an inherent, or both provide and verify.
|
||||
pub trait ProvideInherent {
|
||||
/// The call type of the pallet.
|
||||
type Call;
|
||||
/// The error returned by `check_inherent`.
|
||||
type Error: codec::Encode + IsFatalError;
|
||||
/// The inherent identifier used by this inherent.
|
||||
const INHERENT_IDENTIFIER: self::InherentIdentifier;
|
||||
|
||||
/// Create an inherent out of the given `InherentData`.
|
||||
fn create_inherent(data: &InherentData) -> Option<Self::Call>;
|
||||
|
||||
/// Determines whether this inherent is required in this block.
|
||||
///
|
||||
/// - `Ok(None)` indicates that this inherent is not required in this block. The default
|
||||
/// implementation returns this.
|
||||
///
|
||||
/// - `Ok(Some(e))` indicates that this inherent is required in this block. The
|
||||
/// `impl_outer_inherent!`, will call this function from its `check_extrinsics`.
|
||||
/// If the inherent is not present, it will return `e`.
|
||||
///
|
||||
/// - `Err(_)` indicates that this function failed and further operations should be aborted.
|
||||
///
|
||||
/// NOTE: If inherent is required then the runtime asserts that the block contains at least
|
||||
/// one inherent for which:
|
||||
/// * type is [`Self::Call`],
|
||||
/// * [`Self::is_inherent`] returns true.
|
||||
fn is_inherent_required(_: &InherentData) -> Result<Option<Self::Error>, Self::Error> { Ok(None) }
|
||||
|
||||
/// Check whether the given inherent is valid. Checking the inherent is optional and can be
|
||||
/// omitted by using the default implementation.
|
||||
///
|
||||
/// When checking an inherent, the first parameter represents the inherent that is actually
|
||||
/// included in the block by its author. Whereas the second parameter represents the inherent
|
||||
/// data that the verifying node calculates.
|
||||
///
|
||||
/// NOTE: A block can contains multiple inherent.
|
||||
fn check_inherent(_: &Self::Call, _: &InherentData) -> Result<(), Self::Error> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Return whether the call is an inherent call.
|
||||
///
|
||||
/// NOTE: Signed extrinsics are not inherent, but signed extrinsic with the given call variant
|
||||
/// can be dispatched.
|
||||
///
|
||||
/// # Warning
|
||||
///
|
||||
/// In FRAME, inherent are enforced to be before other extrinsics, for this reason,
|
||||
/// pallets with unsigned transactions **must ensure** that no unsigned transaction call
|
||||
/// is an inherent call, when implementing `ValidateUnsigned::validate_unsigned`.
|
||||
/// Otherwise block producer can produce invalid blocks by including them after non inherent.
|
||||
fn is_inherent(call: &Self::Call) -> bool;
|
||||
}
|
||||
|
||||
/// Implement the outer inherent.
|
||||
/// All given modules need to implement `ProvideInherent`.
|
||||
/// All given modules need to implement [`ProvideInherent`].
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
|
||||
@@ -1229,8 +1229,8 @@ pub mod tests {
|
||||
pub mod pallet_prelude {
|
||||
pub use sp_std::marker::PhantomData;
|
||||
#[cfg(feature = "std")]
|
||||
pub use frame_support::traits::GenesisBuild;
|
||||
pub use frame_support::{
|
||||
pub use crate::traits::GenesisBuild;
|
||||
pub use crate::{
|
||||
EqNoBound, PartialEqNoBound, RuntimeDebugNoBound, DebugNoBound, CloneNoBound, Twox256,
|
||||
Twox128, Blake2_256, Blake2_128, Identity, Twox64Concat, Blake2_128Concat, ensure,
|
||||
RuntimeDebug, storage,
|
||||
@@ -1241,7 +1241,7 @@ pub mod pallet_prelude {
|
||||
storage::bounded_vec::{BoundedVec, BoundedVecValue},
|
||||
};
|
||||
pub use codec::{Encode, Decode};
|
||||
pub use sp_inherents::{InherentData, InherentIdentifier, ProvideInherent};
|
||||
pub use crate::inherent::{InherentData, InherentIdentifier, ProvideInherent};
|
||||
pub use sp_runtime::{
|
||||
traits::{MaybeSerializeDeserialize, Member, ValidateUnsigned},
|
||||
transaction_validity::{
|
||||
|
||||
Reference in New Issue
Block a user