mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 10:31:04 +00:00
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:
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user