Macro frame_support::construct_runtime [−][src]
construct_runtime!() { /* proc-macro */ }
Expand description
Construct a runtime, with the given name and the given pallets.
The parameters here are specific types for Block
, NodeBlock
, and UncheckedExtrinsic
and the pallets that are used by the runtime.
Block
is the block type that is used in the runtime and NodeBlock
is the block type
that is used in the node. For instance they can differ in the extrinsics type.
Example:
construct_runtime!(
pub enum Runtime where
Block = Block,
NodeBlock = node::Block,
UncheckedExtrinsic = UncheckedExtrinsic
{
System: system::{Pallet, Call, Event<T>, Config<T>} = 0,
Test: test::{Pallet, Call} = 1,
Test2: test_with_long_module::{Pallet, Event<T>},
// Pallets with instances
Test3_Instance1: test3::<Instance1>::{Pallet, Call, Storage, Event<T, I>, Config<T, I>, Origin<T, I>},
Test3_DefaultInstance: test3::{Pallet, Call, Storage, Event<T>, Config<T>, Origin<T>} = 4,
}
)
The identifier System
is the name of the pallet and the lower case identifier system
is the
name of the Rust module/crate for this Substrate pallet. The identifiers between the braces are
the pallet parts provided by the pallet. It is important to list these parts here to export
them correctly in the metadata or to make the pallet usable in the runtime.
We provide support for the following module parts in a pallet:
Pallet
- Required for all palletsCall
- If the pallet has callable functionsStorage
- If the pallet uses storageEvent
orEvent<T>
(if the event is generic) - If the pallet emits eventsOrigin
orOrigin<T>
(if the origin is generic) - If the pallet has instanciable originsConfig
orConfig<T>
(if the config is generic) - If the pallet builds the genesis storage withGenesisConfig
Inherent
- If the pallet provides/can check inherents.ValidateUnsigned
- If the pallet validates unsigned extrinsics.
= $n
is an optional part allowing to define at which index the pallet variants in
OriginCaller
, Call
and Event
are encoded, and to define the ModuleToIndex value.
if = $n
is not given, then index is resolved same as fieldless enum in Rust
(i.e. incrementedly from previous index):
pallet1 .. = 2,
pallet2 .., // Here pallet2 is given index 3
pallet3 .. = 0,
pallet4 .., // Here pallet4 is given index 1
Note
The population of the genesis storage depends on the order of pallets. So, if one of your pallets depends on another pallet, the pallet that is depended upon needs to come before the pallet depending on it.
Type definitions
- The macro generates a type alias for each pallet to their
Module
(orPallet
). E.g.type System = frame_system::Pallet<Runtime>