mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 15:51:12 +00:00
feat: FRAME umbrella crate. (#1337)
### Original PR https://github.com/paritytech/substrate/pull/14137 This PR brings in the first version of the "_`frame` umbrella crate_". This crate is intended to serve two purposes: 1. documentation 2. easier development with frame. Ideally, we want most users to be able to build a frame-based pallet and runtime using just `frame` (plus `scale-codec` and `scale-info`). The crate is not finalized and is not yet intended for external use. Therefore, the version is set to `0.0.1-dev`, this PR is `silent`, and the entire crate is hidden behind the `experimental` flag. The main intention in merging it early on is to be able to iterate on it in the rest of [`developer-hub`](https://github.com/paritytech/polkadot-sdk-docs/) efforts. The public API of the `frame` crate is at the moment as follows: ``` pub mod frame pub use frame::log pub use frame::pallet pub mod frame::arithmetic pub use frame::arithmetic::<<sp_arithmetic::*>> pub use frame::arithmetic::<<sp_arithmetic::traits::*>> pub mod frame::deps pub use frame::deps::codec pub use frame::deps::frame_executive pub use frame::deps::frame_support pub use frame::deps::frame_system pub use frame::deps::scale_info pub use frame::deps::sp_api pub use frame::deps::sp_arithmetic pub use frame::deps::sp_block_builder pub use frame::deps::sp_consensus_aura pub use frame::deps::sp_consensus_grandpa pub use frame::deps::sp_core pub use frame::deps::sp_inherents pub use frame::deps::sp_io pub use frame::deps::sp_offchain pub use frame::deps::sp_runtime pub use frame::deps::sp_std pub use frame::deps::sp_version pub mod frame::derive pub use frame::derive::CloneNoBound pub use frame::derive::Debug pub use frame::derive::Debug pub use frame::derive::DebugNoBound pub use frame::derive::Decode pub use frame::derive::Decode pub use frame::derive::DefaultNoBound pub use frame::derive::Encode pub use frame::derive::Encode pub use frame::derive::EqNoBound pub use frame::derive::PartialEqNoBound pub use frame::derive::RuntimeDebug pub use frame::derive::RuntimeDebugNoBound pub use frame::derive::TypeInfo pub use frame::derive::TypeInfo pub mod frame::prelude pub use frame::prelude::<<frame_support::pallet_prelude::*>> pub use frame::prelude::<<frame_system::pallet_prelude::*>> pub use frame::prelude::<<sp_std::prelude::*>> pub use frame::prelude::CloneNoBound pub use frame::prelude::Debug pub use frame::prelude::Debug pub use frame::prelude::DebugNoBound pub use frame::prelude::Decode pub use frame::prelude::Decode pub use frame::prelude::DefaultNoBound pub use frame::prelude::Encode pub use frame::prelude::Encode pub use frame::prelude::EqNoBound pub use frame::prelude::PartialEqNoBound pub use frame::prelude::RuntimeDebug pub use frame::prelude::RuntimeDebugNoBound pub use frame::prelude::TypeInfo pub use frame::prelude::TypeInfo pub use frame::prelude::frame_system pub mod frame::primitives pub use frame::primitives::BlakeTwo256 pub use frame::primitives::H160 pub use frame::primitives::H256 pub use frame::primitives::H512 pub use frame::primitives::Hash pub use frame::primitives::Keccak256 pub use frame::primitives::U256 pub use frame::primitives::U512 pub mod frame::runtime pub mod frame::runtime::apis pub use frame::runtime::apis::<<frame_system_rpc_runtime_api::*>> pub use frame::runtime::apis::<<sp_api::*>> pub use frame::runtime::apis::<<sp_block_builder::*>> pub use frame::runtime::apis::<<sp_consensus_aura::*>> pub use frame::runtime::apis::<<sp_consensus_grandpa::*>> pub use frame::runtime::apis::<<sp_offchain::*>> pub use frame::runtime::apis::<<sp_session::runtime_api::*>> pub use frame::runtime::apis::<<sp_transaction_pool::runtime_api::*>> pub use frame::runtime::apis::ApplyExtrinsicResult pub use frame::runtime::apis::CheckInherentsResult pub use frame::runtime::apis::InherentData pub use frame::runtime::apis::OpaqueMetadata pub use frame::runtime::apis::impl_runtime_apis pub use frame::runtime::apis::sp_api pub mod frame::runtime::prelude pub use frame::runtime::prelude::<<frame_executive::*>> pub use frame::runtime::prelude::ConstBool pub use frame::runtime::prelude::ConstI128 pub use frame::runtime::prelude::ConstI16 pub use frame::runtime::prelude::ConstI32 pub use frame::runtime::prelude::ConstI64 pub use frame::runtime::prelude::ConstI8 pub use frame::runtime::prelude::ConstU128 pub use frame::runtime::prelude::ConstU16 pub use frame::runtime::prelude::ConstU32 pub use frame::runtime::prelude::ConstU64 pub use frame::runtime::prelude::ConstU8 pub use frame::runtime::prelude::NativeVersion pub use frame::runtime::prelude::RuntimeVersion pub use frame::runtime::prelude::construct_runtime pub use frame::runtime::prelude::create_runtime_str pub use frame::runtime::prelude::derive_impl pub use frame::runtime::prelude::frame_support pub use frame::runtime::prelude::ord_parameter_types pub use frame::runtime::prelude::parameter_types pub use frame::runtime::prelude::runtime_version pub mod frame::runtime::testing_prelude pub use frame::runtime::testing_prelude::BuildStorage pub use frame::runtime::testing_prelude::Storage pub mod frame::runtime::types_common pub type frame::runtime::types_common::AccountId = <<frame::runtime::types_common::Signature as sp_runtime::traits::Verify>::Signer as sp_runtime::traits::IdentifyAccount>::AccountId pub type frame::runtime::types_common::BlockNumber = u32 pub type frame::runtime::types_common::BlockOf<T, Extra> = sp_runtime::generic::block::Block<sp_runtime::generic::header::Header<frame::runtime::types_common::BlockNumber, sp_runtime::traits::BlakeTwo256>, sp_runtime::generic::unchecked_extrinsic::UncheckedExtrinsic<sp_runtime::multiaddress::MultiAddress<frame::runtime::types_common::AccountId, ()>, <T as frame_system::pallet::Config>::RuntimeCall, frame::runtime::types_common::Signature, Extra>> pub type frame::runtime::types_common::OpaqueBlock = sp_runtime::generic::block::Block<sp_runtime::generic::header::Header<frame::runtime::types_common::BlockNumber, sp_runtime::traits::BlakeTwo256>, sp_runtime::OpaqueExtrinsic> pub type frame::runtime::types_common::Signature = sp_runtime::MultiSignature pub type frame::runtime::types_common::SystemSignedExtensionsOf<T> = (frame_system::extensions::check_non_zero_sender::CheckNonZeroSender<T>, frame_system::extensions::check_spec_version::CheckSpecVersion<T>, frame_system::extensions::check_tx_version::CheckTxVersion<T>, frame_system::extensions::check_genesis::CheckGenesis<T>, frame_system::extensions::check_mortality::CheckMortality<T>, frame_system::extensions::check_nonce::CheckNonce<T>, frame_system::extensions::check_weight::CheckWeight<T>) pub mod frame::testing_prelude pub use frame::testing_prelude::<<frame_executive::*>> pub use frame::testing_prelude::<<frame_system::mocking::*>> pub use frame::testing_prelude::BuildStorage pub use frame::testing_prelude::ConstBool pub use frame::testing_prelude::ConstI128 pub use frame::testing_prelude::ConstI16 pub use frame::testing_prelude::ConstI32 pub use frame::testing_prelude::ConstI64 pub use frame::testing_prelude::ConstI8 pub use frame::testing_prelude::ConstU128 pub use frame::testing_prelude::ConstU16 pub use frame::testing_prelude::ConstU32 pub use frame::testing_prelude::ConstU64 pub use frame::testing_prelude::ConstU8 pub use frame::testing_prelude::NativeVersion pub use frame::testing_prelude::RuntimeVersion pub use frame::testing_prelude::Storage pub use frame::testing_prelude::TestState pub use frame::testing_prelude::assert_err pub use frame::testing_prelude::assert_err_ignore_postinfo pub use frame::testing_prelude::assert_error_encoded_size pub use frame::testing_prelude::assert_noop pub use frame::testing_prelude::assert_ok pub use frame::testing_prelude::assert_storage_noop pub use frame::testing_prelude::construct_runtime pub use frame::testing_prelude::create_runtime_str pub use frame::testing_prelude::derive_impl pub use frame::testing_prelude::frame_support pub use frame::testing_prelude::frame_system pub use frame::testing_prelude::if_std pub use frame::testing_prelude::ord_parameter_types pub use frame::testing_prelude::parameter_types pub use frame::testing_prelude::runtime_version pub use frame::testing_prelude::storage_alias pub mod frame::traits pub use frame::traits::<<frame_support::traits::*>> pub use frame::traits::<<sp_runtime::traits::*>> ``` --- The road to full stabilization is - [ ] https://github.com/paritytech/polkadot-sdk/issues/127 - [ ] have a more intentional version bump, as opposed to the current bi weekly force-major-bump - [ ] revise the internal API of `frame`, especially what goes into the `prelude`s. - [ ] migrate all internal pallets and runtime to use `frame` --------- Co-authored-by: kianenigma <kian@parity.io> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
This commit is contained in:
+25
-84
@@ -55,9 +55,22 @@
|
||||
//! is merely a matter of the Wasm blob being changed in the chain state, which is, in principle,
|
||||
//! same as updating an account's balance.
|
||||
//!
|
||||
//! To learn more about the substrate architecture using some visuals, see [`substrate_diagram`].
|
||||
//! ### Architecture
|
||||
//!
|
||||
//! `FRAME`, Substrate's default runtime development library takes the above even further by
|
||||
//! Therefore, Substrate can be visualized as follows:
|
||||
#![doc = simple_mermaid::mermaid!("../../docs/mermaid/substrate_simple.mmd")]
|
||||
//!
|
||||
//! The client and the runtime of course need to communicate. This is done through two concepts:
|
||||
//!
|
||||
//! 1. Host functions: a way for the (Wasm) runtime to talk to the client. All host functions are
|
||||
//! defined in [`sp-io`]. For example, [`sp-io::storage`] are the set of host functions that
|
||||
//! allow the runtime to read and write data to the on-chain state.
|
||||
//! 2. Runtime APIs: a way for the client to talk to the Wasm runtime. Runtime APIs are defined
|
||||
//! using macros and utilities in [`sp-api`]. For example, [`sp-api::Core`] is the most basic
|
||||
//! runtime API that any blockchain must implement in order to be able to (re) execute blocks.
|
||||
#![doc = simple_mermaid::mermaid!("../../docs/mermaid/substrate_client_runtime.mmd")]
|
||||
//!
|
||||
//! [`FRAME`], Substrate's default runtime development library takes the above even further by
|
||||
//! embracing a declarative programming model whereby correctness is enhanced and the system is
|
||||
//! highly configurable through parameterization.
|
||||
//!
|
||||
@@ -68,8 +81,8 @@
|
||||
//! ## How to Get Stared
|
||||
//!
|
||||
//! Most developers want to leave the client side code as-is, and focus on the runtime. To do so,
|
||||
//! look into the [`frame_support`] crate, which is the entry point crate into runtime development
|
||||
//! with FRAME.
|
||||
//! look into the [`frame`] crate, which is the entry point crate into runtime development with
|
||||
//! FRAME.
|
||||
//!
|
||||
//! > Side note, it is entirely possible to craft a substrate-based runtime without FRAME, an
|
||||
//! > example of which can be found [here](https://github.com/JoshOrndorff/frameless-node-template).
|
||||
@@ -79,8 +92,8 @@
|
||||
//! * **Templates**: A number of substrate-based templates exist and they can be used for various
|
||||
//! purposes, with zero to little additional code needed. All of these templates contain runtimes
|
||||
//! that are highly configurable and are likely suitable for basic needs.
|
||||
//! * `FRAME`: If need, one can customize that runtime even further, by using `FRAME` and developing
|
||||
//! custom modules.
|
||||
//! * [`FRAME`]: If need, one can customize that runtime even further, by using `FRAME` and
|
||||
//! developing custom modules.
|
||||
//! * **Core**: To the contrary, some developers may want to customize the client side software to
|
||||
//! achieve novel goals such as a new consensus engine, or a new database backend. While
|
||||
//! Substrate's main configurability is in the runtime, the client is also highly generic and can
|
||||
@@ -100,10 +113,9 @@
|
||||
//! * `sp-*` (short for *substrate-primitives*) crates, located under `./primitives` folder. These
|
||||
//! are the traits that glue the client and runtime together, but are not opinionated about what
|
||||
//! framework is using for building the runtime. Notable examples are [`sp-api`] and [`sp-io`],
|
||||
//! which form the communication bridge between the client and runtime, as explained in
|
||||
//! [`substrate_diagram`].
|
||||
//! which form the communication bridge between the client and runtime.
|
||||
//! * `pallet-*` and `frame-*` crates, located under `./frame` folder. These are the crates related
|
||||
//! to FRAME. See [`frame_support`] for more information.
|
||||
//! to FRAME. See [`frame`] for more information.
|
||||
//!
|
||||
//! ### Wasm Build
|
||||
//!
|
||||
@@ -157,8 +169,9 @@
|
||||
//! through which Polkadot can be utilized is by building "parachains", blockchains that are
|
||||
//! connected to Polkadot's shared security.
|
||||
//!
|
||||
//! To build a parachain, one could use [`Cumulus`](https://github.com/paritytech/polkadot-sdk/tree/master/cumulus), the
|
||||
//! library on top of Substrate, empowering any substrate-based chain to be a Polkadot parachain.
|
||||
//! To build a parachain, one could use
|
||||
//! [`Cumulus`](https://github.com/paritytech/polkadot-sdk/tree/master/cumulus), the library on top
|
||||
//! of Substrate, empowering any substrate-based chain to be a Polkadot parachain.
|
||||
//!
|
||||
//! ## Where To Go Next?
|
||||
//!
|
||||
@@ -199,6 +212,7 @@
|
||||
//! https://img.shields.io/badge/polkadot-E6007A?style=for-the-badge&logo=polkadot&logoColor=white
|
||||
//! [github]:
|
||||
//! https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
|
||||
//! [`FRAME`]: ../frame/index.html
|
||||
//! [`sp-io`]: ../sp_io/index.html
|
||||
//! [`sp-api`]: ../sp_api/index.html
|
||||
//! [`sp-api`]: ../sp_api/index.html
|
||||
@@ -222,76 +236,3 @@
|
||||
|
||||
#![deny(rustdoc::broken_intra_doc_links)]
|
||||
#![deny(rustdoc::private_intra_doc_links)]
|
||||
|
||||
#[cfg_attr(doc, aquamarine::aquamarine)]
|
||||
/// In this module, we explore substrate at a more depth. First, let's establish substrate being
|
||||
/// divided into a client and runtime.
|
||||
///
|
||||
/// ```mermaid
|
||||
/// graph TB
|
||||
/// subgraph Substrate
|
||||
/// direction LR
|
||||
/// subgraph Client
|
||||
/// end
|
||||
/// subgraph Runtime
|
||||
/// end
|
||||
/// end
|
||||
/// ```
|
||||
///
|
||||
/// The client and the runtime of course need to communicate. This is done through two concepts:
|
||||
///
|
||||
/// 1. Host functions: a way for the (Wasm) runtime to talk to the client. All host functions are
|
||||
/// defined in [`sp-io`]. For example, [`sp-io::storage`] are the set of host functions that
|
||||
/// allow the runtime to read and write data to the on-chain state.
|
||||
/// 2. Runtime APIs: a way for the client to talk to the Wasm runtime. Runtime APIs are defined
|
||||
/// using macros and utilities in [`sp-api`]. For example, [`sp-api::Core`] is the most basic
|
||||
/// runtime API that any blockchain must implement in order to be able to (re) execute blocks.
|
||||
///
|
||||
/// ```mermaid
|
||||
/// graph TB
|
||||
/// subgraph Substrate
|
||||
/// direction LR
|
||||
/// subgraph Client
|
||||
/// end
|
||||
/// subgraph Runtime
|
||||
/// end
|
||||
/// Client --runtime-api--> Runtime
|
||||
/// Runtime --host-functions--> Client
|
||||
/// end
|
||||
/// ```
|
||||
///
|
||||
/// Finally, let's expand the diagram a bit further and look at the internals of each component:
|
||||
///
|
||||
/// ```mermaid
|
||||
/// graph TB
|
||||
/// subgraph Substrate
|
||||
/// direction LR
|
||||
/// subgraph Client
|
||||
/// Database
|
||||
/// Networking
|
||||
/// Consensus
|
||||
/// end
|
||||
/// subgraph Runtime
|
||||
/// subgraph FRAME
|
||||
/// direction LR
|
||||
/// Governance
|
||||
/// Currency
|
||||
/// Staking
|
||||
/// Identity
|
||||
/// end
|
||||
/// end
|
||||
/// Client --runtime-api--> Runtime
|
||||
/// Runtime --host-functions--> Client
|
||||
/// end
|
||||
/// ```
|
||||
///
|
||||
/// As noted the runtime contains all of the application specific logic of the blockchain. This is
|
||||
/// usually written with `FRAME`. The client, on the other hand, contains reusable and generic
|
||||
/// components that are not specific to one single blockchain, such as networking, database, and the
|
||||
/// consensus engine.
|
||||
///
|
||||
/// [`sp-io`]: ../../sp_io/index.html
|
||||
/// [`sp-api`]: ../../sp_api/index.html
|
||||
/// [`sp-io::storage`]: ../../sp_io/storage/index.html
|
||||
/// [`sp-api::Core`]: ../../sp_api/trait.Core.html
|
||||
pub mod substrate_diagram {}
|
||||
|
||||
Reference in New Issue
Block a user