1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use crate::construct_runtime::Pallet;
use proc_macro2::TokenStream;
use quote::quote;
use syn::Ident;
pub fn expand_outer_validate_unsigned(
runtime: &Ident,
pallet_decls: &[Pallet],
scrate: &TokenStream,
) -> TokenStream {
let mut pallet_names = Vec::new();
let mut query_validate_unsigned_part_macros = Vec::new();
for pallet_decl in pallet_decls {
if pallet_decl.exists_part("ValidateUnsigned") {
let name = &pallet_decl.name;
let path = &pallet_decl.path;
pallet_names.push(name);
query_validate_unsigned_part_macros.push(quote! {
#path::__substrate_validate_unsigned_check::is_validate_unsigned_part_defined!(#name);
});
}
}
quote! {
#( #query_validate_unsigned_part_macros )*
impl #scrate::unsigned::ValidateUnsigned for #runtime {
type Call = Call;
fn pre_dispatch(call: &Self::Call) -> Result<(), #scrate::unsigned::TransactionValidityError> {
#[allow(unreachable_patterns)]
match call {
#( Call::#pallet_names(inner_call) => #pallet_names::pre_dispatch(inner_call), )*
_ => Ok(()),
}
}
fn validate_unsigned(
#[allow(unused_variables)]
source: #scrate::unsigned::TransactionSource,
call: &Self::Call,
) -> #scrate::unsigned::TransactionValidity {
#[allow(unreachable_patterns)]
match call {
#( Call::#pallet_names(inner_call) => #pallet_names::validate_unsigned(source, inner_call), )*
_ => #scrate::unsigned::UnknownTransaction::NoUnsignedValidator.into(),
}
}
}
}
}