Attribute Macro frame_support::pallet_macros::config
source · #[config]Expand description
The mandatory attribute #[pallet::config] defines the configurable options for the pallet.
Item must be defined as:
#[pallet::config]
pub trait Config: frame_system::Config + $optionally_some_other_supertraits
$optional_where_clause
{
...
}I.e. a regular trait definition named Config, with the supertrait
frame_system::pallet::Config, and optionally other supertraits and a where clause.
(Specifying other supertraits here is known as tight
coupling)
The associated type RuntimeEvent is reserved. If defined, it must have the bounds
From<Event> and IsType<<Self as frame_system::Config>::RuntimeEvent>.
pallet::event must be present if RuntimeEvent exists as a config item
in your #[pallet::config].
Optional: with_default
An optional with_default argument may also be specified. Doing so will automatically
generate a DefaultConfig trait inside your pallet which is suitable for use with
[#[derive_impl(..)] to derive a default testing config:
#[pallet::config(with_default)]
pub trait Config: frame_system::Config {
type RuntimeEvent: Parameter
+ Member
+ From<Event<Self>>
+ Debug
+ IsType<<Self as frame_system::Config>::RuntimeEvent>;
#[pallet::no_default]
type BaseCallFilter: Contains<Self::RuntimeCall>;
// ...
}As shown above, you may also attach the #[pallet::no_default]
attribute to specify that a particular trait item cannot be used as a default when a test
Config is derived using the #[derive_impl(..)] attribute macro.
This will cause that particular trait item to simply not appear in default testing configs
based on this config (the trait item will not be included in DefaultConfig).
DefaultConfig Caveats
The auto-generated DefaultConfig trait:
- is always a subset of your pallet’s
Configtrait. - can only contain items that don’t rely on externalities, such as
frame_system::Config.
Trait items that do rely on externalities should be marked with
#[pallet::no_default]
Consequently:
- Any items that rely on externalities must be marked with
#[pallet::no_default]or your trait will fail to compile when used withderive_impl. - Items marked with
#[pallet::no_default]are entirely excluded from theDefaultConfigtrait, and therefore any impl ofDefaultConfigdoesn’t need to implement such items.
For more information, see derive_impl.