pub enum Call<T: Config<I>, I: 'static = ()> {
call {
xp_id: XpId<T>,
call: Box<<T as Config<I>>::RuntimeCall>,
},
handover {
xp_id: XpId<T>,
new_owner: T::AccountId,
},
dispose {
owner: T::AccountId,
xp_id: XpId<T>,
},
force_handover {
owner: T::AccountId,
xp_id: XpId<T>,
new_owner: T::AccountId,
},
force_genesis_config {
field: ForceGenesisConfig<T, I>,
},
// some variants omitted
}Expand description
XP Pallet Extrinsics includes major state mutation functions with origin authentication. Some read only functions are given for
Variants§
call
Executes a runtime call using an XP identity as the origin.
Origin: Signed (must be the owner of the XP identity)
This extrinsic allows the owner of an XP identity to dispatch a call on its behalf. While an XP identity is not a native account, it can act as a logical origin for execution through owner authorization.
The caller must be the registered owner of the given xp_id.
Upon successful verification, the provided call is dispatched
with the XP identity as the signed origin.
handover
Transfer or handover ownership of an XP key to another account.
Origin: Signed user (must be the current XP key owner)
This extrinsic allows the current owner of an XP key to transfer ownership to another account. The call will fail if the destination account is already the owner or if the caller does not own the XP key.
On success, ownership of the XP key is transferred to the target account and an event is emitted.
Emits Event::XpOwner with the XP key and new owner.
dispose
Dispose (Reap) an XP key.
Origin: Signed user
This extrinsic allows any signed account to finalize and remove XP entries that are no longer valid.
For an XP key, it checks:
- The key exists in storage,
- The key is considered “dead” (does not meet minimum timestamp requirements),
- The key has no active locks.
If all checks pass, the XP entry is reaped (removed from storage and blacklisted).
Emits Event::XpReap with each successfully reaped XP key.
force_handover
Force transfer/handover ownership of an XP key to another account.
Origin: Root only
This extrinsic allows the current owner of an XP key to transfer ownership to another account. The call will fail if the destination account is already the owner or if the caller does not own the XP key.
On success, ownership of the XP key is transferred to the target account and an event is emitted.
Emits Event::XpOwner with the XP key and new owner.
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.
The parameter to update is specified via the ForceGenesisConfig enum:
MinPulse- Updates the minimum pulse required for reputation effects.InitXp- Updates the initial XP assigned to newly created XP entries.PulseFactor- Updates the pulse stepping configuration (thresholdandper_count).MinTimeStamp- Updated the minimum blocks required for an XP entry to be considered alive.
For PulseFactor, the call fails with Error::LowPulseThreshold
if per_count > threshold, as this would invalidate the stepping logic.
This call directly overwrites storage and emits an event containing the updated configuration variant.
Fields
field: ForceGenesisConfig<T, I>Implementations§
Source§impl<T: Config<I>, I: 'static> Call<T, I>
impl<T: Config<I>, I: 'static> Call<T, I>
Sourcepub fn new_call_variant_call(
xp_id: XpId<T>,
call: Box<<T as Config<I>>::RuntimeCall>,
) -> Self
pub fn new_call_variant_call( xp_id: XpId<T>, call: Box<<T as Config<I>>::RuntimeCall>, ) -> Self
Create a call with the variant call.
Sourcepub fn new_call_variant_handover(
xp_id: XpId<T>,
new_owner: T::AccountId,
) -> Self
pub fn new_call_variant_handover( xp_id: XpId<T>, new_owner: T::AccountId, ) -> Self
Create a call with the variant handover.
Sourcepub fn new_call_variant_dispose(owner: T::AccountId, xp_id: XpId<T>) -> Self
pub fn new_call_variant_dispose(owner: T::AccountId, xp_id: XpId<T>) -> Self
Create a call with the variant dispose.
Sourcepub fn new_call_variant_force_handover(
owner: T::AccountId,
xp_id: XpId<T>,
new_owner: T::AccountId,
) -> Self
pub fn new_call_variant_force_handover( owner: T::AccountId, xp_id: XpId<T>, new_owner: T::AccountId, ) -> Self
Create a call with the variant force_handover.
Sourcepub fn new_call_variant_force_genesis_config(
field: ForceGenesisConfig<T, I>,
) -> Self
pub fn new_call_variant_force_genesis_config( field: ForceGenesisConfig<T, I>, ) -> Self
Create a call with the variant force_genesis_config.
Trait Implementations§
Source§impl<T: Config<I>, I: 'static> CheckIfFeeless for Call<T, I>
impl<T: Config<I>, I: 'static> CheckIfFeeless for Call<T, I>
Source§fn is_feeless(&self, origin: &Self::Origin) -> bool
fn is_feeless(&self, origin: &Self::Origin) -> bool
#[pallet::feeless_if]Source§impl<T: Config<I>, I: 'static> Decode for Call<T, I>
impl<T: Config<I>, I: 'static> Decode for Call<T, I>
Source§fn decode<__CodecInputEdqy: Input>(
__codec_input_edqy: &mut __CodecInputEdqy,
) -> Result<Self, Error>
fn decode<__CodecInputEdqy: Input>( __codec_input_edqy: &mut __CodecInputEdqy, ) -> Result<Self, Error>
§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
§fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
§fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
Source§impl<T: Config<I>, I: 'static> Encode for Call<T, I>
impl<T: Config<I>, I: 'static> Encode for Call<T, I>
Source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
Source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy,
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy, )
§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Source§impl<T: Config<I>, I: 'static> GetCallIndex for Call<T, I>
impl<T: Config<I>, I: 'static> GetCallIndex for Call<T, I>
Source§fn get_call_index(&self) -> u8
fn get_call_index(&self) -> u8
Source§fn get_call_indices() -> &'static [u8] ⓘ
fn get_call_indices() -> &'static [u8] ⓘ
GetCallName].Source§impl<T: Config<I>, I: 'static> GetCallName for Call<T, I>
impl<T: Config<I>, I: 'static> GetCallName for Call<T, I>
Source§fn get_call_name(&self) -> &'static str
fn get_call_name(&self) -> &'static str
Source§fn get_call_names() -> &'static [&'static str]
fn get_call_names() -> &'static [&'static str]
GetCallIndex].Source§impl<T: Config<I>, I: 'static> GetDispatchInfo for Call<T, I>
impl<T: Config<I>, I: 'static> GetDispatchInfo for Call<T, I>
Source§fn get_dispatch_info(&self) -> DispatchInfo
fn get_dispatch_info(&self) -> DispatchInfo
DispatchInfo, containing relevant information of this dispatch. Read moreSource§impl<T, I> TypeInfo for Call<T, I>where
PhantomData<(T, I)>: TypeInfo + 'static,
XpId<T>: TypeInfo + 'static,
Box<<T as Config<I>>::RuntimeCall>: TypeInfo + 'static,
T::AccountId: TypeInfo + 'static,
ForceGenesisConfig<T, I>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
impl<T, I> TypeInfo for Call<T, I>where
PhantomData<(T, I)>: TypeInfo + 'static,
XpId<T>: TypeInfo + 'static,
Box<<T as Config<I>>::RuntimeCall>: TypeInfo + 'static,
T::AccountId: TypeInfo + 'static,
ForceGenesisConfig<T, I>: TypeInfo + 'static,
T: Config<I> + 'static,
I: 'static,
Source§impl<T: Config<I>, I: 'static> UnfilteredDispatchable for Call<T, I>
impl<T: Config<I>, I: 'static> UnfilteredDispatchable for Call<T, I>
Source§type RuntimeOrigin = <T as Config>::RuntimeOrigin
type RuntimeOrigin = <T as Config>::RuntimeOrigin
frame_system::Config::RuntimeOrigin).Source§fn dispatch_bypass_filter(
self,
origin: Self::RuntimeOrigin,
) -> DispatchResultWithPostInfo
fn dispatch_bypass_filter( self, origin: Self::RuntimeOrigin, ) -> DispatchResultWithPostInfo
impl<T: Config<I>, I: 'static> DecodeWithMemTracking for Call<T, I>where
XpId<T>: DecodeWithMemTracking,
Box<<T as Config<I>>::RuntimeCall>: DecodeWithMemTracking,
T::AccountId: DecodeWithMemTracking,
ForceGenesisConfig<T, I>: DecodeWithMemTracking,
impl<T: Config<I>, I: 'static> EncodeLike for Call<T, I>
impl<T: Config<I>, I: 'static> Eq for Call<T, I>
Auto Trait Implementations§
impl<T, I> Freeze for Call<T, I>
impl<T, I> RefUnwindSafe for Call<T, I>where
<T as Config>::AccountId: RefUnwindSafe,
<T as Config<I>>::Pulse: RefUnwindSafe,
<T as Config<I>>::Xp: RefUnwindSafe,
<<<T as Config>::Block as Block>::Header as Header>::Number: RefUnwindSafe,
T: RefUnwindSafe,
I: RefUnwindSafe,
<T as Config<I>>::RuntimeCall: RefUnwindSafe,
impl<T, I> Send for Call<T, I>
impl<T, I> Sync for Call<T, I>
impl<T, I> Unpin for Call<T, I>
impl<T, I> UnwindSafe for Call<T, I>where
<T as Config>::AccountId: UnwindSafe,
<T as Config<I>>::Pulse: UnwindSafe,
<T as Config<I>>::Xp: UnwindSafe,
<<<T as Config>::Block as Block>::Header as Header>::Number: UnwindSafe,
T: UnwindSafe,
I: UnwindSafe,
<T as Config<I>>::RuntimeCall: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
§fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self and consume all of the given input data. Read more§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
§impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Hashable for Twhere
T: Codec,
impl<T> Hashable for Twhere
T: Codec,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
impl<T, U, Tag> IntoTag<U, Tag> for Twhere
U: FromTag<T, Tag>,
Tag: DiscriminantTag,
§impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
§impl<T> IsType<T> for T
impl<T> IsType<T> for T
§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
§impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
Source§impl<T, Time> Logging<Time> for Twhere
Time: Time,
impl<T, Time> Logging<Time> for Twhere
Time: Time,
Source§const FALLBACK_TARGET: &'static str = "routine"
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
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
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
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
Source§fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn info(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
Source§fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
fn warn(
err: &Self::Logger,
timestamp: Timestamp,
target: Option<&str>,
fmt: Option<fn(Timestamp, &Self::Level, &str, &str) -> String>,
) -> Self::Loggerwhere
Self: Sized,
§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T. Read more§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
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 Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from.§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T.