Enum Call

Source
pub enum Call<T: Config> {
    validate {
        payload: ValidatePayloadOf<T>,
        signature: T::Signature,
    },
    declare {
        payload: AffidavitPayloadOf<T>,
        signature: T::Signature,
    },
    elect {
        payload: ElectionPayloadOf<T>,
        signature: T::Signature,
    },
    chill {
        affidavit_pub: AffidavitId<T>,
    },
    force_genesis_config {
        field: ForceGenesisConfig<T>,
    },
    // some variants omitted
}
Expand description

Contains a variant per dispatchable extrinsic that this pallet has.

Variants§

§

validate

Register an author’s new affidavit signing key for the upcoming session’s participation as a validator.

This extrinsic allows an author to declare their off-chain signing key that will be used to sign affidavits for the next session’s election.

It ensures that only valid and available authors can register keys.

§Notes
  • Affidavit Keys are session-specific and are updated each session.
  • This extrinsic allows submission of affidavit for next session only.
  • Affidavit Declaration/Submission will rotate keys once every submission for further sessions then.
§Errors

Returns a DispatchError if author-role authorization fails.

Fields

§signature: T::Signature
§

declare

Submit an affidavit for the upcoming session election.

This extrinsic allows an author to declare their election weights (affidavit) for the next session. It also rotates the author’s signing key for the subsequent affidavit.

§Parameters
  • origin: Must be a signed account corresponding to the author submitting the affidavit.
  • payload: The payload that was signed off-chain representing the affidavit data.
  • signature: The author’s signature of the payload, used for verification.
  • new_key: A new affidavit signing key to replace the current one for the next upcoming session.
§Notes
  • Affidavit submissions are session-specific.
  • Key rotation ensures authors maintain fresh signing keys for security.
  • Only validated and available authors can submit affidavits.
§Errors

Returns a DispatchError if un-privileged to submit an affidavit.

Fields

§signature: T::Signature
§

elect

Execute the election for the upcoming session.

This extrinsic allows an author to act as the election runner for the election session (next-session). It verifies the author’s affidavit-based signature, prepares the election using all submitted affidavits, and records the runner for audit and reward attribution.

Since this is an unsigned extrinsic, it is constructed and submitted by validator offchain workers (OCWs).

Although unsigned, it is treated as a pseudo-inherent:

  • It is authorized via affidavit signature verification
  • It may carry rewards for successfully running the election
  • It is expected to be submitted locally by validators rather than propagated by external transaction authors
§Errors

Returns a DispatchError if election execution or authorization fails.

Fields

§signature: T::Signature
§

chill

Request to step back or “chill” immediately from election participation by erasing affidavit keys.

This safely avoids penalties by pausing an author’s duties.

This extrinsic allows an author to withdraw from participating in upcoming elections or prevent submitting future affidavits. The actual effect depends on the current block relative to the affidavit submissions and election windows.

Note that its always advised to chill validation before resign author role to skip unnecessary invalid affidavit declarations.

§Parameters
  • origin: Must be a signed account corresponding to the author i.e., controller/role account.
  • affidavit_pub : Public affidavit key registered for a new session’s affidavit submission.
§Notes
  • Removing affidavit keys ensures authors cannot unfairly influence future elections.
  • By inspecting returned errors, callers can compute the optimal chill window.
§Errors

Returns a DispatchError with diagnostic in case of irrevocable duties assigned.

Fields

§affidavit_pub: AffidavitId<T>
§

force_genesis_config

Force-update a selected genesis configuration parameter.

Origin: Root only.

This extrinsic allows privileged modification of runtime parameters that were originally defined at genesis.

  • AllowAffidavits - Enables or disables affidavit submission.
  • AffidavitBeginsAt - Updates the start of the affidavit submission window.
  • AffidavitEndsAt - Updates the end of the affidavit submission window.
  • ElectionBeginsAt - Updates when election execution begins within the session.
  • ElectionRunnerPointsUpgrade - Updates the reward points for election runners.
  • ValidateTxPriority - Updates the priority for validation-related extrinsics.
  • ElectionTxPriority - Updates the priority for election execution extrinsics.
  • AffidavitTxPriority - Updates the priority for affidavit submission extrinsics.
  • FinalityAfter - Updates the time-based delay before operations are considered final.
  • FinalityTicks - Updates the block-based confirmation threshold for finality.

The call enforces consistency constraints where applicable:

  • Affidavit window ordering:
    • AffidavitBeginsAt < AffidavitEndsAt
    • AffidavitEndsAt > AffidavitBeginsAt
  • The following values must be non-zero:
    • transaction priorities
    • finality thresholds (FinalityAfter, FinalityTicks)

This call directly overwrites storage and emits an event containing the updated configuration variant.

Fields

Implementations§

Source§

impl<T: Config> Call<T>

Source

pub fn new_call_variant_validate( payload: ValidatePayloadOf<T>, signature: T::Signature, ) -> Self

Create a call with the variant validate.

Source

pub fn new_call_variant_declare( payload: AffidavitPayloadOf<T>, signature: T::Signature, ) -> Self

Create a call with the variant declare.

Source

pub fn new_call_variant_elect( payload: ElectionPayloadOf<T>, signature: T::Signature, ) -> Self

Create a call with the variant elect.

Source

pub fn new_call_variant_chill(affidavit_pub: AffidavitId<T>) -> Self

Create a call with the variant chill.

Source

pub fn new_call_variant_force_genesis_config( field: ForceGenesisConfig<T>, ) -> Self

Create a call with the variant force_genesis_config.

Trait Implementations§

Source§

impl<T: Config> CheckIfFeeless for Call<T>

Source§

type Origin = <T as Config>::RuntimeOrigin

The Origin type of the runtime.
Source§

fn is_feeless(&self, origin: &Self::Origin) -> bool

Checks if the dispatchable satisfies the feeless condition as defined by #[pallet::feeless_if]
Source§

impl<T: Config> Clone for Call<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Config> Debug for Call<T>

Source§

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Config> Decode for Call<T>

Source§

fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy, ) -> Result<Self, Error>

Attempt to deserialise the value from input.
§

fn decode_into<I>( input: &mut I, dst: &mut MaybeUninit<Self>, ) -> Result<DecodeFinished, Error>
where I: Input,

Attempt to deserialize the value from input into a pre-allocated piece of memory. Read more
§

fn skip<I>(input: &mut I) -> Result<(), Error>
where I: Input,

Attempt to skip the encoded value from input. Read more
§

fn encoded_fixed_size() -> Option<usize>

Returns the fixed encoded size of the type. Read more
Source§

impl<T: Config> Encode for Call<T>

Source§

fn size_hint(&self) -> usize

If possible give a hint of expected size of the encoding. Read more
Source§

fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy, )

Convert self to a slice and append it to the destination.
§

fn encode(&self) -> Vec<u8>

Convert self to an owned vector.
§

fn using_encoded<R, F>(&self, f: F) -> R
where F: FnOnce(&[u8]) -> R,

Convert self to a slice and then invoke the given closure with it.
§

fn encoded_size(&self) -> usize

Calculates the encoded size. Read more
Source§

impl<T: Config> GetCallIndex for Call<T>

Source§

fn get_call_index(&self) -> u8

Return the index of this Call.
Source§

fn get_call_indices() -> &'static [u8]

Return all call indices in the same order as [GetCallName].
Source§

impl<T: Config> GetCallName for Call<T>

Source§

fn get_call_name(&self) -> &'static str

Return the function name of the Call.
Source§

fn get_call_names() -> &'static [&'static str]

Return all function names in the same order as [GetCallIndex].
Source§

impl<T: Config> GetDispatchInfo for Call<T>

Source§

fn get_dispatch_info(&self) -> DispatchInfo

Return a DispatchInfo, containing relevant information of this dispatch. Read more
Source§

impl<T: Config> PartialEq for Call<T>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T> TypeInfo for Call<T>
where PhantomData<(T,)>: TypeInfo + 'static, ValidatePayloadOf<T>: TypeInfo + 'static, T::Signature: TypeInfo + 'static, AffidavitPayloadOf<T>: TypeInfo + 'static, ElectionPayloadOf<T>: TypeInfo + 'static, AffidavitId<T>: TypeInfo + 'static, ForceGenesisConfig<T>: TypeInfo + 'static, T: Config + 'static,

Source§

type Identity = Call<T>

The type identifying for which type info is provided. Read more
Source§

fn type_info() -> Type

Returns the static type identifier for Self.
Source§

impl<T: Config> UnfilteredDispatchable for Call<T>

Source§

type RuntimeOrigin = <T as Config>::RuntimeOrigin

The origin type of the runtime, (i.e. frame_system::Config::RuntimeOrigin).
Source§

fn dispatch_bypass_filter( self, origin: Self::RuntimeOrigin, ) -> DispatchResultWithPostInfo

Dispatch this call but do not check the filter in origin.
Source§

impl<T: Config> DecodeWithMemTracking for Call<T>
where ValidatePayloadOf<T>: DecodeWithMemTracking, T::Signature: DecodeWithMemTracking, AffidavitPayloadOf<T>: DecodeWithMemTracking, ElectionPayloadOf<T>: DecodeWithMemTracking, AffidavitId<T>: DecodeWithMemTracking, ForceGenesisConfig<T>: DecodeWithMemTracking,

Source§

impl<T: Config> EncodeLike for Call<T>

Source§

impl<T: Config> Eq for Call<T>

Auto Trait Implementations§

§

impl<T> Freeze for Call<T>
where <T as SigningTypes>::Signature: Freeze, <T as Config>::AccountId: Freeze, <T as SigningTypes>::Public: Freeze, <T as Config>::Moment: Freeze, <<<T as Config>::Block as Block>::Header as Header>::Number: Freeze, <T as Config>::Points: Freeze,

§

impl<T> RefUnwindSafe for Call<T>
where <T as SigningTypes>::Signature: RefUnwindSafe, <T as Config>::AccountId: RefUnwindSafe, <T as SigningTypes>::Public: RefUnwindSafe, <T as Config>::Moment: RefUnwindSafe, <<<T as Config>::Block as Block>::Header as Header>::Number: RefUnwindSafe, T: RefUnwindSafe, <T as Config>::Points: RefUnwindSafe,

§

impl<T> Send for Call<T>
where <T as SigningTypes>::Signature: Send, <T as SigningTypes>::Public: Send, <T as Config>::Moment: Send, T: Send,

§

impl<T> Sync for Call<T>
where <T as SigningTypes>::Signature: Sync, <T as SigningTypes>::Public: Sync, <T as Config>::Moment: Sync, T: Sync,

§

impl<T> Unpin for Call<T>
where <T as SigningTypes>::Signature: Unpin, <T as Config>::AccountId: Unpin, <T as SigningTypes>::Public: Unpin, <T as Config>::Moment: Unpin, <<<T as Config>::Block as Block>::Header as Header>::Number: Unpin, T: Unpin, <T as Config>::Points: Unpin,

§

impl<T> UnwindSafe for Call<T>
where <T as SigningTypes>::Signature: UnwindSafe, <T as Config>::AccountId: UnwindSafe, <T as SigningTypes>::Public: UnwindSafe, <T as Config>::Moment: UnwindSafe, <<<T as Config>::Block as Block>::Header as Header>::Number: UnwindSafe, T: UnwindSafe, <T as Config>::Points: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CheckedConversion for T

§

fn checked_from<T>(t: T) -> Option<Self>
where Self: TryFrom<T>,

Convert from a value of T into an equivalent instance of Option<Self>. Read more
§

fn checked_into<T>(self) -> Option<T>
where Self: TryInto<T>,

Consume self to return Some equivalent value of Option<T>. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> DecodeAll for T
where T: Decode,

§

fn decode_all(input: &mut &[u8]) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

impl<T> DecodeLimit for T
where T: Decode,

§

fn decode_all_with_depth_limit( limit: u32, input: &mut &[u8], ) -> Result<T, Error>

Decode Self and consume all of the given input data. Read more
§

fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>
where I: Input,

Decode Self with the given maximum recursion depth and advance input by the number of bytes consumed. Read more
§

impl<T> DecodeWithMemLimit for T
where T: DecodeWithMemTracking,

§

fn decode_with_mem_limit<I>(input: &mut I, mem_limit: usize) -> Result<T, Error>
where I: Input,

Decode Self with the given maximum memory limit and advance input by the number of bytes consumed. Read more
Source§

impl<T> DynClone for T
where T: Clone,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Hashable for T
where T: Codec,

§

fn blake2_128(&self) -> [u8; 16]

§

fn blake2_256(&self) -> [u8; 32]

§

fn blake2_128_concat(&self) -> Vec<u8>

§

fn twox_128(&self) -> [u8; 16]

§

fn twox_256(&self) -> [u8; 32]

§

fn twox_64_concat(&self) -> Vec<u8>

§

fn identity(&self) -> Vec<u8>

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T, U> IntoKey<U> for T
where U: FromKey<T>,

§

fn into_key(self) -> U

Source§

impl<T, U, Tag> IntoTag<U, Tag> for T
where U: FromTag<T, Tag>, Tag: DiscriminantTag,

Source§

fn into_tag(self) -> U

§

impl<Src, Dest> IntoTuple<Dest> for Src
where Dest: FromTuple<Src>,

§

fn into_tuple(self) -> Dest

§

impl<T> IsType<T> for T

§

fn from_ref(t: &T) -> &T

Cast reference.
§

fn into_ref(&self) -> &T

Cast reference.
§

fn from_mut(t: &mut T) -> &mut T

Cast mutable reference.
§

fn into_mut(&mut self) -> &mut T

Cast mutable reference.
§

impl<T, Outer> IsWrappedBy<Outer> for T
where Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,

§

fn from_ref(outer: &Outer) -> &T

Get a reference to the inner from the outer.

§

fn from_mut(outer: &mut Outer) -> &mut T

Get a mutable reference to the inner from the outer.

§

impl<T> KeyedVec for T
where T: Codec,

§

fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8>

Return an encoding of Self prepended by given slice.
Source§

impl<T, Time> Logging<Time> for T
where Time: Time,

Source§

const FALLBACK_TARGET: &'static str = "routine"

Default logging target if none is provided.

Most routines, especially offchain workers or background tasks, use this target for simplicity.

It allows a consistent place to look for routine logs without requiring every call to specify a target.

Note: This target is only a conveninence and may be somewhat vague. To ensure errors can still be traced accurately, the logged messages should include additional metadata (e.g., module name, error index, or contextual info) so that the source of the error can be identified even if the target is generic.

Source§

type Logger = DispatchError

The type taken and returned for logging.

We simply return the same [DispatchError] that was logged, so logging does not change control flow or error propagation.

DispatchError is used because in Substrate it encompasses all runtime errors - including module errors, token errors, arithmetic issues, and transactional boundaries - making it the universal substrate-side error representation.

Source§

type Level = LogLevel

The log level type.

We use the LogLevel enum to standardize severity levels (Info, Warn, Error, Debug) across all routine logs.

Source§

fn log( level: <T as Logging<Time>>::Level, err: &<T as Logging<Time>>::Logger, timestamp: Time, target: Option<&str>, fmt: Option<fn(Time, &<T as Logging<Time>>::Level, &str, &str) -> String>, ) -> <T as Logging<Time>>::Logger

Core logging function that all helpers delegate to. Read more
Source§

fn info( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs an info-level message. Read more
Source§

fn warn( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs a warning-level message. Read more
Source§

fn error( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs an error-level message. Read more
Source§

fn debug( err: &Self::Logger, timestamp: Timestamp, target: Option<&str>, fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>, ) -> Self::Logger
where Self: Sized,

Logs a debug-level message. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> SaturatedConversion for T

§

fn saturated_from<T>(t: T) -> Self
where Self: UniqueSaturatedFrom<T>,

Convert from a value of T into an equivalent instance of Self. Read more
§

fn saturated_into<T>(self) -> T
where Self: UniqueSaturatedInto<T>,

Consume self to return an equivalent value of T. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoKey<U> for T
where U: TryFromKey<T>,

§

type Error = <U as TryFromKey<T>>::Error

§

fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>

§

impl<S, T> UncheckedInto<T> for S
where T: UncheckedFrom<S>,

§

fn unchecked_into(self) -> T

The counterpart to unchecked_from.
§

impl<T, S> UniqueSaturatedInto<T> for S
where T: Bounded, S: TryInto<T>,

§

fn unique_saturated_into(self) -> T

Consume self to return an equivalent value of T.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<S> Codec for S
where S: Decode + Encode,

Source§

impl<Provider, Discriminant, T> DelegateVirtualDynBound<Provider, Discriminant> for T
where Provider: VirtualDynBound<Discriminant>, Discriminant: DiscriminantTag,

Source§

impl<Provider, Discriminant, T> DelegateVirtualStaticBound<Provider, Discriminant> for T
where Provider: VirtualStaticBound<Discriminant>, Discriminant: DiscriminantTag,

§

impl<T> EncodeLike<&&T> for T
where T: Encode,

§

impl<T> EncodeLike<&T> for T
where T: Encode,

§

impl<T> EncodeLike<&mut T> for T
where T: Encode,

§

impl<T> EncodeLike<Arc<T>> for T
where T: Encode,

§

impl<T> EncodeLike<Box<T>> for T
where T: Encode,

§

impl<T> EncodeLike<Cow<'_, T>> for T
where T: ToOwned + Encode,

§

impl<T> EncodeLike<Rc<T>> for T
where T: Encode,

§

impl<S> FullCodec for S
where S: Decode + FullEncode,

§

impl<S> FullEncode for S
where S: Encode + EncodeLike,

§

impl<T> JsonSchemaMaybe for T

§

impl<T> MaybeDebug for T
where T: Debug,

§

impl<T> MaybeRefUnwindSafe for T
where T: RefUnwindSafe,

§

impl<T> Member for T
where T: Send + Sync + Debug + Eq + PartialEq + Clone + 'static,

Source§

impl<T> MetaAware for T
where T: TypeInfo + Debug,

§

impl<T> Parameter for T
where T: Codec + DecodeWithMemTracking + EncodeLike + Clone + Eq + Debug + TypeInfo,

Source§

impl<T> Portable for T
where T: Encode + Decode + Clone,

Source§

impl<T> Probe for T
where T: Encode + Debug + ?Sized,

Source§

impl<T> RuntimeEnum for T
where T: FullCodec + TypeInfo + Debug,

Source§

impl<T> RuntimeType for T
where T: Portable + MetaAware + Eq,

§

impl<T> StaticTypeInfo for T
where T: TypeInfo + 'static,

Source§

impl<T> Storable for T
where T: RuntimeType + 'static + EncodeLike,