Skip to content
  • juangirini's avatar
    feat: FRAME umbrella crate. (#1337) · 43415ef5
    juangirini authored
    
    
    ### 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: default avatarkianenigma <[email protected]>
    Co-authored-by: default avatarKian Paimani <[email protected]>
    Co-authored-by: default avatarOliver Tale-Yazdi <[email protected]>
    Co-authored-by: default avatarFrancisco Aguirre <[email protected]>
    43415ef5