Attribute Macro frame_support::pallet_macros::inherent

source ·
#[inherent]
Expand description

The #[pallet::inherent] attribute allows the pallet to provide inherents.

An inherent is some piece of data that is inserted by a block authoring node at block creation time and can either be accepted or rejected by validators based on whether the data falls within an acceptable range.

The most common inherent is the timestamp that is inserted into every block. Since there is no way to validate timestamps, validators simply check that the timestamp reported by the block authoring node falls within an acceptable range.

Example usage:

#[frame_support::pallet]
mod pallet {
	// Example inherent identifier
	pub const INHERENT_IDENTIFIER: InherentIdentifier = *b"timstap0";

	#[pallet::pallet]
	pub struct Pallet<T>(_);

	#[pallet::inherent]
	impl<T: Config> ProvideInherent for Pallet<T> {
		type Call = Call<T>;
		type Error = InherentError;
		const INHERENT_IDENTIFIER: InherentIdentifier = INHERENT_IDENTIFIER;

		fn create_inherent(data: &InherentData) -> Option<Self::Call> {
			unimplemented!()
		}

		fn check_inherent(
			call: &Self::Call,
			data: &InherentData,
		) -> result::Result<(), Self::Error> {
			unimplemented!()
		}

		fn is_inherent(call: &Self::Call) -> bool {
			unimplemented!()
		}
	}
}

I.e. a trait implementation with bound T: Config, of trait ProvideInherent for type Pallet<T>, and some optional where clause.

§Macro expansion

The macro currently makes no use of this information, but it might use this information in the future to give information directly to construct_runtime.


Documentation for this macro can be found at frame_support::pallet_macros::inherent.