pub struct CheckNonce<T: Config>(pub T::Nonce);
Expand description
Nonce check and increment to give replay protection for transactions.
§Transaction Validity
This extension affects requires
and provides
tags of validity, but DOES NOT
set the priority
field. Make sure that AT LEAST one of the transaction extension sets
some kind of priority upon validating transactions.
The preparation step assumes that the nonce information has not changed since the validation
step. This means that other extensions ahead of CheckNonce
in the pipeline must not alter the
nonce during their own preparation step, or else the transaction may be rejected during dispatch
or lead to an inconsistent account state.
Tuple Fields§
§0: T::Nonce
Implementations§
Source§impl<T: Config> CheckNonce<T>
impl<T: Config> CheckNonce<T>
Sourcepub fn validate_nonce_for_account(
who: &T::AccountId,
nonce: T::Nonce,
) -> Result<ValidNonceInfo, TransactionValidityError>
pub fn validate_nonce_for_account( who: &T::AccountId, nonce: T::Nonce, ) -> Result<ValidNonceInfo, TransactionValidityError>
In transaction extension, validate nonce for account, on success returns provides and requires.
Sourcepub fn prepare_nonce_for_account(
who: &T::AccountId,
nonce: T::Nonce,
) -> Result<(), TransactionValidityError>
pub fn prepare_nonce_for_account( who: &T::AccountId, nonce: T::Nonce, ) -> Result<(), TransactionValidityError>
In transaction extension, prepare nonce for account.
Trait Implementations§
Source§impl<T: Clone + Config> Clone for CheckNonce<T>
impl<T: Clone + Config> Clone for CheckNonce<T>
Source§fn clone(&self) -> CheckNonce<T>
fn clone(&self) -> CheckNonce<T>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<T: Config> Debug for CheckNonce<T>
impl<T: Config> Debug for CheckNonce<T>
Source§impl<T: Config> Decode for CheckNonce<T>where
T::Nonce: HasCompact,
impl<T: Config> Decode for CheckNonce<T>where
T::Nonce: HasCompact,
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>
Source§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,
Source§impl<T: Config> Encode for CheckNonce<T>where
T::Nonce: HasCompact,
impl<T: Config> Encode for CheckNonce<T>where
T::Nonce: HasCompact,
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, )
Source§fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>(
&self,
f: __CodecUsingEncodedCallback,
) -> __CodecOutputReturn
fn using_encoded<__CodecOutputReturn, __CodecUsingEncodedCallback: FnOnce(&[u8]) -> __CodecOutputReturn>( &self, f: __CodecUsingEncodedCallback, ) -> __CodecOutputReturn
Source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Source§impl<T: Config> TransactionExtension<<T as Config>::RuntimeCall> for CheckNonce<T>where
T::RuntimeCall: Dispatchable<Info = DispatchInfo>,
<T::RuntimeCall as Dispatchable>::RuntimeOrigin: AsSystemOriginSigner<T::AccountId> + Clone,
impl<T: Config> TransactionExtension<<T as Config>::RuntimeCall> for CheckNonce<T>where
T::RuntimeCall: Dispatchable<Info = DispatchInfo>,
<T::RuntimeCall as Dispatchable>::RuntimeOrigin: AsSystemOriginSigner<T::AccountId> + Clone,
Source§const IDENTIFIER: &'static str = "CheckNonce"
const IDENTIFIER: &'static str = "CheckNonce"
Source§type Implicit = ()
type Implicit = ()
implicit
function and not directly contained in the
transaction itself and therefore is considered “implicit”.Source§type Val = Val<T>
type Val = Val<T>
validate
to prepare
.Source§type Pre = Pre
type Pre = Pre
prepare
to post_dispatch
.Source§fn weight(&self, _: &T::RuntimeCall) -> Weight
fn weight(&self, _: &T::RuntimeCall) -> Weight
Source§fn validate(
&self,
origin: <T as Config>::RuntimeOrigin,
call: &T::RuntimeCall,
_info: &DispatchInfoOf<T::RuntimeCall>,
_len: usize,
_self_implicit: Self::Implicit,
_inherited_implication: &impl Encode,
_source: TransactionSource,
) -> ValidateResult<Self::Val, T::RuntimeCall>
fn validate( &self, origin: <T as Config>::RuntimeOrigin, call: &T::RuntimeCall, _info: &DispatchInfoOf<T::RuntimeCall>, _len: usize, _self_implicit: Self::Implicit, _inherited_implication: &impl Encode, _source: TransactionSource, ) -> ValidateResult<Self::Val, T::RuntimeCall>
Source§fn prepare(
self,
val: Self::Val,
_origin: &T::RuntimeOrigin,
_call: &T::RuntimeCall,
_info: &DispatchInfoOf<T::RuntimeCall>,
_len: usize,
) -> Result<Self::Pre, TransactionValidityError>
fn prepare( self, val: Self::Val, _origin: &T::RuntimeOrigin, _call: &T::RuntimeCall, _info: &DispatchInfoOf<T::RuntimeCall>, _len: usize, ) -> Result<Self::Pre, TransactionValidityError>
Source§fn post_dispatch_details(
pre: Self::Pre,
_info: &DispatchInfo,
_post_info: &PostDispatchInfoOf<T::RuntimeCall>,
_len: usize,
_result: &DispatchResult,
) -> Result<Weight, TransactionValidityError>
fn post_dispatch_details( pre: Self::Pre, _info: &DispatchInfo, _post_info: &PostDispatchInfoOf<T::RuntimeCall>, _len: usize, _result: &DispatchResult, ) -> Result<Weight, TransactionValidityError>
Source§fn implicit(&self) -> Result<Self::Implicit, TransactionValidityError>
fn implicit(&self) -> Result<Self::Implicit, TransactionValidityError>
Source§fn metadata() -> Vec<TransactionExtensionMetadata>
fn metadata() -> Vec<TransactionExtensionMetadata>
Source§fn post_dispatch(
pre: Self::Pre,
info: &<Call as Dispatchable>::Info,
post_info: &mut <Call as Dispatchable>::PostInfo,
len: usize,
result: &Result<(), DispatchError>,
) -> Result<(), TransactionValidityError>
fn post_dispatch( pre: Self::Pre, info: &<Call as Dispatchable>::Info, post_info: &mut <Call as Dispatchable>::PostInfo, len: usize, result: &Result<(), DispatchError>, ) -> Result<(), TransactionValidityError>
post_dispatch_details
that
refunds the unspent weight consumed by this extension into the post dispatch information. Read moreSource§fn bare_validate(
_call: &Call,
_info: &<Call as Dispatchable>::Info,
_len: usize,
) -> Result<ValidTransaction, TransactionValidityError>
fn bare_validate( _call: &Call, _info: &<Call as Dispatchable>::Info, _len: usize, ) -> Result<ValidTransaction, TransactionValidityError>
Source§fn bare_validate_and_prepare(
_call: &Call,
_info: &<Call as Dispatchable>::Info,
_len: usize,
) -> Result<(), TransactionValidityError>
fn bare_validate_and_prepare( _call: &Call, _info: &<Call as Dispatchable>::Info, _len: usize, ) -> Result<(), TransactionValidityError>
Source§fn bare_post_dispatch(
_info: &<Call as Dispatchable>::Info,
_post_info: &mut <Call as Dispatchable>::PostInfo,
_len: usize,
_result: &Result<(), DispatchError>,
) -> Result<(), TransactionValidityError>
fn bare_post_dispatch( _info: &<Call as Dispatchable>::Info, _post_info: &mut <Call as Dispatchable>::PostInfo, _len: usize, _result: &Result<(), DispatchError>, ) -> Result<(), TransactionValidityError>
Source§impl<T> TypeInfo for CheckNonce<T>
impl<T> TypeInfo for CheckNonce<T>
impl<T: Config> DecodeWithMemTracking for CheckNonce<T>
impl<T: Config> EncodeLike for CheckNonce<T>where
T::Nonce: HasCompact,
impl<T: Eq + Config> Eq for CheckNonce<T>
impl<T: Config> StructuralPartialEq for CheckNonce<T>
Auto Trait Implementations§
impl<T> Freeze for CheckNonce<T>
impl<T> RefUnwindSafe for CheckNonce<T>
impl<T> Send for CheckNonce<T>
impl<T> Sync for CheckNonce<T>
impl<T> Unpin for CheckNonce<T>
impl<T> UnwindSafe for CheckNonce<T>
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
Source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
Source§impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
impl<T> DecodeWithMemLimit for Twhere
T: DecodeWithMemTracking,
Source§impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
Source§fn defensive_truncate_into(self) -> U
fn defensive_truncate_into(self) -> U
Source§impl<T, Call> DispatchTransaction<Call> for Twhere
T: TransactionExtension<Call>,
Call: Dispatchable + Encode,
<Call as Dispatchable>::RuntimeOrigin: AsTransactionAuthorizedOrigin,
impl<T, Call> DispatchTransaction<Call> for Twhere
T: TransactionExtension<Call>,
Call: Dispatchable + Encode,
<Call as Dispatchable>::RuntimeOrigin: AsTransactionAuthorizedOrigin,
Source§type Origin = <Call as Dispatchable>::RuntimeOrigin
type Origin = <Call as Dispatchable>::RuntimeOrigin
Source§type Info = <Call as Dispatchable>::Info
type Info = <Call as Dispatchable>::Info
Source§type Result = Result<Result<<Call as Dispatchable>::PostInfo, DispatchErrorWithPostInfo<<Call as Dispatchable>::PostInfo>>, TransactionValidityError>
type Result = Result<Result<<Call as Dispatchable>::PostInfo, DispatchErrorWithPostInfo<<Call as Dispatchable>::PostInfo>>, TransactionValidityError>
Source§type Val = <T as TransactionExtension<Call>>::Val
type Val = <T as TransactionExtension<Call>>::Val
Val
of the extension.Source§type Pre = <T as TransactionExtension<Call>>::Pre
type Pre = <T as TransactionExtension<Call>>::Pre
Pre
of the extension.Source§fn validate_only(
&self,
origin: <T as DispatchTransaction<Call>>::Origin,
call: &Call,
info: &<Call as Dispatchable>::Info,
len: usize,
source: TransactionSource,
extension_version: u8,
) -> Result<(ValidTransaction, <T as TransactionExtension<Call>>::Val, <T as DispatchTransaction<Call>>::Origin), TransactionValidityError>
fn validate_only( &self, origin: <T as DispatchTransaction<Call>>::Origin, call: &Call, info: &<Call as Dispatchable>::Info, len: usize, source: TransactionSource, extension_version: u8, ) -> Result<(ValidTransaction, <T as TransactionExtension<Call>>::Val, <T as DispatchTransaction<Call>>::Origin), TransactionValidityError>
Source§fn validate_and_prepare(
self,
origin: <T as DispatchTransaction<Call>>::Origin,
call: &Call,
info: &<Call as Dispatchable>::Info,
len: usize,
extension_version: u8,
) -> Result<(<T as TransactionExtension<Call>>::Pre, <T as DispatchTransaction<Call>>::Origin), TransactionValidityError>
fn validate_and_prepare( self, origin: <T as DispatchTransaction<Call>>::Origin, call: &Call, info: &<Call as Dispatchable>::Info, len: usize, extension_version: u8, ) -> Result<(<T as TransactionExtension<Call>>::Pre, <T as DispatchTransaction<Call>>::Origin), TransactionValidityError>
Source§fn dispatch_transaction(
self,
origin: <Call as Dispatchable>::RuntimeOrigin,
call: Call,
info: &<Call as Dispatchable>::Info,
len: usize,
extension_version: u8,
) -> <T as DispatchTransaction<Call>>::Result
fn dispatch_transaction( self, origin: <Call as Dispatchable>::RuntimeOrigin, call: Call, info: &<Call as Dispatchable>::Info, len: usize, extension_version: u8, ) -> <T as DispatchTransaction<Call>>::Result
Source§fn test_run(
self,
origin: <T as DispatchTransaction<Call>>::Origin,
call: &Call,
info: &<T as DispatchTransaction<Call>>::Info,
len: usize,
extension_version: u8,
substitute: impl FnOnce(<T as DispatchTransaction<Call>>::Origin) -> Result<<Call as Dispatchable>::PostInfo, DispatchErrorWithPostInfo<<Call as Dispatchable>::PostInfo>>,
) -> <T as DispatchTransaction<Call>>::Result
fn test_run( self, origin: <T as DispatchTransaction<Call>>::Origin, call: &Call, info: &<T as DispatchTransaction<Call>>::Info, len: usize, extension_version: u8, substitute: impl FnOnce(<T as DispatchTransaction<Call>>::Origin) -> Result<<Call as Dispatchable>::PostInfo, DispatchErrorWithPostInfo<<Call as Dispatchable>::PostInfo>>, ) -> <T as DispatchTransaction<Call>>::Result
substitute
instead. Since this doesn’t actually
dispatch the call, it doesn’t need to consume it and so call
can be passed as a reference.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
Source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
Source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
Source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moreSource§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>
Source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
Source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.Source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.