Trait sp_runtime::traits::SignedExtension
source · pub trait SignedExtension: Codec + Debug + Sync + Send + Clone + Eq + PartialEq + StaticTypeInfo {
type AccountId;
type Call: Dispatchable;
type AdditionalSigned: Encode + TypeInfo;
type Pre;
const IDENTIFIER: &'static str;
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>;
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>;
fn validate(
&self,
_who: &Self::AccountId,
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity { ... }
fn validate_unsigned(
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity { ... }
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError> { ... }
fn post_dispatch(
_pre: Option<Self::Pre>,
_info: &DispatchInfoOf<Self::Call>,
_post_info: &PostDispatchInfoOf<Self::Call>,
_len: usize,
_result: &DispatchResult
) -> Result<(), TransactionValidityError> { ... }
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ { ... }
}
Expand description
Means by which a transaction may be extended. This type embodies both the data and the logic that should be additionally associated with the transaction. It should be plain old data.
Required Associated Types§
sourcetype Call: Dispatchable
type Call: Dispatchable
The type which encodes the call to be dispatched.
sourcetype AdditionalSigned: Encode + TypeInfo
type AdditionalSigned: Encode + TypeInfo
Any additional data that will go into the signed payload. This may be created dynamically
from the transaction using the additional_signed
function.
Required Associated Constants§
sourceconst IDENTIFIER: &'static str
const IDENTIFIER: &'static str
Unique identifier of this signed extension.
This will be exposed in the metadata to identify the signed extension used in an extrinsic.
Required Methods§
sourcefn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
Construct any additional data that should be in the signed payload of the transaction. Can also perform any pre-signature-verification checks and return an error if needed.
sourcefn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
Do any pre-flight stuff for a signed transaction.
Make sure to perform the same checks as in Self::validate
.
Provided Methods§
sourcefn validate(
&self,
_who: &Self::AccountId,
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity
fn validate(
&self,
_who: &Self::AccountId,
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity
Validate a signed transaction for the transaction queue.
This function can be called frequently by the transaction queue, to obtain transaction validity against current state. It should perform all checks that determine a valid transaction, that can pay for its execution and quickly eliminate ones that are stale or incorrect.
Make sure to perform the same checks in pre_dispatch
function.
Examples found in repository?
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 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318
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)
}
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> Result<(), TransactionValidityError> {
for_tuples!( #( Tuple::pre_dispatch_unsigned(call, info, len)?; )* );
Ok(())
}
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult,
) -> Result<(), TransactionValidityError> {
match pre {
Some(x) => {
for_tuples!( #( Tuple::post_dispatch(Some(x.Tuple), info, post_info, len, result)?; )* );
},
None => {
for_tuples!( #( Tuple::post_dispatch(None, info, post_info, len, result)?; )* );
},
}
Ok(())
}
fn metadata() -> Vec<SignedExtensionMetadata> {
let mut ids = Vec::new();
for_tuples!( #( ids.extend(Tuple::metadata()); )* );
ids
}
}
/// Only for bare bone testing when you don't care about signed extensions at all.
#[cfg(feature = "std")]
impl SignedExtension for () {
type AccountId = u64;
type AdditionalSigned = ();
type Call = ();
type Pre = ();
const IDENTIFIER: &'static str = "UnitSignedExtension";
fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {
Ok(())
}
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> Result<Self::Pre, TransactionValidityError> {
self.validate(who, call, info, len).map(|_| ())
}
More examples
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))
}
}
sourcefn validate_unsigned(
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity
fn validate_unsigned(
_call: &Self::Call,
_info: &DispatchInfoOf<Self::Call>,
_len: usize
) -> TransactionValidity
Validate an unsigned transaction for the transaction queue.
This function can be called frequently by the transaction queue to obtain transaction validity against current state. It should perform all checks that determine a valid unsigned transaction, and quickly eliminate ones that are stale or incorrect.
Make sure to perform the same checks in pre_dispatch_unsigned
function.
Examples found in repository?
More examples
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))
}
}
sourcefn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
Do any pre-flight stuff for a unsigned transaction.
Note this function by default delegates to validate_unsigned
, so that
all checks performed for the transaction queue are also performed during
the dispatch phase (applying the extrinsic).
If you ever override this function, you need to make sure to always
perform the same validation as in validate_unsigned
.
Examples found in repository?
395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
fn apply<U: ValidateUnsigned<Call = Self::Call>>(
self,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> ApplyExtrinsicResultWithInfo<PostDispatchInfoOf<Self::Call>> {
let maybe_who = if let Some((who, extra)) = self.signature {
Extra::pre_dispatch(extra, &who, &self.call, info, len)?;
Some(who)
} else {
Extra::pre_dispatch_unsigned(&self.call, info, len)?;
U::pre_dispatch(&self.call)?;
None
};
Ok(self.call.dispatch(maybe_who.into()))
}
More examples
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
fn apply<U: ValidateUnsigned<Call = Self::Call>>(
self,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> crate::ApplyExtrinsicResultWithInfo<PostDispatchInfoOf<Self::Call>> {
let (maybe_who, maybe_pre) = if let Some((id, extra)) = self.signed {
let pre = Extra::pre_dispatch(extra, &id, &self.function, info, len)?;
(Some(id), Some(pre))
} else {
Extra::pre_dispatch_unsigned(&self.function, info, len)?;
U::pre_dispatch(&self.function)?;
(None, None)
};
let res = self.function.dispatch(RuntimeOrigin::from(maybe_who));
let post_info = match res {
Ok(info) => info,
Err(err) => err.post_info,
};
Extra::post_dispatch(
maybe_pre,
info,
&post_info,
len,
&res.map(|_| ()).map_err(|e| e.error),
)?;
Ok(res)
}
sourcefn post_dispatch(
_pre: Option<Self::Pre>,
_info: &DispatchInfoOf<Self::Call>,
_post_info: &PostDispatchInfoOf<Self::Call>,
_len: usize,
_result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn post_dispatch(
_pre: Option<Self::Pre>,
_info: &DispatchInfoOf<Self::Call>,
_post_info: &PostDispatchInfoOf<Self::Call>,
_len: usize,
_result: &DispatchResult
) -> Result<(), TransactionValidityError>
Do any post-flight stuff for an extrinsic.
If the transaction is signed, then _pre
will contain the output of pre_dispatch
,
and None
otherwise.
This gets given the DispatchResult
_result
from the extrinsic and can, if desired,
introduce a TransactionValidityError
, causing the block to become invalid for including
it.
WARNING: It is dangerous to return an error here. To do so will fundamentally invalidate the transaction and any block that it is included in, causing the block author to not be compensated for their work in validating the transaction or producing the block so far.
It can only be used safely when you know that the extrinsic is one that can only be
introduced by the current block author; generally this implies that it is an inherent and
will come from either an offchain-worker or via InherentData
.
Examples found in repository?
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
fn apply<U: ValidateUnsigned<Call = Self::Call>>(
self,
info: &DispatchInfoOf<Self::Call>,
len: usize,
) -> crate::ApplyExtrinsicResultWithInfo<PostDispatchInfoOf<Self::Call>> {
let (maybe_who, maybe_pre) = if let Some((id, extra)) = self.signed {
let pre = Extra::pre_dispatch(extra, &id, &self.function, info, len)?;
(Some(id), Some(pre))
} else {
Extra::pre_dispatch_unsigned(&self.function, info, len)?;
U::pre_dispatch(&self.function)?;
(None, None)
};
let res = self.function.dispatch(RuntimeOrigin::from(maybe_who));
let post_info = match res {
Ok(info) => info,
Err(err) => err.post_info,
};
Extra::post_dispatch(
maybe_pre,
info,
&post_info,
len,
&res.map(|_| ()).map_err(|e| e.error),
)?;
Ok(res)
}
sourcefn metadata() -> Vec<SignedExtensionMetadata> ⓘ
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
Returns the metadata for this signed extension.
As a SignedExtension
can be a tuple of SignedExtension
s we need to return a Vec
that holds the metadata of each one. Each individual SignedExtension
must return
exactly one SignedExtensionMetadata
.
This method provides a default implementation that returns a vec containing a single
SignedExtensionMetadata
.
Implementations on Foreign Types§
source§impl<AccountId, Call: Dispatchable, TupleElement0> SignedExtension for (TupleElement0,)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0> SignedExtension for (TupleElement0,)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned,)
type Pre = (<TupleElement0 as SignedExtension>::Pre,)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1> SignedExtension for (TupleElement0, TupleElement1)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1> SignedExtension for (TupleElement0, TupleElement1)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2> SignedExtension for (TupleElement0, TupleElement1, TupleElement2)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2> SignedExtension for (TupleElement0, TupleElement1, TupleElement2)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned, <TupleElement7 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre, <TupleElement7 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned, <TupleElement7 as SignedExtension>::AdditionalSigned, <TupleElement8 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre, <TupleElement7 as SignedExtension>::Pre, <TupleElement8 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned, <TupleElement7 as SignedExtension>::AdditionalSigned, <TupleElement8 as SignedExtension>::AdditionalSigned, <TupleElement9 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre, <TupleElement7 as SignedExtension>::Pre, <TupleElement8 as SignedExtension>::Pre, <TupleElement9 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement10: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement10: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned, <TupleElement7 as SignedExtension>::AdditionalSigned, <TupleElement8 as SignedExtension>::AdditionalSigned, <TupleElement9 as SignedExtension>::AdditionalSigned, <TupleElement10 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre, <TupleElement7 as SignedExtension>::Pre, <TupleElement8 as SignedExtension>::Pre, <TupleElement9 as SignedExtension>::Pre, <TupleElement10 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement10: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement11: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
impl<AccountId, Call: Dispatchable, TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11> SignedExtension for (TupleElement0, TupleElement1, TupleElement2, TupleElement3, TupleElement4, TupleElement5, TupleElement6, TupleElement7, TupleElement8, TupleElement9, TupleElement10, TupleElement11)where
TupleElement0: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement1: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement2: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement3: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement4: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement5: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement6: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement7: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement8: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement9: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement10: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
TupleElement11: SignedExtension<AccountId = AccountId, Call = Call> + SignedExtension,
type AccountId = AccountId
type Call = Call
const IDENTIFIER: &'static str = "You should call `identifier()`!"
type AdditionalSigned = (<TupleElement0 as SignedExtension>::AdditionalSigned, <TupleElement1 as SignedExtension>::AdditionalSigned, <TupleElement2 as SignedExtension>::AdditionalSigned, <TupleElement3 as SignedExtension>::AdditionalSigned, <TupleElement4 as SignedExtension>::AdditionalSigned, <TupleElement5 as SignedExtension>::AdditionalSigned, <TupleElement6 as SignedExtension>::AdditionalSigned, <TupleElement7 as SignedExtension>::AdditionalSigned, <TupleElement8 as SignedExtension>::AdditionalSigned, <TupleElement9 as SignedExtension>::AdditionalSigned, <TupleElement10 as SignedExtension>::AdditionalSigned, <TupleElement11 as SignedExtension>::AdditionalSigned)
type Pre = (<TupleElement0 as SignedExtension>::Pre, <TupleElement1 as SignedExtension>::Pre, <TupleElement2 as SignedExtension>::Pre, <TupleElement3 as SignedExtension>::Pre, <TupleElement4 as SignedExtension>::Pre, <TupleElement5 as SignedExtension>::Pre, <TupleElement6 as SignedExtension>::Pre, <TupleElement7 as SignedExtension>::Pre, <TupleElement8 as SignedExtension>::Pre, <TupleElement9 as SignedExtension>::Pre, <TupleElement10 as SignedExtension>::Pre, <TupleElement11 as SignedExtension>::Pre)
fn additional_signed(
&self
) -> Result<Self::AdditionalSigned, TransactionValidityError>
fn validate(
&self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch(
self,
who: &Self::AccountId,
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<Self::Pre, TransactionValidityError>
fn validate_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> TransactionValidity
fn pre_dispatch_unsigned(
call: &Self::Call,
info: &DispatchInfoOf<Self::Call>,
len: usize
) -> Result<(), TransactionValidityError>
fn post_dispatch(
pre: Option<Self::Pre>,
info: &DispatchInfoOf<Self::Call>,
post_info: &PostDispatchInfoOf<Self::Call>,
len: usize,
result: &DispatchResult
) -> Result<(), TransactionValidityError>
fn metadata() -> Vec<SignedExtensionMetadata> ⓘ
source§impl SignedExtension for ()
impl SignedExtension for ()
Only for bare bone testing when you don’t care about signed extensions at all.