Struct sp_runtime::transaction_validity::ValidTransaction
source · pub struct ValidTransaction {
pub priority: TransactionPriority,
pub requires: Vec<TransactionTag>,
pub provides: Vec<TransactionTag>,
pub longevity: TransactionLongevity,
pub propagate: bool,
}
Expand description
Information concerning a valid transaction.
Fields§
§priority: TransactionPriority
Priority of the transaction.
Priority determines the ordering of two transactions that have all their dependencies (required tags) satisfied.
requires: Vec<TransactionTag>
Transaction dependencies
A non-empty list signifies that some other transactions which provide given tags are required to be included before that one.
provides: Vec<TransactionTag>
Provided tags
A list of tags this transaction provides. Successfully importing the transaction will enable other transactions that depend on (require) those tags to be included as well. Provided and required tags allow Substrate to build a dependency graph of transactions and import them in the right (linear) order.
longevity: TransactionLongevity
Transaction longevity
Longevity describes minimum number of blocks the validity is correct. After this period transaction should be removed from the pool or revalidated.
propagate: bool
A flag indicating if the transaction should be propagated to other peers.
By setting false
here the transaction will still be considered for
including in blocks that are authored on the current node, but will
never be sent to other peers.
Implementations§
source§impl ValidTransaction
impl ValidTransaction
sourcepub fn with_tag_prefix(prefix: &'static str) -> ValidTransactionBuilder
pub fn with_tag_prefix(prefix: &'static str) -> ValidTransactionBuilder
Initiate ValidTransaction
builder object with a particular prefix for tags.
To avoid conflicts between different parts in runtime it’s recommended to build requires
and provides
tags with a unique prefix.
sourcepub fn combine_with(self, other: ValidTransaction) -> Self
pub fn combine_with(self, other: ValidTransaction) -> Self
Combine two instances into one, as a best effort. This will take the superset of each of the
provides
and requires
tags, it will sum the priorities, take the minimum longevity and
the logic And of the propagate flags.
Examples found in repository?
More examples
1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> TransactionValidity {
let valid = ValidTransaction::default();
for_tuples!( #( let valid = valid.combine_with(Tuple.validate(who, call, info, len)?); )* );
Ok(valid)
}
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> Result<Self::Pre, TransactionValidityError> {
Ok(for_tuples!( ( #( Tuple.pre_dispatch(who, call, info, len)? ),* ) ))
}
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> TransactionValidity {
let valid = ValidTransaction::default();
for_tuples!( #( let valid = valid.combine_with(Tuple::validate_unsigned(call, info, len)?); )* );
Ok(valid)
}
378 379 380 381 382 383 384 385 386 387 388 389 390 391
fn validate<U: ValidateUnsigned<Call = Self::Call>>(
&self,
source: TransactionSource,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> TransactionValidity {
if let Some((ref id, ref extra)) = self.signature {
Extra::validate(extra, id, &self.call, info, len)
} else {
let valid = Extra::validate_unsigned(&self.call, info, len)?;
let unsigned_validation = U::validate_unsigned(source, &self.call)?;
Ok(valid.combine_with(unsigned_validation))
}
}
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
fn validate<U: ValidateUnsigned<Call = Self::Call>>(
&self,
// TODO [#5006;ToDr] should source be passed to `SignedExtension`s?
// Perhaps a change for 2.0 to avoid breaking too much APIs?
source: TransactionSource,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> TransactionValidity {
if let Some((ref id, ref extra)) = self.signed {
Extra::validate(extra, id, &self.function, info, len)
} else {
let valid = Extra::validate_unsigned(&self.function, info, len)?;
let unsigned_validation = U::validate_unsigned(source, &self.function)?;
Ok(valid.combine_with(unsigned_validation))
}
}
Trait Implementations§
source§impl Clone for ValidTransaction
impl Clone for ValidTransaction
source§fn clone(&self) -> ValidTransaction
fn clone(&self) -> ValidTransaction
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ValidTransaction
impl Debug for ValidTransaction
source§impl Decode for ValidTransaction
impl Decode for ValidTransaction
source§impl Default for ValidTransaction
impl Default for ValidTransaction
source§impl Encode for ValidTransaction
impl Encode for ValidTransaction
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 size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl From<ValidTransactionBuilder> for ValidTransaction
impl From<ValidTransactionBuilder> for ValidTransaction
source§fn from(builder: ValidTransactionBuilder) -> Self
fn from(builder: ValidTransactionBuilder) -> Self
source§impl PartialEq<ValidTransaction> for ValidTransaction
impl PartialEq<ValidTransaction> for ValidTransaction
source§fn eq(&self, other: &ValidTransaction) -> bool
fn eq(&self, other: &ValidTransaction) -> bool
self
and other
values to be equal, and is used
by ==
.impl EncodeLike<ValidTransaction> for ValidTransaction
impl Eq for ValidTransaction
impl StructuralEq for ValidTransaction
impl StructuralPartialEq for ValidTransaction
Auto Trait Implementations§
impl RefUnwindSafe for ValidTransaction
impl Send for ValidTransaction
impl Sync for ValidTransaction
impl Unpin for ValidTransaction
impl UnwindSafe for ValidTransaction
Blanket Implementations§
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
source§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
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, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
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<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 Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.