Moves Block to frame_system instead of construct_runtime and removes Header and BlockNumber (#14437)

* Initial setup

* Adds node block

* Uses UncheckedExtrinsic and removes Where section

* Updates frame_system to use Block

* Adds deprecation warning

* Fixes pallet-timestamp

* Removes Header and BlockNumber

* Addresses review comments

* Addresses review comments

* Adds comment about compiler bug

* Removes where clause

* Refactors code

* Fixes errors in cargo check

* Fixes errors in cargo check

* Fixes warnings in cargo check

* Formatting

* Fixes construct_runtime tests

* Uses import instead of full path for BlockNumber

* Uses import instead of full path for Header

* Formatting

* Fixes construct_runtime tests

* Fixes imports in benchmarks

* Formatting

* Fixes construct_runtime tests

* Formatting

* Minor updates

* Fixes construct_runtime ui tests

* Fixes construct_runtime ui tests with 1.70

* Fixes docs

* Fixes docs

* Adds u128 mock block type

* Fixes split example

* fixes for cumulus

* ".git/.scripts/commands/fmt/fmt.sh"

* Updates new tests

* Fixes fully-qualified path in few places

* Formatting

* Update frame/examples/default-config/src/lib.rs

Co-authored-by: Juan <juangirini@gmail.com>

* Update frame/support/procedural/src/construct_runtime/mod.rs

Co-authored-by: Juan <juangirini@gmail.com>

* ".git/.scripts/commands/fmt/fmt.sh"

* Addresses some review comments

* Fixes build

* ".git/.scripts/commands/fmt/fmt.sh"

* Update frame/democracy/src/lib.rs

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Update frame/democracy/src/lib.rs

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Update frame/support/procedural/src/construct_runtime/mod.rs

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Update frame/support/procedural/src/construct_runtime/mod.rs

Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>

* Addresses review comments

* Updates trait bounds

* Minor fix

* ".git/.scripts/commands/fmt/fmt.sh"

* Removes unnecessary bound

* ".git/.scripts/commands/fmt/fmt.sh"

* Updates test

* Fixes build

* Adds a bound for header

* ".git/.scripts/commands/fmt/fmt.sh"

* Removes where block

* Minor fix

* Minor fix

* Fixes tests

* ".git/.scripts/commands/update-ui/update-ui.sh" 1.70

* Updates test

* Update primitives/runtime/src/traits.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Update primitives/runtime/src/traits.rs

Co-authored-by: Bastian Köcher <git@kchr.de>

* Updates doc

* Updates doc

---------

Co-authored-by: command-bot <>
Co-authored-by: Juan <juangirini@gmail.com>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
gupnik
2023-07-13 17:31:34 +05:30
committed by GitHub
parent e42a669c50
commit 5e7b27e98c
277 changed files with 2017 additions and 2450 deletions
@@ -25,7 +25,10 @@ use serde::{Deserialize, Serialize};
use crate::{
codec::{Codec, Decode, Encode},
traits::{self, Block as BlockT, Header as HeaderT, MaybeSerialize, Member, NumberFor},
traits::{
self, Block as BlockT, Header as HeaderT, MaybeSerialize, MaybeSerializeDeserialize,
Member, NumberFor,
},
Justifications,
};
use sp_core::RuntimeDebug;
@@ -79,16 +82,23 @@ impl<Block: BlockT> fmt::Display for BlockId<Block> {
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
pub struct Block<Header, Extrinsic: MaybeSerialize> {
pub struct Block<Header, Extrinsic> {
/// The block header.
pub header: Header,
/// The accompanying extrinsics.
pub extrinsics: Vec<Extrinsic>,
}
impl<Header, Extrinsic: MaybeSerialize> traits::Block for Block<Header, Extrinsic>
impl<Header, Extrinsic> traits::HeaderProvider for Block<Header, Extrinsic>
where
Header: HeaderT,
{
type HeaderT = Header;
}
impl<Header, Extrinsic: MaybeSerialize> traits::Block for Block<Header, Extrinsic>
where
Header: HeaderT + MaybeSerializeDeserialize,
Extrinsic: Member + Codec + traits::Extrinsic,
{
type Extrinsic = Extrinsic;
@@ -26,6 +26,7 @@ use crate::{
MaybeSerializeDeserialize, Member,
},
};
use codec::{FullCodec, MaxEncodedLen};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use sp_core::U256;
@@ -33,6 +34,7 @@ use sp_std::fmt::Debug;
/// Abstraction over a block header for a substrate chain.
#[derive(Encode, Decode, PartialEq, Eq, Clone, sp_core::RuntimeDebug, TypeInfo)]
#[scale_info(skip_type_params(Hash))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
@@ -81,13 +83,16 @@ where
+ MaybeSerializeDeserialize
+ MaybeFromStr
+ Debug
+ Default
+ sp_std::hash::Hash
+ MaybeDisplay
+ AtLeast32BitUnsigned
+ Codec
+ FullCodec
+ Copy
+ MaxEncodedLen
+ Into<U256>
+ TryFrom<U256>,
+ TryFrom<U256>
+ TypeInfo,
Hash: HashT,
{
type Number = Number;
+5 -1
View File
@@ -235,7 +235,7 @@ impl<Xt> Deref for ExtrinsicWrapper<Xt> {
}
/// Testing block
#[derive(PartialEq, Eq, Clone, Serialize, Debug, Encode, Decode)]
#[derive(PartialEq, Eq, Clone, Serialize, Debug, Encode, Decode, TypeInfo)]
pub struct Block<Xt> {
/// Block header
pub header: Header,
@@ -243,6 +243,10 @@ pub struct Block<Xt> {
pub extrinsics: Vec<Xt>,
}
impl<Xt> traits::HeaderProvider for Block<Xt> {
type HeaderT = Header;
}
impl<
Xt: 'static + Codec + Sized + Send + Sync + Serialize + Clone + Eq + Debug + traits::Extrinsic,
> traits::Block for Block<Xt>
+45 -5
View File
@@ -26,7 +26,7 @@ use crate::{
},
DispatchResult,
};
use codec::{Codec, Decode, Encode, EncodeLike, MaxEncodedLen};
use codec::{Codec, Decode, Encode, EncodeLike, FullCodec, MaxEncodedLen};
use impl_trait_for_tuples::impl_for_tuples;
#[cfg(feature = "serde")]
use serde::{de::DeserializeOwned, Deserialize, Serialize};
@@ -1154,7 +1154,9 @@ pub trait IsMember<MemberId> {
/// `parent_hash`, as well as a `digest` and a block `number`.
///
/// You can also create a `new` one from those fields.
pub trait Header: Clone + Send + Sync + Codec + Eq + MaybeSerialize + Debug + 'static {
pub trait Header:
Clone + Send + Sync + Codec + Eq + MaybeSerialize + Debug + TypeInfo + 'static
{
/// Header number.
type Number: Member
+ MaybeSerializeDeserialize
@@ -1164,7 +1166,10 @@ pub trait Header: Clone + Send + Sync + Codec + Eq + MaybeSerialize + Debug + 's
+ Copy
+ MaybeDisplay
+ AtLeast32BitUnsigned
+ Codec;
+ Default
+ TypeInfo
+ MaxEncodedLen
+ FullCodec;
/// Header hash type
type Hash: HashOutput;
/// Hashing algorithm
@@ -1210,15 +1215,50 @@ pub trait Header: Clone + Send + Sync + Codec + Eq + MaybeSerialize + Debug + 's
}
}
// Something that provides the Header Type. Only for internal usage and should only be used
// via `HeaderFor` or `BlockNumberFor`.
//
// This is needed to fix the "cyclical" issue in loading Header/BlockNumber as part of a
// `pallet::call`. Essentially, `construct_runtime` aggregates all calls to create a `RuntimeCall`
// that is then used to define `UncheckedExtrinsic`.
// ```ignore
// pub type UncheckedExtrinsic =
// generic::UncheckedExtrinsic<Address, RuntimeCall, Signature, SignedExtra>;
// ```
// This `UncheckedExtrinsic` is supplied to the `Block`.
// ```ignore
// pub type Block = generic::Block<Header, UncheckedExtrinsic>;
// ```
// So, if we do not create a trait outside of `Block` that doesn't have `Extrinsic`, we go into a
// recursive loop leading to a build error.
//
// Note that this is a workaround for a compiler bug and should be removed when the compiler
// bug is fixed.
#[doc(hidden)]
pub trait HeaderProvider {
/// Header type.
type HeaderT: Header;
}
/// Something which fulfills the abstract idea of a Substrate block. It has types for
/// `Extrinsic` pieces of information as well as a `Header`.
///
/// You can get an iterator over each of the `extrinsics` and retrieve the `header`.
pub trait Block: Clone + Send + Sync + Codec + Eq + MaybeSerialize + Debug + 'static {
pub trait Block:
HeaderProvider<HeaderT = <Self as Block>::Header>
+ Clone
+ Send
+ Sync
+ Codec
+ Eq
+ MaybeSerialize
+ Debug
+ 'static
{
/// Type for extrinsics.
type Extrinsic: Member + Codec + Extrinsic + MaybeSerialize;
/// Header type.
type Header: Header<Hash = Self::Hash>;
type Header: Header<Hash = Self::Hash> + MaybeSerializeDeserialize;
/// Block hash type.
type Hash: HashOutput;