Trying to implement some filter/checker for «subcalls» based on Dispatchable
trait in my pallet. I can get metadata: pallet name and function name, but I can't get the arguments values.
How should I properly filter calls by argument values with my custom logic?
#[frame_support::pallet]
pub mod pallet {
...
#[pallet::config]
pub trait Config<I: 'static = ()>: frame_system::Config {
...
type Call:
Parameter
+ Dispatchable<Origin = Self::Origin, PostInfo = PostDispatchInfo>
+ GetDispatchInfo
+ GetCallMetadata
+ From<frame_system::Call<Self>>
+ UnfilteredDispatchable<Origin = Self::Origin>
+ IsType<<Self as frame_system::Config>::Call>;
...
#[pallet::call]
impl<T: Config<I>, I: 'static> Pallet<T, I> {
...
#[pallet::weight(xxx)]
pub fn submit(
origin: OriginFor<T>,
calls: Vec<<T as Config<I>>::Call>,
) -> DispatchResult {
let origin_address = ensure_signed(origin)?;
// process calls one by one
for call in calls {
log::info!(">>>>>> {:?}", call.get_call_metadata());
// check arguments values?
}
}
}
}
Call
does not contain the arguments, so you cannot filter by that.